۱,۰۸۳

معادلات، تابع هدف و محدودیت ها

مجموعه ی اندیس ها، پارامترها، جداول و متغیرهای مسئله تعریف شد. نوبت می رسد به وارد کردن معادلات، محدودیت ها، تابع هدف و… . همانطور که می دانید، مدل های بهینه سازی شامل دو بخش تابع هدف و محدودیت ها می شود.

معرفی و اعمال این معادلات در دو بخش Equation Declaration و Equation Specification انجام می شود. مثال زیر را در نظر بگیرید:

Equation-Dec

همانطور که ملاحظه می شود، در بخش اول دستور یا Equation Declaration، به تعریف و اعلام اسامی تابع هدف و محدودیت ها به همراه وابستگی اشان به اندیس های متناظر می پردازیم. co6 را در نظر بگیرید؛ این گذاره صرفا اسمی است که توسط کاربر برای محدودیت ششم انتخاب شده است و هیچ ارزش دیگری ندارد. در حالی که co1(i,j) وابستگی محدودیت اول به اندیس های i و jرا نیز نشان می دهد. و این معادل همان علامت ∀ در جبر خواهد بود. پس در واقع co1(i,j) یعنی قید اول به ازای هر i و j باید برقرار باشد. محدودیت جبری معادل:

Equation-sample

در بخش دوم یا Equation Specification، در هر سطر، اسم هر معادله یا نامعادله که در بخش اول به تعریف آن پرداختیم، آورده خواهد شد و سپس دو نقطه (..) مطابق شکل بالا جلویش خواهیم گذاشت. دقت شود که اگر در قید، شرطی مانند i≠j نیز داشته باشیم باید این شرط را قبل از دو نقطه ای که گذاشته ایم اعمال نماییم. اگر مبتدی هستید، هیچگاه تایپ دو نقطه را فراموش نکنید! چون برطرف کردن خطاهایی که به هنگام run کردن مدل خواهید دید، انصافاً شما را به شدت عصبی می کند!
مثال: کد محدودیت زیر را مشاهده می کنید:
محدودیت:
Equation-sample2
کد:

*Example
co1(i,j,l)$(ord(i) ne ord(j)).. z(i,j,l)=l=z(j,j,l);

در فرمول های بالا قواعد و قوانینی در فرمول نویسی استفاده شده اند که در بخش تابع نویسی توضیح داده خواهند شد. در صورت نیاز به این بخش ها مراجعه نمایید. در اینجا صرفاً مهارتی که در تعریف محدودیت ها کسب می کنید مدل نظر می باشد.

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

در معادلات و نامعادلات، دیگر از علایم ≠یا=،≤،≥ استفاده نمی کنیم. نمادهایی که در معادلات و نامعادلات در GAMS به کار می روند به قرار جدول زیراند:
equation-syms

از سنبل هایی که در جدول بالا معرفی شد، به ندرت پیش می آید که از =n= و =c= استفاده شود. در واقع این نمادها کاربرد خاص وتخصصی دارند.

جهت روشن تر شدن موضوع مثال زیر را در نظر بگیرید:
Equation-Example1

کد مربوط به به بخش معادلات این مدل به شکل زیر می تواند باشد:

*Example2
Equation
objective
Constraint1
constraint2
;
objective.. o=e=x1+x2 ;
constraint1.. x1*x2=l=10 ;
constraint2.. x1-x2=g=2 ;

دقت کنید که کد بالا کامل نیست و باید قبل از تعریف این معادلات متغیرهای x1 و x2 و همچنین متغیر مربوط به تابع هدف یا o قبلاً تعریف شده باشند.

بپردازیم به ادامه ی مثال کاربردی ۱:

مدل تنها دو محدودیت دارد. آن ها را به ترتیب cont1 و cont2 و تابع هدف را obj می نامیم. نتیجتاً کد مربوطه به صورت زیر خواهد بود:

Example1-Equation definition

بحث در باب تعریف معادلات در GAMS به اتمام رسید. با اندکی تمرین و دقت می توانید به سادگی تعریف کردنِ معادلات و وارد کردن تابع هدف و محدودیت ها را فرا بگیرید. مباحث تکمیلی در همین برگه خدمت عزیزان ارائه خواهد شد.

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

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

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

 

1,083 دیدگاه در “معادلات، تابع هدف و محدودیت ها

  1. سلام،ممنون از سایت خوبتون
    اگه محدودیتی داشته باشیم که دو طرفش کراندار باشه اون رو به صورت زیر در گمز بنویسیم درسته؟
    sum((i,k),x(i,k,c))-sum((k,i),x(k,i,c))=g=-m*z(i
    sum((i,k),x(i,k,c))-sum((k,i),x(k,i,c))=l=m*z(i
    با تشکر

  2. سلام ، یه مشکلی تو کدنویسی دارم نتونستم حل کنم.
    می خواهم بگویم متغیرa مثلا اگر بین ۱ تا ۱۰ بود ، متغیر b مقدار ۱ بگیرد
    در غیر این صورت اگر متغیر a بین ۱۰ تا ۲۰ بود ،متغیر b مقدار ۲ بگیرد , و به همین ترتیب …
    loop((i,j),a.l(i,j)=yes)
    if(a.l(i,j)>0 and a.l(i,j)=10 and a.l(i,j)<20),b(i,j)=2
    اینطوری مینویسیم همش اولین جواب را ۱ میدهد (شرط اول)
    نمیدونم به این طریق باید کدنویسی کرد یا به طریق دیگر
    ممنون از راهنمایی تان.

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

  3. سلام ببخشید من بخوام تو محدودیتی مشخس کنم که اندیس متغیرهای من فقط تعدادی از مقادیر را بگیره باید چطور بنویسم.

    • سلام
      شما باید از دستورات شرطی استفاده کنید. مثلا بگید که x(i) برای i هایی که بزرگتر مساوی ۲ هستند مشه کد زیر: (رطی ها رو هنوز تو سایت نذاشتیم)

      constraint(i,j)$(ord(i) ge 2).. x(i)=l=y(i,j);

  4. سلام
    ی مشکلی برام تو معادله نویسی اتفاق افتاده که وقتی مدل را run میکنم با توجه به اینکه برای دو اندیس جمع باید گذاشته بشه فقط مدل یک اندیس رو تغییر میده و در ضمن کل اون محدوده را نشون نمیده !
    یعنی من مجموعه ها رو به صورت زیر تعریف کردم
    j/1,2,3,4/
    k/1,2,3,4/
    i/a,b,c/
    و تابع رو هم به صورت زیر نوشتم
    EQ1(k,i) ..sum(j, x(i,j,k))=e=1 ;
    ولیدر خروجی فقط برای اندیس i=a و k=1,2,3 جمع میکنه
    ممنون

      • بعد از نوشتن کد پایین
        EQ1(i,k)..sum(j, x(i,j,k))=e=1 ;
        وقتی که مدل رو run کردم در بخش خروجی برای اندیس i=a و k=1,2,3 جمع میکنه که خروجیش به صورت زیر میاد!!!
        EQ1(a,1).. x(a,1,1) + x(a,2,1) + x(a,3,1) + x(a,4,1) =E= 1 ;

        (LHS = 0, INFES = 1 ****)

        EQ1(a,2).. x(a,1,2) + x(a,2,2) + x(a,3,2) + x(a,4,2) =E= 1 ;

        (LHS = 0, INFES = 1 ****)

        EQ1(a,3).. x(a,1,3) + x(a,2,3) + x(a,3,3) + x(a,4,3) =E= 1 ;

        (LHS = 0, INFES = 1 ****)
        با تشکر

  5. سلام
    بخشید من یه متغییر دارم به صورتVl(z,j,c)(b,i,d) که (z,j,c) و (b,i,d) از یک مجموعه گرفته میشن، باید محدودیتی تعریف کنم که این محدودیت برای مقادیری از (z,j,c)(b,i,d) اعمال میشه که (z,j,c) مخالف (b,i,d) باشه، ایا نوشتن کد زیر درسته؟

    con((l,z,j,c,b,i,d)$(ord(z,j,c) ne ord(b,i,d))

  6. سلام
    لطفا اگه ممکنه کمکم کنید..
    من ی مدلی نوشتم به صورت زیر:
    eq2(m).. Rleadtime2ato1a(m) =e=leadtime2ato1a(m)* (1-dmc2a);
    eq22(m).. Rleadtime2ato2a(m) =e=leadtime2ato2a(m)* (1-dmc2a);
    eq222(m).. Rleadtime2ato3a(m) =e=leadtime2ato3a(m)* (1-dmc2a);
    eq3(m).. (21/rleadtime2ato1a(m))*v2aTO1a(m)+(21/rleadtime2ato2a(m))*v2aTO2a(m)+(21/rleadtime2ato3a(m))*v2aTO3a(m)+ =g=1000;
    ولی در بخش خروجی ضریبهای متغیر های v2aTO1a(m)وv2aTO2a(m)و v2aTO3a(m)یا صفر میذازه یا UNDF..
    در صورتی که تمام متغیرهایlead time مقداری مخالف صفر دارند.
    یعنی جوابش در خروجی اینطوری میشه:
    eq3(water).. (UNDF)*v2aTO1a(water) + (UNDF)*v2aTO2a(water)

    + (UNDF)*v2aTO3a(water) + (UNDF)*v2aTO2c(water)

    + (0)*Rleadtime2ato1a(water) + (0)*Rleadtime2ato2a(water)

    + (0)*Rleadtime2ato3a(water) =G= 1000 ;
    ممنون میشم کمکم کنید .

  7. یعنی با توجه یه اینکه نوع مسئله رو nlp تعریف کردم .وقتی در یک محدودیت دو متغیر رو تقسیم بر هم میکنم در خروجی به صورت جمع نشون میده .
    یعنی محدودیتم به شکل پایین مینویسم :
    eq3(m).. v2aTO1a(m)/Rleadtime2ato1a(m) =g=0.3*1000;

    ولی خروجی جواب رو جمع نشون میده :
    eq3(water).. (1)*v2aTO1a(water) + (1)*Rleadtime2ato1a(water) =G= 300 ;

    (LHS = UNDF)

    eq3(food).. (1)*v2aTO1a(food) + (1)*Rleadtime2ato1a(food) =G= 300 ;

    (LHS = UNDF)

    eq3(shelter).. (1)*v2aTO1a(shelter) + (1)*Rleadtime2ato1a(shelter) =G= 300 ;

    نمیدونم این رو چه جوری باید درستش کنم

    خیلی هم از سایت خوبتون ممنون

    • گمز همه محمودیت رو میبره یه سمت. متغیرها و مجهولات رو یه سمت و معلومات رو ساده سازی میکنه و ضرب میکنه تو این متغیرها، بعد اونایی که معلوم هستن رو میبره سمت راست محدودیت

  8. سلام
    خیلی از سایت خوبتون ممنون

    توان دوم یک متغیر رو چجوری میشه در گمز تعریف کرد؟!
    من از دستور sqr رفتم و نوع مدل رو nlp گذاشتم .ولی بعد از run کردن ضریب این متغیر رو صفر میکنه . کدم رو یه صورت پایین نوشتم:
    eq2.. y =e=5* (1-sqr(e));
    ولی جوابش رو اینطوری میده:
    eq2.. y + (0)*e =E= 5 ; (LHS = 0, INFES = 5 ****)

  9. سلام
    مرسی بابت سایت خیلی خوبتون
    فرض کنید من یه پارامتر دارم (k(i،که مجموعه iبرابر با /i1*i30/ هستش و در مدلم دو تا متغیر x و y دارم.من میخوام مثلا زمانیکه مقدار متغیر x=5 شد،مقدار متغیر y برابر با (‘k(‘i5 بشه،و یا اینکه وقتی x=12 شد،(‘y=e=k(‘i12 بشه.
    مرسی از راهنماییتون

      • سلام
        نه،در غیر این صورت نداره شرطم،همانطوری که گفتم با توجه به مقدار متغیر x،مقدار متغیر y برابر میشه با آرایه xام پارامتر k،یعنی اگر مثلا x=8 شد،مقدار متغیر y برابر میشه با (‘k(‘i8
        مرسی بابت راهنماییتون

        • سلام
          ببخشید،امکانش هست که جواب سوال منو زودتر بدید،کارم خیلی گیر کرده
          با تشکر

  10. سلام مدل برنامه ریزی دارم که تو ی معادله شرط دارم ولی نمیتونم اعمالش کنیم لطفا کمکم کنید
    If w>g , c=10 o.w ,c=1
    در ضمن مدل هم بخاطر وجود شرط مساله رو حل میکنه ممنون میشوم کمکم کنید

  11. سلام میخوام تو ی معادله شرطی بنویسم ولی نمیتونم
    If w>z c=10 o.w c=1
    در ضمن مساله بخاطر وجود شرط حل نمیشه ممنون میشوم کمکم کنید

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

  13. با سلام و تشکر از زحمات شما
    مدلم دارای تعداد زیادی اعداد برای پارامترهای مسأله است که آنها را در کسل نوشته ام. چگونه آنها را به برنامه گمز معرفی بکنم؟
    آیا دستوری در گمز است که در صورت صفر بودن مقدار پارامتر آن را در نتایج مدل دخالت ندهد؟ مثلا مدل مینیمم را میخواهیم با داده های بیشتر از صفر که در پارامترها موجودند حل بکنیم؟
    مرسی

    • سلام
      دستور اکسل به گمز رو interface میگن. شما کدش رو یاد بگیر.
      سوال دومتون: بله هست. شما تو محدودیت باید شرط بذارین که اگر فلان پارامتر بزرگتر از صفر بود این محدودیت رو لحاظ کن

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

      c1(i,j)$(ord(i) > ord(j) )..

      • سلام
        ممنون از سایت خوبتان و تشکر از جواب شما به سوال بنده.
        داده های مربوط به پارامترهای مسأله ام را در اکسل نوشته ام و حالا برای معرفی آنها به گمز نمیدانم چکار کنم. ممنون میشم راهنمایی بفرمایید.
        اگه یک نمونه باشه برایم راهگشا خواهد بود.
        مرسی ار زحمات بی دریغ شما

        • سلام
          ایمیلی که چک میکنین بذارین تا براتون ارسال کنم. همین ایمیلی که کامنت میذارین هست؟

      • با تشکر از زحمات شما
        جناب محمودی
        این محدودیت به چه معناست؟
        con11 (i,m,t)$(ord(t) gt 0)..Z4(s1,d1,t
        1- یعنی از t=0 تا . . ..
        ۲- مقدار t را برابر صفر بگیر
        مرسی از سایت خوبتون

        • یعنی این محدودیت وقتی برقرار است که شمارنده ی t مقادیر بزرگتر از ۰ را بگیرد. یعنی ۱ و … .

  14. به نام خدا. با سلام
    بنده مدلی را اجرا کرده ام که MINLP است و آن را با BARON حل نموده ام. ولی جواب infeasible شده است. خواستم مرا در این زمینه راهنمایی فرمایید.

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

  15. با سلام دوباره
    سوال دوم بنده این است که یکی از محدودیت های من پس از حل به این صورت نمایش داده میشود ولی من دلیل ضرب شدن صفر در آن را نمیفهمم. لازم به ذکر است که این محدودیت، infeasible است و کنار آن INFES نوشته شده است.
    پیشاپیش از پاسخگویی شما صمیمانه سپاسگزاری میکنم.

  16. به نام خدا.با سلام دوباره و تشکر از پاسخگویی شما به سوالات قبل.
    بنده یکی از محدودیت هایم را اینگونه وارد کرده ام:
    ((Area(hot1,cold1,stage)=e=q(hot1,cold1,stage)/(U*LMTD(hot1,cold1,stage

    ولی در خروجی اینگونه آن را نمایش میدهد!:

    – (۴۰۰)*(q(source1,waste,source1,sink1,1
    * (0) + (Area(source1,waste,source1,sink1,1
    LMTD(source1,waste,source1,sink1,1)) =E= 0)

    لازم به ذکر است که جواب infeasible است ولی این معادله جزو معادلات INFES نیست.

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

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

        • سلام
          این کد شماست:

          c1(i,j)$(ord(j) lt card(j)). t(i,j)-t(i,j+1)=e=10;

          جهت مطالعات بیشتر به این سایت مراجعه کنید.

        • با تشکر بسیار از پاسخگویی شما
          فقط این حالت تنها مشکلی که دارد این است که اگر j به صورت /۱,۲/ باشد، آنگاه در معادلات، (T(i,3 ظاهر نمیشود! من واقعا دلیل آن را نمیفهمم که چیست!

        • شما باید شرطهاتون رو درست بذارین. دقت کنین که le میزنین یا it (یا همون > یا >=)

  17. به نام خدا
    با سلام و احترام. ابتدا پوزش میطلبم بابت سوالات بسیاری که میپرسم و واقعا نمیدونم چگونه از شما تشکر نمایم…
    من کد قسمتی از مساله ای که در حال آن هستم را در زیر آورده ام. مساله حل میشود و اپتیمال هم نمایش داده میشود ولی کنار بعضی از معادلات نوشته شده INFES
    و انگار که مساله حل نشده است چرا که همه متغیرها صفرشده اند. من واقعا ممنونتان میشوم اگر مرا راهنمایی فرمایید….
    با سپاس بیکران…

    Sets
    i sources /source1, source2, source3, source4 /
    j sinks /sink1, sink2, sink3, sink4,waste /
    r fresh /fresh1,fresh2/

    .
    .
    .
    .

  18. با سلام و عرض خسته نباشید
    سوالی داشتم در مورد تابع هدف و محدودیتها در برنامه گمز
    مدل من در گمز شامل یک مجموعه ۱۸ عضوی از قبیل y1,..,y6,w1,…,w6,x1,..,x6 می¬باشد. دو عضو y و w دارای مقادیر مختلفی هستند که من به عنوان پارامتر در نظر گرفتم که شامل y1=1,…,y6=1,w1=0.1,…,w6=0.6 می باشد. حالا تابع هدف من مجموع حاصلضرب w*y میباشد که در گمز به صورت زیر نوشتم ولی خطا داره
    (a;c(a);(‘y1*w1+y2*w2+y3*w3+y4*w4+y5*w5+y6*w6’;)
    همچنین با این در قسمت variable متغییرم رو مجموعم قرار دادم ولی در محدودیتها x,y و w رو ناسناش تشخیص می¬دهد (مدلم شامل ۶ محدودیته). آیا مدلی که نوشتم اشباهه؟ برای تابع هدف و شناسوندن متغییرها چه کاری باسد انجام بدم؟ نمونه¬ از محدودیتهام:
    x1 + x2 + x3 – y1 =g= 1;
    x1 + x2 + x4 – y2 =g= 1;

    پیشاپیش ممنون از پاسخگویتون

  19. با عرض سلام و خسته نباشید
    دو تا سوال دیگه هم از حضورتون داشتم
    ۱٫آیا در گمز روشی هست که بجای علامت =g= فقط علامت بزرگتر از رو برای محدودیتهام بنویسم؟
    ۲٫یک مجموعه با این اعضا دارم I = y1,y2,y3,y4,y5,y6,w1,w2,w3,w4,w5,w6,x1,x2,x3,x4,x5,x6 و bi و ai پارامترهام هستند که شامل:
    a(i) /y1=1,y2=1,y3=1,y4=1,y5=1,y6=1 و b(i) /w1=0.1,w2=0.2,w3=0.3,w4=0.4,w5=0.5,w6=0.6
    و تابع هدفی که نوشتم :
    z=e=((b(i)*a(i))*(i(‘x1’)+i(‘x2’)+i(‘x3’)+i(‘x4’)+i(‘x5’)+i(‘x6’)))
    (در واقع تابع هدفم جمع کل حاصلضرب ai و bi در تک تک x هاست) ولی نرم افزار خطایی می¬دهد مبنی بر اینکه objection value امکان ناپذیره . میشه راهنمایی بفرمایید که باید چیکار کنم.

    • سلام
      اولا شما پارامترها رو درست تعریف نکردین.

      b(i) /w1 .1,w2 .2 ..../

      ثانیا،وقتی x1 مقداری نداره چجوری گمز براش عدد بذاره و مجموعشم حساب کنه؟؟

  20. سلام
    واقعا ممنون ار پاسخگویی سریعتون. خب x1، x2، x3، x4، x5 و x6 مجهولات مسئله هستند. تابع هدف کلیم به صورت:
    Y1*w1*x1+y2*w2*x2+…+y6*w6*x6
    من این برنامه رو به راحتی با لینگو نوشتم و جواب داده ولی با گمز در تعریف تابع هدف دچار مشکل شدم. با اینکه manual نرم افزار رو هم خوندم ولی هیچ مثال مشابهی نتونستم پیدا کنم تا بتونم تابع هدفم رو به روش برنامه گمز بنویسم. واقعا دیگه نمی دونم باید از چه دستوری استفاده کنم.

    • سلام
      ممنون
      شما وقتی تو فایل lst میخواین محدودیت ها رو ببینین، مشاهده می کنین که کامل نیستن و فقط سه بار یک محدودیت رو باز کرده (به صورت گسترده نوشته)
      ولی وقتی بخواین بیشترش رو نشون بده از این کد استفاده می کنین. مثلا تو کد زیر میگین که ۱۰ تا رو نشون بده:

      option limrow=10;

      پاینده باشید

  21. سلام و ضمن تشکر از راهنمایی شما

    میشه راهنمایی بفرمایید که چطور میتونم عبارت زیر را در گمز بنویسم؟

    سیگما روی j که از i شروع میشه تا I یعنی روی یه اندیس متغیره و عبارت جلوی سیگما متغیر وی با اندیس j باشه..

      • با سلام و تشکر از راهنمایی خوبتون
        من محدودیت زیر رو همونطور که گفتم میخوام در گمز بنویسم
        C22(i,t)..sum(j,ord(j)>=ord(i) and ord(j)<=42,V(j-1,t-1)+y(j,t))-d(t)=L=M*(1-DELTA(i,t));
        طبق راهنمایی شما عمل کردم که با ارورهای ذیل مواجه می شوم:
        ۸ ')' expected
        37 '=l=' or '=e=' or '=g=' operator expected
        409 Unrecognizable item – skip to find a new statement
        looking for a ';' or a key word to get started again
        و وقتی بر اساس ارورها محدودیت رو به صورت زیر می نویسم:
        C22(i,t)..sum(j,ord(j)=G=ord(i) and ord(j)=L=42,V(j-1,t-1)+y(j,t))-d(t)=L=M*(1-DELTA(i,t));
        ارورهای زیر را می دهد:
        ۸ ')' expected
        154 Set for 'ord' is not controlled
        409 Unrecognizable item – skip to find a new statement
        looking for a ';' or a key word to get started again
        لطفا در صورت امکان راهنمایی بفرمایید، البته طبق راهنمایی فرد دیگری به صورت زیر قبلا نوشته بودم:
        $(j.val le i.val)
        که عبارت فوق را پس از اندیس سیگما به صورت شرط نوشته بودم و باز هم ارورهای متعددی می داد…

        • C22(i,t)..sum(j,V(j-1,t-1)$(ord(j)>=ord(i) and ord(j)=ord(i) and ord(j)<=42))-d(t)=L=M*(1-DELTA(i,t));
          محدودیت رو به صورت فوق نوشتم و ارور آن رفع شد،با توجه به اینکه گمز فقط بسط داده شده ۳ معادله اول را نشان می دهد، چگونه می توانم ادامه معادلات را نیز ببینم که درست عمل می کند یا نه؟

  22. سلام. روز خوش. سوالی داشتم از خدمت شما…مدل ریاضی من چند هدفه است و باید با الگوریتم NSGA-II حل کنم (یعنی باید حالت پارتو در نظر گرفته شود که در نهایت خروجی مدل مجموعه جواب کارا است نه یک جواب) .برای بررسی صحت مدل و همچنین حل مسایل در سایز کوچک به منظور مقایسه نتایج آن با الگوریتم فراابتکاری ،آیا میتونم در گمز مدل را به صورت پارتو حل کنم؟ بعضی از دوستان که آشنایی با گمز دارن فرمودن که برای چند هدفه ها ،گمز تنها روشهایی مثل وزن دهیی و … میتونه حل کنه و نمیتوان چند هدف را همزمان(پارتو) حل کرد…. میخواستم بدونم آیا درسته؟؟؟

  23. سلام. روز خوش. مدل ریاضی من چندهدفه است و باید با الگوریتم NSGA-IIحل شود(یعنی حالت پارتو در نظر گرفته می شود بجای یک جواب ،یک مجموعه جواب کارا داریم) میخواستم بدونم اگر بخواهم صحت مدل ریاضی بررسی کنم میتونم در گمز مدل به صورت پارتو در نظر بگیرم یعنی اهداف همزمان در نظر بگیرم و برای حل مجبور نباشم به تک هدفه تبدیل کنم؟ یا اینکه چنین شرایطی در گمز وجود نداره؟

  24. سلام
    کسی میدونه چجوری میشه error 148 را رفع کرد. خطای ۱۴۸ مربوط به تفاوت dimension هست. تمام متغیرها و پارامترهارو چک کردم ولی ارور رفع نمیشه. اگه کسی بتونه کمکم کنه ممنون میشم

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

  25. سلام وقت بخیر
    خیلی احتیاج دازم به راهنمایی
    متغیر d در محدودیت ۳۲ حساب می شود w و L پارامتر هستند
    می خوام مقدار af را تعیین کنم طبق شرط های زیر
    limit32(t,i,j)..d(t,i,j)=e=xp(t,i,j)+yp (t,i,j)
    d.l(t,i,j)=yes
    loop ((t,i,j)$(ord (i) ord (j) and ord(j)>ord(i))
    if ((d.l(t,i,j)(W+L)/6) and (d.l(t,i,j)(W+L)/3) and (d.l(t,i,j)(W+L)/2) and (d.l(t,i,j)2*(W+L)/3) and (d.l(t,i,j)5*(W+L)/6) and (d.l(t,i,j)<=(W+L))),af.l(t,i,j)=0;););

    در جواب همه رو ۱ بدست می آورد ، یعنی همه رو میزاره تو همان شرط اول .
    هیچ راهی نداره ؟، loop رو اشتباه نوشتم یا دستور دیگه ای داره؟
    خیلی ممنوم .

      • سلام مهندس
        داشتم پیس می کردم بدجوری شد ، qqq نوشتم تا خوانا شود
        limit32(t,i,j)..d(t,i,j)=e=xp(t,i,j)+yp (t,i,j); qqq
        d.l(t,i,j)=yes; qqq
        loop ((t,i,j)$( (ord(i)ord(j)) and (ord(j)>ord(i)) ), qqq
        if ((d.l(t,i,j)(W+L)/6) and (d.l(t,i,j)(W+L)/3) and (d.l(t,i,j)(W+L)/2) and (d.l(t,i,j)2*(W+L)/3) and (d.l(t,i,j)5*(W+L)/6) and (d.l(t,i,j)<=(W+L))),af.l(t,i,j)=0;)); qqq
        از نظر پرانتز رعایت کردم هیچ اروری هم برنامه نمیده، ولی همه ی مقدار af را مقدار شرط اول یعنی ۱ می دهد
        متغیر d که طبق محدودیت خود محاسبه می شود و مشکلی ندارد.
        سپس گفتم برای مقادیر جاری d که مساوی با yes قرار دادم.
        در loop هم گفتم i و j یکی نباشد و j از i بزرگتر باشد (با توجه به مدلم).
        بعد هم if و elseif را درون loop قرار دادم .
        الان مشکل کار کجاست مهندس.
        loop رو به این طریق نمی نویسن ؟ .
        الان ۳ ماهه نتونستم درست کنم ، کسی هم بلد نیست.
        ببخشید وقت شما رو میگیرم.
        متشکرم.

    • ببینین
      شیوه لوپ نویسی درست نیست. تو equation ها لوپ نمینویسن. شما یه کار دیگه بکنید. معمولا بهترین جواب رو مدیه.
      شما بیا مدلت رو درست کن. مثلا برای هر شرط یه محدودیت بنویس. که معمولا نیاز داره که یک یا چند متعغیر یا محدودیت دیگه هم تعریف کنی. سعتو بکن

  26. با عرض سلام و خسته نباشید
    همچنین تشکر میکنم از زحمات و راهنمایی های بسیار خوب شما
    چطور میتونم یک متغیری که مقدار آن وابسته به متغیر دیگری است در گمز تعریف کنم؟
    مثلا یعنی متغیری به نام c(i,j,k) دارم که ضریب تابع هدف است، اگر Y(i,j,k) کمتر مقدار ۲۰ باشد این ضریب مقدار ۱ و اگر بیشتر از ۲۰ باشد c(i,j,k مقدار ۲ میگیرد.
    باتشکر فراوان

    • سلام
      جفتشون متغیر هستن. متغیر C از نوع binary variable و متغیر Y از نوع Positive variable یا integer variable هستن.
      خود به خود این شرط رو نمیشه بر قرار کرد. دو روش وجود داره براش.
      ۱٫ فرمول ریاضیش رو بنویسین و به عنوان یک یا دو محدودیت این رو بنویسین (معمولا نیاز داره یه متغیر دیگه هم براش تعریف کنین)
      ۲٫ از دستور ifthen استفاده کنین برای لحاظ کردن شرط، کامنت های مربوط به این تاپیک رو مطالعه کنین.
      سربلند باشین

      • بسیار ممنون از راهنماییتون
        من چنین محدودیتی را اضافه کردم
        c0(i,j,k2)..c(i,j,k2)=e= ifthen(q(i,j,k2)<=(capacityV(K2)/2),1,2);
        obj1..z1=e=sum((i,j,k2),t(i,j,k2)*c(i,j,k2)*sqrt(sqr(x(i)-a1(j))+sqr(y(i)-a2(j))));
        خط دوم بخشی از تابع هدف مدل است، از برنامه خطایی نمیگیره ولی جواب صفر میده، در حالیکه قبل از افزودن این محدودیت و قرار دادن c در تابع هدف، مسله جواب داشت.(جواب مساله با هیوریستیک چک شده و درست به نظر میرسه.)
        آیا از اینکه تابع هدف پیچیده تر میشه و درجه غیر خطی آن بالا مییره مشکل ایجاد میشه یا اینکه مدلسازی باید تغییر کنه؟
        بسیار ممنون

  27. سلام
    من میخوام از یک مدل ران بگیرم که ٣٩ ورودی داره و باید ۶۵۵٣۶ بار ازش ران گرفته بسه و در هر بار ران برخی از داده ها حدف بشم ک این حذف به صورت دستی امکان پذیر نیت ،ایا دیکستوری تو گمز هست که اینکارو انجام بده؟
    ممنون

    • سلام
      از دستور loop استفاده کنین، بذارین مدل هر بار که ران میشه تعدادی داده رو ذخیره کنه (مثلا تو یه پارامتر بذارتش)
      بعد که loop تموم شد پارامتری که توش داده ها رو دخیره کردین رو display کنیین.
      یادتون باشه که دستور solve رو بذارین تو loop
      یه کوچولو فکر و خلاقیت میخواد
      موفق باشین

  28. با عرض سلام و تشکر از سایت خوبتون
    میخاستم بپرسم چطوری میشه یک مدل با سه تابع هدف رو در گمز اجراش کرد.هر کدوم هم جداگانه باید بررسی بشن میشه از دستور زیر پیروی کرد؟/
    firstobj ..sum((j, i, t), y(j, i, t)*tc`(j, i))+ sum((i, t), inv(i, t)*ic(i))+ sum((i, t), s(i, t)*sc(i))+ sum((i, r, t), l(i, r, t)*(1-d(i, r))) =e= z ;
    secondobj ..sum((k, j, t), x(k, j, t)*tc(k, j)) + sum((j, t), inv(j, t)*ic(j))+ sum((j, t), s(j, t)*sc(j))+ sum((j, r, t), l(j, r, t)*(1-d(j, r))) =e= z’ ;
    thirdobj ..sum((k, j, t), tr(k, j, t)+ghg(k, j, t)+pr(k, j, t)) + sum((j, i, t), tr(j, i, t)+ghg(j, i, t)+pr(j, i, t)) =e= z” ;

    model group perchasing /all/;
    solve group perchasing minimizing z and z’ using mip ;
    solve group perchasing maximazing z” using mip ;

    • سلام
      خیر
      اگه میخواین همزمان و با در نظر گرفتن تاثیری که رو هم دارن مدل رو حل کنین، باید از روش eps-constraint استفاده کنین
      این روش رو یاد بگیرین حتما

  29. سلام ببخشید مزاحمتون میشم.می خواستم اگه امکانش باشه راهنماییم کنید
    ۱)مثلا درصورتی که اندیسی به صورت j=1,2,3 و نشان دهنده شیفت کاری باشه و اندیس ‘j به صورت مجموع شیفت اول و دوم باشه چطور می تونیم اونو معرفی کنیم.
    ۲)درصورتی که اندیس i=1,2,..,n باشه و در محدودیتی برای هر i از یک تا n-2 بخوایم محدودیتو بنویسیم از چه دستوری باید استفاده کنیم.
    ۳)و اینکه آیا نوشتن برنامه ریزی آرمانی در گمز شرایط خاصی داره یا نه فقط لازمه متغیرای کمکیش تعریف شه و مثل مدل عادی نوشته شه.
    باتشکر و سپاس فراوان

    • سلام
      مجموعه jprime رو میشه به صورت زیر تعریف کرد

      Set j/1*3/
      Jprime(j)/1,2/;

      سوال دومتون
      مثلا تو یه محدودیت میتونه شرط به صورت زیر باشه

      Eq(i)$(ord(i) < = card(i).. something(i)=e=x(i);

      سوال سوم. نه مشکلی نیست

      • با سلام
        منظور از سوال دوم این بود که مثلا محدودیتی به شکل زیر چطور در گمز نوشته شه

        C(i,k)+sum((j),x(i+1,j,k))=l=1 {j=3 , bareye har k,i<n-1

        داخل کروشه ی بالا رو توو گمز چطور نمایش بدم؟
        ممنونم از لطفتون و وقتی که برایم صرف کردید

        • سلام
          خواهش میکنم
          فرقی نمیکنه
          همون جواب برا شما صادقه
          C(i,k)+sum((j)$(ord(j) = 3 and ord(i) le card(i)-1),x(i+1,j,k))=l=1
          دستور card در gams تعداد اعضای یک مجموعه رو نشون میده.
          سربلند باشید


  30. ( QZIP('Z1','I1','P1') + QZIP('Z1','I1','P2') + QZIP('Z1','I2','P1') + QZIP('Z1','I2','P2'

    =Y(Z1) * 100000=L

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

    • سلام
      در این گونه مدل ها معمولا یک یا دو محدودیت دیگر هم باید وجود داشته باشند تا همه با هم این مفهوم را به ما بفهمانند.
      مثلا اگر QZIP صفر و یک باشد، شما باید محدودیتی مثل محدودیت زیر بنویسید که وقتی همه QZ ها صفر شوند، Y هم اجباراً صفر شود:

      Q1+Q2+Q3+Q4=g=Y ;

      موفق و پیروز باشید

  31. سلام
    من داخل گمز برنامه نوشتم و برای قسمت معادلاتم خطاهایی مثل ۱۴۳ که یک پسوند فراموش شده یا خطای ۸ که یک پرانتزهنوز لازمه و … داره ولی فکر میکنم توتایپ مشکلی ندارم لطفا راهنمایی کنید

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

  32. با عرض سلام
    خسته نباشید
    من در گمز یه برنامه نوشتم اما با خطاهایی مواجه شدم آیا امکانش هست بگید علت خطای ۱۴۹و ۱۷۰ چه می باشد
    باتشکر

  33. سلام
    واقعا در مورد یک مدلی که چند تابع هدف دارد و حتی با وزن دهی هم مسأله همچنان infeasible است و متغیرها را صفر می دهد باید چکار کرد ؟
    goal.. Z=e=(0.7*(sum(j,(S(j)-mc(j))*p(j))-sum((i,k),pcs(i,k)*Q(i,k))-sum(i,cd(i)*T(i))-sum((l,i),o(i,l)*X(i,l))-sum(i,pc(i)*v(i))-sum((l,i),scr(i,l)*U(i,l))-sum(j,dc(j)*F(j))))-(0.1*(sum((i,k),drs(i,k)*Q(i,k))))+(0.2*(sum((i,k),ws(i,k)*Q(i,k))));

    متشکرم

  34. سلام روز بخیر
    حالت عادی روی سیگما مثلا گفته i
    خب در sets تعریف می کنیم i از ۱ تا مثلا ۵
    زمانی که روی سیگما را گفته مثلا k عضو ، اجتماع I و J
    باید چیکار کنیم ؟
    تشکر

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


  36. Equations EQUK1 ;
    EQUK1(J).. Sum(I,QIJ (I,J))=E=QJ(J);
    Equations equ25 ;
    equ25(J).. QJ("J1")=l=capj("j1")*YJ("J1");
    Equations equ250 ;
    equ250(J).. QJ("J2")=l=capj("j2")*YJ("J2");

    در مدل بالا capj ظرفیت برابر با ۱۰۰۰۰۰۰
    متغیر y صفر و یک(نشان دهنده انتخاب محل)
    متغیرQ مثبت (جریان)
    در این مدل هدف این است که Q برابر صفر شد متغیر Y مربوطه هم صفر شود
    و در صورتیکه Q مثبت باشد Y برابر یک شود
    در حالتی که Q برابر صفر است باز هم Y برابر یک می شود
    محدودیت مختلف هم اضافه کردم متاسفانه همین جواب ایحاد می شود راهتمایی فرمایید با تشکر فراوان

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

        • عدد M در نظر گرفتم این دفعه Q را برابر یک در نظر می گیرد و Y را دوباره با یک در نظر می گیرد .در حالی که هر دو برابر صفر باید باشد.ممنون اگر راهنمایی فرمایید

        • سلام
          محدودیتی که من عرض کردم برای تکمیل مدل شما بود، حال اگر این مشکل به وجود می آید مشکل از سایر محدودیت ها یا داده هاست. بیشتر بررسی کنید.

  37. با سلام وخسته نباشید از زحمتاتون
    ببخشید من یه مدل دارم که دوتا سامیشن داره اولی از j تا K و دومی از t تا Tj میشه لطف کنیند بگین تو گمز چطوری وارد میشه پستای قبلیم خوندم ولی چیزی دس گیرم نشد

  38. با سلام
    من داخل برنامه ام خطای ۱۴۳ خیلی اتفاق افتاده و علتش رو نمیدونم، من داخل یک شبکه از یالها که این یالها در واقعیت لوله ها هستند میخوام مساحت داخلی لوله ها را حساب کنم اون را بانماد Ar(n,np) تعریف کرده ام ولی بعد از حروف Ar خطا میده که یک پسوند فراموش شده (خطای ۱۴۳) لطفا راهنمایی کنید آیا چنین نگارشی داخل گمز اشتباهه؟

  39. سلام
    در مقاله من از حل کننده bonmin برای مساله MINLP استفاه می کنه که طبق بیان مقاله ا ،این حل کننده در یک زمان میتونه از دو تابع هدف استفاده کنه که یکی تابع هموار که مسیر جستجو رو مشخص میکنه و یک تابع که بهترین جواب را پیدا میکنه، میخواستم بدونم که این دو تابع رو چجوری تو گمز نشون بدم؟ و سوال دیگه این که میگه این جستجوی شاخه و کران برای این نرم افزار از دو مقدار sum resolve at root و یا sum resolve at node استفاده میکنه که کاربر یک مقدار مشخص رو براش تعریف میکنه و اون تا این تعداد جستجو رو انجام میده، سوال اینجاست که چطور این عدد مشخص که تعداد جستجوها رو یا از راس ریشه یا از راس خاصی مشخص میکنه رو وارد کنم تو برنامه مقاله تعداد ۵۰ تا جستجو از راس ریشه رو بیان کرده، این راس ریشه رو خودش انتخاب میکنه ،لطفا راهنمایی کنید؟ ممنون

  40. سلام من از یک قسمت از محدودیت باید در چند محدودیت دیگر استفاده می کنم.چطور می تونم اون قسمت مشترک رو نامگذاری کنم و تغییر نام جدید در سایر محدودیت ها استفاده کنم. به طور مثال فرض کنیم :
    X1+X2+X3+X4+X5+X6+X7+X8+X9+X10=K
    باشد . و در محدودیت های دیر قرار دهیم.مثلا
    X11+K=OBJECTIVE
    در ضمن در نامگذاری هم متغیر هست و هم پارامتر و هم عدد ثابت

  41. با سلام
    برای محدودیت زیر

    Ilevel2(i,t)$((ord(i)2)).. IL(i,t) =e= IL(i-1,t-1)-z(i-1,t-1)+ y(i,t);

    گمز همش ارورر ۲ را نشان می دهد. محدوده ی متغیر i از یک تا پنج بوده و ارورر برای ان نمایش داده می شود؟چرا؟
    با تشکر

  42. سلام جناب محمودی یه دنیا ممنون از زحماتتون میشه یه لطفی کنین بگین حالته زیر چطوری تو گمز پیاده میشه دوتا سامیشن داریم که یکیش از s شروع میشه دومی هم از j=t-s+1 تا t میباشد و( x(sj کوچکتر از یک

  43. سلام
    ببخشید من می خواستم ببینم محدودیت زیر رو چجوری میشه در گمز نوشت.مشکل من در نوشتن اندیس r و r+1 و کنترل هردو در یک معادله است.
    ممنون از سایت خوبتون

    sum(j,Cij(r+1))=sum(j,Cijr) + somthing که کنترل حلقه به ازای i=1….m و r=1….n-1 است . , j=1….n

    • سلام
      متوجه نشدم. علامت مجموعه چیه. تعریف مجموعه ها در بخش مجموعه ها مشاهده میشه. به اونجا میتونین مراجعه کنین. علامت نمیدونم منظورتون چیه

  44. سلام روز بخیر، مدل برنامه من شبکه ها هستند که من مجموعه ای از راس ها و یالها را براش تعریف کردم مثلا تعداد راس ۷ و یالها هم چون گراف کامل نبود بایستی به صورت دستی وارد می شد، حالا یک مجموعه ی( δ+(n دیگه دارم که این مجموعه یالهایی رو نمایش میده که از راس n خارج میشه یعنی راس n انتهای این یال قرار دارد برای نمایش آن باید اون رو به صورت زیر مجموعه ای از یالها تعریف کنم چون این خودش یالها رو می خواد و از طرفی شکل مجموعه رو نمی دونم چجوری بیان کنم که گمز اون رو به صورت زیر مجموعه یالها در نظر بگیره ولی نماد داخلش همون نماد مجموعه راسها بمونه ، ممنون میشم راهنمایی کنید مثلا فرض کنید من بخوام یالهایی رو نشون بدم که راس انتهایی n هست اون رو چجوری بیان کنم؟

    • سلام
      شما باید یه مجموعه تعریف کنین به نام مجموعه راس ها
      یه مجموعه ها به نام مجموعه یالها که برای هر یال یک عدد داشته باشه
      یه مجموعه هم ترکیب این دو تاست که نشون میده که هر راس چه یالهایی رو داره
      مثال:

      Set I nodes /i1,i2,i3/
      V edges /v1,v2/
      E(i,v) /i1.v1,i1.v2,i2.v1,i3.v3/

      که این یه شبکه رو نشون میده که گره دوم و سوم به هم وصل شدن. بعد تو معادلاتتون میتونین از این موضوع با ئستورات شرطی استفاده کنین، مثلا بگین که به شرط E این محدودیت رو اعمال کن
      خواهش میکنم و موفق باشید

  45. سلام مرسی از کمکتون، میشه درباره متغیرهای sos1 هم توضیح بدید، داخل برنامه من برای هر لوله یک مجموعه قطر وجود داردکه من باید به برنامه بگم که از بین این قطرها باید دنبال قطری با کمترین هزینه باشه که محدودیت مسئله هم برقرار باشه، این قطرها افزایشی و هزینه هم هرچه قطر بزرگتر باشه افزایش پیدا میکنه، حالا این قطرها رو چجوری مدل کنم؟ من از table استفاده کردم، اول داخل مجموعه ها تعداد قطرهاراتعریف کردم، بعد داخل table هزینه وقطرها را تعریف کردم، اما داخل مقاله که از زبان مدلسازی AMPL استفاده میکنه، گفته توسط متغیرهای SOS1، متغیر X(e,r) را تعریف میکنیم که e تعداد یالهاو r تعداد قطرها است بعد داخل AMPL می توان اینجوری مدل کرد که :
    X(e,r).sosno=e و X(e,r).ref=D(e,r) حالا من این X(e,r) رو چجوری تو گمز با این دو محدودیت که نشون بده این متغیر به کدوم یال و به کدوم قطر برمی گرده نشون بدم؟

  46. سلام مرسی از کمکتون ، میشه درباره متغیرهای sos1 نیز توضیح بدید؟ در مدل من برای هر لوله یک مجموعه قطر تعریف میکنه که خود مقاله در زبان مدلسازی AMPL متغیرX(e,r) رو تعریف میکنه کهe لوله و r تعداد قطرهای است. این متغیر مقدار یک است اگر قطر D(e,r) برای لوله e انتخاب شده باشه سپس داخل مدل از دو نوع sosno. و ref. استفاده میکنه که بیان کنه که X(e,r).sosno=e و X(e,r).ref=D(e,r) که بیان میکنه این متغیر به کدوم یال برمی گرده و ..
    حالا سوال اینه که این رو چجوری داخل گمز مدل کنم؟

  47. سلام وقت بخیر ممنون از سایته خوبتون میشه یه کمکی بکنین برا حالت زیر تو گمز چیکار باید بکنم if 2*X(i)+3*X(i+1)=3 then SC(i)=1 otherwise SC(i)=0

  48. سلام مرسی از کمکتون، میشه درباره متغیرهای sos1 بیشتر توضیح دهید در مدل من برای هر لوله یک مجموعه قطر تجاری وجود دارد که هدف پیدا کردن قطری با کمترین هزینه است که داخل محدودیت های مسئله صدق کند، داخل مقاله با زبان مدلساز AMPL استفاده کرده یک متغیر به صورت x(e,r) تعریف کرده که r یکی از اعضای قطرهای موجود است، بعد اون گفته X(e,r)=1 اگر که برای لوله e قطر r انتخاب بشه، بعد دو تا نماد به صورت sosno. و ref. تعریف کرده که به این صورت استفاده میشه :X(e,r).sosno=e و X(e,r).ref=D(e,r) که D(e,r) قطر r برای لوله e است آیا داخل نرم افزار گمز هم چنین امکانی برای تعریف این محدودیت ها وجود دارد یا اینکه چجوری این رو مدل کنم؟

  49. سلام خسته نباشیدو ممنون از سایت خوب تون و راهنمایی های ارزشمنتون.
    من میخام تو قسمت تابع هدف یه سیگمای۵بعدی رو وارد کنم میشه راهنمایی کنید چجوری بنویسم؟یا کدشو برام بذارید؟ممنونم
    مینیمم زذ مساوی با یه سیگمای ۵ بعدی که به ترتیب سیگما ها روی l,m,n,i,j هستن و جلوی سیگماها Sijlmn ضربدر Xijlmn هست و در ادامه به علاوه ی ۲تاسیگما رویl,mکه جلوی سیگماها Plm ضربدر Ylm هست.
    لازم به ذکره که Xijlmn و Ylm متغیر ها و اون PوS ضرایب تابع هدفمون هستن و تا اینجا تمام قسمت های قبلی اعم از مجموعه هاوپارامترها و متغیر هاو….رو در گمز به درستی تعریف کردم فقط مونده تعریف تابع هدف و محدودیت ها که اگر شما این کمک رو بهم بکنبد یه دنیا ممنونتونم….

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

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

    • سلام
      شما محبورین مساوی رو هم بزنین. چون گمز بر اساس مجموعه های بسته عمل میکنه و باید مساوی هم داشته باشه.
      شما می تونین دو تا محدودیتش کنین. بگین که مثلا =g= و یه بار هم بزنین =n= که n یعنی مساوی نیستن.
      م.فق باشین

  50. سلام ، برنامه من هنگام کامپایل کردن خطا نداره اما جوابم هم نمیده و می نویسه که ۸ خطا داده ای داره ،مشکل از چی میتونه باشه؟
    برای استفاده از bonmin که با دو تابع هدف یک زمان می تونه کار کنه، چجوری تابع هدف هارو بنویسم به صورت جداگانه مینیمم کنم یا روش دیگه ای داره؟
    برای معرفی متغیرهای چند بعدی باید چه کار کرد؟ مثلا من داخل برنامه ام۱۴ تاقطر دارم که هر کدوم از این قطرها دارای یک هزینه ای هستند مثلا قطر(d(1 هزینه( c(1 رو داره و به همین ترتیب ،چجوری میتونم این رو مدل کنم ؟
    بعد داخل همین برنامه انتخاب قطر با کمترین هزینه ملاکه آیا فقط باید از متغیرهای باینری استفاده کرد یا به عبارت دیگر روش دیگه ای برای این که همین هزینه رو که جزء داده هاست با یکم تغییر به عنوان متغیر تعریف کنیم وجود داره؟ ممنون میشم اگه راهنمایی کنید.

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

  51. عرض سلام و تشکر از مطالب خوبتون
    من میخوام نتایج مدلم بصورت جدول نشان داده شود درحالیکه متغیرم چند بعدی است
    یعنی
    x(i.n.j.k.t

  52. سلام آقای محمودی
    تشکر مجدد از سایت بینظیرتون و پاسخ دهی سریعتون
    من یه مدل LRP رو توی گمز کد کردم که قسمت مسیریابیش کار نمیکنه. به همین دلیل همه محدودیتهای دیگه رو حذف کردم و مدل رو به یک مدل VRP پایه تبدیل کردم. اما وقتی جواب میده یک گره رو با دو یا چند خودرو ویزیت میکنه. حتی محدودیتهای حذف زیرتور هم گذاشتم.
    نمیدونم باید چیکار کنم. آیا VRP رو میشه توی گمز حل کرد یا معمولا واسه چنین مسائلی گمز خوب جواب نمیده؟
    خیلی ممنون

  53. سلام
    تشکر مجدد از سایت خوبتون و پاسخ دهی سریعتون
    من یه مدل LRP رو توی گمز کد کردم که قسمت مسیریابیش کار نمیکنه. به همین دلیل همه محدودیتهای دیگه رو حذف کردم و مدل رو به یک مدل VRP پایه تبدیل کردم. اما وقتی جواب میده یک گره رو با دو یا چند خودرو ویزیت میکنه. حتی محدودیتهای حذف زیرتور هم گذاشتم.
    نمیدونم باید چیکار کنم. آیا VRP رو میشه توی گمز حل کرد یا معمولا واسه چنین مسائلی گمز خوب جواب نمیده؟
    خیلی ممنون

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

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

      • *
        آقای محمودی بعد از کلی سرو کله زدن به یه چیز عجیب رسیدم: وقتی متغیر صفر و یک رو دو اندیسه تعریف میکنم جواب درست میده!!! وقتی اندیس مربوط به خودرو رو بهش اضافه میکنم جوابهای بیربط میده!!!!

        • سلام
          این در مرحله اول به ذهنتون عجیب میاد. ولی باید ریزتر بشین. دقت رو بیشتر کنین. همچین مسئله ای بی معنی نیست

  54. سلام وقت بخیر و تشکر بابته سایته بسیار عالیتون من یه محدودیت دارم که سامیشنه xij برابر صفر هست به ازای همه jها فقط رو سامیشنش نوشته که i نباید زیر مجموعه sj باشد sj هم پارامتره اگه میشه یه لطفی کنین بگین چطوری میتونم اینو تو گمز وارد کنم ؟؟؟

  55. با عرض سلام وتشکر از سایت خوبتون
    من مدل MIP یه مقاله رو به کمک مطالب سایت شما کد نویسی کردم اما با این که نتیجه Fixed MIP status(1): optimal را نشون میده اما جواب بهینه تقریبا نصف جواب بهینه مقاله هستش تو بررسی جواب متغیرها متوجه شدم که زمان شروع فعالیت بعدی که باید بزرگتر از زمان اتمام فعالیت قبلی باشه برابر صفر! .وقتی هم برای زمان شروع فعالیت بعدی حد پایین تعیین میکنم برابر با اون مقدار میشه ، خلاصه هر ایده ای که به ذهنم اومده انجام دادم و به نتیجه نرسیدم. لطفا در صورت امکان راهنمایی کنید

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

      میدونم جمله سازیم بد بود. چون الان بیدار شدم هر چی بیاد تو ذهنم مینویسم :)

        • سلام
          خواهش میکنم.
          شما وقتی یه مجموعه به نام i دارین که از یک تا پنج رو شامل میشه، گمز وقتی متغییر x(i) رو استفاده میکنه، اول میاد x(1) رو بهش مقدار میده، بعدش ۲ تا آخر. ممکنه مشکل شما این باشه که هر وقت t(1) عددی میگیره و بعدش t(2) این دومی بره مقدار بگیره و اولی رو هم مجبور کنه همون مقدار رو بگیره.
          بهترین حالت واسه شما اینه که برین تو کد و به زبان خود کد فکر کنین، ببینین چرا این اتفاق میفته. محدودیت و کد رو اصلاح کنین مشکل هم از بین میره
          حرفام کلیه

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

    infeasible soloution. reduced gradient less than tolerance

    با تشکر از شما

  57. سلام
    ممنون از سایت پرمحتوا و مفید جنابعالی
    ببخشید من یک محدودیت به صورت زیر در گمز وارد نموده ام. به من خطای ۱۴۵، ۱۴۹ و ۱۵۴ می دهد. متوجه ایراد کار نمیشم

    c22(j,k)$(ord(j)<6) .. LoadS((j,l,k)$ ((ord(l)<6)and(ord(j)ord(l)))-LoadS((i,j,k)$((ord(i)<6)and (ord(i)ord(j)))=e=sum((r,p)$ (ord(r)>0 and ord(r)<6),d(p,r)*landa(p)*g(j,r,p,k));

  58. سلام. من دستور زیر رو می نویسم خطای ۱۹۸ رو میده

    PMAXLIM(K,G,T)$(ord(T) GT 0)..p(K,G,T) =l= GDATA (G,'PMAX') * v(K,G,T

    میخوام شرط رو به جز برای T=0 اعمال کنه

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

      Example 1:
      SETS
      i/ 0, 2, 4 /,
      j/ 1, 3, 5 /,
      T/ 0 * 5 /;

      Example 2:
      SETS
      T/ 0 * 5 /,
      i/ 0, 2, 4 /,
      j/ 1, 3, 5 /;

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

      سوالتون رو تو بخش ۸ (خطاهای گمز) گذاشتم که همه ببینن
      مرسی از شما
      موفق باشین

  59. سلام با سپاس از سایت پر محتوا و خوبتون
    من یه مشکل داشتم . می خوام یه شرط توی گمز بزارم که اگه پارامتر SIM(k,m) بزرگتر ازمتغیر IM(k,m,t) بود ، دراین صورت DDM(k,m,t) برابر با اختلاف اون دوتا بشه یعنی
    SIM(k,m)-IM(k,m,t)=DDM(k,m,t) و در غیر این صورت DDM(k,m,t)=0 بشه
    نمیدونم چطور باید واردش کنم. همینطور نمیدونم که این شرط رو کجای کد نویسی قرار بدم؟ممنون میشم راهنمایی کنید.

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

  60. سلام
    وقتتون بخیر
    من توی برنامم دوتا از متغیرهام که دارای هم کران بالا و هم کران پایین هستن،وقتی این کران ها رو تعریفشون میکنم مسئله م ران میشه اما قسمت سالور رو نشون نمیده
    اما اگر این ۴ کران تعریفی رو بردارم قسمت سالور هم میاد!
    ممنون میشم اگر بفرمایید مشکل از کجا هست؟

        • مدلتون حل نشده کامل، باید ببینین دلیلش چیه. ببینین مشکل از مدله، یا لایسنس و یا سالور
          پیامی که گمز تو پنجره process window بهتون میده راهنماتونه

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

      • مشکلم حل شد
        چون باند بالا کمتر از پایین بود

        یک سوال داشتم
        وقتی میگوییم
        p>=100
        p<=200

        برای کران بالا و پایین اینگونه باید نوشت؟

        p.lo=100
        p.up=200

  61. سلام.
    اگه بخوام یکی از اندیس هام که زمان هست رو sum ببندم طوری که با شمارنده s باشه از یک تا t به ازای هر t.این رو چطور کد بزنم؟
    مرسی

  62. سلام

    sets
    .
    .
    .

    binary variables y;

    free variable z;
    .
    .

    solve test using MIP minimizing z ;

    این کد چه مشکلی داره؟؟ دیوونم کرد
    ممنون میشم اگه جواب بدین

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

  63. errorش میگه پارامترا بدون داده هستن. من که پارامترامو با استفاده از uniform پر کردم. چرا این error وو میده؟
    ممنون از راهنماییتون

    • سلام
      من رانش کردم همچین اروری نمیده. وحید عزیز مقداری تو کد نویسی دقت کنین. من میگم یه بار دیگه بشین دوباره بنویس. چون خیلی سهل انگاری کردی توش. ارور از این نیست. ارور از جاهای دیگس. از اولین اروری که بهت میده شروع کن. sum(k, چرا نوشتی؟ یا آخر اون سامیشن اولی، اون دوتا ستاره چیه؟

  64. سلام.
    چطوری باید
    رادیکال (سیگما(k)(سیگما(i) سیکما(j)سیگما(l)سیگما(m)(ی عبارتی اینجاست خیلی مهم نیس چی هست)^۲)
    توی گمز نوشت؟

  65. با سلام.میخواستم ببینم این تابع هدف رو چجوری میشه تو گمز نوشت

    متغیر=x و td,te =پارامتر
    شرطش اینه: j|td(j,k)>=te(k,t)————1
    z=sum((j,k,t),(td(j,k)-te(k,t))*x(j,k,t))————–2
    ممنون میشم جواب بدین.

  66. با سلام.میخواستم ببینم absolute gap چیه و مقدارش باید چقد باشه؟
    یرای مدل من مقدارش ۵۵۰۰۳۹٫۲۶۹ اومده.و relative gap مقدارش ۰٫۰۰۰۸۷۷اومده.فرق این دوتا چیه؟و مقدار استاندار این دوتا باید چقد باشه؟

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

      • ممنون از پاسخ سریعتون.
        خب این گپ باید وجود داشته باشه یا برای مساله مشکل ایجاد میکنه؟
        دستور option optcr=0; رو برای این منظور استفاده میکنن؟که گپ رو صفر کنه و جواب بهینه رو به ما بده؟

        • خواهش میکنم. شما جز موارد استثنایی نیازی به این ندارین. بله از این دستور برای رسیدن به جواب دقیقه

  67. با سلام
    میخواستم ببینم تابع هدف زیر رو که رو اندیس j شرط زیر برقراره باید چطور نوشت؟

    d(t)={j|td(j,k)>=te(k,t)----1
    z=sum((jCd(t),k,t),(td(j,k)-te(k,t)*x(j,k,t))--------2

    jCd(t)——3 منظورم از این یعنی j عضو مجموعه d(t) باشه
    td,te پارامترن و x متغیره

    ممنون میشم جواب بدید.

    • خودم از دستور زیر استفاده کردم ولی فک نکنم درست باشه.

      z2=e=sum((j,k,t)$(card(td) >=card(te)),(Td(j,k)-Te(k,t))*X(j,k,t))——–1

      لطفا اگه کسی میدونه کمک کنه.

      • j باید عضو مجموعه d(t) باشه.مجموعه d(t) هم که شامل jهایی هست که باید
        td(j,k)>=te(k,t) باشه.
        td(j,k) زمان ارسال از j به k هست و te(k,t) زمان مورد انتظار مشتری kام در دوره t هست.

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

          sum(j$(ord(j) = A(j)), Baghiyeh) ;

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

          sum(j$(td(j,k)>=te(k,t)), Baghiyeh);

        • سلام
          این ارور به یه جای دیگه مربوط میشه. تعریفتون از j و همچنین اون چیزایی که گفتم رو اینجا بذارین که ببینم

        • ممنون از پیگیریتون.

          ۱- j index of candidate locations for distribution centers j = 1, . . . , J
          2- k index of fixed locations of customer zones k = 1, . . . , K
          3- t index of time periods t = 1, . . . , T

          4- Parameters:

          5- td(j,k) delivery time from distribution center j to customer zone k
          6- te(k,t) expected delivery time of customer k in period t

          7- D(t) = { j |td(j,k) ≥ te(k,t) } in period t

          8- Variables:

          9- u(j,k,t) quantity of products shipped from distribution center j to customerzone k at period t

          10- Min Z=sum((t,k,j∈D(t),(td(j,k) -te(k,t))*u(j,k,t));

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

        • با کمک چیزایی که تو سایت خوبتون بود تونستم به صورت زیر بنویسم:

          parameter d(j,k,t); -1

          d(j,k,t) $ (ord(j)>= ord(k))=Yes; -2

          equation1 .. hadaf=e=sum((j,k,t)$ d(j,k,t),(td(j,k)-te(k,t))*u(j,k,t)); -3
          البته بدون تعاریف بالا به صورت مستقیم هم میشه به صورت پایین نوشته:

          equation1 .. hadaf=e=sum((j,k,t)$ (ord(j)>= ord(k)),(td(j,k)-te(k,t))*u(j,k,t)); -4

          ممنون از راهنمایتون.

        • شرط که همونه ولی وقتی می نویسیم
          (ord(td(j,k)>= ord(te(k,t))=Yes; -2
          خطا میده و میگه td و te جزو اندیس نیستن.چون تو مجموعه D(t) شرط روی jهاست بنابراین من اومدم فقط برای اندیس j شرط گذاشتم یعنی اگه اندیس j از اندیس k بزرگتر باشه اون تابع هدف رو محاسبه کنه.البته نمیدونم درست هست این کاری که انجام دادم یا نه؟

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

  68. با سلام
    میخواستم ببینم تابع هدف زیر رو که رو اندیس j شرط زیر برقراره باید چطور نوشت.

    d(t)={j|td(j,k)>=te(k,t)—-1
    z=sum((jCd(t),k,t),(td(j,k)-te(k,t)*x(j,k,t))——–2

    jCd(t)——3 منظورم از این یعنی j عضو مجموعه d(t) باشه

  69. سلام .مرسی از سایت خوبتون.به نظر شما مشکل این قسمت چیه؟

    eq8 (m,t)$(ord(m)and ord((t)>1)..-1*q(t)=g=x(m,t-1)-u(m,t-1)+v(m,t-1)
    eq9 (m,t)$(ord(m)and ord((t)>1)..x(m,t-1)-u(m,t-1)+v(m,t-1)=l=q(t)

    ارور شماره ۲ میده

    • سلام
      خواهش میکنم. دقت کنین که دستورای شرطی رو درست به کار ببرید. دستور شرطی شما باید به شکل زیر باشه:

      $(ord(m) > 1 and ord(t) > 1 ) ..

      حالا اگه رو m شرطی ندارین و مشکلی نداره مساوی یک هم باشه، قسمت مربوط بهش رو حذف کنین. مورد نیاز نیست چون

      $(ord(t) > 1)..

      سربلند باشید

  70. سلام
    یه سوال داشتم اگه میشه کمک کنید

    اگه تو یه محدودیتی داشته باشیم
    sum(j,X(i,j,t))>=si(i,t)*ds(i,t-1) for each i,t
    که ds و si دو تا پارامترند و x متغییره , ds(i,0)=0. حالا میخام ببینم اینو چطوری باید نوشت؟
    چون ds(i,t) پارامتره نمیشه از ds.fx(i,”0″) =0 استفاده کرد پس باید چجوری اینو بنویسیم؟

    • سلام
      اولا شما باید اندیس t رو از صفر تعریف کنین، بعدشم وقتی به پارامتر ds مقدار میدین مقدارش رو وقتی t برابر صفره، مساوی صفر بگیرین

        • خب شما یا باید t رو از صفر بگیرید، یا با یه شرط به محدودیت بفهمونین که وقتی t از دو بزرگتره اینو اعمال کن، و یا اینکه یه t1 تعریف کنین که صفر هم شامل میشه و t زیر مجموعه اون تعریف بشه. بعد تو تعریف ds هم دقت کنین.

          set t1/0,1,2,3,4/
          t(t1)/1*4/
          ;
          variable ds(t1)
          ;

          کلیاتش همینه. بسته به مدلتون تغیر بدین

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

  71. سلام. من تابع هدف
    زد مساوی سیکماj پرانتز باز teta(j) منهای سیکماr( یوr*ایگرگjr) تقسیم بر سیکماi ( ویi * ایکس ji) پرانتز اول بسته به توان ۲
    رو به صورت :
    Z-SUM(J,(TET(J)-SUM(r,U(r)*YY(J,r))/(0.000001+SUM(I,V(I)*XX(J,I))))**2)=e=0;
    رو تو مسئله ام نوشتم .همه داده ها درست ثبت شده ولی جواب اشتباه محاسبه میشه. اون عدد کوچک ۰٫۰۰۰۰۰۱ رو هم اگه بردارم خطای تقسیم بر صفر میده.لطفا راهنمایی کنید.
    در ضمن توان کسری و یا ریشه بالاتر از دو برای عبارت ها چطور نوشته میشه
    مثلا ریشه پنجم یک عبارت و یا یک عبارت به توان یک پنجم.
    ممنون

    • سلام
      اینکه جواب صحیح نمیده رو از رو چی میگین. و مشکل جواب چیه
      توان کسری و ریشه خودشون به نوعی توان هستن. به جای:

      **۲

      بنویسین

      **(۱/۵)

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

  72. با عرض سلام و خسته نباشید. من یک مدل دارم با دو تابع هدف.(یکی ماکس و دیگری مین) .که یکی از این توابع هدف رو به محدودیت تبدیل کردم و با گمز مدلمو حلش کردم. حالا استادم ازم خواسته با روشgoal programming هم حل کنم.آیا با گمز میشه حلش کرد؟؟ممنون

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

  73. ممنون از پاسختون. من متد goal رو خوندم.میخواستم اگه امکانش هست یک مثال ساده از نحوه بکارگیری متغیرهای انحراف از آرمان در گمز برام بنویسید. چجوری باید تعریف شن. چجوری توی تابع هدف بیان.مثال فارسی ندیدم.مثال های سایت های خارجی رو خوندم ولی چون پیچیده بود و ابعاد مساله بزرگ متوجه نشدم.

  74. با سلام
    می خواستم یه محدودیت تعریف کنم که اندیس متغیرها تو دو تا سامیشن عوض میشه، دو مجموعه i وj داریم که اولی از ۱ تا ۵ و دومی از ۱ تا ۱۰ و یک مجموعه اجتماع این دو مجموعه رو داریم مثلا با نامu. حالا تو محدودیت ما سامیشن اول رو متغیر x(i,g) که اندیس g عضو مجموعه j هست و در سامیشن بعدی متغیر x(g,j) داریم که اندیس g عضو مجموعه u(اجتماع iوj). این محدودیت مربوط به پیوستگی یک مسیر می باشد. ممنون میشم اگه تو دستورش کمکم کنید.

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

      set i/i1*i5/
      j/j1*j10/
      u/set.i,set.j/
      ;
      alias (i,ii),(j,jj),(u,uu);

      بعد تو اون دو تا سامیشن اولی رو رو jj بزنین و دومی رو رو uu . فقط دقت کنید که x رو چحوری تعریف میکنین. x(i,*) یه راهکار میتونه باشه. بخش اجتماع مجموعه ها رو هم ببینید بد نیست.

      • سلام
        ببخشید من بعد از همون محدودیتی بود که خدمتتون عرض کردم یه محدودیت بالانس دارم به این صورت که سامیشن اولم روی x(i,j) هستش که این بار j عضو u (اجتماع iوj) منهای سامیشن دوم که روی x(j,i) هستش که j عضو u هست. چون ترتیب اندیس ها واسه متغیر xعوض میشه همنطوری که گفتید ارور میده منم به این صورت تعریفش کردم: x(u,h) و alis(h,j) که تو همون محدودیت اول مشکلی پیش نیاد.الان مشکلی که دارم اینه محدودیت بالانسمو چطور بنویسم ممنون میشم راهنمایی بفرمایید.

        • خواهش میکنم.
          ببینید شما بهتره x رو به صورت x(*,*) تعریف کنید. این مشکل براتون پیش نمیاد

  75. سلام خدمت شما
    من کدی رو وارد گمز کردم، جوابی ک از تابع هدف بدست میارم خیلی کمه
    چون بصورت چشمی هم نیگاه میکنم مشخصه که جواب ی عدد خیلی بزرگی بدست میاد
    معادله حل شده گمز رو هم ک نگاه میکنم مسیرش درسته و نمیدونم چرا جواب خیلی کم بدست میاد؛ اینم بگم ک معادله minlp هست و تابع هدف max , البته معادله چن هدفه است و اینم تابع هدف اوله

    obj1.. z1 - 276.13352258*P(1,1,1) - 289.6005018*P(1,1,2)

    - 295.70315505*P(1,1,3) - 277.67429394*P(1,1,4) - 276.13352258*P(1,2,1)

    - 289.6005018*P(1,2,2) - 295.70315505*P(1,2,3) - 277.67429394*P(1,2,4)

    - 276.13352258*P(1,3,1) - 289.6005018*P(1,3,2) - 295.70315505*P(1,3,3)

    - 277.67429394*P(1,3,4) - 276.13352258*P(1,4,1) - 289.6005018*P(1,4,2)

    - 295.70315505*P(1,4,3) - 277.67429394*P(1,4,4) - 280.54590203*P(2,1,1)

    - 308.32661208*P(2,1,2) - 268.7891492*P(2,1,3) - 283.48550066*P(2,1,4)

    اینم قسمتایی از معادله ای ک گمز حل کرده، تا آخرش همینه، متغیر p هم عدد مثبت و بزرگی
    اگه راهنمایی کنید ی دنیا ممنون میشم

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

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

  76. سلام وقت بخیر خسته نباشید
    یه سوال در مورد محدودیتی که توش min داره داشتم
    x دارای ۲ اندیس و  y دارای ۱ اندیس و هر دو متغیر هستند

    limit1(t,i)..y(t)=e=min(x(t,i))

    به این صورت مینویسم ارور میده
    متشکرم

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

      y(t)=l=x(t,i);

  77. با سلام.
    من برنامه ریزی آرمانی goal programming رو توی گمز نوشتم.(دو تابع هدف دارم) با اینکه متغیرهای انحراف از آرمان رو positive تعریف کردم. ولی مقدار تابع هدف صفر بدست میاد؟ میدونین دلیلش چیه. آخه تابع هدف min انحراف از آرمان هاست و حتما انحراف از آرمان ها را داریم.پس چرا صفر میشه؟؟

  78. سلام … ممنون از این سایت… وقتی دیدمش آرامش گرفتم که میشه جواب سوالمو اینجا بگیرم
    من یک مدل خطی برنامه ریزی دارم که ۹۵ محصول، ۴۷ مشتری، ۶ دوره زمانی دارم …. تعداد محدودیت ها در حدود ۵۰۰۰۰ هست… آیا نرم افزار gams جواب میده؟
    ممنون میشم راهنمایی کنید

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

      • جدی ؟ خیلی عالیه…. اما من توی یک سایت دیگه دیدم توی شرایط استفاده از گمز گفته بودن که بیش از ۳۰۰ محدودیت و متغیر امکان پذیر نیست

  79. سلام
    ۲ تا سوال داشتم از خدمتتون،اول اینکه: در مدلی ک در حال توسعه دادن هستم، محدودیتی هست که یک طرفش پارامتری رو به عنوان یک عدد بزرگ نوشته(داخل مدل های دیگر هم دیدم)، اصلا دلیل این محدودیت و منطقش چیه؟؟(البته این سوالم شاید خیلی ب گمز ربط نداشته باشه)
    R(j,t)=l=M*F(j,t( اینجا، M عدد بزرگیه و F باینری , R هم متغیر معمولی

    سوال دومم اینه که
    حالا این M رو چطور به عنوان یک عدد بزرگ باید وارد گمز کرد؟؟؟

    پیشاپیش ممنون از جوابتون

  80. سلام مرسی از وب سایت خوبتون. یک متغیر دارم وابسته به مجموعه i مثل متغیر x(i) حال میخوام بنویسیم cos(x(i)) برای وقتی که مثلا i=2 است توجه کنید که بنا به دلایلی نمیخوام به این صورت بنویسم cos(x(‘۲’)) . آیا روشی هست ؟

      • دقیقا مشکل اینجاست که این تابع کسینوس بخشی از یک محدودیت بزرگ است و ord رو نباید برای محدودیت بگزارم مشکل اینجاست که قبل از تابع کسینوس میزارم خطا میدم بعدش میزارم باز هم خطا میده داخل پرانتز بعد از متغیر ایکس میزارم خطا میده و الی آخر …
        به هر حال ممنون از پاسخ

  81. سلام. من با پیام EXIT – the superbasics limit is too small مواجه می شم در انتهای حل برنامه. هرچی سرچ هم کردم به جایی نرسیدم. تا الان فقط میدونم که مشکل از تعداد متغیرهای غیرخطی زیاده. ولی نمی دونم چطور می شه حد superbasics limit رو تغییر داد. می تونید لطفا کمک کنید؟

  82. سلام
    در تعریف محدودیت های مدل یک مسئله MIP در یکی از محدودیت ها برای تعریف شرط اینکه به ازای متغیر باینری Y که برابر ۱ می باشد محدودیت برقرار است را بصورت زیر تعریف کردم اما خطا میده
    cont19(i,j)$(ord(Y(i,j)=1)).. sum(b,W(i,j,b))=e=1;
    لطفا در صورت ممکن راهنمایی کنید فکر کنم بکار بردن ord برای متغیر اشتباه می باشد.

    • سلام
      اینکه ord به کار بردین که بله غلطه. Ord فقط واسه اندیس هاست.
      شما یا از دستور ifthen که تو کامنتای همین تاپیک زیاد دیده میشه استفاده کنید، یا اینکه مدلسازی رو مقداری تغییر بدید و این شرط رو به یکی دو تا محدودیت دیگه تبدیل کنید.

      • ممنون از راهنماییتون
        محدودیت به صورت زیر نوشتم
        cont19(i,j).. sum(b,W(i,j,b))=e=ifthen(Y(i,j)=1,1,0);
        این بار خطاهای ۵۷ و ۲۵۶ رو میده
        اینطور تعریف کردن اشتباه در ضمن روش حل مسئله Mip هستش

        • بله با این دستور مدلتون دیگه خطی نیست بلکه minlp هست و باید با sbb solver حلش کنین، اگه این کارو نکنین باید مدل تویسی کنین مقداری

  83. با سلام.
    من در مدلم محدودیت توالی دارم که زمانی که دو بچ ‘i,i بخواهند در یک واحد عملیاتی ساخته شوند بایستی این محدودیت برقرار باشه.
    Si’ ≥ Sp+Lp −M(1 –Uip)-M(1 – Xii’ ) −M(2 − Y ij− Y i’j)
    ∀i, i’ ∈ I : ord(i) < ord(i’) , j ∈ Ji∩ Ji’ ,p∈Pi
    میشه راهنمایی کنید که چه جوری باید این شرط j که مربوط به اشتراک دو مجموعه است رو بنویسم. در واقع این اشتراک نشان می دهد در صورتی که هر دو بچ i, i’ در یک واحد عملیاتی ساخته شوند این محدودیت برقرار می باشد.فکر می کنم که اینطوری باید شروع کنم. درسته؟ میشه شما درستش رو بنویسید یا تکمیلش کنید؟
    seqconst1(i,ii,j,p)..$(ord(i)<ord(ii) and

    • سلام
      متوجه نشدم که ji دقیقا منظور چیه، فقط اینو بدونین که از قبل باید یه مجموعه براش تعریف کنین و تو محدودیت از اون استفاده کنین

  84. ممنون از راهنماییتون
    محدودیت به صورت زیر نوشتم
    cont19(i,j).. sum(b,W(i,j,b))=e=ifthen(Y(i,j)=1,1,0);
    این بار خطاهای ۵۷ و ۲۵۶ رو میده
    اینطور تعریف کردن اشتباه در ضمن روش حل مسئله Mip هستش

  85. سلام
    برای نوشتن اندیس های t-1 در محددیت ها از جه دستوری باید استفاده کرد؟
    به عنوان مثال:
    sb6(p,t)$(Ord(t) gt 1) .. Y(p,t) =e= Y(p,(t-1)) + sum(v, Xi(v,p,t)) – sum(s, Xo(s,p,t))

    • سلام
      برای مثال اگه متغیر (y(p,t تعریف شده است ، توی محدودیت ها می تونین بنویسین (۱-y(p,t و گمز ارور نمی گیرد. فقط حواستان باید باشد که در تعریف set ها t را از چه عددی شروع کردین که اگر نیاز بود شرط بزرگتر بزارین. مثالی که زدین درست است اما دیگر نیازی نیست t-1 را توی پرانتز بنویسین.

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

    • سلام
      مدلتون ممکن است نشدنی باشه که چنین جواب هایی را می دهد و ایراد از داده هاتون باشد و یا شاید ایراد از محدودیت ها باشد. نیاز به بررسی و آنالیز داده ها دارد.

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

  88. بزارین واضح تر بگم. مثلا من یک سری نقاط تقاضای i دارم که با توجه به فاصله با یک هاب یا بصورت مستقیم به مقصد میرسن. محدودیت اول باعث میشه که همه نقاط چه مستقیم یا با هاب به مقصد برسن. در محدودیت ۲ میخام برای اون نقاطی که با هاب رفتن یک محدودیت دیگه قرار بدم. آیا میشه این کارو کرد؟؟؟؟مرسی

    • بله می شه ! شما کدشو می تونین بنویسین. باید دو مجموعه در نظر بگیرین یکی برای هاب ها یکی برای مستقیم ها . یا اینکه یک مجموعه در نظر بگیرین که هاب و مستقیم ها زیر مجموعه اش باشن.

  89. سلام خسته نباشید
    گمز دستوری داره که بشه برای ماینگین گیری ازش استفاده کرد
    یک جدول دارم که چهارتا ستون داره، می خوام از میانگین هر سطر استفاده کنم

    یک پیشنهاد : یک تاپیک اضافه کنین و دستورای مثل این و تولید عدد تصادفی در گمز و … و معرفی کنین
    شادکام پاشید در پناه خدا

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

  90. سلام
    من در مدلم متغییری به صورت زیر دارم:
    X(j,i,k,l

    متغیر باینری است که اگر کار j روی ماشین i قبل از کارk روی ماشینl پردازش شود مقدار۱،و در غیر این صورت مقدار صفر می گیرد(k>j)

    لطفا نحوه کد کردن این متغیر را بفرمائید.
    ممنون

    • سلام
      اینکه شما یک متغیر رو جوری تعریف کنید که یه سری شرط داشته باشه ممکن نیست. مثلا بگین که X متغیرمونه به شرطی که I بزرگتر از J باشه. این رو دقیقا تو همون دستور variable نمیتونین بزنین. این شرط رو باید تو تک تک محدودیت هایی که این متغیر استفاده شده باید بیارین.
      حالا روابط پیشنیازی تو کار شما هم باید یه مجموعه چند بعدی تعریف کنید، همون پستی که عرض کردم خدمتتون. مث مثال زیر:

      set
      i/1*2/
      j/1*3/
      ;
      alias (j,k),(i,l);
      set E(j,i,j,l)/2.1.3.2/

      این مجموعه E نشون میده که هر وقت j برابر ۲، i=1 و k=3 و l=2 بشه، اونوقت E برابر با yes میشه. با این روش شما هم پیشنیازی تعریف کنید. سری قبل عرض کردم خدمتتون که پست مجموعه های چند بعدی رو بخونین به جواب سوالاتون میرسین.
      اینجا

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

  92. با سلام و احترام
    اگر Y(j,l,pp,t)، U(j,pp,t) و B(l,pp,t) متغیرهای تصمیم باشند و d(l,pp,t) پارامتر مسئله و z متغیر باینری، چگونه می توان محدودیت زیر را کد نمود؟

    (Y-U)*z+(Y+B)*(1-z)=d
    l

    متغیر باینری z، زمانی مقدار صفر میگیرد که Y-d، مثبت شود و زمانی مقدار یک را میگیرد که Y-d، منفی شود
    لطفا بنده را راهنمایی بفرمایید

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

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

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

  93. با سلام
    در خصوص انجام چند شرط همزمان در تابع هدف و محدودیت ها روی چند مجموعه سوال داشتم.
    فرض کنید دو مجموعه iوj با شرایط (۰و۱و۲و…وn) داشته باشیم و بخوایم چند شرط همزمان زیر را روی تابع هدف و محدودیت ها اعمال کنیم:
    اندیش i,j بزگتر از یه مقدار خاص
    اندیس iوj برابر هم نباشند
    یکی از اندیسها در مقدار نهایی (n-1) داشته باشد.

    من برای یک شرط میتونم بنویسم ولی برای چند شرط همزمان روی چند اندیس چطور میشه اینکارو انجام داد؟

    و سوال دوم اینکه اگر برای متغییری در قسمت تعریف متغییرها اندیس در نظر گرفته نشه و در تابع و محدودیتها این اندیسها قرار داده بشوند، ایا مشکلی ایجاد میکنه؟(مسئله با روش جواب دارد ولی به دلیل بزرگ بودن امتحان نکردم که جواب نهایی درست هست یا نه)

    با تشکر فراوان

    • سلام
      سوال اولتون، شرط یه همچین چیزی میشه:

      $(ord(i) > 2 and ord(j) > 5 and ord(i) ne ord(j) and ord(i) = card(i)-1)

      سوال دوم: نه مشکلی ایجاد نمیشه، ولی اگه اندیس بذارین، باعث میشه سرعت جل مدل بیشتر شه

      • سلام دوست عزیز
        ممنون از راهنمایی شما.
        در قسمتی از پاسخ ها شما برای تعریف متغییر باینری با چند اندیس از یک فرم semi استفاده کردید.ایا اگر با همان فرم integer variable برای متغییری با بیش از ۲ اندیس قرار بگیره ایجاد اشکال میکنه؟

        با تشکر فراوان

  94. سلام
    من می خواستم بدونم در محدودیت هام چه جوری می تونم شرط بگذارم. یعنی اینکه اگر در انجام محاسبات انجام کار برروی محصول i زودتر از ‘i بود، آنوقت بیاید به آن محدودیت عمل کند. آیا باید از دستور if استفاده کنم یا $ استفاده کنم یا راه دیگه ای داره؟

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

  95. سلام و درود
    توی یکی از قیود مسئلم یه متغیر تصمیم (y) باید با اندیس یه متغیر تصمیم دیگه جمع بشه. بصورت زیر:
    Eq(i,t).. x(i+y,t)=l=3
    ولی ارور میده.پیشنهاد ما چیه؟ البته i+y از محدوده i خارج نمیشه
    فک کنم یه دستوری برعکس ord لازم داره. اگه میشه راهمناییم کنید

    • سلام
      تو این شرایط معمولا بهتره که شما مدلسازی رو تغییر بدین. پیشنهاد من اینه که یه مجموعه دیگه به اسم ii تعریف کنید و بهش مقدار ندید. بعد یه محدودیت تعریف کنید که ii برابر با i+y باشه. فقط توجه کنید که i+y جمعشون باید به صورت i.uel+y باشه و همینجوری ساده جمع نمیشن

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

  96. سلام سال نو مبارک
    سوالی از خدمت شما دارم.

    من پارامتر هایی با ۴-۵ بعد دارم . به عنوان مثال d(i,j,,k,l,m). عملا تعریف جدول امکان پذیر نیست. علاوه بر این من میخوام تابع یونیفرم به این پارامترها تخصیص بدم.
    ممنونم میشم منو راهنمایی کنید

  97. سلام
    آقای محمودی و رمضانی، ممنون از لطفتون!

    دوستان یه سوالی در مورد “توان” دارم

    من یه اندیس به اسم t دارم

    یه عدد رو میخوام به توان t برسونم
    مانند: ۱٫۱۵ به توان t

    با علامت ** توان رو گذاشتم خطا داد.

    تابعی هست که توان این شکلی رو بپذیره؟؟

    پی نوشت: برای روابط اقتصاد مهندسی میخوام

    ممنون

  98. به نام خدا
    باسلام وعرض تبریک سال نو
    مدل یک مساله زمانبندی رو توی گمز نوشتم و جواب گرفتم، بعد از اضافه کردن این محدودیت ها برنامه خطاهای ۱۴۸ , ۶۵۴ , ۴۰۹ میده که هرچه تلاش میکنم برطرف نمیشه
    ممنون میشم اگر راهنماییم کنید
    con3(i)$(ord(i)< 1)..sum(k,y(i,k))=e=k;
    con4(i)$(ord(i) gt 0)..sum(k,y(i,k))=e=1
    con6(k).. sum(i,q(i)*y(i,k))=l=U;
    باتشکر مجدد

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

  99. سلام
    فرض کنید محدوده ی ۳,۲,۱و۴=t باشه و هم چنین محدودیت ساده ای داشته باشیم که فقط به ازای ۱ و ۴ (عدد اول و آخر) برقرار باشد.این محدودیت را چطوری میشه نوشت؟؟؟
    با تشکر

  100. با سلام.
    سوالی در خصوص حل مسئله TSP داشتم.
    من کد زیر را برای حل با ۲۰ شهر استفاده میکنم که با در نظر نگرفتن محدودیت سوم که برای حذف subtour ها هست، به سرعت حل میشه ولی با فعال کردن ان بعد از گذشت تقریبا ۱۰ دقیقه مسئله بدون جواب باقی میماند و حل نمیشود.
    ایا اشکالی در محدودیت سوم وجود دارد؟

    ;((OF .. Z =e= sum((i,j)$(ord(i) ne ord(j)),x(i,j)*c(i,j
    ;Co1(i) .. sum(j,x(i,j)$(ord(i) ne ord(j))) =e= 1
    ;Co2(j) .. sum(i,x(i,j)$(ord(i) ne ord(j))) =e= 1

    ((Co3(i,j)$(ord(i) ne ord(j
    ;(u1(i)-u2(j)+(card(i)*x(i,j)) =l= (card(i)-1 ..

    و اینکه اگر کد بهتری برای حل این مسئله هست، راهنمایی بفرمایید.
    با تشکر فراوان

  101. سلام جناب محموی
    پیرو سوال قبلی در مورد “توان”

    ۱٫۱۲)**(t-1)

    1.12 پایه هست

    t-1 توان هست

    (پایه و توان رو از نظر ریاضی درست نوشتم، توی کپی کردن جابجا شده)

    جنس t “اندیس” هست!

    و از ۱ شروع میشه و نهایتا به ۱۰ میرسه

    • سلام
      اندیس رو همینجوری نمیشه خالی خالی استفاده کرد که.
      شما به جای t یا بنویسین ord(t) یا بنویسین t.uel، ببینین کدومش به تعریفتون میخوره، احتمالا ord مناسب باشه

  102. با سلام
    من یک مسئله غیرخطی رو با گمز حل کردم، جواب داده و چون جوابها رو از قبل میدونستم، مقادیر متغیرها درسته، ولی در خروجی تابع هدف ضرایب متغیرها رو صفر نشون میده، ایراد کار از کجاست؟
    یه سوال دیگه اینکه داده های کسری نمیشه در گمز وارد کرد؟ مثلا یک سوم رو حتما باید به صورت ۰٫۳۳ نوشت؟
    با تشکر

  103. باسلام
    من یکسری داده را در اکسل وارد کردم و از طریق اموززش های مختلف سعی کردم فایل اکسل را در گمز فراخانی کنم.فایل gdx ساخته میشود و همه مراحل درست پیش میرود ولی در اخر بعد از ران روی display که میززنم چیزی نمایش نمیدهد مشسکلم کجاست.
    set r/1,2/
    c/1,2,3/;
    parameter p(r,c) ;

    $call gdxxrw data.xlsx par=p rng=sheet1!b1 rdim=1 cdim=1
    $gdxin data.gdx
    $load p
    $gdxin

    display p;

  104. سلام
    وقتی بخواهیم تو نوشتن دستورsum بگیم همه موارد را بشماره بغیر از یه مورد خاص باید چه کار کنیم .مثلا مجموعه خروجی های یه واحد به واحد دیگه بره به غیر از خودش یعنی recycle نداشته باشه
    سپاس

    • سلام
      سوالتون کلی هست. اگه کامنتا رو بخونین، بقیه هم همچین سوالی پرسیدن. تو همین تاپیک
      شما باید از دستورات شرطی ord و همچنین احتمالا باید از دستور alias هم استفاده کنین

      • سلام
        فرض کنید میخواهیم انتخاب کنیم از بین چندتا فناوری برای یه مسئله خاص کدوم هاش رو انتخاب کنیم/i1*i4/ست مربوط به فناوری هامون هست (میشه یک یا چند فناوری انتخاب بشه)اول باید مشخص کنیم جریان اولیه وارد کدوم فناوری بشه بعد خروجی فناوری انتخابی دو تا اتفاق براش میافته یا قید رو ارضا میکنه و خارج میشه تا وارد یه فناوری دیگه بشه حالا فرض کنید وارد i1 شده و قید لازم برای خروج رو ارضا نکرده و باید به یکی از فناوری های بعدی بره
        qo(imm)=sum(imm,qimm(imm))
        y(imm)*qimm(imm)=l=qup
        y(imm)=e=1
        immستی هست که تعدادش برابر فناوری هاست و با متغیر باینریy انتخاب میکنه وارد کدوم فناوری بشه حالا دو تا مشکل دارم اینکه بعد از نوشتن فرمولا که qe (خروجی فناوری )مشخص شده دوتا حالت داره یا qis’ که شرط رو ارضا کرده و خارج میشه یا میشه qisکه باید وارد مرحله بعد شه که نمیدونم چه جوری تفکیکش رو بنویسم و حالا تو ورودی فناوری باید دونوع ورودی رو برای هر فناوری تعریف کنم یکی qoممکن واردش بشه یا خروجی فناوری قبلی البته فقططط یک نوع ورودی داریم و مخلوط شدن جریانا رو نداریم
        حالا تو دستور sum میخوام بگم روی I بده اما اگه تو i1هست اونو حساب نکنه و برای ۳ تا فناوری دیگه در نظر بگیره.
        میدونم بد توضیح دادم نتونستم شکلش رو اینجا بزارم و به ایمیلی که تو بخش تماسه فرستادم تصویرش رو ممنون میشم نگاش کنید.

        دستور ord رو هو دیدم ولی هر جا یه سری حروف جدید به غیر از حالت های مساوی و … داشت کتابی هست اینا رو کامل توضیح داده باشه؟
        سپاس فراوان

  105. با سلام خدمت شما و با تشکر از سایت خوبتان.ببخشید من رشته تحصیلی ام مهندسی صنایع نبوده ولی پایان نامه ام مدلسازی و حل آن با گمز است، مدل را نوشته ام اما نمیدانم چگونه می شود تابع هدف را خطی نمود!!!میشه لطفا کمکم کنید مثلا اگر تابع به صورت زیر باشد:
    Z 11 = h1* ∑ max ( 0 , Xidealijt – X i,j,t) + h2* max ( 0 ,X i,j,t –X ideal i,j,t) * C12

  106. با سلام خدمت شما و با تشکر از سایت خوبتان.ببخشید من رشته تحصیلی ام مهندسی صنایع نبوده ولی پایان نامه ام مدلسازی و حل آن با گمز است، مدل را نوشته ام اما نمیدانم چگونه می شود تابع هدف را خطی نمود!!!میشه لطفا کمکم کنید مثلا اگر تابع به صورت زیر باشد:
    Z 11 = h1* ∑ max ( 0 , Xidealijt – X i,j,t) + h2* max ( 0 ,X i,j,t –X ideal i,j,t) * C12

    با تشکر فراوان

    • سلام
      خب اینکه کدوم پارامتره و کدوم متغیر، رو جوابتون تاثیر داره. شما اگه اسم max اول رو بذارین مثلا A(i,j,t) اونوقت میتونین به جاش دقیقا همین A رو بنویسین. پس فعلا max خطی شد.
      ولی رابطه ای که مورد نیاز هست اینه که شما محدودیت زیر رو به مدل اضافه کنین. (دقت کنین وقتی A برابر بزرگترین این مقادیر هست، پس از تک تکشون هم بزرگتر هست:

      z11=e=........sum(......,A(i,j,t)......
      A(i,j,t)=g=0;
      A(i,i,t)=g=xideal(i,j,t)-x(i,j,t);

      به همین صورت واسه بقیه هم ادامه بدین.
      خواهش میکنم

  107. سلام،خیلی ممنون که به سوال قبلیم پاسخ دادید،انشاالله خدا خیرتون بده چون واقعا به کمکتان نیاز داشتم،و هرچی توی گمز میزنم همه اش errorمیده.اگر میشه لطفا کمکم کنید در مورد خطی کردن تابع زیر،البته بنظر خطی است آیا شما هم تاییدش می کنید؟
    Z 13 = ∑ ∑∑∑ E i,j,t,r * CVEr + ∑ ∑CFEr,t * ZEr,t
    E وZEمتغیرند و CVو CFپارامترند که اندیس گرفته اند.و اندیس ها به صورت مجموعه قبلا تعریف گشته.پارامترها نیز تعریف گشته اند.
    اگر محدودیت ها به صورت زیر باشند:
    ∑ E i,j,t,r = xi,j,t,r * Rate E i,j
    ∑ ∑∑∑ E i,j,t,r ≤ Avail Er * ZEr
    میشه لطف کنید کدهای چنین تابع هدف با محدودیت هایش را بهم بگویید.
    البته خودم نوشته ام ولی بازم errorداد.نمیدونم باید بعد از خطی شدن تابع هدف محدودیت های جدید و تابع هدف جدید را وارد نمایم؟قبلا گفتم چون رشته تحصیلیم صنایع نبوده خیلی به مشکل بر می خورم.ممنون از زحماتتان.خیلی ممنون میشم که کمکم نمایید.

  108. سلام،خیلی ممنون که به سوال قبلیم پاسخ دادید،انشاالله خدا خیرتون بده چون واقعا به کمکتان نیاز داشتم،و هرچی توی گمز میزنم همه اش errorمیده.اگر میشه لطفا کمکم کنید در مورد خطی کردن تابع زیر،البته بنظر خطی است آیا شما هم تاییدش می کنید؟
    Z 13 = ∑ ∑∑∑ E i,j,t,r * CVEr + ∑ ∑CFEr,t * ZEr,t
    E وZEمتغیرند و CVو CFپارامترند که اندیس گرفته اند.و اندیس ها به صورت مجموعه قبلا تعریف گشته.پارامترها نیز تعریف گشته اند.
    اگر محدودیت ها به صورت زیر باشند:
    ∑ E i,j,t,r = xi,j,t,r * Rate E i,j
    ∑ ∑∑∑ E i,j,t,r ≤ Avail Er * ZEr
    میشه لطف کنید کدهای چنین تابع هدف با محدودیت هایش را بهم بگویید.
    البته خودم نوشته ام ولی بازم errorداد.نمیدونم باید بعد از خطی شدن تابع هدف محدودیت های جدید و تابع هدف جدید را وارد نمود؟ممنون از زحماتتان.خیلی ممنون میشم که کمکم نمایید.

  109. سلام من چندتا سوال دارم کوتاه کوتاه:)))
    ۱- در محدودیت های زیر y متغیر باینری هست و c ها پارامتر هستند حالا من اگر y رو ببرم سمت دیگه تساوی جواب نشدنی میشه اخه چرا؟میگه یکی از متغیر های باینری میشه ۵
    co7(p,c).. y(p)*ce(p,c)=l= cdup(p,c);
    co8(p,c).. y(p)* cin(p,c)=l= cup(p,c);

    2- من همین کد رو در حالتی که ce متغیر بود نوشتم(چون یه اروری میداد که نمیتونستم رفع کنم) و مسئله غیر خطی میشد حالا که ارور خطیه رو رفع کردم و هر دو ران میگیرم تایع هدف تو مدل خطی ۳۰۰۰ تا بیشتر از غیر خطی میشه و جواب غیر خطی درسته با اینکه اعداد هر دو یکسانه کاملا و هر دو مدل متغیر باینری دوم رو ۱ کردن…میشه بگید چه باید بکنم….من چک کردم مدل رو کاملا

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

  110. سلام
    سوالی داشتم اینکه مدلم خطی است ولی زمانی که قدر مطلق برای یک جزء از تابع هدفم قرار میدهم ارور میزنه میگه مسئله با روش خطی حل نمیشه.قدرمطلق مدل را غیر خطی میکنه؟

  111. با عرض سلام و خسته نباشید.یک سوال داشتم از خدمتتون.من یک لوپ تو مدل به این شکل نوشتم

    scalar
    iter ;
    parameter
    e2;
    /1*5/ ;set tt
    parameter sol(q1,tt);

    iter=0;
    repeat
    e2=pay('1','2')-((pay('1','2')-pay('2','2'))/gr2)*iter;
    solve DVRP_epsilon use MIP minimizing Obj;
    sol('1',tt) $(ord(tt)=iter)=Obj1.l;
    sol('2',tt) $(ord(tt)=iter)=Obj2.l;
    iter=iter+1;
    until iter > gr2;
    display sol;

    وقتی این ران می کنم ۵ جواب یکسان میده.در واقع همون جواب اول تکرار میشه انگار که لوپ یکبار اجرا میشه.به نظرم لوپ رو درست نوشتم ولی نمیدونم چرا جواب نمیده.خیلی کلافم کرده.میشه کمکم کنید ایراد کارمو پیدا کنم.متشکرم

        • سلام
          دستور loop رو امتحان کنین، و دستور solve رو بذارین توش، ران کنین. میتونین یه پارامتر هم تعریف کنین که هر بار که ران میشه جواب رو ذخیره کنه. شما ظاهرا با این لوپی که دارین شرایط مدلتون عوض نمیشه پس جوابش هم همون میمونه. برای iter و بقیه هم display بزنین. ظاهرا تغییری نمیکنن

        • سلام.من دستور loop رو به این شکل نوشتم.
          scalar
          gr2 ‘number of grid point of 2th objective function’ /5/;
          parameter
          e2 ‘epsilon caonstraint methid RHS’;
          set iter ‘solution counter’ /0*5/ ;
          parameter sol(q1,iter) ‘pareto solutions’;
          loop(iter,
          e2=pay(‘1′,’2’)-((pay(‘1′,’2’)-pay(‘2′,’2’))/gr2)*iter;
          solve DVRP_epsilon use MIP minimizing Obj;
          sol(‘1’,iter)=Obj1.l;
          sol(‘2’,iter)=Obj2.l;
          display sol;
          );
          اما تو خطی که مقدار e2 محاسبه میشه این خطا رو میگیره
          Dimension different – The symbol is referenced with more/less
          indices as declared
          مشکل از چیه؟
          با تشکر از شما

        • سلام.ممنون از شما.ولی مشکل این نیست چون pay در همه جا دو سطر و دو ستون داره و اندیس هاش در همه جا یکی تعریف شده

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

        • سلام
          مطمئن بشید که e2 رو تابع هدفتون تاثیر میذاره. بررسیش کنین. نمیخواد شما هر بار که مدل رو ران میکنین منتظر بشین تا کامل حل بشه، بعد دوباره دستکاری کنین، وقتی وسط یک لوپ interrupt بزنین یه جواب شدنی بهتون میده و میره لوپ بعدی (باید به گپ زیر صد رسیده باشه).
          با مقادیر بالاتر iter هم امتحان کنین.

  112. با سلام مجدد.یک سوال داشتم.من مدلم که حل می کنم به جواب میرسه ولی به دلیل محدودیت زمان اجرا متوقف میشه.البته من زمان اجرا را به ۱۰۰۰ و ۱۰۰۰۰ هم تغییر دادم ولی هر بار به دلیل محدودیت زمان اجرا متوقف شده و به جواب رسیده و وضعیت مدل به صورت زیر بیان میشه.
    MIP status(107): time limit exceeded
    Cplex Time: 10902.03sec (det. 100670.45 ticks)
    Fixing integer variables, and solving final LP…
    Fixed MIP status(1): optimal
    Cplex Time: 0.01sec (det. 5.37 ticks)
    Resource limit exceeded.
    می خوام بدون اینکه به دلیل محدودیت زمان متوقف شده با اینکه وضعیت نرمال هست مشکلی ایجاد نمی کنه؟آیا مدل درست اجرا شده یا بایستی تغییراتی روشاعمال کنم؟

    • سلام
      ممکنه درست حل شده باشه. بستگی به gapی داره که اعلام کرده. ولی این محدودیت زمانی نشون میده که مدل احتمالا بهینه نیست، هرچند شدنی هست جوابش.
      برای افزایش سرعت میتونین مدل رو خطی کنین، میتونین جواب اولیه به گمز بدین، سایز رو کوچیک کنین و یه سری کار دیگه. ولی مطمئن نباید باشین که الان جواب بهینه رو دارین

      • سلام.ممنون از پاسخ شما.
        مقدار گپ اینقدر گزارش شده
        Absolute gap: 70.670782
        Relative gap: 0.088449
        زیاده؟؟؟
        مدل من خطیه. باید چه کار کنم؟
        یک سوا دیگه داشتم
        option optcr=0;
        2 option optca=0;
        چه کار می کنه؟

        • هر چقدر به صفر نزدیک تر باشه بهتره!!
          مرسوم هست که optcr را ۰٫۰۵ بگیرین و optca را ۰ بگیرین .
          Absolute gap : بهنرین برتخمینی که مدل میزنه منهای بهترین عدد صحیح می کنه. مثلا بهترین حد بالا برای جواب بهترین عدد صحیح (بهترین تخمین ) ۱۵ باشه و بهترین عدد انتجر ۱۰ باشه ! Absolute gap برابر میشه با ۵ و Relative gap درصد این گپ را حساب می کنه که از فرمول دیگه ای استفاده می کنه که مهم نیست فقط مهم اینه درصدی گپ را می ده ! اگر خواستی فرمولشو بهت می گم!!

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

  113. ببخشید چون فایل را کپی کردم و اینجا گذاشتم یکم بهم ریخته.علامت های(;)در گمز در اخر قرار گرفتع که اینجا اشتباه کپی میشه

    Z 13 = ∑ ∑∑∑ A i,j,t,r * CVAr + ∑ ∑CFAr,t * ZAr,t

    I i,j,t = I i,j,t-1 + xi,j-1,t - xi,j,t ∀i,j,t
    xi,j,t * r ij ≤ capj,t ∀i,j∑
    A i,j,t,r ≤ Ar,t * ZAr,t ∀r,t∑∑
    A i,j,t,r = xi,j,t,r * Rate A i,j ∀i,j,t∑
    ZA=0
    ZA=1

    ZAمتغیر باینری است،یا صفر است یا یک.وxوIوA متغیر تصمیم است

    obj3.. z3=e=sum(i,j,t,r,A(i,j,t,r)*cv*A(r,t)+sum((r,t),CF*A(r,t))*ZA(r,t)
    cont6(i,j,t).. I(i,j,t)=e=I(i,j,t-1)+ x(i,j-1,t)- x(i,j,t);
    cont7(j,t).. sum(i,x(i,j,t)*r(i,j)=l=cap (j,t);
    cont8(r,t).. sum((i,j),A(i,j,t,r))=l=A (r,t) * ZA(r,t);
    cont9(i,j,t).. sum(r,A(i,j,t,r)=e=x(i,j,t) * rateA(i,j);
    cont10 ZA(r,t)=e=0;
    cont6 ZA(r,t)=e=1;

  114. ببخشید چون فایل را کپی کردم و اینجا گذاشتم یکم بهم ریخته.علامت های(;)در گمز در اخر قرار گرفتع که اینجا اشتباه کپی میشه
    Z 13 = ∑ ∑∑∑ A i,j,t,r * CVAr + ∑ ∑CFAr,t * ZAr,t

    I i,j,t = I i,j,t-1 + xi,j-1,t – xi,j,t ∀i,j,t
    xi,j,t * r ij ≤ capj,t ∀i,j∑
    A i,j,t,r ≤ Ar,t * ZAr,t ∀r,t∑∑
    A i,j,t,r = xi,j,t,r * Rate A i,j ∀i,j,t∑
    ZA=0
    ZA=1
    ZAمتغیر باینری است،یا صفر است یا یک.وxوIوA متغیر تصمیم است
    obj3.. z3=e=sum(i,j,t,r,A(i,j,t,r)*cv*A(r,t)+sum((r,t),CF*A(r,t))*ZA(r,t)
    cont6(i,j,t).. I(i,j,t)=e=I(i,j,t-1)+ x(i,j-1,t)- x(i,j,t);
    cont7(j,t).. sum(i,x(i,j,t)*r(i,j)=l=cap (j,t);
    cont8(r,t).. sum((i,j),A(i,j,t,r))=l=A (r,t) * ZA(r,t);
    cont9(i,j,t).. sum(r,A(i,j,t,r)=e=x(i,j,t) * rateA(i,j);
    cont10 ZA(r,t)=e=0;
    cont6 ZA(r,t)=e=1;

    • کدی گمزی که نوشتین به نظر می یاد درست باشه ! اما محدودیت ۱۰ و ۶ بنظرم بد نوشته شده چون توضیحی در مورد مدل ندارم نظر قطعی نمیدم اگه به مشکل برخورد کردین ، توضیحات مدل را هم بنوسین تا کمکتون کنم.

    • سلام
      به جای k بذارین k.uel
      فقط دقت کنین که این چه مقداری رو بر میگردونه. باید قبل اینکه استفاده کنین مقداری این k.uel رو سر به سرش بذارین

  115. سلام و خسته نباشید
    بنده یکی از پارامترهای مدلم دارای توزیع تصادفی نرمال هست.ولی به ازای هر بار ران کردن مدل این پارامترها با اینکه نرمال و تصادفی هستند ولی تغییر نمیکنن و جواب مدل مانند قبل می شود.آیا راه حلی هست که به ازای هر بار اجرای مدل تصادفی بودن تغییر کنه و جواب مدل تغییر کنه؟

    • سلام
      بله این مشکلی هست که خیلی از دوستان باهاش مواجه میشن. وحتی شاید خیلیها از این مشکل خبر هم نداشته باشن.
      برای تولید عدد تصادفی تو گمز، در واقع یک موتور تعریف شده که هر بار اعداد مشخصی رو تولید کنه که در واقع تصادفی نیستند.
      شما برای اینکه موتور رو دوباره راه بندازید و عدد تصادفی جدیدی تولید کنید، باید از دستور execseed استفاده کنید. تو کدی که در زیر نوشتم دقت کنین که عدد بیست هزار میتونه هر عددی بین ۰ تا ۱۰ به توان ۹ باشه. فقط بدونین که با افزایش این عدد، حساسیت اعداد تصادفی شما هم بیشتر میشه.

      set i /1*5/;
      parameter x(i);
      execseed = 20000*(frac(jnow));
      x(i) = uniform(0,1);
      display x;

      خطی که بولد کردم رو بذارین قبل از داده هایی که قراره به صورت رندم تولید بشن و حالشو ببرین.

    • سلام
      با دستور power میتونین توان رو مشخص کنین (یا از علامت ** به منظور توان استفاده کنین). و برای e یه مقدار اولیه هم در نظر بگیرین. اگرم تابع نمایی میخواین، از exp استفاده کنین.

      پرنشاط باشین

  116. با عرض سلام و خسته نباشید.
    من ی مدل دارم که تعداد اندیس های آن بیشتر از ۱۰ تاست. ۱۲ تا اندیس داره. میخواستم بدونم میشه این مدل رو توی گمز نوشت ؟؟ یا فقط مدل های تا ۱۰ اندیس رو میشه توی گمز نوشت. مرسی.

  117. سلام به همگی. ببخشید میخاستم داده هام را وارد گمز کنم، به مشکل بر خوردم. مثلا هزینه فروش اگر c(i,t) باشد و i=10 و t=12تعریف شده باشد چگونه داده ها را وارد نمایم.
    ۱۲ ۱۱ ۱۰ ۹ ۸ ۷ ۶ ۵ ۴ ۳ ۲ ۱
    ۱ ۱
    ۱ ۲
    ۱ ۳
    و…
    است .لطفا کمک کنید.اگر شبیه به اون را داریذ میشه واسم کپی کنید بگذارید تا متوجه بشم چطوری. حالا اگر ابعاد مثال شما کمتر است نیز مشکلی نیست فقط میخام طرز نوشتنشا یاد بگیرم.
    خیلی ممنون میشم کمکم کنید.
    با تشکر

  118. با سلام
    من در کدی که نوشتم محدودیت هایی دارم که یکی از شرط های برقراری آنها که باید وارد کنم این است که ‘i<i یعنی اگر بچ تولید i قبل از 'i بود، آن شرط برقرار شود. منتها مسئله مهمی که وجود دارد این است که ترتیب ساخت بچ ها را خود مدل بایستی مشخص کند و برای ما از ابتدا مشخص نیست تا مثلا بتوانیم با تابع ord این شرط را وارد محدودیت کنم. می خواستم بدونم چطور باید این کاررو انجام بدم؟

  119. با سلام

    table c(i,k,t) ‘the cost between node i and k , if t=e=1’

    میخوام بصورت کد در گمز بنویسم ولی ارور ۲۲۲ میده هزینه بین i و k به شرطی که t=1
    میخوام جدول i و k رو بنویسم خطای دیمانسیون ردیف با دیمانسیون ستون رو میده و میگه ناسازگار هستند به احتمال زیاد t رو هم به عنوان یه بعد(دیمانسیون) در نظر گرفته

  120. با سلام

    Cik^t ( تی اندیس بالای پارامتر هست ) پارامترم اینه که میخوام جدول هزینه بین k و i رو بنویسم وقتی که t=1 یعنی هزینه حمل و نقل از نوع زمینی(اتوبوس)
    و همچنین برای t=2 یعنی هزینه حمل و نقل از نوع دیگر مثلا هوایی
    T حالت ها یا روش های مختلف حمل و نقل هستند

    i=5 k=5 وقتی که از دو نوع روش حمل و نقل استفاده می شود که برای هر t یک جدول داریم
    امیدوارم که منظورمو رسونده باشم با تشکر

    ۵ ۴ ۳ ۲ ۱
    ۱
    ۲
    ۳
    ۴
    ۵

  121. سلام ببخشید خطی سازی یک متغییر اینتجر تقسیم بر متغییر پیوسته چه طوری انجام میشه؟قبلا یک فایل خطی سازی برام ارسال کرده بودید ولی این فایل متغییر باینری رو گفته بود.ممنون میشم جواب بدی.

  122. با سلام

    سوالی در خصوص تعریف محدودیتی به فرم زیر داشتم :

    (S(I,t-1) + x(I,t) = d(I,t) + s(I,t

    در این محدودیت منظور از S مقدار موجودی است و X مقدار تولید و d میزان تقاضا و اندیس i مربوط به قطعه و t مربوط به زمان هست.من set مربوط به زمان را نمیخوام به فرم /۰*t/ تعریف کنم و بایستی از ۱ تا t شروع بشه (البته t یک عدد هست).

    ولی با هر روشی که میخوام انجام بشه این محدودیت مربوط به موجودی را حل نمیکنه.

    همینطور من شرطی در محدودیت به فرم

    (s(i,t)$(s(i,”0″)=S0(i
    که بیانگر برابر موجودی در دوره ۰ با میزان موجودی اولیه است هم در محدودیت قرار میدم خطای Endogenous relational operations require model type “dnlp”
    را میده.

    اصلا راهی هست که بشه مسایل کنترل موجودی را درست برای gams تعریف کرد؟

    • سلام
      یه t1 تعریف کنین. که شامل همه t ها بشه به اضافه صفر. بعد t رو به عنوان زیر مجموعه ش بکار ببرین.

      set
      t1/0,1*10/
      t(t1)/1*10/

      همه جا از t استفاده کنین بجز اونجاهایی که صفر هم شامل میشه. اونجا دیگه t1 رو استفاده کنین.

      • ممنون از محبت شما

        در خصوص شرطی که نوشته شده(s(i,t)$(s(i,”۰″) = S0(i از نظر نوشتاری و ساختاری درست هست یا بایستی به نحو دیگه ای تعریف بشه؟

        ممنون

        • خواهش میکنم
          خب بستگی به این داره که s رو چجوری تعریف کردین. باید s رو به صورت s(i,t1) تعریف کرده باشین. s0 هم دیگه باید دقت کنین. در ضمن اون شرط رو نمیخواد. فقط بزنین s(i,”0″)

  123. با سلام. من یک تابع دو ضابطه ای دارم چه طور باید کدش کنم.
    می خوام بگم w=0 است اگر L بزرگتر مساوی صفر باشه و در غیر این صورت W=1. در ضمن L متغییر است. ممنون میشم جواب بدید.

    • سلام
      اگر l,w متغیر هستن که از دستور ifthen استفاده کنین. مثالاش تو کامنتای بالا هست.
      اگه پارامترن که خیلی ساده از دستور if استفاده کنین.

  124. سلام وقت بخیر. اگر متغیر x مقدار بزرگتر از ۰ گرفت ، متغیر y ، مقدار ۱ بگیرد، و اگر متغیر x مقدار ۰ گرفت متغیر y هم صفر بگیرد. به چه صورت باید اعمال شود. سپاس

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

  126. سلام و عرض ادب

    ببخشید من تو یه جای مدل موندم که چجوری میشه کد کرد و اونم اینه که توی یه محدودیتی زیگما محدوده i عضو p رو میگیره که p اجتماع i و j هستش و در جای دیگه i عضو I میشه که I بزرگ همون i هستش که تعداد مشتریهامون هست، حالا من چجوری میتون اینو برا گمز توضیح

      • ممنون که جواب دادید. این دستور برای توزیع لاپلاس نیست مگه؟ من به عنوان مثال می خوام از t^2 لاپلاس بگیرم، در این صورت دستورش چی هست؟آیا از این دستور شما باید استفاده کنم؟

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

        • ممنون از اینکه جواب دادید.
          شما در جواب سوال من فرمودید که فرمول لاپلاس کد کنم. منظور شما از کد کردن فرمول لاپلاس چیه؟میتونید واضح تر بگید؟

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

    من مدلم رو ران کردم جواب میده اما توی نتایج یک ارور لایسنس هم میده، شما یه لایسنس خوب سراغ دارید که اروره من از بین بره؟
    (من از لایسنس توی سایتتون استفاده کردم)

    • سلام
      خواهش میکنم.
      سوالای شما رو خانم رمضانی جواب دادن.
      تاریخ لپتاپ رو ببرین رو ۲۰۰۴ و مجددا ران کنین. مشکل رفع میشه احتمالا

  128. سلام
    در مدل مساله من t اندیس زمان هست. در یکی از محدودیت های مساله سامیشن روی p که pعضو مجموعه {t,…,1} هست، این به چه صورتی در مدل نوشته می شود و آیا اینکه در set چگونه p را معرفی کنم ؟

  129. سلام
    برای محدودیت زیر نرم افزار ارور ۱۴۸ رو میده. مشکل کجاست؟

    st2(k,t)..sum((i,p)$(ord(p)<=ord(t)),d(i,p)*x(i,k))=l=t*Q

    pعضو مجموعه {t,…,۱} هست و Q هم پارامتر هست.

  130. سلام و وقت بخیر
    من میخوام یک معادله ۲ شرطی بنویسم که شرط روی متغیر اعمال میشه :اگه Tln بزرگتر از Tst+dt باشه S برابر یک و اگه کوچکتر ازTst-dt باشه s برابر ۰ بشه
    eq2(t)$(ord(Tln(t)) le Tst-dt) .. S(t)=e=0
    eq1(t)$(ord(Tln(t)) ge Tst+dt) .. S(t)=e=1…………..
    S , Tln متغیرند .Tst , dt پارامترند این دستور میزنم خطا میده…..ممنون میشم کمکم کنین

  131. خیلی ممنونم از راهنماییتون فقط میبخشین واسه دستور ifthen مگه نباید expressioniffalse وجود داشته باشه؟برنامه من این رو نداره… یکیش Tst+dt هست واون یکی Tst-dt یعنی حالت درستش باید بزرگتر از شرط اول و حالت غلطش کوچکتر از شرط دومه ..یعنی دو تا condition دارم….منظورم اینکه من نمیتونم بنویسم
    eq21(t) .. S(t)=e=ifthen(Tln(t)>Tst+dt,1,0);
    eq22(t) .. S(t)=e=ifthen(Tln(t)<Tst-dt,0,1);
    ارور میده چون نقض همدیگن….

      • خیلی خیلی لطف میکنین…ببینین Tln دمای داخله خانه هست که میخوام بین رنج ۲۰ تا ۲۴ نگهش دارم…برای این کار از یه تهویه کننده ی هوا باترموستات استفاده میکنم…که ترموستات خودش متغیر با قیمت برقه….میخوام بگم که اگه دمای داخل خونه بیشتر از Tst+2 بشه ترموستات حالت on بگیره و اگه کمتر از Tst-2 بشه ترموستات خاموش بشه….
        dt همون ۲ درجه هست….،،Tln جز متغیرهاست و Tst(t)=.89*X(t)+20 خودش یه پارامتره که وابسته به یه پارامتر دیگه هست(X قیمت برق)…. الان منظورت از اینکه مدل بگم همیناست؟در ضمن تابع هدفم min کردن C=e=sum(t,X(t)*Prated*S(t)) هست که بازم p جز پارامترهاست…واقعا ممنونم که وقت میزارین

      • set
        t time slot /1*24/
        ;

        parameters
        qq cooling effect of on AC state/2.64/
        wf warming effect of tem difference/.0408/
        D time interval duration/.25/

        dt limit duration/2/
        Prated rating of air conditioner/11.5/
        N total no of time slots/96/
        Tmin minimum temp of house/20/;
        parameter X(t);
        $call gdxxrw RTP.xlsx par=X rng=sheet1!a2 rdim=1 cdim=0
        $gdxin RTP.gdx
        $load X
        $gdxin
        parameter Tout(t);
        $call gdxxrw Tambient.xlsx par=Tout rng=sheet1!a2 rdim=1 cdim=0
        $gdxin Tambient.gdx
        $load Tout
        $gdxin
        parameter Tst(t);
        Tst(t)=.89*X(t)+20;
        *execute_unload’Tst(t).gdx’;
        parameter Tmax(t);
        Tmax(t)=Tst(t)+dt;
        *execute_unload’Tmax(t).gdx’;

        variables
        Tln(t) inside temperature of house
        *execute_unload’Tinside.gdx’;
        C cost
        S(t) status of AC thermostat
        *execute_unload’S(t).gdx’;
        *Tln.fx(‘0’)=21.5

        binary variable S(t)
        free variable C;

        equations
        constraint1(t) air conditioner
        constraint2(t) starting temp
        eq1(t) on state of thermostat
        eq2(t) off state of thermostat

        eq3(t) minimum temperature constraint
        eq4(t) maximum temperature constraint

        eq5 objective;

        constraint1(t)$(ord(t) ge 2) .. Tln(t)=e=Tln(t-1)+D*(wf*(Tout(t)-Tln(t))-qq*S(t));
        constraint2(t)$(ord(t) eq 1) .. Tln(t)=e=21.5 +D*(wf*(Tout(t)-Tln(t))-qq*S(t));

        eq1(t)$(Tln(t)=g=Tst+dt) .. S(t)=e=1;
        eq2(t)$(Tln(t)=l=20) .. S(t)=e=0;

        eq3(t) .. Tln(t)=g=Tmin ;
        eq4(t) .. Tln(t)=l=Tmax(t);

        eq5 .. C=e=sum(t,X(t)*Prated*S(t)) ;

        model reschedual/all/;

        solve reschedual using lP minimizng C;

        display C.l,Tln.l,S.l;
        مدلم هنوز کامل نشده ولی ارور اصلی سر معادلات ۲ و ۱ هست…. و اینکه میتونم به جای حد پایین عدد ۲۰ رو بزارم ولی حد بالا حتما باید Tst+dt باشه…بازم ممنونم

        • سلام

          eq1(t)$(Tln(t)>Tst(t)+dt) .. S(t)=e=1;
          eq2(t)$(Tln(t)<20) .. S(t)=e=0;

          این طوری این دو خط ارور ندارن. فایل اکسل نداشتم ران بگیرم . بررسی کنین

        • سلام و وقتتون بخیر…
          من در ران کردن برنامه زیر به مشکل برخوردم…ارور ۵۷ (واسه معادلات ۲و ۳)میاد میگه نباید از $ در MIP استفاده کنم باید با dnlp ران بشه …اون میزنم بازم یه ارور دیگه میاد۶۵ و ۵۲ که اصلا این متغرها فقط باید تو MIP ,MINLP… تعریف بشن…نمیدونم چیکار کنم …هرچه قدرم سعی میکنم این ۲ معادله اصلاح کنم نمیتونم…خیلی خیلی ممنون میشم اگه کمکم کنین…

          variables
          Tln(t) inside temperature of house
          .
          .
          ;
          eq2(t)$(Tln(t)>24) .. S(t)=e=1;

        • سلام
          گمز اجازه استفاده از متغیرها رو تو دستورات شرطی دلار نمیده. مگه اینکه از ifthen استفاده کنین یا ساختار رو عوض کنین

  132. سلام.
    من ی مدل دارم که غیرخطیه و تو گمز نوشتمش. الان میخوام خطیش کنم. میشه راهنماییم کنید از چه روشی میتونم مدل غیرخطی رو به خطی تبدیل کنم؟
    ممنون.

  133. با سلام
    خسته نباشید. یه مشکلی در کد نویسی ام داشتم ممن.ن می شم اگه کمکم کنید:
    در مسئله من بخشی از تابع هدف درجه دوم است. وقتی مسئله رو بدون این بخش حل میکنم، گمز جواب درست می ده اما به محض این که این بخش رو به تابع هدف اضافه می کنم گمز تمام متغییر ها را صفر می کنه ( در حالی که اگر همه متغییر ها صفر باشد برخی محدودیت ها نقض می شوند) . اگر ممکنه راهنماییم کنید که علنت چیه؟
    این هم قسمت درجه دو تابع هدفم:
    sum((product,customer), sum((batch) ,B(product,customer,batch)* *c(batch)) -sum((slot) ,q(product,customer,slot)*ft(slot)))

      • سالور من سیپلکسه و پیام سالور اینه:
        Cplex error 5002:Q in s% is not posetive semi defifnite
        Cplex error 1217:no solution exists
        سوال من دقیقا اینه که پیش از اضافه کردن این ترم درجه دو به تابع هدف جواب درستی از مدل می گیرم اما وقتی این ترم رو اصافه می کنم این اتفاق می افتد در حالی که فضای جوابم رو تغییر نمی دم پس چرا نمی تواند جواب پیدا کنه؟

    • سسلام

      من یه مدل با تابع هدف درجه دو و محدودیت های خطی دارم که متاسفانه غیر محدب هست. برای حل ان از سیپلکس استفاده کردم و برای اینکه بتونه مسئله غیر محدب من رو حل کنه optimality target را برابر ۳ قرار دادم.
      اما وقتی مدل رو حل می کنم جوابی که بهم می ده در یکی از محدودیت ها صدق نمی کنه در حالی که کلیه محدودیت ها با all فعال شسدند. مسئله را از طریق دیگه که حل کردم هیچ مشکلی نداره جواب شدنی داره اما نمی دونم چرا اینجور میشه؟ تا الان هم هرچی تلاش کردم نتونستم مشکلش رو حل کنم ممنون می شم کمکم کنید.

      پیام های process window هم به صورت زیر هست:

      flow cuts applied: 4
      mixed integer rounding cuts applied: 3
      root node processing (befor b&c):
      real time=0.64 sec.(25.46 ticks)
      sequential b&c:
      real time= 9.38 sec.(8843.03 ticks)
      total (root+branch&cut)=10.01 (8868.49 ticks)

      MIQP status(107): time limit exceeded
      Cplex Time: 10.03sec (det. 8868.49 ticks)
      Returning a primal only solution to GAMS (marginals all set to NA).
      Resource limit exceeded.

      MIP Solution: 2228.450000 (10884 iterations, 2293 nodes)
      Best possible: 180.941848
      Absolute gap: 2047.508152
      Relative gap: 0.918804

      restarting execution
      slotbatch1.gams(190) 2 Mb
      reading solution for model slotbatch
      ***
      solver did not provide marginals for model slotbatch
      ***
      executing after solve elapsed: 0:00:12.250
      slotbatch.gams(192) 3Mb
      statuse: normal completion
      job slotbatch.gams stop….

      البته من محدودیت زمان ده ثانیه برای مدل گذاشتم

      • سلام
        اینکه یه مدل به گپ برسه، یعنی اینکه مدل جواب شدنی پیدا کرده. مدل شما به گپ رسیده. اینکه بگین صدق نمیکنه غیر ممکنه.

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

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

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

        • سلام
          مدلتون رو ران کردم
          همچین چیزی اصن برای من نمیاره.
          میگه no solution exist نمیدونم چجوری برا شما جواب داده.
          از طرفی این target رو نمیخونه. دقیقا نمیدونم چرا.
          معرفی opt رو یه جور دیگه هم براتون نوشتم که اسونتر تغییر بدین.
          مدل رو هم با minlp با سالورهایی مث baron حل کنین. مدل در کل نشدنیه. باید بررسی کنین

  134. با سلام و تشکر از وقتی که صرف می کنید.یک مشکل داشتم.ممنون میشم راهنمایی کنید:
    یک تابع هدف قدرمطلق دارم که برای خطی کردنش مقدار |x| در تابع هدف به صورت جمع دو متغییر مثبت (با توجه به آزاد در علامت بودن x) L1(b,k)+L2(b,k) نوشتم و در محدودیتی که x بود نیز آن را با L1(b,k)-L2(b,k) جایگزین کردم.فقط اینکه می دونیم که باید یکی از دو متغییر L1یا L2 مقدار مثبت بگیرن به عبارتی ضرب این دو متغییر باید همیشه برابر صفر باشه. من این محدودیت رو به این صورت کد کردم
    cons20(b,k)..L1(b,k)=l=Mbig*U;
    cons21(b,k)..L2(b,k)=l=Mbig*(1-U);
    اما وقتی مدل رو ران می کنم متغییرها مقدار صفر می گیرن.فکر می کم مشکل از این دو محدودیت باشه که استفاده کردم.ممنون میشم بهم کمک کنید.

      • ممنون از پاسخ شما.چیزی که من متوجه شدم اینه که خود گمز فقط به یکی از مقادیر L1 و L2 که جایگزین متغییر آزاد در علامت میشن مقدار مثبت میده مثل همون چیزی که تو سیمپلکس رخ میده و نیاز به تعریف محدودیت برای اینکه فقط یکی از این دو متغییر مقدار مثبت بگیرن نیست بنابراین این محدودیت زائده.البته نمیدونم درست متوجه شدم یا نه؟
        یک سوال دیگه ای که دارم اینه که تو همه سالورهای این کار انجام میشه یا فقط بعضی از سالورها برای مثال Cplex که براساس سیمپلکس کار می کنه این محدودیت بطور خودکار اعمال میشه؟

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

  135. با سلام
    بنده توی کد گمز دچار مشکلی شدم که خیلی خیلی ممنون میشم اگه راهنماییم کنید.
    متاسفانه محدودیت موجودی با فرض کمبود به صورت فروش از دست رفته دارم که هیچ گاه موجودی مقدار نمیگیره و همیشه کمبود ایجاد میشه در جواب. با اینکه هزینه کمبود را هم زیاد در نظر گرفتم.
    inventory(r,j,t)=e=inventory(r-1,j,t-1)-sum((k,v),lin(r,j,k,v,t))+b1(r,j,t);

    b1(r,j,t)=g=sum((k,v),lin(r,j,k,v,t))-inventory(r-1,j,t-1);

    inventory(r,j,t)=g=inventory(r-1,j,t-1)-sum((k,v),lin(r,j,k,v,t));

    b1 and inventory are positive variables.

    با تشکر

  136. با سلام
    خواهش می کنم در مورد کد کردن محدودیت زیر در گمز راهنمایی بفرمایید.
    مجموعه ای داریم به نام N که شامل تمامی نقاط یک شبکه است.
    مثلا N={1,2,3,…,۱۰}، حال می خواهیم متغیری تعریف کنیم که نشان دهنده میزان جریان بین هر دو نقطه در این شبکه باشد که به شرح زیر کد شده است.
    متغیر: X(i,j) : میزان جریان از گره i به گره j
    Sets
    i nodes /1,2,3,4,5,6,7,8,9,10/
    j nodes /1,2,3,4,5,6,7,8,9,10/;

    variables
    x(i,j) flow;
    حال می خواهیم محدودیتی بنویسیم که تضمین کند مجموع جریان ورودی به هر گرهی مثل k از آن خارج نیز بشود:
    جمع xik = جمع xkj به ازای تمامی k های عضو N

    ممنونم

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

      sum(i,x(i,j))-sum(i,x(j,i))=0;

  137. سلام
    من میخوام اول با استفاده از یه معادله عملکرد تامین کننده ها را محاسبه کنم. بعدش به ترتیب امتیاز عملکردشون به اونها مقدار سفارش تخصیص بدم. مثلا تامین کننده ای که امتیاز عملکردش کمتره مقدار کمتری هم سفارش بهش تخصیص داده بشه. میشه کمک کنید که از چه دستوری باید استفاده کنم؟ با تشکر

  138. سلام
    من خیلی از سایتتون استفاده می کنم واقعا ممنونم.
    من یه کد گمز نوشتم وقتی که ران می کنم جوابی که بهم میده تو یکی از محدودیت ها صدق نمی کنه در حالی که در تعریف model ان محدودیت هم نوشته شده و اخرش هم همه محدودیت ها را با all فعال کردم . ممنون می شم اگه راهنمایی کنید که مشکل از کجا می تونه باشه؟

  139. سلام
    من ی مدل جهار هدفه دارم که به روش محدودیت اپسیلن تو گمز حلش کردم. برای هر کدوم از سه تابع هدفی که به عنوان توابع فرعی درنظر گرفته شدن پنج سطح اپسیلن بعد از حل این توابع به صورت تک هدفه با محدودیتای مدل تولید شده. می خواستم لطف کنید راهنماییم کنید که چطور میتونم جواب های پارتوی مدل رو به دست بیارم.

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

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

      • سلام
        در واقع من الان مدلی دارم که سه تا از محدودیتاش کران داره مثلا
        ۵*(x+y)<=e1
        6x=e3
        به طوری که e1 و e2 و e3 هرکدوم یک بردار با پنج آرایه هستن (مثلا e1=(2,8,5,0,7))

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

        ممنون از لطفتون

        • ببخشید یکی از معادلات پاک شده

          ۵*(x+y)<=e1
          6x=e3

          که هر کدوم از eها یک بردار با پنج آرایه ن

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

        • خیلی ممنون از راهنماییتون

          باید بنویسم ران کنم و ببینم ۱۲۵ جواب رو میده یا نه

        • این کار رو انجام دادم اما به جای اینکه بیشتر از یک جواب بده نتیجه ش این بود که مدل نشدنیه.
          راهی هست که تو دستور display بگم برای هر کدوم از eها نتیجه رو نمایش بده؟

        • خب نمیدونم چجوری تعریف کردین شما و چی رو چجوری نشون بده. اینکه e چجوری تعریف شده و مدل چجوری داره حل میشه و e چه مقادیری میگیره یا گرفته مهمه خب

  140. سلام ممنون از سایت خوبتون
    من میخوام متغیرهای دوگان مربوط به هر محدودیت را بدست آورم وقتی به قسمت MARGINAL در قسمت جواب گمز نگاه میکنم برای برخی متغیرها EPS تعریف شده ممکنه راهنماییم کنید؟
    ممنون

    • سلام
      شما با دستور display میتونین دوگان یه متغیر و یا محدودیت رو ببینید. مثلا یه متغیر دارین به اسم x و یه محدودیت به اسم c1:

      display x.m,c1.m;

      که تو کد بالا m دوگان یا مارجینال مربوط به هر المنت محسوب میشه. هر جا هم eps گرفت. منظورش یه عدد خیلی کوچیک نزدیک به صفره

  141. با سلام

    گمز یکی از محدودیت هام رو غلط میگیره.یعنی صفحه ارور نمیاد که قرمز باشه ولی حل نمیکنه.آیا شما توی این خطایی مشاهده می کنید؟

    DGOEN(t) .. p(‘gen11’,t)/(sum(i , p(i,t)))=l=0.06;

    جالب اینه که اگر جای اون تقسیم ضرب بنویسم حلش میکنه.

  142. سلام
    من ی متغیر دارم با سه تا اندیس متمایز، قرار روی هر سه این محدودیتها، سیگما بگیرتو تابع هدفم، منتها مشکلی که هست اینه که حدود بالا و پایین این سبگما ها بهم مرتبط اند، مثلا فرض کنید سیگما اول روی i از یک تا n ، گرفته میشه، سبگمای دوم روی k از یک تا k_i که k_i بصورت پارامتر به مدل تزریق میشه، و سیگما آخر هم روی s از یک تا S_ki گرفته میشه. معادله مربوط به این قسمت از تابع هدفمو جطوری باید بنویسم؟
    ممنون.

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

  144. با سلام مجدد

    ببخشید میخواستم به این معادله نگاه کنید ببینید این معادله کجاش اشکال داره.ارور میده که :
    Equation infeasible due to rhs value

    demandcon(t,busp).. sum(i $ map(i,busp),w(i,t)*p(i,t))-sum(bus,linedata(bus,busp,’1/x’)*(d(bus)-d(busp)))=e=sum(bus,demand(t,bus));

    در کل یعنی چی که مقادیر سمت راست غیر ممکن هستند.این یکی از محدودیت های مسئله من هستند.

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

  145. با سلام خدمت شما
    ببخشید من سه تا تابع هدف دارم که به صورت تک هدفه برنامه گمز آن را نوشته ام، حال میخاستم آنها را به صورت چندهدفه از روش اپسیلون محدودیت حل نمایم کسی در این رابطه اطلاعی داره کمکم بکنه ممنون میشم. بنظرتون کد زیر در این رابطه درست می باشد؟آخه بهم اررور میده.اگه میشه لطف کنید راهنمایی بفرمایید خیلی ممنون از شما.
    MODEL SM1 /ALL/ ;
    solve SM1 using mip minimizing z1;
    display x.l,d,In.l,y.l;
    parameter z11;
    z11=z1.l;
    equation cont10;
    cont10..z1=l=z11;

    MODEL SM2 /ALL/ ;
    solve SM2 using mip minimizing z2;
    display x.l,d,In.l,y.l;
    MODEL SM3 /ALL/ ;
    solve SM3 using mip minimizing z3;
    display x.l,d,In.l,y.l;
    MODEL SMt /ALL/ ;
    solve SMt using mip minimizing zt;
    display x.l,d,In.l,y.l;

  146. سلام و بسیار ممنون بابت راهنمایی های ارزشمندتون
    سوالی داشتم امکانش هست کمکم کنید tپارامتر هست از یک تا ۸ و در set تعریف شده ، tnمتغیر هست که باید مقدار بهینه اش مشخص بشه
    برای بیان اینکه اگر t<tn آنگاه متغیر xصفر درغیر اینصورت یک بشه ،چرا این طرز نوشتن اشتباهه؟
    E1..x(f,a,t)=e=if then (t<tn,0,1);

    سوال دومم اینه دو تامحدودیت دارم که میخام برای t<tn بررسی بشن برای همین میخاستم t<tn رو بصورت یه محدودیت بنویسم اما ارور داد چون t در set هست اشتباهه
    میشه کمکم کنید

    • سلام
      اولا E1 باید به ازای اندیس ها باشه
      ifthen هم باید سر هم باشه
      به جای t باید بنویسین ord(t)
      سالور هم باید چیزی مث sbb باشه.
      تو کامنتای همین تاپیک بگردین. جواب سوالاتون رو با کلمات ord.ifthen پیدا میکنین

      • خیلی خیلی ممنون
        اون دوتا محدودیت رو به اینصورت نوشتم خطای ۵۲ داد:
        Endogenous $-control operations not allowed

        ;((E3(f,t,a)$(ord(t)<tn)..x(f,a,t)=l=Nperiod*(1-x(f,a,t

        • سلام
          وقتی tn متغیره نمیتونین از دستور شرطی استفاده کنین که.
          فقط ifthen یا اینکه مدلسازیرو مقداری دستکار کنین.

  147. سلام و خسته نباشید
    میخواسم بدانم این عبارت را چگونه می توان در گمز نوشت

    ۳ + ۲*(ln(X

    واین مسئله چه نوع مسئله ای است آیا NLP است؟

    • سلام
      اگه منظورتون از x متغیره بله مسئله nlp هست.
      لگاریتم رو بر مبنای نپر به شکل log و لگاریتم بر مبنای ۱۰ هم به شکل log10 باید بنویسین.

      log(x)*2+3

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

    Exec Error at line 37: log: FUNC SINGULAR: x = 0
    **** (Exec Error at line 37: overflow in * operation (mulop

    • سلام
      جلو لگاریتم نباید صفر بشه به هیچ وجه. پس متغیری که تو لگاریتم هست باید بزرگتر و نامساوی صفر باشه. میتونین براش کران پانن در نطر بگیرین.
      X.lo=0.0001

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

        • بعنوان مثال این محدودیت

          ((db(t).. dT(t)=e=aT(t)- 30*log(pT(t))+ 21*log(s(t
          این هم محدودیتهایی که داخل لگاریتم صفر نشود
          gh(t)..pT(t)=g=0.01;
          sh(t)..s(t)=g=0.01;

          پیغام خطا برای محدودیت
          **** Exec Error at line 42: log: FUNC SINGULAR: x = 0
          **** Exec Error at line 42: overflow in * operation (mulop)

          —- db =E= every site every day one request logical

          db(1).. (UNDF)*s(1) + (UNDF)*pT(1) + dT(1) =E= 56.5458191457125 ; (LHS = UNDF)

          db(2).. (UNDF)*s(2) + (UNDF)*pT(2) + dT(2) =E= 56.0952572431513 ; (LHS = UNDF)

          db(3).. (UNDF)*s(3) + (UNDF)*pT(3) + dT(3) =E= 55.6482854562008 ; (LHS = UNDF)

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

  150. من این محدودیت در گمز نوشتم

    (ooc(i,j).. sum(k$(ord(k)>=1 and ord(k)<=9),x(i,j,k)*x(i,j,k+1))=e=(d(i)-1)*z(i,j

    ولی نمیدونم چرا اینطوری بازش می کنه و در جواب مینویسه یکی از ایکسهارو صفر نشان میده

    (ooc(a,a1).. (0)*x(a,a1,1) + (0)*x(a,a1,2) + (0)*x(a,a1,3) + (0)*x(a,a1,4)

    + (x(a,a1,5)*(0) + (0)*x(a,a1,6) + (0)*x(a,a1,7) + (0)*x(a,a1,8

    (x(a,a1,9)*(0) + (0)*x(a,a1,10) – z(a,a1) =E= 0 ; (LHS = 0

        • ببینید قانون اول تو اگاریتم اینه که پایه صفر نشه. یعنی لگاریتم ۰ بر مبنای ۱۰ مثلا بی معنیه. تو گمزم همینه. شما نباید بذارین که لگاریتم واسه یه لحظه هم که شده صفر بگیره جلوش.
          مثلا وقتی logx دارین. باید برای x یه حد پایین بگیرین

        • لطفا همونطوری که گفته، خط ۳۷ فایل lst رو اینجا کپی کنین.
          البته اگه فایل رو تغییر ندادین. اگه دادین، مجددا ران کنین، و خطی که گفته را کپی کنین همینجا

        • شما سوال قبلی من جواب میدین
          من منظورم این سوالم است در مورد صفر خواهشا بیشتر توضیح دهید من دلیل گذاشتن صفر جای یکی از ایکسهارو متوجه نمیشم

          “من این محدودیت در گمز نوشتم

          (ooc(i,j).. sum(k$(ord(k)>=1 and ord(k)<=9),x(i,j,k)*x(i,j,k+1))=e=(d(i)-1)*z(i,j

          ولی نمیدونم چرا اینطوری بازش می کنه و در جواب مینویسه یکی از ایکسهارو صفر نشان میده

          (ooc(a,a1).. (0)*x(a,a1,1) + (0)*x(a,a1,2) + (0)*x(a,a1,3) + (0)*x(a,a1,4)

          + (x(a,a1,5)*(0) + (0)*x(a,a1,6) + (0)*x(a,a1,7) + (0)*x(a,a1,8

          (x(a,a1,9)*(0) + (0)*x(a,a1,10) – z(a,a1) =E= 0 ; (LHS = 0

        • سلام
          کدتون رو دیدم. چند تا نکته:
          اول اینکه وقتی مدل حل میشه، درصورتی که دو تا متغیر در هم ضرب شده باشن، یکیشون رو عدد بهینه ش رو میذاره و یکیشون رو هم همینجوری به صورت مجهول میذاره. مث همین چیزی که برای شما رخ داده. همه x ها تو حالت بهینه صفر شدن. واسه همین فر مول شده صفر ضربدر متغیر.
          نکته بعدی اینکه جواب مدل شما بهینه هست. ولی همه چی صفر میشه. مشکلی هم برای مدل ایجاد نمیشه! هدف ماکسیمم سازی هست که به x ربط داره. ولی تو محدودیت lc شما مجموع x ها رو برابر صفر گرفتین. انتظار درستی نیست مجموع چند عدد مثبت برابر صفر بشه، ولی عدد مثبت و غیر صفر به خودشون بگیرن. مثلا به جای اون صفر که گذاشتین، یک بذارین. ببینین چه بلایی سر جواب میاد.

        • مشکل از محدودیت آخر نمیدونم چرا وقتی حذفش می کنم جواب میده تا حدودی جواب میده

  151. با عرض سلام و خسته نباشید
    بنده یه برنامه دارم به این صورت:
    /۲۴*۰,۱/ tt
    /24*1/ (t(tt
    بعد خواستم که به ازای زمان ۰ یکی دو تا از پارامترهام صفر بشه یا یه مقدار از پیش تعیین شده بگیره
    P.fx (h,tt)$(ord(tt) eq 0)=0
    ولی این خواسته من اجرا نمیشه و P برای زمان ۰ هم مقدار میگیره،لطف کنید بفرمایید که مشکل از کجا میتونه باشه.
    با تشکر

  152. با سلام مجدد
    مقادیر بدست اومده برای یکی از متغییرهام با محدودیت مربوط به اون متغییر صدق نمیکنه
    علت چیست؟
    با تشکر

  153. سلام ببخشید چطور میتونم سه تا حلقه for تو هم بنویسم که به هر for ی فرمولی اختصاص داده شه و برای هر حلقه مثلا به این صورت باشه: برای i از یک تا یازده به طوری که شمارنده سه تا سه تا بالا بره یعنی مقادیر زیر رو فقط حساب کنه
    i=1,4,7,11

    در واقع هم نوشتن forرو بلد نیستم
    هم اینکه چندتا for تو هم باشه که به هر for ی محدودیت اختصاص داده شه
    و هم اینکه شمارنده به ی اندازه مشخصی هربار اضافه شه

    و اگه از حلقه for استفاده کنم نیاز به solver خاصی هست یا با bonmin ران میشه؟

    ممنون از لطفتون

  154. سلام مجدد،
    من تابع هدف زیر را در گمر نوشته ام، می خواهم اندیس t، به جای اینکه تا آخرین مقدار تعریف شده در مجموعه برای اندیس t، فرضا T، شمرده شود، تا T-1 شمرده شود.آیا چیزی که در تابع هدف زیر نوشته ام، چنین خواسته ای را برآورده میکنه؟
    SUM((C1,C2,J1,T)$(ORD(T)<=ORD(T)-1)AND ORD(C2) NE ORD(C1),RC(J)*Q1(C1,J1,T)*Q2(C2,J1,T+1))

    • سلام
      خیلی واضح نبود
      اگه منظورتون اینه که از یک مثلا شروع بشه تا یک عضو مونده به آخر: به جای ord دومی که نوشتین بنویسین card(t)

  155. سلام و سپاس بابت راهنمایی هاتون
    میشه کمکم کنید این محدودیت رو چطور برای t های کمتر از n بنویسم
    sum(j,x(f,j,t))=1
    متغیرx باینری است
    و n متغیری هست که مقدارش مجهوله
    و j از یک تا سه است
    خودم اینجور نوشتم ولی بعد یک رو
    نمیدونم چی بذارم
    sum(j,x(f,j,t))=e=ifthen(t<n,1,???)
    چون برای t≥n فقط x(f,1,t)و x(f,2,t) صفر هستن ولی x(f,3,t) همچنان یک هست برای همین نمیتونم صفربذارم.
    ممنون

  156. سلام مجدد،
    من سه تا مجموعه دارم j1،j2،c. یک متغیر باینری هم دارم، q. دو تا محدودیت دارم به شکل زیر،
    cons(c,j1)..sum(j1,q(j1,j2,c))=e=1
    cons(c,j2)..sum(j2,q(j1,j2,c))=e=1
    میخواستم ببینم مشکلی نداره یک متغیر روی دو دسته اندیس متمایز j1 و j2 جمع گرفته بشه؟؟الان این دو تا محدودیت که نوشتم از نظر گمز مشکل نداره؟

  157. با سلام و تشکر از راهنمایی های ارزشمندتون
    قسمتی از تابع هدفم بصورت زیر هست
    میشه کمکم کنید چطور خطیش کنم؟
    y(y-x)
    که xو y هر دو متغیر باینری هستند

    • سلام
      این میشه y*y-y*x
      y*y همون y میشه. چون باینریه. البته اگه اندیسا یکین.
      y*x هم بارها تو سایت گذاشتیم چجوری خطی میشه.

  158. سلام
    بنده یک مدل نوشتم که علامت ترم های تابع هدفم منفی است.یعنی متغیر و پارامتر مثبتند ولی علامت منفی در تابع هدف گرفته اند.زمان حل مقدار تابع هدف مثبت به من میده و نمیده مشکل از کجاست.وقتی در نتایج میرم همه هم منفی نوشته ولی تابع هدف مثبت نشان می دهد.به نظرتون دلیل خاصی داره؟

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

    • سلام
      اینکه مخرج گذاشتین چه مشکلی داشت؟ ارور تقسیم بر صفر میداد؟
      و اینکه اگه پارامتر بذارین، مشکلی هست براش loop بنویسین؟

      • نه ، ارور تقسیم بر صفر نمی داد ولی اگه صورت کسر متغیر باشه مخرج هم متغیر،خب نمیشه سالور رو مثلا lp یا mip تعریف کرد،نشدنی میشه.
        من تو برنامه اصلی ام که ابتکاریه با while کار کردم که دلیلش هم این بود که نمی دونستم چقدر تکرار می خواد ، اینجا به بن بست خوردم.

        • یه مثال میشه بزنید از اینکه پارامتر رو در loop مقدارش رو تغییر بدیم و البته این loop در قسمت equation باشه؟

          ممنون

        • ببینید من این رو پیشنهاد میکنم:

          parameter zz,objValue(i);
          equations
          .
          .

          ;
          c1.. zz=e=something;
          model mymodel /all/;

          loop(i,
          zz=z(i);
          solve mymodel us lp min obj;
          objValu(i)=obj.l;
          );
          display objValue;

          نمیدونم چقد به دردتون بخوره. ولی loop نباید توش دستور model باشه و بهش دقت کنین

  160. ممنون از پاسخ تون
    ببینید تقریبا یک چنین چیزی هست ،
    objfunc = sum((i,j)$(ord(i) ne ord(j),l(i,j) * n(i,j)));
    n(i,j) قبلا به عنوان پارامتر تعریف شذه، یک ماتریسه ۲ بعدی هس و مقدار داره.
    l(i,j) هم قبلا به عنوان متغیر تعریف شده و قبل از equations ، فرمول بدست آوردنش بیان شده. منتها یک مساله اینه که مینیمم ماکزیمم تابع هدف رو می خوایم، برای این کار مثل مساله مونتاژ باید ماکزیمم تابع هدف رو به عنوان محدودیت بیارم و هدف solve رو مینیمم کردن بیان کنم؟
    مساله بعدی اینه که در فرمول بدست آوردن تابع هدف دو پارامتر دارم که ابتدای کار مقدار دارند، بعد باید در طی ۲ مرحله مثلا از بین چند گره یکی که قبلا انتخاب نشده و مثلا کمترین فاصله با گره جاری را داره انتخاب شه و اینجا بسته به اینکه چه گره ای انتخاب میشه یکی از پارامترها که در بالا ذکر کردم، اینجا برای این گره مقدارش باید عوض شه.
    هر دو پارامتر از نوع بردار هستند.
    پارامتر دیگه هم وقتی تمام مراحل انتخاب انجام شد و مسیرها مشخص شدند در رندی که قبلا حداکثرش رو مشخص کردیم مقدار اون پارامتر دوم برای گره های متناظر هم طبق فرمولی تغییر می کنه.
    این روند رو چطور می تونم پیاده کنم؟
    این کار رو در متلب انجام دادم ولی اینجا می خوام با نوشتن این کدها بگم که اون چیزی که قبلا در متلب نوشته بودم ،در گمز مدل ریاضی اش این هست.

    ببخشید خیلی زیاد شد ، ولی گفتم توضیح کامل بدم که ازتون راهنمایی بگیرم.
    ممنون

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

      ممنون

      • سلام
        یعنی چی کاراکتر بده؟
        یعنی اینکه مثلا پارامتر a مساوی با گردو باشه و b مساوی با سیب؟
        یا اینکه با کوتیشن a(‘tehran’) رو برابر ۵ قرار بدین مثلا؟

        • ممنون
          منظورم اینه که اگر status اسم یک پارامتر باشه و من می خوام این پارامتر رو مقداردهی کنم با ‘normal’
          status = ‘normal’
          این چیزی که بالا نوشتم خطا میده ، حتی اگه اینجوری بنویسم
          status = “normal”
          چطوری می شه این مقدار این پارامتر را با عبارت normal مقدار بدم؟
          با تشکر فراوان

    • سلام خانم جعفری
      در مورد سوال اولتون. یعنی چی معادله L قبل از دستور equation اومده؟ اینکه کار درستی نیست. به عنوان جواب اولیه میاد یا چجوریه؟
      سوال دوم: بله مینیمم و ماکسیممف با همون شرایط و فضای جواب
      سوال سوم به بعدو نفهمیدم. سعی کنین با فرمول توضیح بدین.
      شما ۱۴ کامنت دارین تو سایت ما. کامنتاتون معمولا خیلی زبان روانی دارن. ولی این یکی دو تای آخر خیلی سخت بود فهمشون خدایی. 😀 شاید من مقداری حوصله ندارم

  161. با سلام و تشکر از سایت خوبتون
    ببخشید این محدودیت در گمز چه جور نوشته میشه (علامت عضویت چه جوری تعریف میشه)
    Sum ((n|(I,n)∈A),z(I,n))=x(I,j) be ezai i∈I, j∈J, i≠j

  162. سلام.
    فرض کنید یک مجموعه تعریف کردیم که اسمشو میذاریم A. روی این مجموعه بکمک آلیاس، مجموعه دیگه ای به نام B تعریف میکنیم.مجموعه سومی هم تعریف میکنیم با نام I.حالا فرض کنید یک محدودیت داریم به شکل زیر:
    SUMMATION(i,Q_IC)=1) FORALL C(C’)، که در اون C روی مجموعه A و C’ روی مجموعه B حرکت میکنه. میخواستم بدونم ما باید دو تا محدودیت تعریف کنیم بازای A و B یا اینکه چون تعریف کردیم B آلیاس A، گمز محدودیت روی C که عضو A هست رو برای C’ که عضو B هست هم محاسبه می کنه؟
    ممنون.

  163. من فکر می کردم میشه یک متغیر تصمیم رو قبل از equation ،معادله اش رو نوشت که الان فهمیدم نمی شه و حتما باید تو equation نوشته شه.
    بعد اینکه ۲ تا سوال بود :)

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

  164. سلام خسته نباشید.من داخل معادلاتم رادیکال دارم و زیر رادیکال دو متغیر با توان دوم. از SQRT و SQR استفاده کردم خطا داد.
    ممنون میشم راهنماییم کنین

      • ببخشید من منظورمو اشتباه رسوندم و شما تصور کردیم که متغیرهارو از رادیکال بیرون بیارم. ولی چون زیر رادیکال دو تا سیگما دارم نمیشه اینکارو انجام داد. در کل رادیکال و توان رو چجوری باید کد کرد؟وآیا شما تو سایتتون نمونه برنامه ریزی چند هدفه دارین؟