مجموعه های چند بعدی – نحوه تعریف و کاربرد آنها

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

[css]
set i/a,b/
j/c,d,e/
[/css]

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

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

[/css]

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

[css]
—- 4 SET E
— e

a YES

[/css]

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

[css]
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)+…;

[/css]

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

[css]
<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

[/css]

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

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

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

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

 

این مقاله برای شما مفید بود؟

مطالب مشابه

11 دیدگاه

  1. مهدی

    سلام
    این مجموعه چطور نوشته میشه ؟
    مجموعه فعالیت ها K
    مجموعه ریسک R ها برای هر فعالیت K برابر (J(K,R

    1. محمودی

      سلام
      خب همینکه توضیحش دادین یعنی بلدین درستش هم بنویسین!
      [css]
      k/1*2/
      R/R1,R2/
      j(k,r)/1.R1,2.R1,2.R2/
      ;
      با table هم میتونین اینو تعریف کنین. بسته به نیازتون. که ارایه هاش صفر و یک رو شامل بشه.

  2. مریم

    سلام وقتتون بخیر
    تولید کارگاهی منعطف با درنظر گرفتن کارگر را در گمز کد کردم که دو محدودیت وجود دارد که ارتباط زمانی عملیات های دو کار متفاوت توسط یک ماشین را نشان می دهد.L را عضو k)s) یعنی مجموعه کارگرانی که توانایی انجام کار را بر روی ماشین K دارند نشان میدهد. که L جز سور عمومی هست. نمی دونم چطوری باید این مجموعه را تعریف کنم که مدل جواب منطقی دهد. ممنون میشم کمکم کنید.

    1. محمودی

      سلام
      سوالتون مجهوله.
      به طور کلی هر جا k و l داشتید باید از مجموعه دو بعدی استفاده کنید.

  3. علی

    سلام
    تو مدل من 11گره تعریف شده که باید مسیرهای بهینه کامیون ها مشخص بشه که گروه اول انباره و 10گره بعدی فروشگاه ها
    Sرو تعریف کرده زیر مجموعه گره ها
    و همچین محدودیتی آورده
    xبا اندیس iوjوkکوچکتر مساوی قدر مطلقSمنهای یک.(سیگماiوj(iوjهم عضو S
    چه جوری باید Sرو تعریف کنم و این محدودیتو کد کنم
    لطفا کمک کنید خواهش میکنم
    چون تا فردا بیشتر وقت ندارم باید تحویل بدم.

    1. محمودی

      سلام
      این محدودیت زیرتور هست. اون قدر مطلق نیست. اندازه S هست. باید از محدودیت های معادل زیر تور استفاده کنین. جستجو کنید در موردش پیدا میشه.

  4. علی

    ببخشید یادم رفت بگم
    xبا اندیس i،j،kیعنی کامیونk ام از گره i ام به گره j ام بره

  5. مریم

    سلام
    مدل دو مرحله ای در گمز نوشتم مر حله اول یه سری از متغیرها رو حل میکنه و مر حله دوم، یه سری دیگه و مقدار متغیر های مرحله اول مثل یه عدد هست در مرحله دوم
    اما وقتی مر حله اول حل میشه بعضی از اندیس ها رو درنظر میگیره
    مثلا اندیس i هست ۱ تا ۵ .
    وقتی مرحله اول حل میشه فقط اندیس های ۲، ۴ ،۵ رو میگیره و برای اندیس های دیگه هم به همین صورت
    چطوری می تونم در مرحله دوم همین اندیس ها مقدار بگیرن یعنی برای اندیس i از ۱ تا ۵ لحاظ نشه فقط مقادیر ۲، ۴ ،۵ رو بگیره

    1. محمودی

      سلام
      ببینید، یه متغیر داریم به اسم x(i که i برابر 1 تا 5 هست. تو مرحله اول مدل حل میشه، x عدد می گیره و میخوایم به اسم مثلا xx(i به عنوان ورودی ببریمش تو مرحله بعد. پس می نویسیم:
      [css]
      solve stage1 using …..;
      xx(i)=x.l(i);
      .
      .
      solve stage2…;
      [/css]
      حالا اگه بخوایم xx برای اندیس 1 و 3 عدد نگیره و برابر صفر بشه. اینکارو می کنیم.:
      [css]
      xx(i)=x.l(i);
      xx(‘1’)=0;
      xx(‘5’)=0;
      [/css]
      اگه من برداشت اشتباهی کردم بفرمایید که اصلاح کنیم مبحث رو.

  6. پوریا

    سایت خیلی خوبی دارید و واقعا کمک کننده هست
    اما باید سایتتون رو بهینه کنید مثلا تو همین نوشتن کامنت ها چرا هر کسی که سوالی میپرسه یا کامنتی میذاره می زنه 51 سال قبل؟؟؟
    بهتر نیست هر کسی سوال می پرسه ، جواب یا جواب هایی که به اون سوال داده می شه برای همون شخص ایمیل بشه این جوری آدم باید کلی بین کامنت ها بگرده تا جواب سوال خودشو پیدا بکنه و این بسیار وقت گیره . اگر سایتتون رو آپدیت کنید بسیار عالی میشه

    1. محمودی

      سلام
      ممنون از شما. بله مشکل از قالب سایت هست که ایشالا درستش میکنیم.
      برای ایمیل هم احتمالا ایمل به اسپم شما میره. و الا ارسال میشه ایمیلها

دیدگاهی دارید؟