۱۵۶

مجموعه ها

همانطور که در بخش وارد کردن داده های مسئله یا Data Entry بیان شد، در مدل هاییی که نیاز به تعریف مجموعه ای از اندیس ها یا زیر اندیس های می باشد باید از تعریف مجموعه های نظیر آنها شروع کرد.

جهت تعریف مجموعه ها از دستور (sets و یا Set) استفاده می کنیم. مجموعه ها اساس یک برنامه ی GAMS را نشان می دهند و مترادف با اندیس ها در نمایش جبری مدل ها هستند. انواع و اقسام مجموعه ها را می توان در GAMS تعریف نمود. فرم کلی این تعریف به صورت زیر است.

Set setname/set members/;

به عنوان مثال مجموعه ی زیر (i) اعداد ۱ و ۲ و ۳ را شامل می شود:

*Example:
set i/1,2,3/;


توجه: کد با set شروع می شود. متن در محاسبات و تعاریف تاثیری ندارد. نام مجموعه را به عنوان نماینده¬ی مجموعه در محاسبات و معادلات به کار می بریم. اعضای مجموعه باید تمامی اعضا را شامل شود.

مجموعه های زیر را در نظر بگیرید.

Untitled

هر کدام از این مجموعه ها را می توان به صورت زیر تعریف نمود:

Sets-Samples

با اندکی دقت در شکل بالا مشاهده می شود که شیوه ی کد نویسی مجموعه ها بسیار مشابه با عبارات جبری آنها می باشد. به عنوان مثال مجموعه ی i مقادیر ۱ تا ۱۰ را به خود می گیرد. یا مجموعه ی دوستان به محمد، زاهد و رضا را شامل می شود. مجموعه ی Row از Row1 تا Row20 را شامل می شود و… .

همانطور که ملاحظه می شود،

 بعد از هر دستوری علامت سیمی کالون (;) می گذاریم.
 فاصله بین نام مجموعه و اعضای مجموعه مهم نیست.
 فاصله بین اعضای مجموعه با هم در کد ما خدشه ای وارد نمی کند.
 زیر مجموعه ها می توانند عددی، حروفی و یا ترکیبی از این دو باشند.
 اعضا با استفاده از کاما از هم جدا می شوند.
 متن را می توان بعد از نام مجموعه آورد ولی تاثیری در محاسبات نخواهد داشت.
 هر تعداد مجموعه که نیاز داشته باشیم می توانیم تعریف نماییم.
 حتی اگر یک عضو یا زیر مجموعه در یک یا چند سطر دیگر هم باشد باز هم مشکلی پیش نخواهد آمد.

به شکلی بسیار ساده تعریف مجموعه ها را یاد گرفتید. پس احتمالاً می توانید کد مربوط به مثال کاربردی ۱ را نیز در GAMS بنویسید.

همانطور که در مثال کاربردی ۱ مشاهده می فرمایید، دو نوع اندیس در این مدل داریم. یکی اندیس i و دیگری اندیس j می باشند. اندیس i از ۱ تا ۳ و اندیس j نیز از ۱ تا ۳ تغییر می کنند. جهت تعریف این مجموعه ها به سادگی به صورت زیر می توان عمل نمود:

Sets-Exaple1

جهت تعریف مجموعه های چند بعدی، مجموعه های در هم و زیر مجموعه ها نیز به روش های مشابه می توان عمل نمود. این تاپیک ها نیز به زودی در همین بخش آموزش داده خواهند شد.

خدمت عزیزانی که آموزش گام به گام را از ابتدا همراه با ما شروع نموده اند توصیه می شود که پس از مطالعه و مرور این صفحه، جهت ادامه مراحل آموزش به بخش پارامترها در نوار کناری سمت راست (منوی داینامیک دسته بندی) مراجعه نمایند.

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

ایمیل: Support@gamsbook.ir
شماره تماس: ۳۳۲۵-۴۰۵–۰۹۱۹

 

156 دیدگاه در “مجموعه ها

  1. سلام. آقا ترکیب مجموعه ها چطوری هست؟ من دو تا مجموعه H و O دارم که اجتماع آنها مجموعه ی S می شود.
    ممنون میشم اگر کمکم کنید

    • سلام
      یکی از تاپیک های آینده سایت همین هست.
      به دو صورت میشه این سوالتون رو جواب داد.
      ۱٫ i و j دو مجموعه هستند که مجموعه k رو تشکیل میدن. کدش به صورت زیر میشه:

      Set i/1*10/
      j/20*30/
      k/set.i,set.j/

      2. i و j زیر مجموعه k هستند:

      Set k/yek,do,site,medad/
      i(k)/yek,do/
      j(k)/site,medad/

      دقت کنین که اگر خواستین که ویژگی هایی که مجموعه ی مرجع میگیره زیر مجموعه ها هم بگیرن باید از کد دوم استفاده کنین.
      موفق باشید

  2. سلام .
    مجموعه تک عضوی تعریف می شود؟
    به صورت زیر تعریف کردم:
    Singleton Sets
    from(i) contains always one element: the from c
    next(j) contains always one element: the to city
    ; tt(t) contains always one element: the current subtour
    اما این دستور را نمی شناسد و خطا می دهد:
    Unknown symbol 140
    لطفا راهنماییم کنید
    سپاس

    • سلام
      بله تعریف می شود. شما ابتدا باید مجموعه i و j و t رو تعریف کنید. اگر تعریف نکنید، خطای ۱۲۰ را میدهد (معرف یا همان اندیس ها را میخواهد)
      و همچنین کلمه ی singleton رو هم بردارید. اگر حذف نشود، خطای ۱۴۰ را می دهد (خطای unknown symbol)
      نمیدونم در چه حد جوابتون رو گرفتید. ولی برای اطلاعات بیشتر به gams model library برید و عبارت tsp1 رو جستجو کنید، کد را که باز کردید، خطوط ۴۳ تا ۴۸ بهتون کمک میکنه
      موفق باشید

  3. با سلام
    ممنون از مطالب آموزنده و مفیدی که در اختیار دوستان قرار می دهید.
    سوال من این هست که اگر در مجموعه ها، اعضای یک مجموعه تا کاردینالیتی مجموعه دیگر تغییر کنند، چگونه می توان آن را در گمز پیاده سازی کرد.
    به عنوان مثال مجموعه j یک مجموعه ۱۰ عضوی است و مجموعه r نیز با توجه به مقداری که j می گیرد از یک تا کاردینالیتی j تغییر می کند.
    با سپاس فراوان

    • سلام
      شما میتونین که r رو یک پارامتر تعریف کنین و r(j)=card(j); قرار بدین. و به جای مجموعه ها از پارامتر مشابه استفاده کنین.

  4. سلام
    من در مدلم یه مجموعه محصولات j دارم و باید مجموعه هایی تعریف کنم که اجزای هر محصول Z(j) رو نشون میده، چطور باید این کار رو انجام بدم؟

      • فرض کنید من در کارخانه ۲ نوع محصول تولید میکنم این دو نوع محصول رو در یک مجموعه محصولات به صورت j/1,2/ تعریف میکنم حالا فرض کنیم برای تولید محصول اول ۳ جز نیازه که محصول اول از مونتاژ این ۳ جز حاصل میشه، برای این محصول باید مجموعه اجزای اون مشخص بشه, z(1)/1,2,3/ من اول پارامتر item(j) رو تعریف کردم که تعداد اجزای هر محصول رو نشون میده، حالا وقتی z(j) به صورت z(j)/1*item(j)/ تعریف میکنم خطا میده

        • سلام
          اولا اینکه item رو تعریف کردین.
          این کدی که نوشتم رو بهش دقت کنین. تمام اون چیزی که نیاز دارین توش هست.

          set
          j/1*2/
          i/1*6/
          item(j,i)/1.1,1.6,2.4,2.5/
          ;
          display i,item

          کد بالا نشون میده که دو نوع محصول داریم. تعدادی جزء داریم که از ۱ تا ۶ نام گذاری شدن. اجزای ۱ و ۶ برای محصول اول و اجزا ۴ و ۵ برای تولید محصول دوم استفاده میشن.
          هر جا خواستین از اجزای محصول فلان صحبت کنین، میتونین از item استفاده کنین.

  5. سلام . من یه اندیس j دارم که تعداد روز هاست . j=1 ta 30 . ویه اندیس s دارم که از j تا j+3 هست.اما خب j تو هر مرحله ممکنه از یه مقدار شرو شه .مثلا ممکنه روز ۵ ام شرو شه تا روز ۸ ام . یا اینکه روز ۱۰ شروع بشه تا روز ۱۳ ام. من الان باید چجوری اندیس s رو تعریف کنم ؟ اگه بنویسم /j+3*j/ خب j هم خودش مجهوله دیگه! چیکار کنم؟

    • سلام
      پس ظاهرا بستگی به متغیر یا محدودیتی که دارین s رو باید استفاده کنین. شما نمیخواد s رو تعریف کنین. فقط روی s و j آلیاس alias بزنین. بعدش تو ر محدودیتی که اشاره ای به s شد، شما بهش بگین که s به شرطی که s=j+3 تا s=j

  6. با سلام
    میشه بفرمایید با چه دستوری میشه تعداد اعضای یه مجموعه رو پیدا کرد. یه چیزی مثل دستور ord که شماره یک عضو از مجموعه رو میده.
    ممنون

      • سلام مجدد
        جناب محمودی یه سوال دیگه دارم از شما، آیا دستوری هست که مقدار قدرمطلق رو حساب کنه؟ یعنی مثلا می خوایم قدرمطلق یه مقدار ورودی رو به یه اسکالر نسبت بدیم.
        ممنون

  7. سلام
    تعریف مساله
    i تا بیمارستان داریم که در هربیمارستان P(i) تا بیمار داریم که می خواهیم هر بیمار به طور کاملا متمایز مشخص باشه. که اگر بعدا خواستیم فراخوانیش کنیم بتونیم
    مجموعه هاش چه جوری می شه

    i /1*6/

    • سلام
      من اینجوری تعریفش میکنم.
      اول برای بیمارستان و بعدش برای بیمارا مجموعه میسازم. i برای بیمارستان j برای بیمار. مثلا ۴ بیمارستان داریم با ۲۰ بیمار.

      set
      i/1*4/
      j/1*20/
      ;

      بعدش هم میتونم مجموعه p رو تعریف کنیم. ولی من از دستور table استفاده میکنم. مثلا میگم که اگر p(i,j)=1 باشه یعنی اینکه بیمار jام تو بیمارستان iام است.

      table p(i,j)
      .
      .
      ;

      موفق باشید

      • ممنون از پاسخ تون
        ولی مساله اینه که می خوام سیگما ببندم روی بیمارای مثلا بیمارستان اول (که بیماراش فقط علی و حسن هستن)( برای محاسبه هزینه درمان در این بیمارستان. اگه بشه با زیر مجموعه تعریف کرد خیلی بهتره برام

      • ممنون از پاسخ تون
        ولی مساله اینه که می خوام سیگما ببندم روی بیمارای مثلا بیمارستان اول (که بیماراش فقط علی و حسن هستن)( برای محاسبه هزینه درمان در این بیمارستان. اگه بشه با زیر مجموعه تعریف کرد خیلی بهتره برام
        مثلا ۹تا بیمارستان داریم
        sets i Hospital / H1*H9 /

        net(pi,i) /pi1.(1,2)
        pi2.(1,2,3)
        pi3.(1,2)
        pi4.(1)
        pi5.(1,2)
        pi6.(1,2)
        pi7.(1,2,3)
        pi8.(1)
        pi9.(1,2)
        حالا وقتی می خواییم علی رو فراخوانی کنیم میگیم بیمار دوم بیمارستان اول
        شکل بالا درست. توی یکی از از مساُیل کتابخانه گمز دیدمش (Numerical Puzzle )
        p نشوندهنه بیمار

        • سلام
          ببین، شما یا باید مجموعه تعریف کنی، یا پارامتر. خب. از جفتشون به عنوان یه مفهوم میتونی استفاده کنی.
          مثال برای روش مجموعه:

          set hos/1*9/
          p/1*30/
          pi(hos,p) /1.2,1.25,2.3,2.10 , ..../
          ;

          یعنی مثلا بیمار شماره ۲۵ تو بیمارستان شماره ۱ بستریه (یا بهش تخصیص داده شده)
          روش پارامتر هم همین کاربرد رو داره. مثلا تو محدودیت بنویسین که به شرطی که pi برابر یک باشه و… .
          موفق باشین

  8. سلام و خسته نباشید
    من یک مجموعه انبار دارم که تعداد انبار را مساله تعیین میکنه.
    چطور میتونه این مجموعه با تعداد نامعلوم را تعریف کنم و تو محدودیت ها که روی اندیس ها جمع بسته میشه و این اندیس ممکنه اندیس انبار باشه به مشکل برنخورم؟
    ممنون از شما

    • سلام
      به نظرم شما حدس میزنید که حداکثر چند انبار میتونه باشه. مثلا ۱۰ تا. پس یه مجموعه ۱۰ تایی اینتخاب کنید. اونایی که انبار بشن متغیر مربوطش که مثلا باینری هست یک میشه بقیه صفر
      خواهش میکنم

  9. با عرض سلام واحترام،میخواستم بپرسم که اگر مجموعه ای مثل m از مقدار ۰ شروع شود ولی در بعضی از محدودیت ها مقدارش از ۱ شروع شود باید چه کار کنیم مهندس؟مثلا متغیر x(m,nدر تابغ هدف مقدار اندیس m اش از ۰ شروع میشود ولی در محدودیت ها با ۱؟؟ممنون میشم بنده رو راهنمایی کنید؟

  10. سلام آقای مهندس
    من میخوام مساله پوشش پشتیبان رو توی گمز بزنم. یک مجموعه نقاط تقاضا دارم کهi هستن. مجموعه تسهیلات که J هستن. حالا به تعداد i ها مجموعه هایNi دارم که هرکدوم از اون مجموعه ها بسته به شرایط شامل چند تا j هستن.من نمیدونم این مجموعه های Ni رو چجوری به گمز معرفی کنم و توی محدودیت ها چجوری بنویسم. (توی محدودیت ها یه سیگماxj دارم ، به ازای هرi، که در اونj عضو Ni هستش)

    • سلام
      این میتونه کمکتون کنه:

      Set i/1,2,3/
      J/5,6
      N(i,j) /1.5,1.6,2.5,3.6 /
      ;
      این n که تعریف شد نشون میده که یه n داریم که به ازای i های مختلف تعدادی j میگیره. مثلا اگه i برایر با یک باشه j برابر یک یا دو میشه، اگه i برابر سه باشه j فقط میتونه ۶ باشه. بعد هر جا میتونین این مجموعه رو به کار ببرین
      مثلا تو یه محدودیت میتونین بگین که این محدودیت به به شرط n برقرار باشه
      به همین شکل ادامه داده می شود

  11. سلام
    اولا ممنونم که وقتتون رو میذارین .
    ثانیا سوالم اینکه
    من یه متغییر (x(i,j,k,d دارم
    این متغییر تو دو تا از محدودیت ها به این صورته :

    (x(i,0,k,d و (x(0,i,k,d

    اما این ارور میده

  12. من یه مجموعه ای از گره ها دارم i
    یه مجموعه از گروه ها هم دارم p
    می خوام زیر مجموعه ای از گره ها رو داشته باشم که گروه p از آن عبور می کند ip
    مثلا ۶ تا گره داریم که گروه p فقط از ۳ تاشون می گذره.
    می خوایم رو ی این زیر مجموعه سامیشن ببندیم
    چجوری این زیر مجموعه رو باید مشخص کنم

      • ممنون از این که پاسخ می دید
        نخیر منظور من اینه که مثلا اگه مجموعه i از ۱ تا ۶ و مجموعه p از ۱ تا ۱۰ هست. زیر مجموعه
        i(p=1)=1,3,5
        i(p=2)=1,4,5,6
        و همین طور تا
        i(p=10)=2,3,5

        • خواهش میکنم
          اینو بسته به کاردش میشه همه جوره نوشت. این پیشنهاد میشه:

          set i/1*6/
          p/1*10/
          E(p,i)/1.1,1.2,1.5,2.1,2.4,2.5,2.6 ,....../

  13. سلام

    یه سوال داشتم از خدمتتون اگه راهنمایی کنین ممنون میشم.
    من دو تا sum دارم که sum اول روی p=1..P و sum دوم روی j=1…np هستش. حال با عوض شدنp مقدارsum دوم یعنیnp تغییر پیدا میکنه. حال من به چه صورت باید مجموعهjو معادله رو تعریف کنم که با تغییر p ، مقدارnp را از درون مجموعه تعریف شده انتخاب کند.

    با سپاس

    • سلام
      jو P و n رو تعریف کنید اول. بعدش با دستور ord -که تو بخش معادلات خیلی روش بحث شده تو کامنتا- شرطی که لازم دارین رو پیاده کنین.

  14. سلام

    یه سوال داشتم. اگر اندیس رو تعریف کرده باشیم i=1,…,I و دریکی از محدودیت ها داشته باشیم i=1,…,I-1 . این I-1 رو به چه صورت باید در محدودیت نوشت.

    با تشکر

  15. سلام

    من سه مجموعه دارم که با هم ارتباط دارند به عبارتی بهم وابسته اند من این وابستگی را در یک جدول تعریف کرده و عناصر آن را صفر و یک قرار داده ام.جدولی که تعریف کردم
    N(j,p,h) هستش.
    حال در یکی از محدودیتهایم باید اندیس hj باشد hj-1 . که در اینجا h من با تغیر مقدار j تغیر می کند. که این مقادیر رو من در جدول بیان شده در بالا تعریف کرده ام. من برای اینکه hj-1 را درنظر بگیره ازشرط زیر استفاده کردم.

    ..((cont(j,p,h)$(ord(h) lt card(h

    ولی این شرط فقط اولین h من رو درنظر میگیره. و اصلا توجهی به مقادیر وابسته به j ندارد.
    سوالم این است که به چه صورت باید تعریف کنم که کلا ازhj ها یکی کم کنه؟

    با تشکر

  16. باسلام وخسته نباشید.
    من در مدلم متغیری به این صورت دارم: C(j,0) = 0
    که j نشان دهنده کارهاو متغیری که صفر شده( i)نشان دهنده ماشین هاست. چه طور می تونم این محدودیت رو اضافه کنم.(در صورتی که اندیس ماشین ها از صفر تعریف نشده اند).
    ممنون

    • سلام
      ببینید این محدودیتی که میگین از رو یه مفهوم اومده. ببینید مفهوم چی میگه. دقیقا همون باید پیاده شه تو مدل و تو گمز. اگه به این نتیجه رسیدین که همین درسته، باید یه صفر به اندیس i اضافه کنین. فقط دقت کنین که سایر محدودیت ها تحت تاثیر قرار نگرین. به عبارتی مجددا همه رو چک کنین. اگه با صفر درست بود محدودیتش میشه یه همچین چیزی:

      eq(j).. c(j,'0')=e=0;

  17. سلام
    مدل من به صورتیه که محصولات از کارخانجات به مراکز توزیع فرستاده می شود.۲ نوع کارخانه داریم و دو نوع مرکز توزیع.الان ۴ تا مجموعه دارم کارخانجات نوع ۱، کارخانجات نوع ۲،مراکز توزیع نوع۱ و مراکز توزیع نوع ۲٫یعنی ۴ گره داریم.
    باز میخوام مجموعه ای تعریف کنم که شامل تمام کارخانجات-و مجموعه ای شامل تمام مراکز توزیع باشه.
    sets
    p1/1,2/
    p2/1,2/
    w1/1,2/
    w2/1,2/
    p/set.p1,set.p2/
    w/set.w1,set.w2/;
    الان این تعریف درسته؟
    به ازای هریک از این مجموعه ها محدودیت هایی وجود دارد.طبیعتا باید مجموعه ای به نام j نیز تعریف شود.مثلا j به ازای مجموعه p1 و یا w2و یا Wو …چگونه باید j تعریف شود؟
    سوال آخر اینکه در تعریف متغیر ها ،متعیری وجود دارد به این صورت که مقدار محصول انتقال داده شده بین گره ها (X)در حالت بهینه چقدر است؟
    با این تفاسیر این متغیر باید چگونه تعریف شود؟

  18. سلام
    مدل من به صورتیه که محصولات از کارخانجات به مراکز توزیع فرستاده می شود.۲ نوع کارخانه داریم و دو نوع مرکز توزیع.الان ۴ تا مجموعه دارم کارخانجات نوع ۱، کارخانجات نوع ۲،مراکز توزیع نوع۱ و مراکز توزیع نوع ۲٫ ۸ گره داریم. میخوام مجموعه ای تعریف کنم که شامل تمام کارخانجات-و مجموعه ای شامل تمام مراکز توزیع باشه.
    sets
    /p1/1,2
    /p2/1,2
    /w1/1,2
    /w2/1,2
    /p/set.p1,set.p2
    ;/w/set.w1,set.w2
    الان این تعریف درسته؟
    به ازای هریک از این مجموعه ها محدودیت هایی وجود دارد.طبیعتا باید مجموعه ای به نام j نیز تعریف شود.مثلا j به ازای مجموعه p1 و یا w2و یا Wو …چگونه باید j تعریف شود؟
    سوال آخر اینکه در تعریف متغیر ها ،متعیری وجود دارد به این صورت که مقدار محصول انتقال داده شده بین گره ها (X)در حالت بهینه چقدر است؟
    با این تفاسیر این متغیر باید چگونه تعریف شود؟

    • سلام
      نکته اول اینکه به جای اینکه p1 رو به شکل بالا تعریف کنین، به شکل زیر تعریف کنین (اینجوری اجتماعشون که میشه p یا w هم معنی پیدا میکنه):

      p1/p01,p02/

      سوال دوم: برای تعریف j از alias میتونین استفاده کنین. بستگی به مجموعه و معادلات شما داره. alias معمولا جواب میده
      سوال اخر: خب یه متغیر مثبت یا integer تعریف کنین مشکلی پیدا نمیکنین که. نمیدونم مشکلتون چیه

      • ممنون بابت جواب سریعتون.
        در مورد جواب سوال اول که دادید منظورتون تعریف به صورت زیر هست؟؟
        sets
        /w1/1,2
        /w2/1,2,3
        /w/w1,w2
        /p1/1
        /p2/1,2
        ;/p/p1,p2
        اما در مورد سوال دوم باید از alias استفاده کرد.نحوه ی نوشتن اون درسته؟
        ;(alias (w,j),(P,j
        در سوال قبل مطلبی فراموش کردم اونم اینه که یک سطح مشتری هم داریم.(کارخانه-مرکز توزیع-مشتری).
        حال اینکه بین کارخانه و مرکز توزیع میزان انتقال محصول(Xpw) , و بین مرکز توزیع و مشتری(Xwc) که c مجموعه مشتری هاست. من میخوام فقط یک متغیر به صورت Xod تعریف کنم که o(مبدا) و d(مقصد) باشد و شامل هر دو مورد بالا باشد.

        • سلام
          سوال اول: نه درست نیست. میگم وقتی p1 و اینا رو تعریف میکنین، یه شکل زیر تعریف کنین…

          p1/p11,p12/
          p2/p21,p22/

          سوال الیاس: نه غلطه. یکی رو j بگیرین، یکی دیگه هم jj تو مجدودیت ها هم دقت کنین که کدوم رو بکار می برین.
          سوال آخر: شما برای اینکه زوج های مبدا و مقصد رو تعریف کنین، بهتره از مجموعه های چند بعدی استفاده کنین که تو همین بخش توضیح داده شده.
          خواهش میکنم و موفق باشین

  19. سلام و خسته نباشید
    بنده ۳ مجموعه دارم i,j,k و میخوام یه مجموعه تعریف کنم به نام e که شامل تمام ارتباطات i به j به اضافه ی تمام ارتباطات j به k باشه.نمیخوام مجموعم ارتباطی بین i به k نشون بده.
    چه جوری اینا باید بنویسم؟
    الان این مجموعه که تعریف کردم ارور میزنه!

    /i/i1*i10
    /j/j1*j10
    /k/k1*k5
    ;/(e(i,j,k)/(#i.#j),(#j.#k

    • سلام
      تو اینجور مواقع، اگه من به جای شما اندیس تعریف کنم، این مجموعه‌ی e رو به صورت پارامتر تعریف میکنم. که مثلا هر وقت i1 به j1 برابر یک شد یعنی این رابطه برقراره و بالعکس. حالا شما از این میتونین تو معادلاتتون استفاده کنین. به عنوان شرطی که هر وقت e یک شد معادله برقرار باشه.
      تو تعریف مجموعه ها (همین سوالی که دارین می‌پرسین) هم می تونین این کار رو بکنین:

      set e(i,j,k)/i1.j2.(k1,k2)/

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

      set e(i,j,k)/#i.#j.#k/

      • این مراحلی که فرمودید کمکی نکرد.برا روشن شدن سوالم خدمتتون عرض کنم فرض کنید هرکدام از مجموعه های بالا(i,j,k) گره های مشخصی هستند و میخوام پرامتر هزینه ی بین هر دو گره را بنویسم.یه راه هست که برای هر جفت مجموعه گره یک table بنویسم و هزینه های حمل و نقل را در اون بنویسم.اینجوری با توجه به مسئله ی خودم شاید ۱۰ الی ۱۵ جدول در گمز بنویسم.
        در صورتی که میخوام با تعریف مجموعه ی جدید فقط یک table بنویسم.از طرفی طبق مسئلم مسیرهام مشخصه.به عبارتی از’ i به j’ و از طرفی ‘j به k ‘.اصلا نمیخوام هزینه ای به عنوان پارامتر بین i به k وارد کنم.یعنی تو گمز یه جدول کلی بشه که بین i و j و هم چنین بین j و k را ‘YES’ و رابطه ی بین i به k را ‘NO’ نشان دهد.
        اما مطلبی که شما فرمودید مسیر i به j به k را نشان میده به عبارتی سه مجموعه را لحاظ میکنه و دو مجموعه میخوام.

      • این مراحلی که فرمودید کمکی نکرد.برا روشن شدن سوالم خدمتتون عرض کنم فرض کنید هرکدام از مجموعه های بالا(i,j,k) گره های مشخصی هستند و میخوام پرامتر هزینه ی بین هر دو گره را بنویسم.یه راه هست که برای هر جفت مجموعه گره یک table بنویسم و هزینه های حمل و نقل را در اون بنویسم.اینجوری با توجه به مسئله ی خودم شاید ۱۰ الی ۱۵ جدول در گمز بنویسم.
        در صورتی که میخوام با تعریف مجموعه ی جدید فقط یک table بنویسم.از طرفی طبق مسئلم مسیرهام مشخصه.به عبارتی از’ i به j’ و از طرفی ‘j به k ‘.اصلا نمیخوام هزینه ای به عنوان پارامتر بین i به k وارد کنم.یعنی تو گمز یه جدول کلی بشه که بین i و j و هم چنین بین j و k را ‘YES’ و رابطه ی بین i به k را ‘NO’ نشان دهد.
        شاید بگید یه جدول تو اکسل بنویسم و همه ی گره ها را در اون وارد کنم و هزینه هایی که وجود داره را وارد کنم و هزینه هایی که وجود نداره را خالی بذارم.چون اندیس هام زیاده دستی وارد کردن خیلی زمانبر هست و میخوام در گمز به صورت عدد تصادفی ایجاد کنم!

        اما مطلبی که شما فرمودید مسیر i به j به k را نشان میده به عبارتی سه مجموعه را لحاظ میکنه و دو مجموعه میخوام.

        • سلام
          وقتی که شما میخواین عدد تصادفی وارد کنین، خب بهتره این کار رو بکنین:
          اول یه مجموعه به اسم E1 تعریف کنین. که جفتهای i,j رو yes کنه. بعد ست دیگه‌ای مثل E2 که j,k رو yes کنه.
          تو مرحله بعد مثلا همچین پارامتری دارین. c(o,d) شما اول باید اول به عنوان پارامتر تعریفش کنین. تو مرحله بعد بهش عدد تصادفی بدین. به شکل زیر:

          set E1(i,j)/#i.#j/
          E2(j,k)/#j.#k/;
          parameter c(s,ss);
          c(s,ss)$(E1(s,ss) or E2(s,ss))=uniform(2,10);

          فقط دقت کنین که s مجموعه مرجع هست که اجتماع سه مجموعه‌ی دیگه هست. و بقیه به عنوان زیر مجموعه ش تعریف شدن. ss هم آلیاسشه

  20. سلام
    وقت بخیر
    میخواستم اگه امکان داره در وارد کردن این معادله در گمز بهم کمک کنید معادله رو به این شکل وارد کردم ولی ارور زیادی دریافت میکنم.

    i,ip) .. sum(i,ip) $alfa(i,ip)0,m(i,ip)=e=0)

  21. سلام آقای محمودی خسته نباشید.
    سوالم این بود که اگه دو مجموعه i و j و یک پارامتر m(i) داشته باشیم. و مجموعه j از یک شروع بشه تا m(i ) حالا مجموعه j رو چطور تعریف کنیم؟ تو sum آیا نکته خاصی برای نوشتنش ایجاد میشه؟؟
    ممنون میشم راهنماییم کنین

    • سلام
      ممنونم همچنین.
      لازم نیست تعریف j رو دستکاری کنین.
      کافیه تو همون دستور sum که میگین از دستورات شرطی و ord استفاده کنین. مثلا

      sum((i,j)$(ord(j) < =m(i)),x(i,j))

  22. سلام

    خسته نباشید

    ببخشید من مدلمو که ران میکنم تو بعضی از جوابهام MIP Solution با Final Solve م فرق داره….به نظر تون مشکلی داره…مرسی

    MIP Solution: 1119393.462000 (373311 iterations, 1041 nodes)
    Final Solve: 66220.349000 (9509 iterations)

  23. باسلام.
    سوالم آینه که میخام یک اندیس مثل s تعریف کنم که اعضای اون بین ماکسیمم دوتا مقدار و مینیمم دوتا مقدار دیگه هست.برای تعریف مجموعه s باید چطور بنویسم؟آیا در گمز میشه مجموعه ای تعریف کرد که مثلا عضو اولش از ۶تا۹ و عضو دومی از ۲تا ۸ و به همین ترتیب بازه ماکس و مین در نظر بگیرم؟

  24. سلام
    چطور با دستور table یه ماتریس تصادفی تولید کنم؟
    بعد از تولید اون می خوام مثلا سطر iامش رو فراخوانی کنم . با چه دستوری این کار رو انجام بدم؟
    ممنون میشم اگه کمکم کنید

  25. ممنون از پاسخ سریع و مفیدتون
    می بخشید اگه بخوام ماتریس تصادفی متقارنی تولید کنم که عناصر روی قطر اصلی آن ۰ و بقیه عناصر به صورت تصادفی با چگالی ۶۰ درصد مخالف صفر باشند چطور باید این کار رو انجام بدم؟
    اگه کمکم کنید واقعا ممنون میشم

    • خواهش میکنم.
      ببینید شما باید از ترکیبی از دستوراتی که عرض میکنم این کار رو خلاقانه انجام بدین.
      مثلای میاین به ازای اندیسهای پارامترتون loop تعریف میکنین.
      بعد تو این لوپ داده رندمی که میخواین رو تعریف میکنین.
      تو خط بعدی میگین عناصر روی قطر رو صفر کن.
      بعد یه شرط if میذارین. اگه تعداد عناصری که بیشتر از صفر هستن، معدل ۶۰ درصد کل آرایه ها هست که هیچی خلاص. اگه نه که تکرار کن رویه رو.
      البته حلش زمان ببره این کار. از طرفی داده تصادفی ای که تولید میکنین شما باید از رویه ی زیر پیروی کنه.
      تولید عدد تصادفی در گمز
      قطعا راه های بهتری هم هست که فعلا به ذهن من نمیرسه.

  26. تا الان یه ماتریس تصادفی عدد صحیح با درایه های روی قطر اصلی ۰ تولید کردم ولی روی خط if خطا میده و من نمی دونم مشکل از کجاست
    sets i /1*4/
    j /1*4/;
    parameters
    Q(i,j);
    loop ((i,j),
    if (i=j);
    Q(i,j)=0;
    else
    execseed = 100000*(frac(jnow));
    Q(i,j) = uniformInt(10,100);
    );

  27. سلام
    طاعاتتون قبول
    در مسئله مسیریابی با گره های مشتری ۳،۴،۵ برای عدم تشکیل زیرتور در بخش مشتری یک مجموعه به شکل زیر تعریف کردم:

    set
    ComN/1*4/
    sub(ComN,r)/ 1.(3 , 4)
    2.(3 , 5)
    3.(4 , 5)
    4.(3,4,5)/
    ;

    بعد در بخش alias با توجه به نوع محدودیت عبارت زیر را وارد کردم که به خاطر چند بعدی بودن مجموعه نمیپذیردش و من نمیدونم باید چ طور این مشکل رو حل کنم:

    alias
    (sub,SP)
    ;

    محدودیت حذف زیرتوری هم که به مدل اضافه کردم به صورت زیر هست:

    SubtourCons(ComN,out).. sum(Sub(ComN,r),sum(Sp(ComN,rr),w(r,rr,out))) =L= sum(Sub(ComN,r),1)-1;

    خیلی ممنون میشم اگر من رو راهنمایی کنید.

  28. با سلام مجدد
    خطاهای برنامه رو گرفتم اما در فراخوانی یک سطر دلخواه از ماتریس با اون روشی که گفتید خطای ۴۰۹ رو میده
    در ضمن برای ترانهاده ماتریس توی گمز دستوری وجود داره ؟

    • سلام
      احتمالا سیمیکالون رو جا گذاشتین شما یه جایی.
      برای ترانهاده دو روش هست. دو روش زیر رو ببینید. اولی روش کند، دومی روش سریع تر هست. برای سایز پایین فرقی نمیکنن ولی سایز که بره بالا، دومی خیلی خیلی سریعتر هست.

      set i /1*5/
      ;
      alias(i,j);

      parameter a(i,j),b(j,i),c(j,i);

      a(i,j)= uniformint(1,10);

      * slow way
      b(j,i)=a(i,j);

      * fast way
      option c < a; display a,b,c

  29. یه کار دیگه ای که می خوام انجام بدم اینه که کابر بتونه بعد ماتریس رو به عنوان یک عدد دلخواه در هر بار اجرا به برنامه بده . ممنون میشم اگه راهنماییم کنید.

      • من زیاد با گمز کار نکردم ولی توی متلب اصول برنامه نویسی ما این طوری بود که یه برنامه می نوشتیم و برای بُعد مساله یک پارامتر (مثلا n) تعریف می کردیم . موقع حل مساله چون برای ما تغییر بُعد خیلی مهمه بُعد مساله رو مرتبا عوض می کنیم تا زمان اجرای برنامه رو برای بُعد های مختلف مقایسه کنیم. می خوام برنامه رو طوری بنویسم که هر بار خواستم اجراش کنم از کاربر بُعد مساله رو بخواد و بعد از وارد کردنش توسط کاربر ، مساله اجرا بشه .آیا این کار توی گمز امکان داره؟( البته بُعد مساله همون بُعد ماتریس مربعی هست.)

        • سلام
          بله.
          وقتشه که مقداری محیط گمز رو تست کنین. مقداری با متلب فرق داره. میتونین از دستورایی نظیر $set استفاده کنین.

  30. برای تولید یه ماتریس متقارن تنها راهی که بلدم اینه که خود ماتریس تصادفی رو در ترانهادش ضرب کنم. شما راه دیگه ای سراغ دارید؟

  31. سلام
    ببخشید که خیلی سوال می پرسم
    من با دستور T(i,j)=e=Q(i,j)+QT(i,j); می خوام جمع دو ماتریس رو بدست بیارم ولی خطا میده T(i,j) رو هم parameter تعریف کردم. نمی دونم مشکل کجاست؟روی خط یکی مونده به آخر خطا میده .اینم برنامم:

    sets i /1*4/
    j /1*4/;
    parameters
    T(i,j)
    Q(i,j)
    QT(j,i);
    execseed = 20000*(frac(jnow));
    loop ((i,j),
    if (ord(i) = ord(j),
    Q(i,j)=0;
    else
    Q(i,j)= uniformInt(10,100);
    );
    );
    option QT < Q;
    T(i,j)=e=Q(i,j)+QT(i,j);
    display Q,QT,T;

    • سلام
      نه خواهش میکنم. خوشحال میشم کمک کنم. شما QT(i,j) تعریف نکردین، QT(j,i) تعریف کردین. واسه همین ارور میده.
      بعدش اینکه وقتی i,j مث همن alias کنین همیشه. این یه قانونه که کارا رو براتون آسونتر میکنه

  32. سلام
    من بازم توی فراخوانی یک سطر دلخواه از ماتریس مشکل دارم همون خطا رو میده برنامم فقط توی خط آخر خطا میده .

    sets i /1*4/
    alias (i,j);
    parameters
    T(i,j)
    Q(i,j)
    QT(i,j);
    execseed = 20000*(frac(jnow));
    loop ((i,j),
    if (ord(i) = ord(j),
    Q(i,j)=0;
    else
    Q(i,j)= uniformInt(10,100);
    );
    );
    option QT < Q;
    T(i,j)=Q(i,j)+QT(i,j);
    display Q,QT,T;
    Q('3',j);

    • سلام
      شیوه display کردن در gams اینجوری نیست که. همین که Q رو display کردین کافیه که. میبینین اونجا مقدارشو. خط اخرو حذف کنین

  33. سلام
    یه سوال دیگه دارم
    می خوام یه برنامه خطی بنویسم و اون رو حل کنم. بعد جواب این برنامه رو فراخوانی و از اون به عنوان ورودی یه برنامه دیگه استفاده کنم . این کار رو چطور انجام بدم؟

    • سلام
      میتونین تو یه کد این رو انجام بدین. مثلا وقتی مدل حل شد، با دستور x.l برای متغیر x تو مدل بعدی از اون استفاده کنین. دستور solve اول میاد مدل اول رو حل میکنه. مقادیر بهینه متغیرهای مربوطه (که با پسوند .L مشخص میشن) رو می تونین به مدل بعدی به عنوان پارامتر یا یک جواب اولیه معرفی کنین

  34. سلام
    ممنون از پاسختون
    یه سوال دارم . آیا اون طوری که شما x رو تو برنامم تعریف کردین، x رو به عنوان یه بردار می شناسه؟چون توی برنامم x باید یک بردار باشه

    • سلام
      ببینید بردار تو گمز به یه المنت میگن که یه سری اندیس داره. شما اگه چیزی رو اندیس دار تعریف کنین، تو گمز یعنی بردار تعریف کردین. حالا این بردار اگه هنوز عددی نگرفته باشه، اسمش متغیر و اگه عدد گرفته باشه میشه پارامتر، و یا متغیری که سطح اون مشخص شده x.l

  35. سلام. من دو تا مجموعه تعریف کردم:
    b /i1,i2,k1,k2,k3,k4,k5/
    h/ j1,j2,j3,k1,k2,k3,k4,k5/
    که هر کدام از مجموعه b,h در اندیس گذاری متغیرهای جدا استفاده میشن.
    حالا میخوام مجموعه K(b) customer /k1,k2,k3,k4,k5/ و r(h) customer /k1,k2,k3,k4,k5/ تعریف کنم. اما در نهایت میخوام k,r باهم alias بشن. ولی هرجوری اینکارو انجام میدم ارور میده $۴۰۶,۱۵۸
    ممنون میشم راهنمایی کنید

    • به نظر من یه مجموعه بزرگتر تعریف کنین که اجتماع b,h باشه مث مجموعه زیر:

      m /i1,i2,j1,j2,j3,k1,k2,k3,k4,k5/

      بعد b,h,k رو به عنوان زیر مجموعه m در نظر بگیرین و اخر سر هم r,k رو الیاس کنین

  36. سلام.خسته نباشید.از وبسایت خوبتون ممنون.
    من توی نوشتن محدودیت حذف زیر تور در مسئله مسیریابی مشکل دارم ..می تونین راهنماییم کنید
    یک مجموعه داریم که بین نقاطش دو به دو حر کت می کنیم که این رو به صورت یک مجموعه و alias تعریف کردم..
    برای حذف زیر تور محدودیتو چطوری باید بنویسم.
    مرسی

    • سلام
      یه راهنمایی میتونه این باشه که:

      sum((i,j)$(ord(i) < =s and ord(j) <= s and ord(i)........,x(i,j)=l=s-1;

      سایر شرطا رو خودتون اعمال کنین. و اینکه s رو پارامتر تعریف کنین اینجا

  37. سلام خسته نباشید. من تو یه برنامه ام میخواستم در یک محدودیت از سه تا اندیس استفاده کنم .ولی دستورش رو نمیدونم .اگه ممکنه لطفا راهنماییم کنید.محدودیت بنده به شکل زیر می باشد و i و j و k اندیس ها هستند:
    v(i,k)-q(i,j)=e=e(i,j)

  38. سلام
    خسته نباشید.
    من تو مدلم یه سری محصولات دارم که با اندیس i تعریفشون کردم. این محصولاتم دو دسته هستن…یسری محصولات فقط با مواد اولیه اصلی تولید میشن و یه سریاشون، هم با مواد اصلی و هم با مواد بازگشتی…چطور میتونم برای این محصولات دو دسته اندیس تعریف کنم؟
    ممنون میشم راهنماییم کنین.

  39. سلام
    من توی مدلم ی اندیس دارم p ک زیرمجموعه ی اندیس دیگست t،مشکلم اینجاست ک مشخص نیس p دقیقا چه مقدارهایی میگیره ک توی set تعریف کنم ب عنوان زیرمجموعه،در حل مساله مشخص میشه p چ مقداری میگیره
    حالا باید pرو چطوری تعریف کنم؟
    ممنون

    • سلام
      مثلا یک پارامتر ۰ یا ۱ بگیر که اگز عضو t بودن یک باشه اگر نه صفر . بعد در هر جا p نیاز بود این پارامتر ضرب کن و بگو به ازای برقراری این پارامتر عملیات انجام بده . p هم متغیر بگیر.
      یک همچنین ابتکاریو باید انجام بدی

  40. سلام وققتون بخیر
    من می خوام کد یک مدلو بنویسم. ۳تا اندیس داره که یکیشو من نمیدونم چجوری باید تعریف کنم!
    {|k ∈ {۱, . . . , |K این ینی چی؟ واسه عدد دادن فرق خاصی با حالت بدون قدرمطلقش نمی کنه؟

    • سلام
      این معمولا منظورش اندازه ی k هست، به معنی تعداد. که معمولا میشه بزرگترین عدد k
      حتی اگرم قدر مطلق باشه فرقی هم نمیکنه. خب قدر رو حساب میکنین، بعدش میگین کا از یک تا فلان میشه.

  41. من تابع هدفه مدلم هم توان دو و هم جذر در قسمت هایی داره الان ک اجرا کردم ..خطا در اجرا میده و Exec Error at line 77: division by zero (0) میگه مشکلش چیه واس توان ها اشکال میگیره

    • سلام
      تو مخرج یکی از کسرهاتون یه متغیر هست که ممکنه مقدار صفر بگیره. برای رفع کردنش یه عبارت خیلی کوچیک رو به مخرج اضافه کنین.
      الیته برای رادیکال و توان هم ممکنه این ارور ها پیش بیاد. که یا خطیش کنین. یا اینکه بذارینش تو قدرمطلق

  42. سلام وقت بخیر، من یک مجموعه ۲۴ ساعته دارم به اسم t ، در نوشتن تابع هدف sum رو باید روی یک t connect(زمانی که یک وسیله به برق برای شارژ متصل می شود)تا t full (زمانی که فول شارژ می شود) تعریف کنم که مقادیر اینهارو ندارم. میخاستم ببینم این دوتا زمان رو چگونه در set تعریف کنم و از طرفی در نوشتن معادله چگونه حد سیگما ( از t connect تا t full ) را تعریف کنم. ممنون میشم اگرجواب دهید

  43. ممنون از پاسخ تان.
    ما یک مجموعه به نام t یک دوره یک روزه (t=24) در برنامه تعریف کرده ایم، در طول این یک روز یک سری خودروی برقی در یک ساعتی به نام t connect ( که زمان این ساعت را نمیدانیم )به شبکه وصل میشوند تا شارژ شوند. از طرفی در زمان t full این خودورها کامل شارژ میشوند که باید از شبکه جدا شوند( t full) را هم نمیدانیم. این زمان هارو چگونه تعریف کنم در مجموعه؟
    ینی در معادلات sum را جداگانه هم روی t داریم و هم از t connect تا t full .
    منظورم واضح است؟

    • سلام
      اگه tful, tconn تو معادلات مختلف استفاده شدن:
      اولا t که از یک تا ۲۴ یا از صفر تا ۲۴ هست.
      برای اون دوتای دیگه، اونا اندیس نباشن بهتره. به جاش یه جوری به خود t ربطش بدین. مثلا فرض کنیم که tfull, tconn جفتشون متغیر اینتیجر مثبت هستن که حداکثر فلان هستن (بین صفر تا ۲۴). حالا اگه از دستور ifthen تو معادله ای که روی t از tful تا tconn رفته sum بسته استفاده کنیم، اینجوری از حالت اندیس بودن خارجش کردیم.
      البته تا جایی که من دیدم تو مدل ها tfull برابر با tconn به اضافه ی زمان مشخصی هست. مثلا هر دستگاه حتما یه ساعته شارژ بشه.
      این توضیحات من ممکنه به مدل شما بخوره. شایدم مفاهیم شما بیشتر باشه و کل صحبت های من رد بشه.

  44. سلام
    من مدلم دو هدفه است.. با معیار جامع حلش کردم اروراشو برطرف کردم..ولی جواب بهم نمیده …اومدم بررسی کردم و متوجه شدم برای تابع هدف اولم جواب میده ولی برای تابع هدف دومم جواب صفر میده به همین علت جواب نهایی بهم نشون نمیده…نمیدونم چجوری درستش کنم؟؟؟
    سوال دیگری ک داشتم اینه ک من یک اندیس دارم از یک تا t و مقدار t یک عدد هست ک از یک فرمول به دست می آید چجوری در گمز اینو بنویسم؟

    • سلام
      تو معیار جامع یه حد پایین و بالا داریم برای هر هدف، شما باید این دو تا رو پیدا کنین اول، مثلا یه بار با هدف اول مدل حل میشه و هدف دوم میره تو محدودیت، هر جوابی که برای دو هدف به دست اومد رو ثبت میکنیم. برای هدف دوم هم همینکارو میکنیم. بعد تو مخرج اون هدف جدید باید تفاضل بیشتر مقدار هر هدف رو بذارین. مثلا برا اولی اینجوریه:
      (F1max-f1)/(f1max-f1min)
      برای سوال دوم هم از دستور دلار و ord استفاده کنین. تو کامنتای سایت بگردین

  45. سلام روز همه گی بخیر. میخواستم ببینم این فرمول چه طور نوشته میشه

    Γ_jp= √(-۲ |J| ln⁡α )
    Γ_jp^’= √(-۲ |J| ln⁡α )
    Γ_jpt^”= √(-۲ |J| ln⁡α )
    Γ_(j^’ pt)^”’= √(-۲ |J| ln⁡α )

    لازم به ذکر می باشد در فرمول های بالا مقدار |J| برابر تعداد پارامترهای غیر قطعی محدودیت مورد نظر می باد. که این مقدار برابر t در هر محدودیت است. اگر Γ از t بزرگتر بود مقدار t درنظر گرفته می شود و اگر کوچکتر از t بود مقدار Γ را درنظر می گیریم.
    α نیز حداکثر مقدار نقض شدن محدودیت می باشد (نشدنی شدن جواب) که در این مسئله برابر ۰٫۰۱ درنظر گرفته شده است.

    این طور درسته ؟
    gama(j,p)=sqrt(-2*ord(j)*log(alfa));
    gamaa(jj,p)=sqrt(-2*ord(jj)*log(alfa));
    gamaaa(j,p,t)=sqrt(-2*ord(j)*log(alfa));
    gamaaaa(jj,p,t)=sqrt(-2*ord(jj)*log(alfa));

    • سلام
      خیلی واضح نیست، ولی برای ord ممکنه به مشکل بر بخورین، اگه به ord گیر داد، از j.uel استفاده کنین. قبلش هم تست کنین که این j.uel چی رو بر میگردونه (حتما)

  46. سلام و خسته نباشید
    یه مجموعه زمان داریم t={1,2,..,11} یه مجموعه فعالیت داریم j={1,2,3,4} یه wj داریم که زمان شروع شدنی فعالیت j است.
    w1={0,1,2,3,4} و w2={1,2} و w3={8} است.
    w زیر مجموعه t و وابسته به اندیس j است.
    مشکل من در تعریف مجموعه w است.
    چطور میتونم w(j,t) تعریف کنم که در محدودیت زیر به کار ببرم:
    co1(j).. sum(wj, x(j,t))=e=1

  47. سلام
    ببخشید یه سوال داشتم
    میخام دو تا مجموعه J و K تعریف کنم که J عضو دو مجموعه M و W هستش و K هم عضو دو مجموعه W و E.
    سوال اولم اینه که اینا رو چجوری تعریف کنم و دوم این که مثلا عبارت ∑▒〖F(I,J,K,T)〗 که سیگما روی J و K باشه رو چجوری بنویسم.
    ممنون از سایت بسیار خوبتون

  48. سلام ببخشید یک سوال داشتم
    بعد از این که چند set تعریف کردیم و بخواییم چند alias تعریف کنیم باید چکار کنیم یا در واقع این چیزی که من نوشتم درسته یانه؟

     sets
    j noee mashin/1*5/
    p noee mahsool/1,2/
    k noee item/1*5/
    t doreh/1*1/
    i tedad mahdudiat/1*21/;
    alias(j,w);
    alias(t,q);
    alias(k,h);
    
  49. سلام روز شما بخیر.
    دو قطعه مختلف دارم که با k و h نشان داده می شود. که باید روی دستگاه j پردازش شوند. این دو را با دستور alise مشابه می کنم. در بعضی از محدودیت ها ذکر میشه که h مخالف با k می باشد.
    لطفا بفرمایید دستور آن در گمز چگونه هست؟ آیا به شکل زیر صحیح است؟ آیا مورد دیگری نیز باید به آن اضافه شود؟
    k / 1*k/
    alias (k,h),
    شرط در محدودیتها $(ord(k ord(h)

    و یک سوال دیگر اینکه مجموعه ها و پارامترهای من مقادیر عددی ندارن آیا باید حتما برای آنها نمونه عددی در نظر گرفت یا به صورت پارامتری هم جواب می دهد؟
    برای مثال
    t /1*t /
    k / 1*k/
    و اینکه برای مورد k که محدوده آن هم از ۱تا k تعریف میشود باید حرف k تغییر کند یا مشابه بودن آن مشکلی ندارد؟

    سپاس فراوان

    • سلام
      سوال اول: $ ( ord(k) ne ord(h
      سوال دوم: اگه بخواین از قبل بهش عدد بدین، اولبا باید اون اسامی یکی نباشین، سایرا باید از دستور $set استفاده کنین که بشه به t1,k1 مقدار داد. ۱*t1…

  50. سلام ببخشید یه سوال داشتم
    ما i تا مرحله کارگاهی(کارگاه تولید) داریم که قطعه باید از این مراحل عبور کند و با این مجموعه نشان میدهیم { ۲,۱,…,s} در اینجا نماد s تعداد مراحل هستش , البته اینجا تو کامنت متاسفانه مجموعه رو برعکس تایپ میکنه منظورم از راست به چپ مینویسه بهرحال ، در هر مرحله هم تعدادی ماشین موازی یکسان قرار دارند که اندیس ماشین های موازی در هر مرحله رو با r نشان میدهیم بصورت { ۲,۱,…,Mi} که در اینجا هم Mi نماد تعداد ماشین موازی در مرحله iام است خوب الان من این رو چجوری تو قسمت set تو نرم افزار ” گمز ” کدینگ کنم چون بنظرم r خودش یک اندیس اندیس دار !! هستش. یعنی r ی که مربوط به مرحله iام هستش به عبارتی r وابسته به i هست
    اگر این مشکل پایان نامم رو حل کنید واقعا یعنی یه کوه از پشتم ورداشتید به هرکس گفتم چیزی نداشت بهم بگه
    با سپاس از سایت پر مغز و عالیتون

    • سلام
      توضیحاتی که لازم دارین مقداری زیاده. شما باید از مجموعه های دو بعدی یا TABLE ها نهایت استفاده رو بکنین.
      مجموعه های دو بعدی رو میتونید اینجا مشاهده کنید.

  51. البته شرمنده یادم رفت بپرسم که خود Mi یا ( M( i رو به چه صورتی تعریف کنم ، بصورت پارامتر ؟ چون فک نمیکنم بشه تو بخش اندیسها تعریفش کرد … خلاصه سرتون رو زیاد درد نیارم این سه تا یعنی (i و r و Mi) بهم مربوطند باید جوری تعریفشون کرد که بهم وابسته باشند مخصوصا i و r
    با سپاس

  52. سلام جناب محمودی
    سوالی در خصوص مجموعه ها داشتم. من مجموعه ای به شکل زیر دارم:
    مجموعه H شامل حالت ترکیبی از چند پارامتر هست که به شکل زیر هست:
    t عضوی از مجموعه H که خود H شامل پارامترهای r(j) , h(j) , p(j) هست که در یک عبارت جمع sum از r(j) شروع میشه و به h(j)-p(j)+1 ختم میشه. و اینکه در حالت خاصی نقطه شروع مجموعه در جمع نیازمند گرفتن یک max یا min از مجموعه هست.
    اصلا میشه از پارامترها یک مجموعه ساخت؟

    ممنون میشم راهنمایی کنید.

    • سلام
      اینکه فرمودین ترکیبی هست رو من متوجه نشدم. ولی برای حدود مشکلی نیست. میشه گفت:

       sum(t$(ord(t) >=r(j) and ord(t) <= h(j)-p(j)-1),
      

      برای max و… هم تو همون شرطا میشه لحاظ کرد

      • با سلام مجدد.
        فکر میکنم با روشی که فرمایش داشتید بتونم مشکلم را حل کنم.
        ایا میشه هر کدوم از حدود را به صورت جدا و در قالب یک مجموعه مجزا نوشت و بعد به کمک اجتماع این مجموعه ها در معادلات اندیس ها را ارجاع داد؟

        با تشکر

        • البته در خصوص استفاده از فیلتر گذاری که فرمایش داشتید من نیاز به تعریف مجموعه ای دارم که بتونم در محدودیت ها اندیس را به ان ارجاع بدم و بعد با فیلتر گذاری حدود را تعریف کنم. اون مجموعه را میشه به فرمی که در پست قبل عرض کردم (اجتماع مجموعه ها) ایجاد کرد. من نمیدونم چطور میشه پارامترها را در قالب مجموعه نمایش داد.

          ممنون

        • سلام
          فکر نمیکنم به صرفه باشه فکر کردن روش. وقتی پارامتر دارین با این روش خیلی ساده کار انجام میشه

  53. در خصوص فرمایش شما، مگه میشه یک اندیس را بدون اینکه مجموعه ای داشته باشه در یک محدودیت بکار برد؟
    ما بایستی مجموعه ای داشته باشیم که اعضای این مجموعه متشکل از پارامترهای مسئله هستند. مثلا مجموعه H و بعد بتونم اندیس t را به عنوان نماد این مجموعه استفاده کنم و با روشی که شما گفتید فیلتر گذاری کنم. حالا برای ایجاد چنین مجموعه ای مشکل دارم. تو زبانهای مدلسازی دیگه این کار شدنی هست که شما پارامترها را در قالب مجموعه تعریف کنید ولی من در گمز چنین موردی را ندیدم.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *