بارها و بارها تأکید کرده ایم که شما می توانید با تعریف مجموعه های چند بعدی هم سرعت حل مدل، هم نظم کد نویسی و هم دقت آن را بالا ببرید. به یاد داشته باشید، در مدل هایی که نیاز به تعریف set دارند، مهم ترین بخش همین تعریف set خواهد بود.
در تعریف مجموعه ها(set یا اندیس) شما به چند مهارت نیاز دارد.
این مهارت ها شامل تعریف مجموعه، اجتماع و اشتراک مجموعه ها، مجموعه های چند بعدی، مجموعه ی تهی، مجموعه های بدون بعد و… هستند.
در این تاپیک به تعریف مجموعه های چند بعدی پرداخته و جهت کاربرد آنها چند مثال را بیان می کنیم.
فرض کنید شما دو مجموعه ی زیر را دارید:

set i/a,b/
j/c,d,e/

حال قصد دارید یک متغیر تعریف کنید به نام x(i,j) که تنها زمانی بتواند عدد بگیرد که i برابر a و j برابر e باشد. به یاد داشته باشید، که تعریف این متغیر در دستور variable با شرط گفته شده غیر ممکن است! از طرفی یک متغیر تنها و تنها زمانی در کد شما دارای معنی است که در حداقل یک Equation مورد استفاده قرار گرفته باشد. پس باید متغیر را یکبار تعریف کرده و هر جا که مورد استفاده قرار می گیرد با یک شرط به گمز بفهمانید که تنها وقتی i برابر a و j برابر e باشد این محدودیت اجرا شود.
عملی که در اینجا مورد نیاز است تعریف یک مجموعه چند بعدی است. به مثال زیر توجه کنید:

set i/a,b/
j/c,d,e/
E(i,j)/a.e/

اگر کد بالا را ران کنید و مجموعه E را display کنید نتیجه به شکل زیر خواهد بود:

---- 4 SET E
-- e

a YES

به عبارتی وقتی I برابر a و j برابر e باشد مجموعه ی E عبارت yes را به خود می گیرد و این بدین معنی است که در سایر مواقع این مجموعه عبارت No را به خود میگیرد. این مجموعه را مجموعه ی چند بعدی می گویند.
حال برگردیم به تعریف متغیر. مثال زیر را مشاهده کنید:

set i /a, b/
j /c, d, e/
E(i,j) /a.e/;
variable x(i,j);
.
.
.
Eq6$(E(i,j)).. y(i,j)-sqrt(something)=e=x(i,j)+...;

کد بالا نشان دهنده ی این است که محدودیت 6 فقط زمانی صادق است که حاصل E برابر با yes باشد. این امر دقیقا معادل این است که متغیر x را با شروط گفته شده تعریف کرده باشیم. دقت کنید که هر جا x داشتید باید شرط را هم به کار ببرید.
شما در گمز می توانید مجموعه هایی را تعریف کنید که بیش از 20 بعد داشته باشند! مثالها دیگری که در گمز می توانند تعریف شوند در کد زیر مشاهده می شوند:

<code>set i /a, b/
j /c, d, e/
ij1(i,j) /a.#j/
ij2(i,j) /a.c, a.d, a.e/
ij3(i,j) /#i.#j/
ij4(i,j) /a.c, a.d, a.e, b.c, b.d, b.e/
ij5(i,j) /#i:#j/
ij6(i,j) /a.c, b.d/
ij7(i,j) /#i:(d*e)/
ij8(i,j) /#i:(d,e)/
ij9(i,j) /a.(c,d)/;
display i,j,ij1,ij2,ij3,ij4,ij5,ij6,ij7,ij8,ij9

به نحوه ی به کار بردن علامت های پرانتز، شارپ و “.” و “:” دقت کنید. احتمالا سریع مفهوم پرانتز و “.” را دریافت می کنید. عبارت شارپ به معنی تمامی مجموعه و علامت “:” نیز به معنی نظیر به نظیر بودن مولفه های به کار برده شده طبق دستور ord می باشد.
دستور بالا را ران کنید و مقداری در آن تأمل کنید. احتمالا مطالب مفید و کاربردی فراوانی را درخواهید یافت.

جهت آشنایی بیشتر با تعریف مجموعه ها و دستور Set به نوار دسته بندی، تعریف مجموعه ها مراجعه فرمایید.

با تشکر
مدیریت سایت gamsbook.ir

ایمیل: Support@gamsbook.ir
شماره تماس: 3325-405—0919