۴۹۷

خطاهای گمز

با اطمینان ۹۹ درصد تمامی کد نویسان گمز -از مبتدی گرفته تا فوق حرفه ای یا توسعه دهنده-
پس از Run کردن مدل خود، حداقل یک Error را مشاهده خواهند کرد.

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

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

 

497 دیدگاه در “خطاهای گمز

  1. سلام با سپاس از سایت خوبتون
    من یه دستور شرطی نوشتم و هنگام ران کردن با خطای ۱۴۳(A suffix is missing) مواجه میشم . به نظرتون اشکال کارم کجاست؟

    • سلام
      مشکل از اینه که شما تو جایی که باید از ویژگی هایی مانند l، .lo, .up, .scale, .fx و… استفاده کنین، نکردین.
      مثلا مدل شما حل شده و بعد تو دستور display میخواین مقادیر بهینه متغیر تصمیم X رو تو خروجی براتون نشون بده. اگه فقط بنویسین display X این عمل دقیقا همین ارور شما رو میده، درستش اینه که .L رو هم بزنین.
      سوالتون رو به عنوان تاپیک جداگانه مطرح کردم که بقیه هم استفاده کنن.
      موفق باشین

    • سلام
      یعنی اینکه شما باید اون متغیری که قراره بهینه کنین (همونی که برابر تابع هدفتونه) رو به صورت متغیر آزاد تعریف کنین. free variable or variable

  2. سلام و خسته نباشید
    من چندتا سوال داشتم پرسیدم ولی انگار ثبت نشده سوالام
    ممنون میشم راهنمایی کنید

    ۱٫ مساله من چندهدفه هست و می خوام بدونم روش اپسیلون به چه صورت هست دقیقا؟آیا همین هست که یکی از توابع هدف به عنوان محدودیت در نظر گرفته میشه و کوچیکتر از یه مقدار اپسیلون قرار میگیره و در هربار اجرا مقدار اپسیلون رو تغییر میدیم؟

    ۲٫ و اینکه با توجه به اینکه مساله چندهدفه هست، در هر اجرا چه جوابایی میده؟یعنی جواب اون تابعی که در محدودیت ها نوشتیم چطور به دست میاد؟و آیا مثلا در هربار اجرا یه تعداد جواب مثل جوابای پارتوی متلب میده؟

    ۳٫ توی مسائل تک هدفه، توی ابعاد کوچک، معمولا جواب گمز با متلب برابره. توی مسائل چندهدفه به چه صورتیه؟چون متلبش جوابای پارتو میده.گمزشم نمی دونم آیا تک جواب میده در هر اجرا یا اینکه چند جواب پارتو. اگر چندجوابی هست، این برابری به چه صورتی به دست میاد؟(درواقع میخوام بدونم در نهایت چجور جوابایی بدست میاد)

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

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

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

        من نتونستم توی سایتتون روش اپسیلون رو پیدا کنم. واقعا ممنون میشم اگه قبلا توضیحی در موردش دادین لینکشو بهم بگید چون سوالام زیاده:(

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

  3. با سلام و عرض خسسته نباشید…
    من یه برنامه با گمز نوشتم…راستش نسخه گمز من ۳۲ بیتی بود وا ین برنامه رو اجرا میکرد و مشکلی نداشت.بعد به خاطر اینکه مجبور بودم گمز و متلب رو با هم مرتبط کنم، مجبور شدم نسخه ۳۲ بیتی رو حذف و نسخه ۶۴بیتی گمز رو نصب کنم.بعد از کار وقتی برنامه رو اجرا میکن یه پیغام خطای عجیب میده که با پیغام خطای معمولی فرق میکنه…یه برنامه دیگه رو اجرا کردم ، مشکلی نداشت و برنامه به درستی اجرا شد.بعد برنامه اول رو که مشکل داشت با یه سیستم دیگه اجرا کردم ، توی اون سیستم که از نسخه گمز ۲۴٫۲ استفاده میکنه کار کرد و هیچ خطایی هم نداشت…من خودم از نسخه گمز ۲۴٫۱ استفاده میکنم.متن خطایی هم که میده بصورت زیر هستش:

    gams: **** Error: Parameter error(s)
    : Reading parameter(s) from “pchar”
    : Reading parameter(s) from “C:\Users\Javad\Documents\gamsdir\projdir\$gms1.par”
    : *** Error line 12: Value expected for key “InputDir”
    : Finished reading from “C:\Users\Javad\Documents\gamsdir\projdir\$gms1.par”
    : Finished reading from “pchar”
    Exit code = 6
    ممنون میشم اگه بنده رو راهنمایی بفرمایید…

  4. با سلام و خسته نباشید
    من یه کد با گمز نوشتم و هنگامی که ران کردم جواب غیرمنطقی شد و علتش هم به این خاطر است که در قسمت جواب متوجه این error شدم . ممنون میشم اگه راهنماییم کنید. با تشکر.

    Compressing row and column files.
    Basis recovery file written to ‘.xxx’.
    CPLEX Error 1001: Out of memory.
    Consider using CPLEX node files to reduce memory usage.
    CPLEX Error 1001: Out of memory.

    =1
    MIP status(109): error termination
    Cplex Time: 6722.24sec (det. 1289519.23 ticks)
    =2
    =1
    *** CPLEX Error 1001: Out of memory.

    =2
    =1
    Fixing integer variables, and solving final LP…
    =2
    Presolve time = 0.31 sec. (11.98 ticks)
    Insufficient memory for presolve.
    CPLEX Error 1001: Out of memory.
    =1
    Fixed MIP status(0):
    Cplex Time: 0.34sec (det. 16.82 ticks)
    =2
    =1
    *** CPLEX Error 1001: Out of memory.

    =2

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

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

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

        • ممنون از پاسخگویی شما
          راستی از دستور option threads=0 استفاده کردم مدلم جواب داد.این دستورو برای مدلایی که جوابشون بدست میومد استفاده کردم دیدم جوابایی که با این آپشن بدست میان کمی تفاوت دارن.این دستور اصلا برای چی استفاده میشه؟الان من چیکار کنم؟برای بقیه مدلامم از این دستور استفاده کنم یا فقط برای اونی که جواب نمیداد؟
          ببخشید که اینقد سوال میپرسما.سایت شما تنها سایتی هست که به سوالات گمز اونم در اسرع وقت جواب میده.و از این بابت از شما تشکر میکنم خیلی زیاد.

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

  5. با سلام
    در تعریف محدودیت ((sum(i,z(i,j))=e=sum(i,z(j,i
    ارور ۱۷۱ اعلام شد مبنی بر اینکه domain violation for set. من متوجه نمیشم چه تغییری باید ایجاد کرد.

    پیشاپیش از پاسخ گویی شما سپاسگزارم

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

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

        کلا zij براش تعریف شدست و تو محدودیت ها باهاش مشکل نداره ولی از zji ارور میگیره.

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

        ۲٫ وقتی توی set بازه ی j رو از صفر تا n تعریف میکنیم چطور میتونیم بنویسیم که سیگما روی j از j مساوی “یک” تا n حساب بشه؟

        • سوال اول: از دستور alias استفاده کنین وجدا جدا I و j رو تعریف نکنین، i رو تعریف کنین و j رو alias کنین. به بخش مجموعه ها مراجعه کنین.
          سوال دوم: از دستورات شرطی استفاده کنین. جواب این سوال تو بخش معادلات به وفور مشاهده میشه.
          سوال سوم: اینم همون سوال دومه. از دستور ord و دستورات شرطی استفاده کنین.

  6. سلام، در ران گرفتن از مدل خطای ۷ ظاهر شد که به لایسنس گیر میداد، اون نسخه ای از لایسنس که برای مسائل سطح متوسط به بالا گذاشته بودید رو هم امتحان کردم ولی همچنان خطا پابر جاست.

  7. یک متغیر باینری w با اندیس i معرفی کردم تو بخش متغیرها. اگر متغیر xi باتوجه به محاسبات مدل مقداری بزرگتر از صفر بگیره wi میشه یک و در غیر اینصورت صفر. محدودیت مربوطه رو به شکل نوشتم:

    (co15 ..w(i)=e=ifthen((x(i)=g=(0+eps)),1,0

    گمز ارور ۱۴۹ میده مبنی بر اینکه برای یک مجموعه غیرقابل کنترل مقدار ثابت در نظر گرفتی. با توجه به اینکه تمام اعضای این محدودیت تو محدودیت های قبلی تعریف شدن و هیچ مشکلی نداشتن، میشه لطفا بفرمایید ایرادش چیه و چطور می تونم برطرفش کنم؟(در مورد ifthen هم مطمئن نیستم با توجه به کامتنای همین سایت نوشتم)

  8. سلام
    اگر دو تا مجموعه i و j داشته باشیم و بخواهیم زوج مرتبی تعریف کنیم که مولفه اول مربوط به مجموعه i و مولفه دوم مربوط به j باشه، که هر کدوم از مولفه ها یه عدد تصادفی یکنواخت بین (۰و۱۰۰) باشه طوری که هیچ زوج مرتبی از این مجموعه ها با هم مساوی نباشد، چطوری نوشته میشه؟
    برای کدی که من نوشتم ارور domain list redefined 184، و ارور ۱۷۱ domain violation for set رو میگیره..

    sets
    i /1*5/
    j /1*10/;
    parameters
    a(i)
    a(j)
    b(i)
    b(j);
    a(i)=uniform(0,100);
    a(j)=uniform(0,100);
    b(i)=uniform(0,100);
    b(j)=uniform(0,100);

    میشه راهنمایی کنید باید چیکار کنم؟
    مرسی

  9. سوالمو اشتباه بیان کردم.
    میخوام برای هر عضو مجموعه i زوج مرتب (a,b) رو بصورت یکنواخت تو بازه (۱۰۰و۰) تولید کنه و به همین ترتیب برای مجموعه j.
    و اینکه کلا هیچ دو زوج مرتبی با هم برابر نباشه. فرقی نداره که هر دو تا زوج مرتب مربوط به مجموعه i هستند یا یکی مربوط به مجموعه i و یکی مربوط به مجموعه j.
    در واقع نمیخوام هیچ دو زوج مرتبی تو فضا روی هم قرار بگیره

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

  10. مثلا فرض کنید برای مجموعه i زوج مرتب هایی که تولید میشه به این شکل باشه:
    (a1,b1) , (a2,b2) ,…, (a5,b5)

    و زوج مرتب هایی که برای مجموعه j تولید میشه به این شکل باشه:
    (aa1,bb1) , (aa2,bb2) ,…, (aa10,bb10)

    میخوام این شرط برقرار باشه که:
    a1,b1)≠(a2,b2) , (a1,b1)≠(a3,b3) , (a1,b1)≠(a4,b4) , (a1,b1)≠(a5,b5) , (a2,b2)≠(a3,b3) ,…, (a4,b4)≠(a5,b5)

    و همچنین:
    (aa1,bb1)≠(aa2,bb2) , (aa1,bb1)≠(aa3,bb3) ,…, (aa9,bb9)≠(aa10,bb10)

    و همچنین:
    (a1,b1)≠(aa1,bb1) , (a1,b1)≠(aa2,bb2) ,…, (a5,b5)≠(aa10,bb10)

    مثلا مولفه a1 به تنهایی میتونه با هر مولفه ای مثل a2,a3,….aa10,b1,…,bb10 مساوی باشه ولی همزمان هر دو تا مولفه از یک زوج مرتب نباید با هر دو تا مولفه از زوج مرتب دیگه برابر باشه.

    • سلام
      ببینید اینکه دقیقا چه استفاده ای میکنید دقیقا مشخص نیست. حالا من یه جوابی میدم تا ببینیم چی میشه.
      فرض کنیم یه مجموعه i,j داریم به صورت زیر:

      set
      i/a1*a5,aa1*aa10/
      j/b1*b5,bb1*bb10/
      ;

      بعد یه مجموعه دیگه داریم به صورت E(i,j) که زوج مرتب باهاش ایجاد میکنیم و دستی زوجها رو تایپ میکنیم. مث مثال زیر:

      set E(i,j)/a1.a4,aa2.b3,a5.bb10/
      ;


      مثال بالا میگه که a1,b4 یه زوج مرتب هستن و aa2,b3 یه زوج مرتب دیگه. حالا تو مرحله بعد میایم بهشون عدد میدیم. فرض کنیم یه پارامتر داریم، که باید به هر کدوم از این زوجا یه عدد تصادفی بده. این کارو به شکل زیر میتونیم انجام بدیم:

      parameter D(i,j);
      D(i,j)$(E(i,j))=uniform(0,100);

      این لینک هم براتون مفیده. اینجا

      • مرسی. این لینک دوباره برمیگرده به همین صفحه.
        و اینکه جمله شرطیه کامله؟ یعنی به D عدد تصادفی یکنواخت تعلق میگیره اگه E…؟

  11. مرسی از پاسخگوییتون. ولی این لینکی گذاشتید باز نمیشه.. نام نویسی کردم ولی پیغام میده شما مجوز کافی برای دسترسی به این برگه رو ندارید

  12. سلام. من یک مسئله دارم که در داخل کتاب با روش لاگرانژ بهینه سازی کرده. می خواستم ببینم چه جوری این روش رو داخل گمز میتونیم پیاده سازی کنیم. مثلا یه مثال اینجوریه:
    f(x1,x2) = 0.25×1^2+x2^2 و قید مسئله هم به صورت w(x1,x2)= 0
    و w(x1,x2)=5-x1-x2
    این سوال با روش لاگرانژ به سادگی حل می شه و میخواستم واسه تمرین با گمز حلش کنم. ایا امکانش هست؟ میشه راهنمایی بفرمایین؟ ممنون

  13. این مسئله که گفتم داخل گمز بدون روش لاگرانژ قابل حله ؟
    وقتی داخل روابط توان دو داریم روش بهینه سازی چی میشه؟ mip؟

  14. سلام . چرا وقتی در قسمت معادله رابطه توان دو مینویسم ارور میگیره؟ باید در قسمت متغیرها دستور خاصی تعریف کنم؟ مثلا:p(g)**2 را ارور $۱۴۹میگیره. یه سوال دیگه هم داشتم. ایا بین این طور نوشتن توان دو با این طور بیان فرقی وجود دارد؟ p(g)*p(g) ممنون از راهنماییتون

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

  15. سلام.وقتتون بخیر.مرسی از راهنماییهاتون.میخواستم بپرسم محدودیت زیر را میشه به صورت جداگانه هم نوشت؟
    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)=l=q(t);یک بار کوچیکتر مساوی و یک بار بزرگتر مساوی؟با تشکر

  16. سلام وقت بخیر
    من یک مسئله minlp دارم که وقتی با هر سالوری حل کردم به جواب نشدنی رسیدم. وقتی قید غیرخطی را از مسئله حذف کردم و دوباره مسئله را اجرا کردم جواب داد، جواب حل شده گمز را داخل اون قید غیرخطی بررسی کردم ،مشکلی نداشت یعنی این جواب ها برای قید غیرخطی صدق می کرد فقط بعضی وقتها بین دو مقدار یک متغیر یک اختلاف چند صدمی وجود داشت، این قید غیرخطی تقریبا برای مسئله ام مهمه چون ممکنه هزینه را از اینی الان حل کردم کمتر کنه، سوال من اینجاست آیا روشی وجود داره که به گمز بگم تا این مقدار اختلاف را نادیده بگیر مثلا اگر متغیر من x باشه بگم x مثبت یا منفی ۰٫۰۱ هم مشکلی نداره . یه جورایی میشه براش یک کران خطا تعریف کنم.

    • سلام
      بله هست. ولی روشی که من پیشنهاد میکنم اینه که شما وقتی مثلا متغیر صفر و یک که دارید، اون رو همون صفر و یک تعریف کنید. تو مرحله بعد برای bound بذارید که مثلا از -۰٫۹۹ تا ۱٫۰۱
      بعد تو مرحله بعد تایپ مدل رو بذارین rminlp به جای minlp . اینجوری احتمالا مشکل حل میشه.

  17. سلام
    من وقتی مسئله minlp را با سالورbonmin چه با حل کننده غیرخطی ipopt یا counnue حل می کنم خطایی با این عنوان که converged to a point of local infeasibility .problem may be infeasible را میده. برای رفع این مشکل از limrow را یک مقدار خیلی بزرگ در نظر گرفتم بازم مشکل حل نشد. لطفا راهنمایی کنید.

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

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

  19. سلام .خسته نباشید
    ببخشید من یک مدل minlp دارم،زمانی که برنامه رو اجرا میکنم حدود ۱۰۰ ثانیه ی طول میکشه بعد این پیام رو میاره.
    infesible solution.Reduced gradient less than tolerance
    خواستم ببینم مشکل کار از کجا میتونه باشه

  20. با سلام
    من برای مدل حمل و نقل فازی یک مدل دادم و برنامه آن را با گمز نوشتم ولی در اجرا به قسمت تابع هدف ارور می دهد خواهشمند است با توجه به نیاز به ارایه برای پایان نامه خواهشمند است در این زمینه مساعدت بفرمایید.
    با تشکر
    مدل حمل و نقل فازی دو بعدی ۳*۳برای ۰<α≤۰٫۲۵
    .
    .
    .
    .

    hazine.. sum((i,j),(((1-2*w+(1-4*w)*t(i,j))*c(i,j)*x(i,j)+2*w*c(i,j)*c(i,j)*x(i,j))/(1+(1-4*w)*t(i,j))+((1-2*w+(1-4*w)*v(i,j))*d(i,j)*y(i,j)+2*w*d(i,j)*d(i,j)*y(i,j))/(1+(1-4*w)*v(i,j)))=e=z;
    model transportation /all/;
    solve transportation using mip minimzing z

    • مدل حمل و نقل فازی :
      ببخشید من دوباره مزاحمتون شدم ولی مدل من خطای ۱۲۵ میده و هر کاری میکنم برطرف نمیشه
      ممنون میشم اگه کمکم کنید
      .
      .
      .

      • قربان سری قبل هم که کل کدتون رو گذاشته بودید. وظیفه ما رفع ارور نیست که. ارور ۱۲۵ میگه که وقتی شما یه اندیس رو تو sum استفاده کردین نباید تو sub-sum استفاده بشه. یا وقتی محدودیت به ازای i برقراره دیگه نباید رو i سامیشن ببندید

        • می خواستم فقط یه توضیح کوتاه بدم. من هم خطای ۱۲۵ را داشتم خیلی شانسی برطرف شد. چون من اطلاعات زیادی ندارم. ببینید من ابتدا معادله را تعریف کردم
          Equation
          cons0(i,j)

          بعد چند سطر پائین تر نامعادله (محدودیت) را نوشته بودم:
          cons0(i,j).. sum((i,j),s1(i,j)*X(i,j)) =G=ss1A;

          و خطا می گرفتم. پس عبارت بالا را به صورت زیر اصلاح کردم:
          cons0.. sum((i,j),s1(i,j)*X(i,j)) =G=ss1A;

          حالا دیگه خطا نمی داد. امیدوارم مفید واقع بشه

          ممنون از راهنمائی های صبورانه تون

  21. سلام.وقتتون بخیر
    یه مشکل داشتم در ران کردن مدلم
    ممنون میشم راهنماییم کنید:
    متغیرهای مسئله بنده، integer هستند تعداد متغیرهای اینتیجر ۶۴تا و تعداد قیدها هم ۲۴ تا هست وقتی در نوشتن مسئله این متغیرها را integer فرض می‌کنم مسئله اجرا نمی‌شود و خطای License می‌دهد اما وقتی آن را positive می‌گذارم اجرا می‌شود!
    مدل را هم mip درنظر میگیرم.
    ممنون میشم اگر بفرمایید مشکل از کجاست
    در ضمن نرم افزار بنده دمو هست اما گمان نمیکنم محدودیت های آن را نقض کرده باشد.

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

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

  23. ممنونم از پاسخ شما.
    راستش لایسنس رو دانلود کردم اما الان این خطا رو میده
    integer infeasible
    شما میدونید مشکل از کجاست؟!!!
    مدلی که دارم آماده هست همه داده هاش رو دارم فقط برنامش رو نوشتم.
    جواب خودش هم فیزیبل هست

  24. سلام ممنون به خاطر سایت خوبتون.
    مشکلی که گفتم مربوط به جابه جایی دو حرف بود، من به جای نوشتن lenght نوشته بودم length. و با این وجود برنامه نه خطا میداد و نه جواب صحیح. یه سوال داشتم برای بهبود جوابهای یه مسئله راهکار خاصی، option خوبی می تونید بهم معرفی کنید. من برنامه ام را با روش شاخه و کران غیر خطی حل می کنم، جواب های داخل مقاله از جوابی که من به دست میارم خیلی بهتره، البته میدونم شاید مدل اونا بهتر بوده که جواب بهتری داده اما آیا آیتمی میشه معرفی کرد که مقدار جواب بهینه را بهبود بده؟

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

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

    • سلام
      نه. البته هیچ نه ای وجود نداره! میتونین انقدر تو فایل inc ریز بشین که همه چی باهاش خلق کنین. یا تکنولوژی gdx . ولی بهترین راه اینه که وقتی شما دارین داده ها رو وارد میکنین، همزمان باهاش شبکه رو هم کم کم رسم کنین. اینجوری از صحت شبکه هم مطمئن میشین. ممکنه فرمول نویسی تو اکسل خیلی کمک کنه

  26. سلام آقای محمودی
    خسته نباشید
    چرا متغییرهای باینری بعد از اجرا کردن برنامه مقادیر غیر منطقی می گیرند(۰ یا ۱ نیست)
    که باعث میشه جواب مساله هم درست نباشد؟

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

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

  27. سلام من کد الگوریتم بندرز رو تو نرم افزار گمز نوشتم جواب کران های بالا و پایین واسه تمام سایزها با جواب حل مدل بدون استفاده از بندرز برابر میشه فقط واسه سایزهای بزرگ فایل با پسوند .lst باز نمیشه و یه پنجره باز میشه که توش نوشته
    parameter is incorrect میخواستم ببینم مشکل چیه اما جواب ها رو که تو فایل gdx ذخیره می کنم درست هستند
    ممنون

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

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

  28. با سلام خدمت شما
    من برای حل مدلم با خطای زیر مواجه میشم
    MIP status(108): time limit exceeded, no integer solution
    Resource limit exceeded, no integer solution found.
    پارامترها رو هم عوض میکنم مقادیر مختلف میدم ولی باز این خطا رو میده.اگه میشه لطفا راهنمایی بفرمایید اشکال از کجا میتونه باشه؟
    با تشکر

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

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

  30. سلام ببخشید من وقتی کد گمزم رو اجرا میکنم چون سایز برنامم بزرگه فایل lst رو به علت حجم زیاد باز نمیکنه چطور میتونم مشکل رو برطرف کنم؟
    ز دستور offlisting واسه کم کردن حجم استفاده کردم همچنین limrow و limcol رو هم برابر صفر قرار دادم اما حجمش خیلی کم نشد

  31. سلام خسته نباشد، ممنون از سایت خوبتون
    یک کد گمز که برای مدل minlp نوشته شده رو با سالور dicopt اجرا میکنم و جواب هم میده البته به بهینه نمیرسه و best solution رو میاره ولی تو یه سیستم دیگه میگه infeasible هست علت چیه و چه طوری میشه تو سیستم دوم هم به جواب رسید؟ با توجه به اینکه هر دو سیستم از یک لایسنس و سالور استفاده میکنند و تنها سیستم اول ۳۲ بیتی و دومی ۶۴ بیتی هست.

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

    totalCost .. Tcost =e= sum((i,j),(unitCost(i,j)+shipCost(i,j)+invCost(i,j))* x(i,j))+ sum(i,sum(j, F(i)));

    capacityLim(i,j) .. x(i,j) =l= (capAvg(i,j) + (capSV(i,j) * 1.28))* v(i,j);

    sumOne(j) .. sum(i, v(i,j)) =e= 1* y(j);

    supplierGoal .. sum(j,y(j))=l=6;

    باید تعداد تامین کنندگان رو کمتر از ۶ عدد بده اما برای کل ۱۰ تامین کننده بالقوه جواب رو بدست میاره. درواقع انگار دو خط آخر رو درنظر نمیگیره . حل می کنه.
    کسی میتونه کمکم کنه؟
    ممنون

      • بله. البته در خروجی y(j) رو نمیخوام. اما برای همه تامین کننده ها مقدار سفارش رو مشخص می کنه که نشون میده تمامی ۱۰ تامین کننده بالقوه رو به جای انتخاب ۶ تا از اون ها درنظر میگیره

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

  33. با سلام،
    در کد گمزی که من نوشتم خطای ۱۴۸ و ۱۷۱ چندین بار تکرار شده. میشه راهنمایی کنید که مشکل از کجاست و چه جوری باید رفعش کنم؟
    با تشکر

    • سلام.
      ارور ۱۴۸ در گمز نشون میده که شما یه المنت رو تعریف کردین که چندتا اندیس داره، ولی وقتی همون رو به کار بردین تعداد یا نوع اندیساش فرق میکنه.
      ارور ۱۷۱ در گمز هم نشون میده که شما واسه اندیستون یه محدوده تعیین کردین ولی در عمل این دامنه رو نقض کردین.

    • برای خطای ۱۸۴ ، توی برنامه تون یک متغیر یا پارامتر مثلا x رو با دو ست مجزا تعریف کردین ! مثلا x(i) و x(j) . برای رفعش باید یا تغییر متغیر انجام بدین یا اینکه دو مجموعه i و j را با alias به هم ربطشون بدین.
      خطای ۱۹۴، هم میگه متغیر یا پارامتر دوباره تکرار شده ! اگه کارهای بالا رو گفتم انجام بدین این خطا هم رفع میشه.

  34. سلام و تشکر بابت وقتی که میگذارید .
    من این کد رو به عنوان یک محدودیت توی برنامم نوشتم .

    ;(conste1(i,k,l).. x(i,k,l,m)*c(m)=g=b(i,k,l

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

    uncontrolled set entered as constant

    قبلش هم اندیس های I , K , L , M رو در قسمت مجموعه ها وارد و تعریف کرده ام .
    و همچنین (c(m رو هم در پارامتر ها تعریف کردم و با ازای هر m بهش مقدار دادم .
    چیکار باید بکنم که اروره برطرف شه ؟
    تشکر فراوان

  35. با سلام. من وقتی یک table را به طور مستقیم وارد گمز می کنم مدل اجرا میشه ولی وقتی از طریق فایل GDX وارد می کنم در محدودیت ها صدق نمی کنه. مشکل از کجاست؟ با تشکر.

  36. سلام وقتتون بخیر.ممنون از راهنمایی های خوبتون.من یه سوال داشتم .چطوری میشه سه تا سامیشن پشت سر هم رو کد کرد؟من سه تا سامیشن k,j,t دارم که به صورت زیر کد کردم ولی همش ارور ۱۴۸ رو میده که معنیش اینه که آیتم با اندیس های کمتر یا بیشتری نسبت به آنچه در مجموعه ها تعریف شده ارجاع داده شده.درحالی که من همه ی اندیس های بکار رفته رو در sets آوردم.

    z=e=sum(K,j,T),PR(k)*FJK(t,j,k)-CJK(t,j,k)*FJK(t,j,k)-CKJ(t,k,j)*FKJ(t,k,j)-CC(j)*FKJ(t,k,j)

  37. سلام روزتون بخیر
    کدی نوشتم که برای مقایسه دو گراف و پیدا کردن زیرگراف مشترک بینششونه ولی ارور
    ۵۷ Endogenous relational operations require model type “dnlp”
    256 Error(s) in analyzing solve statement. More detail appears
    Below the solve statement above
    رو میده در حالی که مدل خطیه و متغیر ها عدد صحیح هستن

    scalars sum1 “majmoo” /0/ , ppp “fixd”/1/ ;
    SETS
    I /1*9/
    J /1*11/
    K /1*9/
    L /1*11/;

    table G1(I,K)
    1 2 3 4 5 6 7 8 9
    1 0 1 0 0 0 0 0 0 0
    2 1 0 0 0 0 0 0 0 1
    3 0 0 0 1 1 0 0 0 0
    4 0 0 1 0 0 0 0 0 0
    5 0 0 1 0 0 1 0 0 0
    6 0 0 0 0 1 0 1 0 0
    7 0 0 0 0 0 1 0 0 1
    8 0 0 0 0 0 0 0 0 1
    9 0 1 0 0 0 0 1 1 0

    table
    G2(J,L)
    1 2 3 4 5 6 7 8 9 10 11
    1 0 0 0 1 0 0 0 0 0 0 0
    2 0 0 1 0 0 0 0 0 0 0 0
    3 0 1 0 0 0 0 0 0 0 0 0
    4 1 0 0 0 0 1 1 0 0 0 0
    5 0 0 0 0 0 1 0 0 0 0 0
    6 0 0 0 1 1 0 0 1 0 0 0
    7 0 0 0 1 0 0 0 1 0 1 0
    8 0 0 0 0 0 1 1 0 0 0 0
    9 0 0 0 0 0 0 0 0 0 1 0
    10 0 0 0 0 0 0 1 0 1 0 1
    11 0 0 0 0 0 0 0 0 0 1 0

    VARIABLES
    x(I,J) tanazorenode
    x2(K,L)
    w( I , J , K , L ) tanazoreedge
    z obj ;

    binary variables x , x2 ;

    EQUATION
    cst(I)
    cst2(J)
    cst3(I,J,K,L)
    cst4(I,J,K,L)
    cst5(I,J,K,L)
    zobj objectivefunc ;

    cst(I).. SUM( J , x(I,J) ) =l= ppp;

    cst2(J).. SUM( I , x(I,J) ) =l= ppp ;

    cst3(I,J,K,L)$(ord(I)lt ord(K) and ord(L)lt ord(J)).. x(I,J) + x2(K,L) =l= ppp ;
    cst4(I,J,K,L)$(G1(I,K)* G2(j,l)*w(i,j,k,l) eq ppp ).. w(i,j,k,l) =l= x2(k,l) ;
    cst5(I,J,K,L)$(G1(i,k)* G2(j,l)*w(i,j,k,l) eq ppp ).. w(i,j,k,l) =l= x(i,j) ;
    zobj.. z=e=sum (i, sum(j, sum (k, SUM( l , w(i,j,k,l) ))));

    MODEL exm ” a graph compare model ” / ALL / ;
    SOLVE exm USING RMIP MAXIMIZING z ;

  38. سلام .من هم در ران کردن مدلم به ارر out of memory مواجه میشم امکانش هست برایم اون فایل op4 که برای دوستان گفته بودید را ایمیل کنید؟ یا راه حل دیگه ای برای رفع این ارر نیست؟؟
    و اون کد option threads=0 بکار می اید در حل این ارر؟
    ممنونم

  39. یا عرض سلام و تشکر از زحمات شما
    ببخشید ارور ۷۱ مربوط به چی هست؟
    the symbol shown has been declared as an equation, but no symbolic equation(..) was found.hint – look for commas in the documentation text for the equation. use quotes around the text or eliminate the commas.

    • سلام
      ممنونم.
      دقت کنید که همه معادلاتی که در equation اسم براشون میذارین (مث c1) باید بعدش براشون فرمول هم بنویسین. (مث c1..). و بالکعس

  40. با سلام
    من تو ران کردن مدل با سالور سیپلکس به ارور ۱۰۰۱ یا همون out of memory برخورد می کنم. کاری میشه کرد و اینکه چطور میشه از workmem استفاده کرد.
    واقعا ممنونم

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

    • سلام
      لطفا ارور ۱۱۹ رو گذاشتیم تو مطالب.
      ارور ۱۱۹ در گمز
      ارور ۱۲۱ در گمز هم باید چک کنین کجا باید اندیس میذاشتین و نذاشتین، دنبال یه ویرگول بیشتر هم بگردین خوبه. اگه نشد. خطی که این ارور رو میده بذارین اینجا

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

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

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

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

          set E(i,j)/1.6/;

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

  42. من ۱۰ تا تامین کننده دارم و ۵ تا محصول و فقط تامین کننده ۸ محصول ۳ و تامین کننده ۹ محصول ۴ رو پشتیبانی نمی کنده. این شرط گفته شده رو باید برای همه تامین کننده ها بنویسم؟ یعنی مشخص کنم هر تامین کننده چه محصولاتی رو پشتیبانی می کنه؟
    و این شرط رو برای همه محدودیت هام تکرار کنم؟؟؟

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

      set i/i1*i10/
      j/j1*j5/
      e(i,j)/#i.#j/
      ;
      e("i8","j3")=no;
      e("i9","j4")=no;
      display e ;

      ببنید شرط باید جایی که لازمه به کار برده شه. مثلا شما یه متغیر دارین به اسم x(i,j,k) و i و j هم مث همون تعریفایی هستن که تو کد بالا نوشتم. وقتی این متغیر رو تو محدودیت به کار میبرین. این شرط $e(i,j) هم باید بنویسین. چون خود نرم افزار که اینو نمی فهمه.

  43. یه بار تنها کدی که شما نوشتید رو اجرا کردم. اما باز به اونایی که پشتیبانی نمیکنه تخصیص سفارش میده. بعد فکر کردم شاید باید این شرط $(e(i,j) رو هم بنویسم. تو همه فرمولایی که مقدار تخصیص توشون بود نوشتم. اما با ارور ۱۴۹ مواجه شدم.
    توروخدا کمک کنید. پایان نامم عقب افتاده :(

  44. expectedCost $(e(i,j)) =e= sum((i,j), (invCost(i,j)+ shipCost(i,j)+ unitCost(i,j))*x(i,j))+ sum (i, F(i)*w(i))

    capacityLim(i)$(e(i,j)) .. sum(j,UCap(i,j)* x(i,j)) =l= Cap(i)-(CapVar(i) * (0.25));

    demandLim(j) $(e(i,j)).. sum(i, x(i,j))=g= dAvg(j)+ (dSV(j)* (0.25));

    qualityLim(j)$(e(i,j)) .. sum(i,(quality(i,j)* x(i,j))) =l= QualityTol(j);

    leadTimeLim(j)$(e(i,j))..sum(i, (LT(i,j) * x(i,j))) =l= DeliveryTol(j);

    اینا تابع هدف و محدودیت هایی که با اعمال اون شرط نوشتم و ارور ۱۴۹ میده. مییشه کمکم کنید :(

  45. سلام
    ببخشید من متوجه منظورتون نشدم. چی رو اول هر خط بنویسم؟
    من اول کد تو بخش Sets اینا هارو تعریف کردم
    i suppliers/S1*S10/
    j products/P1*P5/
    e(i,j) / #i.#j/;
    e(“S8″,”P1”)=no;
    e(“S8″,”P2”)=no;
    e(“S8″,”P4”)=no;
    e(“S8″,”P5”)=no;
    e(“S9″,”P4”)=no;
    e(“S10″,”P2”)=no;
    بعدش تابع هدف و محدودیت هام به اینصورت بود

    totalCost .. expectedCost =e= sum((i,j), (invCost(i,j)+ shipCost(i,j)+ unitCost(i,j))* x(i,j))+ sum (i, F(i)*w(i));

    capacityLim(i) .. sum(j,( x(i,j)* UCap(i,j)))=l= Cap(i) + CapVar(i) * (0.25);

    demandLim(j).. sum(i, x(i,j))=g= dAvg(j)+ dSV(j)* (0.25);

    qualityLim(j).. sum(i,(quality(i,j)* x(i,j))) =l= QualityTol(j);

    leadTimeLim(j)..sum(i, (LT(i,j) * x(i,j))) =l= DeliveryTol(j);

    که بعدش هرجایی که مقدار تخصیص داشت اون شرطی که شما گفتید یعنی $(e(i,j) رو اضافه کردم و فرمولا به شکل زیر شد:

    totalCost ..
    expectedCost $(e(i,j)) =e= sum((i,j), (invCost(i,j)+ shipCost(i,j)+ unitCost(i,j))*x(i,j))+ sum (i, F(i)*w(i));

    capacityLim(i)$(e(i,j)) .. sum(j,UCap(i,j)* x(i,j)) =l= Cap(i)-(CapVar(i) * (0.25));

    demandLim(j) $(e(i,j)).. sum(i, x(i,j))=g= dAvg(j)+ (dSV(j)* (0.25));

    qualityLim(j)$(e(i,j)) .. sum(i,(quality(i,j)* x(i,j))) =l= QualityTol(j);

    leadTimeLim(j)$(e(i,j))..sum(i, (LT(i,j) * x(i,j))) =l= DeliveryTol(j);

    و حالا با اضافه شدن این شرط تو همه محدودیت ها و تابع هدفم ارور ۱۴۹ رو دارم .

    کجا رو اشتباه انجام دادم.
    مرسی بابت وقتی که میذارید. بسیار ممنونم

    • سلام
      ببخشید بابت تاخیر.
      خب معلومه ارور میده.
      تابع هدف شما به ازای مقادیری از I و J که نباید برقرار بشه که گفتین به ازای iوj هایی که شرط e رو دارن. این شرط رو ببرین تو خود معادله، مثلا اینجا:
      sum((i,j)$e(i,j), (invCost(i,j)+

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

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

  46. سلام. من در مدلم متغیر Q را بصورت positive variable تعریف کردم و در قسمت محدودیت ها هم اونو بین دو حد بالا و پایین به ازای هر j تعریف کردم و حدهای بالا و پایین به ازای هر j را هم با پارامترهای L و U مشخص و مقداردهی کردم؛ ولی وقتی مسئله را حل میکنم خطا میده که devision by zero و چون Q در تابع هدف در مخرج قرار داده ینی Q صفر شده ولی با تعریفات من در مدل Q نمیتونه صفر بشه. مشکل از کجاست؟
    با تشکر از شما

    • سلام
      این به الگوریتم های سالور گمز بر میگرده.
      پیشنهادم اینه که به اون مخرج یه مقدار خیلی خیلی کوچیک مثل ۰٫۰۰۰۰۱ اضافه کنین. مشکل حل میشه

  47. سلام
    تشکر از سایت خوبتون و وقتی که میذارید
    ی سوال داشتم از خدمتتون
    من مدلم رو ران که میکنم جوابی نمیده ارور خاصیم نشون نمیده فقط terminated due to licensing error اینو نشون میده
    میشه بگید مشکلش چیه؟

  48. سلام.
    خطای ۱۰۰۱ یا همون out of memmory آیا قابل حل هست؟ مساله من مساله MIP هستش وقتی سایز مساله رو بالا میبرم این ارور رو میده.

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

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

        • سلام
          این رو تو دایرکتوری بذارین و ران کنین مدلتون رو. اگه شد که خوبه. نشد دیگه واویلا. حل نمیشه. البته بگردین تو سایت ببینین چی کامنت گذاشته شده شاید اونا هم به دردتون بخوره.
          دایرکتوری معمولا اینجاست:
          Documents/gamsdir/projdir

  49. سلام
    من کدمو اجرا می کنم و هیچ اروری دریافت نمی کنم. اما جوابی در خروجی بهم نمیده و این رو می نویسه
    **** SOLVE from line 254 ABORTED, EXECERROR = 1
    میشه راهنمایی بفرمایید

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

  50. سلام و روز بخیر

    من یه فرمولی تو برنامم نوشتم که در بعضی مواقع مخرج صفر میشه و ارور تقسیم بر صفر رو میداد. برای حل این مشکل مخرج رو بعلاوه اپسیلون کردم و نوشتم eps+ ولی الان هم باز ارور تقسیم بر اپسیلون میده. چه کار میتونم بکنم که مشکل تقسیم بر صفرم حل شه؟

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

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

  51. سلام. خسته نباشید.
    گمز برای مساله سایز کوچیکم عبارت Proven Optimal رو مینوشت. وقتی سایز رو زیاد کردم،Solution satisfies tolerances رو نوشت،واسه همین Option Optcr رو استفاده کردم و بهش مقدار یک دادم. به نظرتون نیازی به ابن کار بود؟ وقتی این کار رو کردم واسه بعضی از مساله هام خطای Unrecoverable error هم ظاهر شد. این خطا برای چیه؟

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

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

    ۱- Use the GAMS option solvelink 0
    2- Conserve memory where possible (memoryemphasis 1)
    3- (MIP) Let Cplex store information on disk (nodefileind 2 or 3 / workmem)
    4-(MIP) Set option varsel to use strong branching (varsel 3).
    5-(MIP) Turn off cut generation (cuts -1).

    • سلام
      این کد رو به قبل از دستور solve و بعد از دستور model انتقال بدین:

      $onecho > cplex.opt
      threads 4
      nodefileind 2
      workmem 2048
      nodesel 2
      varsel 3
      $offecho

      بعد از این تعارف، خط زیر را به بعد از دستور model و قبل از دستور solve انتقال بدید، و به جای yourmodelname نام مدلتون رو بنویسین.
      yourmodelname.optfile=1

  53. با عرض سلام و خسته نباشید خدمت شما
    من مدلم رو با گمز کد زدم ولی بعد از run ، این پیفام رو داد :
    ۴۶۴ MODEL crossdocking.ModelStat = 10.000
    VARIABLE z1.L = 0.000 objective function1
    با تغییر دادن داده های ورودی باز هم همین جواب بدست آمد. بنظر شما دلیلش چی میتونه باشه؟

  54. سلام.
    میخوام بگم اگه یه مقداری از صفر بزرگتر بود اونوقت یه محدودیتی رو بررسی کنه ( چک کنه که مقدار یه پارامتر از یه میزانی بیشتر باشه) . آیا میشه؟ چون توی راهنمای کاربر گمز خوندم دیدم نمیشه تو خود if اکویشن تعریف کرد. چیکار میتونم کنم؟

  55. اگه بخوایم گمز فقط یه محاسبه ای رو روی تعدادی ماتریس انجام بده و تو خروجی نشون بده توی solve چی باید بنویسیم؟ چون نه مینیمایزینگه نه ماکسیمایزینگ؟

  56. سلام
    ببخشید من میخام یکی از پارامترها تو هر بار لوپ افزایش بدم مثلا ۱۰ درصد ۲۰ درصد منتهی ممکنه مثلا اگه تقاضا ۱۵ هست بعد بشه ۱۶٫۵ میخام که روند بشه..کد روند کردن رو چی بنویسم ؟

    باتشکر

  57. با سلام و تشکر بابت کمک های بی دریغتون
    میشه بفرمایید ارور ۱۵۴ چی میگه و برای رفعش چیکار باید کنم. نوشته
    Set for ‘ord’ is not controlled.

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

        • خواهش میکنم.
          کد زیر رو ران کنین. متوجه میشین.

          set
          i/1*4/
          j/10,20/
          parameter a(i),b(j);

          a(i)=i.uel;
          b(j)=j.uel;


      • t /1*12/
        Alias (t,tt)
        E(r,c)$(ord(tt)≤ord(t))..
        sum(tt, Y(r,c,tt))=l=M*sum(t,X(r,c,t));

        با سلام و تشکر بابت وقتی که میذارید
        من اینجور نوشته ام که ارور میداد
        که X و Y باینری اند و M هم عدد بزرگ است

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

      • سلام ممنونم
        بله اشتباه نوشته بودم خود محدودیت به ازای t داشت و نباید برای t سامیشن میذاشتم.اماچون محدودیت برای tt≤t برقرار است اینجور نوشتنش باز اشتباهه؟

        E(r,c,t)$(ord(tt)≤ord(t)) ..
        Sum(tt,Y(r,c,tt))=g=M*X(r,c,t) ;

        وقتی قسمت$رو نمینویسم ارور ۱۵۴رو نمیده،ولی در اینصورت خودش برای tt≤t محدودیت رو اعمال میکنه؟

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

          E(r,c,t) ..
          Sum(tt$(ord(tt)≤ord(t)),Y(r,c,tt))=g=M*X(r,c,t)

      • شما فوق العاده این
        چقدر زود جواب میدین ممنون
        ببخشید اینقد سوال میپرسم
        چجور بگم فاصله زمانی بین یک شدن دو متغیر x(f,j,t) و x(f,j+1,t) حداکثر سه ماه باشه،
        متغیرx باینری است

        • با سلام
          محدودیت میخاد بگه که وقتی متغیر باینری x(f,j+1,t) یک بشه که حداکثر سه ماه از یک شدن متغیر x(f,j,t) گذشته باشه

        • سلام
          والا مقداری فکر میخواد. فعلا وقت زیادی واسه فکر کردن روش ندارم. شما سعیتونو بکنین. تهش بدین چک کنم. فقطه دومی باید x(f,j,t-3) باشه احتمالا.

  58. سلام من یه کد نوشتم(البته با کمک دوستان این وبسایت بی نظیر)،الان که اجراش میکنم به خطای زیر بر می خورم:
    ERROR 409:
    Unrecognizable item – skip to find a new statement
    looking for a ‘;’ or a key word to get started again
    همه سمی کالن ها و ویرگول هارو هم چک میکنم ایرادی نمی بینم!
    مشکل چیه؟

  59. با سلام مجدد خدمت شما
    توی ایمیل اشاره فرمودید که سالور رو عوض کنم، مثلا baron ، ولی من از sin و cos استفاده کرده ام و این سالور جواب نمی دهد، باید از dicopt استفاده کنم.
    لطفا راهنمایی بفرمایید.

  60. سلام من در مدلم در یکی از محدودیت ها error با شماره ۴۰۹
    Unrecognizable item – skip to find a new statement
    looking for a ‘;’ or a key word to get started again
    احتراماً چگونه می تونم آن را رفع کنم

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

    For g<8,i=1, n(g,t)=m(g,t)-d(I,t)+q(g,t)
    set g /1*4/
    t /1*7/
    i/1,2/

    variable
    n(g,t)
    m(g,t)
    Q(g,t)
    d(i,t)
    equations
    con1;
    con1..sum(g$(ord(g)<8),n(g,t))=e=sum(g$(ord(g)<8),m(g,t))-d(i$(ord(i)=1),t)+sum(g$(ord(g)<8),q(g,t));

    ارورها هم این ها هستند:

    Uncontrolled set entered as constant
    Dimension different
    Unrecognizable item-skip to find a new started again

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

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

      variable z;
      z.lo=100000;

      integer variable x,y;

      equations
      obj
      ;
      obj.. z=e=x*y;

      model mu /all/;
      option minlp=baron;

      solve mu us minlp max z;

      display z.l,x.l,y.l

      این کد رو وقتی ران کنین، میگه که no feasible solution was found در حالی که مدل جواب بیکران داره.

  63. با سلام
    من یه چنین محدودیتی دارم ک A یک عدد بزرگه و به عنوان اسکالر تعریفش کردم:

    YM(m,j)=l=sum((i,t),E(i,m,t))=l=(A*YM(m,j))

    اما ارور ۴۰۹ میده..
    لطفا راهنماییم کنین ک A رو چطور تعریف کنم؟
    ممنون

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

  64. با سلام و تشکر بابت راهنمایی هاتون
    مدل من minlp هست بعد از خطی کردن در قسمت solve نوع مدل را mip میزنم اما روش ارورهای ۵۶-۵۷و۵۱ میده
    ۵۶:Endogenous operand for * not allowed in linear models
    57:Endogenous relational operations require model type “dnlp”
    51:Endogenous function argument (s) not allowed in linear models
    ممنون میشم راهنماییم کنید.
    با تشکر

  65. سلام
    من یه متغیر از نوع positive تعریف کردم که در خروجی مقادیر عددی کامل جواب نمیده. همراه با خورده و اعشاره. چیکار کنم که خروجیم عدد رند داشته باشه و خورده اش حذف شه؟ نمیخوام نوع متغیر رو به integer تغییر بدم

    • سلام
      اعدا اعشاری در گمز رو میتونین با option زیر به صورت integer نشون بدین (فقط نشون بدین، نه اینکه تعریف کنین همون چیزی که میخواین)

      option decimals=0;

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

        • سلام
          چیز خواصی به ذهنم نمیرسه. اگه رو به بالا رند میکنین، شاید استفاده از دستور ceil بد نباشه. این تابع میاد رو به بالا گرد میکنه.
          فرض کنیم متغیر شما x هست که به صورت positive تعریف کردین ولی به صورت صحیح میخواینش. یه متغیر دیگه میتونین به اسم y تعریف کنین. که به صورت زیر تعریف میشه:

          y=e=ceil(x);

          بعد هر جا که x داشتین، به جاش y به کار ببرین. فک کنم روش مناسبی باشه

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

    const7(n,kk,t).. sum(nn$(ord(nn) ge 1 and ord(nn) le ord(n)),(2**(n – nn))*z(nn,kk,t))=e=slack5(n,kk,t)+sum(nn $(ord(nn) ge 1 and ord(nn) le ord(n)),(2**(n – nn))*z(nn,kk+1,t));

    که قبلش هم تعریف کردم :
    ;Alias(n,nn)
    k/1*3/
    kk(k)/1*2/
    binary variable z(n,k,t);

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

    • سلام
      همینجوری خالی خالی نمیتونین اندیس رو تو فرمول استفاده کنین که. ord(n) رو بذارین مثلا. یا n.uel رو. ببینین کدوم بش میخوره

  67. سلام و وقت بخیر
    میشه بفرمایید ارور ۶۶ و ۲۵۶ مربوط به چیه و چه جوری باید رفعش کنم؟
    اون خطی که ارور میده هم این هستش:
    solve masterproblem using MIP Minimizing zmaster;
    با تشکر

  68. با سلام و تشکر بابت راهنمایی هاتون
    سوالی دارم ممکنه راهنماییم کنید
    آیا محدودیتی که با شرط ifthen نوشته میشه، باعث میشه مساله غیرخطی بشه ؟(مثل حالتی که ضرب متغیر داریم)
    مدل من mip هست که با غیر فعال کردن محدودیت زیر ران میشه اما وقتی محدودیت رو فعال میکنم خطای ۵۷ و ۵۱ ظاهر میشن و میگه نوع مدل dnlp هست
    پیشاپیش از لطفتون ممنونم
    C..x(f,’3′,t-1)-x(f,’3′,t)=e=ifthen(ord(t)>=tn and ord(t)<=tb,10,x(f,'3',t));

  69. سلام
    من یک کد نوشتم که گمز حل می کنه هیچ اروری هم نمیده اما دستور display آخر اجرا نمیشه و هیچ جوابی نمیده اما همون کد رو روی یک کامپیوتر دیگه که اجرا میکنم جوابها رو نشون میده !

    میتونید راهنماییم کنید؟

  70. سلام و خسته نباشید بابت سایت فوق العاده کاربردی و حرفه ای شما
    بعد از اجرای کدم چهارتا خطای ۱۴۱ میده. دلیلش چیه؟
    و خطاها مربوط به خط آخر هستن
    model vrp1/all/;
    solve vrp1 using MIP minimizing z;
    display x.l,o.l,q.l,z.l;

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

  71. سلام. خسته نباشید. ببخشید بنده برنامه ای رو نوشتم و دوتا ارور زیر ظاهر شده است؟ چگونه این ارورها را رفع کنم؟

    ۶۶ The symbol shown has not been defined or assigned
    A wild shot: You may have spurious commas in the explanatory
    text of a declaration. Check symbol reference list.

    256 Error(s) in analyzing solve statement. More detail appears
    Below the solve statement above

    • سلام
      شما تو تعریف equation هر اسمی برای محدودیتا میارین، دقیقا معادلش باید معادله داشته باشین و بالعکس. همینو رفع کنین

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

  73. ببخشید آقای محمودی یه سوال دیگه داشتم؟
    یه برنامه ای دارم وقتی ران میکنم خطا نداره ولی تمام متغیرهای باینری و پیوسته و همچنین مقدار تابع هدف رو صفر میده(مدل مینیمم سازیه) و پیغام زیر ظاهر میشه! لطفا بفرمایید مشکل چیه؟؟!!!
    Space for names approximately 0.52 Mb
    Use option ‘names no’ to turn use of names off
    MIP status(103): integer infeasible
    Cplex Time: 0.01sec (det. 12.07 ticks)
    Problem is integer infeasible.

    No solution returned

  74. سلام
    خسته نباشید
    لطف می کنید درباره ی ارور ۷۶۱ توضیح بدهید.
    این ارور رو موقعی که از alias استفاده می کنم نشون می ده.
    ممنون

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

  75. سلام و عرض احترام،

    مهندس عزیز، ممکنه بفرمایید که چگونه می توان حداکثر زمان اجرای برنامه را در GAMS بیشتر از ۱۰۰۰ ثانیه تعریف کرد؟

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

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

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

      option reslim=2000;

  76. وااااای چقدر شما مهربان هستین.

    بسیااار بسیار ممنونم از محبت شما.

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

    خیلی خیلی سپاسگزارررم.

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

  77. سلام
    آیا میشه یه محدودیت رو توی if تعریف کرد؟
    یعنی اگه مقدار فلان پارامتر انقدر باشه اونوقت فلان محدودیت در نظر گرفته بشه . در غیر اینصورت از فلان محدودیت چشم پوشی بشه.

  78. سلام
    خسته نباشید
    من یک متغیر با چند اندیس معرفی می کنم ولی برای اندیس دو بعدی خطای ۱۲۲ رو میده.
    یعنی نمیشه از اندیس دو بعدی استفاده کرد.
    اندیس دو بعدی (e(l,f برای متغیر (Wmc(m,c,f,e,t
    پیغام خطا one dimensional set expected
    ممنون

    • سلام
      خیر نمیشه.
      این کار شما اشتباهه. متغیر رو به (Wmc(m,c,f,l,t تعریف کنین.
      بعد تو هر محدودیتی که استفاده شد، بگین به شرط e(l,f) اعمال کن.

  79. سلام
    من شاخص ای تعریف کردیم به اسم t برای دوره زمانی ۱ تا ۶ ماه.
    و یکی از داده های اولیه ام هست: موجودی اولیه (iv)برای محصول n ام .
    واگه بخام دوره صفر هم تعریف کنم توی معادلات برای کران سیگما باز به مشکل بر میخورم چون کران سیگما از دوره t=1 شروع میشه نه از دوره t=0.
    من چجوری این موجودی اولیه رو در گمز کد نویسی کنم؟
    ممنونم از پاسختون

    خودم به این شکل تعریف کردم که ارور میده.خطا ۱۷۰ و۶۱۰ و۱۴۸ و ۳۳۴

    sets
    / n Productions /1*10
    ; /t Periods /1*6

    parameters IV(n,t) initial inventory for product n
    iv(8,0) 0.25/
    iv(9,0) 1.8
    iv(1,0) 105
    ;/ iv(5,0) 333

    • سلام
      این طوری

      sets
      n Productions /1*10/
      t Periods /1*6/;

      parameters IV(n,t) initial inventory for product n
      /8.1 0.25,9.1 1.8,1.1 105,5.1 333/

      یا از دستور table استفاده کنی. وقتی شاخص هات از یک شروع شدن چرا ۰ میزاری ؟

      • اخه توی سیگما من همچین جمله ای دارم
        ۰=(Ft − Ht + Wt − W(t−۱
        وهمینطور این جمله رو

        (۳۳۱۳=The initial worker level is 3313 workers (W0
        این مقدار w0 رو به صورت اسکالر تعریف کنم؟
        ببخشید بازم اینجا به مشکل برخوردم

        • سلام
          اگه شما خیلی از این مقادیر اولیه در t=0 استفاده میکنید، میتونید یه t0 تعریف کنین که اجتماع مجموعه ی t با عدد صفر هست.مثلا:

          sets
          t0/0,1*10/
          t(t0)/1*10/

          بعد مثلا یه w دارین که متغیره ولی تو t=0 مقدار خواصی رو میگیره. میتونین به شکب زیر w رو تعریف کنین:

          variable w(t0)

          بعد تو محدودیت ها با خیال راحت از w(t) و یا w(t0) استفاده کنین. مقداری دقت کنین.

  80. سلام آقای محمودی عزیز،

    آیا امکان آن وجود دارد که مقدار Gap را خودمان به سیستم بدهیم. برای مثال برنامه ای که اجرا شده با مقدار Relative Gap=0.07872 از بهترین کران پایین، به جواب بهینه رسیده است.
    اگر بخواهم به مقدار دقیقتر یا بعبارتی Relative Gap یا Gap کمتری داشته باشم، راه حل پیشنهادی شما چیست؟

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

  81. با عرض سلام خسته نباشید. ببخشید بنده یه سوال داشتم؟ یکی از محدودیتهای مدل بنده به شکل زیر می باشد:
    eq81 (i,j) .. v(i,a(i,j))-q(i,b(i,j))=g=e(i,j);

    a(i,j) و b(i,j) پارامترهای دو متغیره هستند که در این محدودیت به عنوان اندیس دوم متغییرهای v و q به کار رفته اند. با این حال چرا این محدودیت توی گمز ارور میده ؟؟
    مشکل کار دقیقا کجاست؟ چطوری باید تعریفش کنم؟ با تشکر از سایت خوبتون.

      • ببخشید منظورم پارامترهای دو اندیسه بود!! i و j اندیس هستند. حالت ریاضی معادله به شکل زیر می باشد:

        v (i,a i,j) − q(i,b i,j )= e (i,j ) , j ∈ J ,i ∈ N
        (i,aij) و (i,bij) به ترتیب اندیسهای v و q هستند.

        • سلام
          میتونین دو اندیس دیگه مثلا t1,t2 تعریف کنین. بعد مثلا بگین به شرطی که a مساوی با t1 باشه و b هم مساوی t2. یه همچین چیزی:

          c(i,j,t1,t2)$(ord(t1) = a(i,j) and ord(t2)= b(i,j)).. v(i,t1)-q(i,t2)=e=e(i,j);

        • واقعا از لطفتون ممنون آقای محمودی.
          حالا در اینجا من این محدودیت را با چه دستوری تعریف کنم تا به ازای یک i ای که در مرحله اول ثابت میگیره، t1 و t2 همزمان تغیر کنه! یعنی به ازای هر iای که میگیره t1 و t2 را همزمان تغییر بده؟ یعنی این طور نباشه که اول i و t1 را ثابت در نظر گرفته، فقط t2 را تغییربده؟؟؟

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

        • آخه میدونین من قبلا هم این محدودیت رو به شکل زیر تعریف کرده بودم ولی به جواب مطلوب نرسیدم:
          eq1 (i,k,t,j) .. v(i,k)-q(i,t)=g=e(i,j)
          در این معادله چیزی که برنامه خروجی میده در ابتدا i و k را در اولین مقدارش قرار میده و تا زمانی که شمارنده ی اندیس t پایان نپذیرفته است مقدار t و i رو تغییر نمیده!!! ولی چیزی که من در اینجا میخوام اینه که، به ازای اولین عددی که به شمارنده ی i در نظر گرفت، از آنجایی که تعداد اندیسهای k و t یکسان می باشد. اندیسهای k و t همزمان تغییر کند، یعنی طوری نباشد که ابتدا مثلا شمارنده ی t تغییر کرده و هنگامی که شمارنده اش به پایان رسید، تازه شمارنده ی k تغییر کند؟!!! امیدوارم منظورمو متوجه شده باشین!!!!

        • خب همون چیزی که من گفتم درسته دیگه. یه i میگیره، و بعدش یه j بعد طبق i,j ای که گرفته، میره a(i,j) رو میذاره تو t1 و b رو تو t2
          دیگه همزمان هم هست

      • ببخشید منظورم پارامتر دو اندیسه بود!!! حالت ریاضی معادله به شکل زیر می باشد:

        j ∈ J ,i ∈ N , v(i,a(i,j))-q(i,b(i,j))=e(i,j)

        a(i,j) , b(i,j)

        به ترتیب اندیسهای دوم متغیرهای v , q می باشند.

      • ببخشید آقای محمودی ولی منظور من این نبود!!! این چیزی گه میگید درسته! a رو میذاره t1 و b رو میذاره t2!!!! در اینجا من میخوام به ازای اولین i و j ای که میگره، t1 و t2 همزمان تغییر کنه!! یعنی اینطور نباشه که به ازای اولین i و j ای که گرفته، اول شمارنده t1 ثابت بمونه و تا وقتی که تمام شمارنده های t2 تمام نشدن تغییر نکنه!!! برنامه زیرو ببینید رانش کردم و اتفاقی که افتاده!!! ستون اول و دوم به ترتیب i و j هستند و ستون سوم و چهارم به ترتیب t1 و t2 !!!! همانطور که ملاحظه می فرمایید ابتدا t1 رو در اولین مقدارش(۲) گرفته و ثابت نگه داشته و مقادیر t2رو که ۱و۳و۴ هستش تغییر داده!!! و من نمیخوام این اتفاق بیفته!! میخوام هنگامی که t2 تغییر کرد، t1 نیز تغییر کند!!! واقعا از خدمتتون عذر میخوام، ببخشید خیلی اذیتتون کردم.

        eq81(1,1,2,1).. v(1,2) - q(1,1) =G= 0 ; (LHS = 0)

        eq81(1,1,2,3).. v(1,2) - q(1,3) =G= 0 ; (LHS = 0)

        eq81(1,1,2,4).. v(1,2) - q(1,4) =G= 0 ; (LHS = 0

        • سلام
          مهندس من متجه حرف و خواسته شما هستم. اینا به طور همزمان هست اگه یکم دقت کنین. یه i و یه j میگیره. بعد طبق این i,j به t شما عدد میده. اصلا به ترتیب ربطی نداره. کافیه شما a,b رو درست تعریف کرده باشین. و مطمئن هم باشین که این عمل t ها به طور همزمان هست. نکته دیگه اینکه شرط رو گذاشتین شما؟

          c(i,j,t1,t2)$(ord(t1) = a(i,j) and ord(t2)= b(i,j)).. v(i,t1)-q(i,t2)=e=e(i,j);

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

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

    f('2')=e=sum(p$((ord(p)>=5) and (ord(p)=13) and (ord(p)=21) and (ord(p)<=24)),x(p))

  83. سلام مهندس محمودی عزیز،

    ممکنه بفرمایید، هنگامی که طول جملات تابع هدف زیاد است چه باید کرد؟
    خطایی که با آن روبرو شدم می گوید: طول جملات تابع هدف نباید بیشتر از ۴۰۰۰۰ باشد.
    آیا باید از علامت .. برای انتقال بقیه جملات تابع هدف به خط بعد بهره گرفت؟

    خطا ۹۸ :

    Error 98:
    N0n-blank characters beyond Max input line (4000)
    (check the end line ends with a carriage return)

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

  85. سلام آقای محمودی عزیز.خسته نباشید. ببخشید میخواستم بدونم توابع دو ضابطه ای رو چطوری باید تعریف کرد، کدش چطوریه؟ در واقع من میخواستم تابع زیرو تعریف کنم ولی کدشو نمیدونم! ممکنه لطفا راهنمایی کنید؟S(t ) تابع دوضابطه ای می باشد.با تشکر فراوان از زحمات شما.

    S(t)=1 if T(t)>Tmax
    &
    S(t)=0 if T(t)>Tmin

    • سلام
      ممنونم.
      از تابع ifthen میتونید استفاده کنید، و سالور رو بذارین رو یه چیزی مث sbb
      یا اینکه با یه خلاقیت این رو به دو محدودیت تبدیل کنین.
      تابع ifthen اینجوریه:

      c(t).. s(t)=ifthen(TT(t)>Tmax,1,0

      این کدی که نوشتم دقیق نیست. شما باید یه همچین چیزی بنویسین. البته شرط کد بالا اینه که Tt و St جفتشون متغیر باشن. تودرتو هم میشه.

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

    من مشکل ارور ۱۴۸ دارم
    ۱۴۸ Dimension different – The symbol is referenced with more/less

    این مشکل برای دو عبارت زیر پیش میاد:

    actPF(i,t).. P(i,t)=e=v(i)*(sum(j,v(j,t)*((G(i,j)*cos(delta(i,t)-delta(j,t)))+(B(i,j)*sin(delta(i,t)-delta(j,t))))));

    reactPF(i,t).. Q(i,t)=e=v(i)*(sum(j,v(j,t)*((G(i,j)*sin(delta(i,t)-delta(j,t)))-(B(i,j)*cos(delta(i,t)-delta(j,t)))))) ;

    طبعاً این ارور برای اندیس‌ها هست، ولی من چه تغییری باید بدم تا این ارور برطرف بشه؟

    سایر اطلاعات لازم:
    i از ۱ تا ۱۲۳
    alias(i,j)
    t از ۱ تا ۲۴

    سپاسگزارم

  87. سلام آقای محمودی
    خسته نباشید
    ببخشید چطور میشه گفت: در هر دوره ای که x(t)>0 است، در اینصورت s(t)=0 قرار بده، با دستور ifthen نمیدونم چطور بنویسم چون
    s(t)=ifthen(x(t)>0,0,……)
    در اینصورت به جای … نمیدونم چی بنویسم.
    با تشکر از سایت خوب و زحمات شما.

  88. با سلام

    من کد زیر رو توی GAMS نوشتم

    eq60b(k,n)..n-dc(k)-res(k)=l=omegap(k,n);

    و خطای ۱۳۳ رو میگیرم

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

  89. سلام آقای محمودی. خسته نباشید. ببخشید یه سوال داشتم دستور عضو بودن تو گمز چطوریه؟ من میخوام بنویسم اگر x عضو y باشد یه کاری رو انجام بده!!! دستور عضو بودن نمیدونم چیه؟؟!!!

      • ببخشید من تاپیک مجموعه ها رو خوندم! در واقع تعریف مجموعه ها رو بلدم ولی میخواستم یه تابع شرطی تعریف کنم و بگم این شرطه به ازای x عضو y برقراره!!!!
        یعنی اگه بخواهیم تعریف کنیم x عضو y هست. دستور اختصاصی عضو بودن تو گمز وجود نداره؟؟؟ یعنی دیگه x رو زیر مجموعه‌ی y تعریف نکنیم! فقط بگیم x عضو y؟؟؟؟

        • سلام
          یکی از قواعد کامنت گذاری رعایت این نکته هست که یک علامت تعجب هم ارز ده علامت تعجب هست و یک علامت سوال هم ارز ده علامت سوال.
          چرا میشه یه همچین کاری بکنین. یکم خلاقیت میخواد. مثلا میشه با ترکیبی از شرط دلار، دستور ord و Uel و or و and یه همچین شرطی رو تولید کنین. چرا زیر محموعه تعریف نمیکنین شما یا چرا از مجموعه های دو بعدی استفاده نمیکنین؟

  90. سلام
    بنده سوالی پرسیدم الان هر چی سرچ میکنم کامنتم نیست
    میشه عددی رندم با توزیع نرمال داشت. می
    خواستم بدونم ایا تابعی در گمز هستش که تابع چگالی احتمال تابع توزیع
    نرمال رو هم بده؟
    البته دستور زیر تو راهنمای گمز دیدم اما گمز میگه نمیشناسمش
    pdfNormal(x,MEAN,STD DEV)
    ممنون میشم اگه راهنمایی بفرمایید

  91. سلام آقای محمودی. خسته نباشید
    ببخشید آقای محمودی یه سوال داشتم. ارور ۸۱۲ چیه؟
    اگه راهنمایی کنین ممنون میشم. پیغام خطا هم به شکل زیر می باشد:
    Error 812
    Solve keys expected – USING MAX/MIN SCENARIO

    • سلام
      هر چی که هست به دستور solve شما بر میگرده. احیانا شما دستور رو درست وارد کردین؟ یا اینکه شما درست نوع مدل رو زدین؟ مث mip و LP و اینا

      • اره. تا جایی که میدونم درست واردشون کردم.مدل هم متغیرهای پیوسته داره و هم صفرویک. دستور solve رو به شکل زیر وارد کردم:

        solve Home energy using MIP minimizing J;
        مقدار تابع هدف رو هم برابر J قرار دادم. به نظر شما دستورم اشتباهه؟
        مرسی از لطفتون.

        • سلام
          بین home و energy نباید فاصله باشه، به عبارتی، Modelname باید تمامی کاراکترهاش به هم چسبیده باشن

  92. آقای محمودی همانطور که شما فرمودین من فاصله‌ی بینشون رو برداشتم و دوتا ارور زیر ظاهر شدن:

    ۱- the symbol shown has not been defined or assigned a wild shot: you may have suprious commas in the explanatory text of a declaration.check symbol refrence list.

    2- ” Endogenous relational operations require model type “dnlp.

    لطفا میشه راهنمایی کنین؟

    • سلام
      سوال اولتون بر میگرده به اینکه شما هر معادله ای رو که تو equation تعریف میکنین، باید براش یه فرمول هم بنویسین.
      سوال دوم، مدل شما احتمالا از نوع minlp هست.

      • با سلام آقای محمودی. خسته نباشید
        با عرض پوزش آقای محمودی اون اشکالاتی رو که شما فرمودین رو اصلاح کردم و دیگه اون خطاهای قبلی رو نمیده خیلی ممنون. فقط دوتا ارور جدید به شکل زیر میده:
        Error 53: endogenous $ operation not allowed

        Error 256 : Error(s) in analyzing solve statement. more detail appears below the solve statement above.
        این ارورها واسه چین؟ ممنون میشم راهنمایی کنید. واقعا از لطف شما به خاطر این همه وقتی که می گذارید سپاس گزارم.

        • آقای محمودی خطا رو پیدا کردم مربوط به معادله ای بود که به شکل زیر تعریف کرده بودم:

          eq31(t)$T1(t) .. Sfr(t)$ ((Tetafr(t-1))>(Tetafrmax)) =e=1

          در واقع میخواستم شرط بزارم اگر

          Tetafr(t-1) > Tetafrmax

          بود، مقدار Sfr(t) رو برابر با یک قرار بده. حالا نمیدونم این شرط رو چطوری قرار بدم. ممنون میشم اگه راهنمایی کنید.

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

  93. سلام بابت این سایت خوب واقعا ممنون … خواستم ببینم یک عبارت شرطی در متلب چطور تعریف میشه؟ مثلا میخوام بگم که اگر x>y آنگاه z=8……ممنون

  94. با سلام در مورد دستور زیر ارور ۱۴۹ گرفته می‌شود، ممنون راهنمایی کنید.
    totfeed(r).. eval(“tproduct”,cc)*(sum(cr, yeildc(cr,cc,r)*xcrop(cr,r))$ct(cc))+eval(“product”,cc)*(sum(rp,(Transport(cc,rp,r)))$ctr(cc))
    +eval(“tproduct”,cc)*(importc(cc,r)$ct(cc)))=g= ereq(“livehead”,r)*xlive(“livehead”,r)

  95. با سلام و خسته نباشید. ببخشید بنده نسخه‌ی ۶۴ بیتی گمز(۲۴٫۷٫۳) رو دانلود کردم و همه‌ی لایسنس هارو نیز روی برنامه امتحان کردم هیچ کدام از آنها جواب نداد. لطفا میشه بگید کدوم لایسنس با نسخه‌ی برنامه ای که من دارم سازگاره؟ در ضمن همین کدبرنامه رو قبلا روی pc با نسخه های ۳۲ بیتی حلش کردم مشکلی نداشت.

  96. سلام
    من یه کد میخوام بزنم. که ۱۰ تا تامین کننده دارم که بصورت زیر تعریف کردم:
    set
    i suppliers/S1*S10/
    برای این تامین کننده ها یه پارامتر وجود داره که یه عدد رو به عنوان عملکردشون بهشون تخصیص میده.
    حالا من میخوام مقدار یه متغیر x رو براشون مشخص کنم. که دو تا شرط رو رعایت کنه. اول اینکه اگر بیشتر از مقدار ۱٫۲۰۰ بود مقدار x برای اون تامین کننده صفر در نظر گرفته شه. و شرط دوم اینکه هر قدر مقدار پارامتر عملکرد برای تامین کننده ای نسبت به بقیه تامین کننده ها بیشتر باشه بهش مقدار x کمتری هم تخصیص بده.
    اینو چجوری باید بنویسم؟ میشم کدش رو برام بنویسید اینجا؟

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

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

        اینا هدف و محدودیت های من هستند:
        totalCost ..
        expectedCost =e= sum(i,(invCost(i)+ shipCost(i)+ unitCost(i))*x(i))+ sum(i,(F(i)*w(i)));

        capacityLim(i) .. UCap(i)* x(i) =l= (Cap(i)+ (CapVar(i)*(0.52)));

        demandLim .. sum(i,x(i))=g= dAvg+ (dSV * (0.52));

        qualityLim .. sum(i,(quality(i)* x(i))) =l= QualityTol;

        leadTimeLim..sum(i,(LT(i) * x(i))) =l= DeliveryTol;

        suplim1(i).. x(i)=l=M*w(i);

        suplim2.. sum(i,w(i)) =l= supnum;

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

        • من درست متوجه منظورتون نمیشم. به هر حال این رو بصورت دستی نوشتم.آیا درسته و اون چیزی که میخوام رو انجام میده؟ ( برای راحتی ۱۰ تامین کننده رو به ۵ تا کاهش دادم)

          set i/ S1*S5/
          alias (i,j)
          parameter performance / S1 2, S2, 3, S3 1, S4 0, S5 1/
          if( performance (i)> performance (j) then x(i)< x(j))

        • خیر
          اگه if بالا رو میخواین پیاده کنین، باینجوری درست نیست. باید تو مدلتون یه محدودیت تعریف کنین، مثلا به اسم c1 بعد اونجا این ظرط رو اعمال کنین. در ضمن، performance رو تو دستور parameter باید به صورت performance(i) تعریف کنین.

          c1(i,j)$(performance(i)>performance(j)).. x(i)=l=x(j);

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

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

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

      • من بحث الگوریتم بندرزو کاملا بلدم(چطوری مساله رو به مساله‌ی اصلی و زیر مساله تقسیم میکنه و برش‌های بهینه تولید میکنه و … ). حتی کد خود الگوریتم بندرز رو هم نوشتم. فقط نمیدونم تو یه مدل بهینه سازی که دارم چطوری کد بندرز رو فراخونی کنم و بگم با کد بندرزی که نوشتم مدل رو حل کنه! درواقع دستورات مربوط به قسمت فراخونی کد بندرزو تو مدلم نمی دونم؟

  99. سلام.
    من کد مسئله ام رو در گمز زدم که و اغلب اندیسها در محدودیت ها شرطی ان و از علامت دلار استفاده کرده ام. وقتی ران میگیرم اروری نمیده اما میگه integer infeasible و وقتی چند تا از محدودیت ها رو در جواب چک کردم فهمیدم عبارات شرطی رو اندیس ها رو اعمال نکرده. مثلا:
    در تابع هدف این عبارتو دارم:

    ((cost..z=e=sum((k,j)$(ord(j) gt 0),x('0',j,k)*f(k))+sum((i,j,k),c(i,j,k)*x(i,j,k

    و در جواب:

    cost =E= define objective function

    (cost.. - 100*x(0,0,1) - 100*x(0,0,2) - 1000*x(0,0,3

    و الی آخر…
    یعنی مقدار صفر رو برای اندیس j لحاظ کرده. برای محدودیتها هم همین مشکل هست یعنی شروط اعمال نمیشن و برای همین جواب شدنی نمیده
    چکار باید بکنم؟
    ممنونم

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

      ord(j) gt 0

  100. سلام. من برای مدل سازی شبکه قدرت از این نرم افزار استفاده کردم. بعد ران شدن این مساله execution error داده و abort کرده اما اصلا مشخص نکرده که ارور کجاست که اصلاح کنیم. چاره چیه؟

  101. سلام.
    من یه کد دارم می نویسم که توش ۱۰ تا تامین کننده دارم که هر کدوم با توجه به مقدار سفارشی که بهشون تخصیص میدیم ۳ سطح تخفیف میدن. مثلا تامین کننده اول اگر مقدار سفارشش زیر ۵۰۰ باشه هر واحد محصول رو ۱۵ حساب می کنه. اگه بین ۵۰۰ تا ۱۰۰۰ باشه هر واحد رو ۱۰ حساب میکنه و اگر بیشتر از ۱۰۰۰ باشه هر واحد محصول رو ۵ حساب میکنه. فکر کنم اگه یه تامین کننده بود میشد با دستور if then else بنویسم. اما برای ۱۰ تا نمیشه که هی تکرار کنم. میخواستم ببینم چجوری میشه بصورت جمع و جور اینو بنویسم؟ برای هر تامین کننده اون مقدار آستانه تخفیفش ( برای مثال برای تامین کننده اول ۵۰۰ و ۱۰۰۰ بود) و مقدار هزینه هر واحدش متفاوته. میشه یه راهنمایی کنید؟

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

      c.. z=e=ifthen(x<2 and y>3,10,
      ifthen(x>5 and y<10,20,z));

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

      • من متوجه منظور شما نشدم.
        من این شرط رو برای تامین کننده اول باید بنویسم:
        if (x(1) 500 and x(1)1000, unitPrice(1)=5;)

        دوباره برای تامین کننده دوم :
        if (x(2) 600 and x(2)1400, unitPrice(2)=4;)

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

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

        • x ها متغیر هستند و unit price پارامتر هستند.

          البته برای هر کدوم از تامین کننده ها من سه خط دستور نوشتم. نمیدونم چرا اینجا چرا فقط یه خط رو نشون میده!
          مثلا برای تامین کننده اول: اگر مقدار x که به تامین کننده اول داده میشه کمتر از ۵۰۰ باشه unit price 15 در نظر گرفته میشه. اگر بین ۵۰۰ و ۱۰۰۰ باشه ۱۰ در نظر گرفته میشه و اگر بیشتر از ۱۰۰۰ باشه ۵ درنظر گرفته میشه.
          برای ۱۰ تامین کننده این سه خط با مقادیر مختلف باید نوشته شه.

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

          unitprice(i)=e=ifthen(x(i)< =500,15, ifthen(x>500 and x< =1000,10 ifthen(x>1000,5);

        • خب اینجوری نمیشه نوشت. عددهای داخل if tnen برای هر کدوم از ۱۰ تا تامین کننده متفاوته! مثلا اگه آستانه های مقدار x برای یه تامین کننده ۵۰۰ و ۱۰۰۰ است برای یه تامین کننده دیگه ۶۰۰ و ۱۳۰۰ ! اگه اینجوری بخوام بنویسم که باید ۱۰ بار تکرار کنم!!!
          و اینکه این unit price قراره توی تابع هدف به عنوان یه پارامتر استفاده شه که هزینه کل رو بدست بیاریم!

        • خب عزیز واسه آستانه هم اسم بذارین دیگه. a(i) و b(i) مثلا. یا یه همچین چیزی. یا دو اندیسه
          unitprice باید متغیر باشه. چون شما از اول مقدارش رو نمیدونین. پارامتر یعنی چیزی که قبل از حل مدل هم معلوم باشه دقیقا چنده

        • سلام مجدد
          اگر من unit price رو به شکل متغیر تعریف کنم بعد می تونم توی تابع هدفم استفاده کنم که مقدار x رو برای من مشخص کنه؟

        • دیگه باید دید هدفتون چی هست. اگه x گذاشته، شمام همونو بذارین، اگه unit زده، شمام همونو بزنین

  102. سلام .یه عبارت شرطی داشتم که تو گمز به شکل زیر می نویسم خطای ۳۷و۲۵۷میده به نظرتون ایراد کد کجاهست؟
    energycondition1(t)$(ord(t)>1).. Wstore(t) $(Pstore(t) gt 0)=Wstore(t-1)- Pstore(t)/0.9;

  103. وقتی برنامه رو اجرا می کنم ارور ۷۱ و ۲۵۶ رو میده!
    من یه متغیر اینجوری تعریف کردم

    free variable expectedCost sum of cost obj function value;

    بعد یه اکوئیشین اینجوری تعریف کردم

    totalCost define objective function,

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

    totalCost .. expectedCost =e= sum((i,m), (invCost(i)+ shipCost(i))* x(i,m))+ sum((i,m),((1-d(i,m))*unitCost(i)* x(i,m)))+ sum(i, F(i)*y(i));

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

    model robustSets/all/;

    solve robustSets using MIP minimizing expectedCost;

    display expectedCost.m, x.m ;

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

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

  104. سلام . ممنون از راهنمایی هاتون . من یه محدودیت به شکل زیر دارم که وقتی تو گمز می نویسم خطای ۲۰۳و۸و۴۰۹ میده. به نظر شما چطوری این مشکل رو حل کنم.

    conditional111(t)$(ord(t)>1).. k(t)=e=ifthen(Wstore(t-1)>=max(0, Wstore('t25')-(25-ord(t))*Pstore(t)*0.9), Pstore(t)=g=Wbstore(t-1)-min(Wbstore(t), Wstore('t25')+(25-ord(t))*Pstore(t)/0.9)*0.9 and Pstore(t)=l=min(Wbstore(t-1)-max(0, Wstore('t25')-(25-ord(t))*Pstore(t)*0.9)),5);

    • سلام
      فعلا کاری به خطایی که میده ندارم.
      شما دستورا رو باید مقداری بهتر بنویسین.
      تو ایمیل عرض کردم، محدودیتا رو جدا کنین.
      چند نکته:
      ۱- اون max که زدین رو باید خطی کنین. به اینصورت که max بین دو عدد (y) باید از هر دو عدد بزرگتر باشه. پس y>=0, y>=Wstore(‘t25’)-(25-ord(t))*Pstore(t)*0.9 میشه دو محدودیت جدید و اینکه به جای max باید بذارین y
      2- شما محدودیتهاتون رو باید جدا کنین. این کار رو بر اساس شرط انجام بدین. بگین اگه این شرط برقرار باشه، اونوقت این حالت پیش میاد (اگه حالتای بیشتری هم پیش اومد، میتونین یه محدودیت دیگه هم براش بنویسین با همین شرط. پس الزاهما همه شرطها و فرمولها رو نباید تو یه خط بیارین. کار اشتباهیه.
      نسخه دوم رو بنویسین که ببینم چیکار کردین

  105. سلام
    من یه table تعریف کردم به این شکل

    Table B(i,m) limit of discount interval for supplier i
    M1 M2 M3
    S1 300 900 +INF
    S2 450 1000 +INF
    S3 400 900 +INF
    S4 700 1200 +INF
    S5 600 1100 +INF
    S6 650 1200 +INF
    S7 800 1100 +INF
    S8 700 1100 +INF
    S9 750 1000 +INF
    S10 650 1100 +INF ;

    منظورم از ستون آخر این بود که مقادیر بزرگتر از ستون دوم به بعد رو شامل بشه.
    برای مثال خط اول بشه مقادیر بیشتر از ۹۰۰٫آیا نحوه تعریف کردنم درسته؟ اگه خیر چجوری باید بنویسم؟

    و اینکه اینجوری که تعریف کردم در یکی از محدودیت هایی که نوشتم ممکن در برخی شرایط این مقدار ستون سوم در صفر ضرب بشه که ارور ۲۰۴ رو بهم میده و میگه ضرب +-infinity تعریف نشده است. چه کار میتونم کنم؟

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

      • منظورم از ستون عدد بزرگتر تا بی نهایته. نیازی به محاسبه نداره. مثلا اگر مقدار ستون دوم ۹۰۰ باشه مقدار ستون سوم باید از ۹۰۱ تا بی نهایت باشه. اینو نمیشه جوری نشون داد؟
        منظورم بدون فرمول نویسی که فرمودیده

        • خب یعنی چی تا بی نهایته؟
          اگه کارتون با ۹۰۱ راه میفته، که همونو بزنین.
          اگه نه که میتونین اون دوتا رو عدد گذاری کنین. برای بخش سوم هم یه فرمول زیرش بنویسین. بگین که یک عدد یکنواخت در بازه ی ۹۰۱ تا مثلا ۱۰۰۰۰۰۰۰٫ دیگه بستگی به کار شما داره

        • ببینید من میخوام برای مسئله ام یه تخفیف برای خرید بذارم. ۱۰ تا فروشنده هستن که به ازای خرید از یه مقداری بیشتر درصدی تخفیف میدن. برای هر فروشنده سه سطح تخفیف وجود داره. یه table تعریف کردم که در هر ستون سقف بالای خرید برای هر سطح تخفیف رو نوشتم. برای مثال برای فروشنده اول اگر تا زیر ۱۶۰۰۰ تومن خرید کنند تخفیفشون صفره. اگر بین ۱۶۰۰۰ تا ۳۰۰۰۰ تومن خرید کنند تخفیفشون ۲۰ درصده و اگر بیشتر از ۳۰۰۰۰ خرید کنند تخفیفشون ۴۰ درصده. اینو توی table برای خط اول که فروشنده اوله برای ستون اول ۱۶۰۰۰ نوشتم. برای ستون دوم ۳۰۰۰۰ نوشتم. برای ستون سوم نمیدونم چی باید بنویسم.

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

  106. اگر توی table که نعریف کردیم بخوایم مشخص کنیم برای یکی از سلول ها مقدار وجود نداره چی باید بذاریم؟ نباید از صفر استفاده کرد چون این مقداری که وجود نداره با صفر متفاوته. منظورم null است

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

  107. سلام من ارور ۱۴۹ رو مشکل دارم
    این کد رو میزنم ارور میده

    sum(g$mapG(g,n),PG(g))-sum(l$mapSL(l,n),PL(l))+sum(l$mapRL,PL(l))

    میگه کنترل نشده ست ولی من تعریف کردم همه رو
    ممنون میشم کمک کنین

  108. سلام.خسته نباشید.من یه برنامه داشتم که وقتی تو گمز ران می کنم به جای دادن مقدار بهینه این پیام رو میده:
    unbounded soltion.a variable has reached ‘infinity’. large legal value is 1.00E+10
    حالا من تمام پارامترها رو هم براشون کران تعریف کردم . باز این مشکل هست. به نظر شما مشکل چیه؟ با تشکر.

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

      • سلام . با تشکر از شما . در مورد بی کران بودن جواب تو سایت گمز دیدم نوشته متغیر ها و معادلات باید scalling شود. حالا وقتی scle می کنم و ران می کنم این پیام رو میده:
        solve abroted
        به نظر شما مشکل از چیست؟

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

  109. سلام
    من مدلم کودراتیک هست و متغیرهام صفر و یک هستند
    سالور سیپلکس را انتخاب کردم و با خطای زیر مواجه شدم

    *** CPLEX Error 5002: The objective is not convex.
    *** Try Cplex option OptimalityTarget=3 to process non-convex models.
    علتش چیه؟ باید چی کار کنم؟
    ممنون می شم راهنمایی بفرمایین

    • سلام
      تابع هدفتون غیر محدب هست. سی پلکس برای محدب ساخته شده و یه جاهایی هم توانایی حل غیر محدب هم داره. مث درجه دوها.
      شما میتونین یه option تعریف کنین که تو اون OptimalityTarget برابر ۳ باشه. و فایل رو فراخوانی کنین.
      یا اینکه سالور رو عوض کنین.
      مدل از نوع درجه دو هست؟

      • بله مدل درجه ۲ هست. انجام دادم. این ارور را می ده

        ۲۵۰ Unknown option. valid are -
        LP = "lpname" ( This works for all other model types as well:
        .
        .
        .

        سالور دیگه چی می تونم استفاده کنم؟

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

  110. من یه کد نوشتم که روی این قسمت ارور ۱۴۳ میگیرم. میشه راهنمایی بفرمایید

    integer variable d(i) rate of discount;

    d(i)= if( x(i,m) B(i,M1) and x(i,m)<= B(i,M2)), Z(i,1) ;
    else Z(i,2));

    راستی یه سوال. من دو تا مجموعه به اسم i با اعضای /S1*S10/ و یک مجموعه m با اعضای /M1,M2/ تعریف کردم. میتونم همچین رابطه ایB(i,M1) تعریف کنم؟
    و درضمن من درخواست یه پروژه رو براتون ایمیل کرده ام. دو روز گذشته و هیچ پاسخی از جانب شما دریافت نکردم

    • و اینکه table رو اینجوری تعریف کردم

      Table B(i,m) limit of discount interval for supplier i in dollar
      M1 M2
      S1 26000 48000
      S2 25000 50000
      S3 23000 47000
      S4 22000 46000
      S5 25000 50000
      S6 30000 45000
      S7 26000 40000
      S8 30000 60000
      S9 28000 56000
      S10 25000 56000 ;

      میتونم تو یه محدودیت به شکل B(i,M1) بنویسمش؟

    • سلام
      برای بخش اول سوالتون: شما همینی که به عنوان فرمول نوشتین رو باید و باید ببرین تو بخش equation . نمیشه این فرمولو برای متغیر به کار برد.
      سوال دوم. i,m رو تعریف کنین. بله میشه. تا پیک زیر رو ببینید.
      ترکیب مجموعه ها در گمز با مجموعه های دو بعدی
      در مورد پروژه هم داریم بررسی میکنیم. امشب خبرش رو براتون ارسال میکنیم

  111. مهندس جان ارور ۶۶ دست بردار نیس یه راهنمایی کنید ممنونتون میشم احساس می کنم مشکل اصلی تو تعریف پایینه :

    TEC=e=sum(t,(PGbuy1(t)*1*pr(t)+PGbuy2(t)*1*pr(t)+Pg(t)*k(t) -PGsell1(t)*1*80-PGsell2(t)*1*80));

    k(t)=e=41$(pg.l(t)200)and(pg.l(t)300)and(pg.l(t)<=400));

    امکان نداره چون متغیر تصمیم من pg(t) هستش و من روش شرط گذاشتم بخاطر اون باشه ؟

      • ممنون آقای مهندس از وقتی که میزارید
        k(t) قیمت گازه و pg(t) مقدار گاز خریداری شده از شبکه . در واقع pg(t) متغیر تصمیم من هم هست از طرفی چون قیمت گاز رو پله ای در نظر گرفتم وابسته به مقدار گاز خریداری شدس. بنابراین مقصودم از حدودی که تعریف کردم همین بود میخواستم بگم قیمت گاز در هر ساعت بسته به اینکه توی اون ساعت چه مقداری قراره خریداری بشه تو یه پله قرار می گیره و یک قیمت خاصیه به عنوان مثال اگه مقدار گاز خریداری شده کوچیکتر از عدد ۲۰۰ باشه قیمت برابر با عدد ۴۱ خواهد بود و …
        (البته آقای مهندس شرطی که من نوشتم براتون گویا کامل ارسال نشده شرطی که گذاشتم به این صورت بوده :
        k(t)=e=41$(pg.l(t)200)and(pg.l(t)300)and(pg.l(t)400)and(pg.l(t)500)and(pg.l(t)<=600));
        اگه راهنماییم کنید این شرطو چطور باید اعمال کنم ممنونتون میشم آقای مهندس

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

  112. مهندس جان من از دستور if به فرم زیر استفاده کردم ولی باز هم ارور گرفتم :

    cons80(t) .. If ((pg.l(t)200 and pg.l(t)300 and pg.l(t)400 and pg.l(t)500 and pg.l(t)<=600),

    k.l(t)=151 ;

    );

    ارورهای ۱۱۹ و ۳۷ و ۱۴۱ و ۱۴۹
    در ضمن فرموده بودین که از ifthen استفاده کنم که نسخه گمزی که من استفاده می کنم این دستورو نداره
    مهندس جان اگه امکانش براتون فراهمه با if این قید رو برام بنویسین و اگه فکر می کنین باید کدم رو براتون ارسال کنم تا بررسی کنید به من بگید تا براتون ارسال کنم و شما اصلاح کنید و هزینه رو تقدیمتون کنم اما اگه فکر می کنید همینجا با یه اصلاح کوچک حل میشه لطفا راهنماییم کنید.

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

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

  113. pg کوچکتر از ۲۰۰ آنگاه k مساوی ۴۱
    pg بین ۲۰۰ و ۳۰۰ آنگاه k مساوی ۶۹
    pg بین ۳۰۰ و ۴۰۰ آنگاه k مساوی ۹۶
    pg بین ۴۰۰ و ۵۰۰ آنگاه k مساوی ۱۲۴
    pg بین ۵۰۰ و ۶۰۰ آنگاه k مساوی ۱۵۱
    pg یکی از متغیرای تصمیم منه و k قیمت پله ای

  114. با سلام و خسته نباشید
    من یه مدل minlp دارم که با سالور بارون وقتی رانش می کنم؛حل به آخر نمی رسه تا ده ساعتم حل مسئله طول کشیده و نزدیک به ۸۰ تا نقطه غیر بهینه هم پیدا کرده ..انگار توی نقاط محلی گیر می کنه..می خواستم بدونم می تونین کمک کنید.
    ممنون

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

      option eject
      iterlim = 100;

      OR

      option reslim = 100000 ;

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

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

  115. سلام.وقتتون بخیر.من برنامه ای با گمز نوشتم خطای
    equation infeasible due to rhs value رو میده
    امکانش هست راهنمایی کنین که این خطا به خاطر چی هست؟

  116. سلام. خسته نباشین.
    من برناممو اجرا کردم اما ارور داره.میشه راهنمایی بفرمایید
    CPLEX error 3019 : failure to solve MIP subproblem
    CPLEX error 1217 : no solution exists
    solution aborted due to iteration limit

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

      option iterlim=Number;

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

  117. سلام وقت بخیر
    من می خوام بین گمز و متلب ارتباط برقرار کنم ولی هرکار میکنم نمیشه! می خواستم ببینم برای برقراری ارتباط باید ورژن های خاصی رو از گمز و متلب استفاده کنم و اینگه کدوم ورژن ها بهم لینک میشن رو اگه میشه معرفی کنید؟ دوم اینکه باید نرم افزارها ۳۲ بیت باشن حتما یا با ۶۴ بیت هم انجام میشن؟!!!!
    ممنون میشم بگید چند روزه درگیر ارتباط بین گمز و متلب هستم ولی نتوسنتم آخرش این کارو انجام بدم! متلب ۲۰۱۳ و ۲۰۱۴ رو تمام با گمز ۲۳٫۵ و انواع ورژن های ۲۴ امتحان کردم ولی جوابی نگرفتم

  118. با سلام و خسته نباشید
    می دونیم که برای نوشتن سیگما از sum استفاده می کنیم. مثلا فرض کنید اگه پارامتر t (زمان) از یک تا ۲۴ بصورت (t1*t24) تعریف شده باشه و ما بخوایم روی این بازه از یه چیزی(مثلا f(t)) سیگما بگیریم به صورت sum(t,f(t)) تعریف می کنیم اما سوال من اینجاست اگه بخوام سیگمای f(t) رو روی t8 تا t15 بگیرم چجوری باید کدش رو چطور بنویسم ؟؟؟ (در واقع روی یک بازه زمانی مشخص میخوام از f(t) سیگما بگیرم)

  119. با سلام وخسته نباشید.
    من برای حل مسأله دو هدفه ای که دارم از روش اپسیلون محدودیت استفاده می کنم. اما مرتب خطاهای ۱۱۹، ۱۴۰، ۱۳۵، ۸ را برای این خط از کد
    if (mod_payoff.modelstat%modelstat.Optimal% and mod_payoff.modelstat%modelstat.FeasibleSolution%, abort ‘no feasible solution for mod_payoff’);
    اعلام میکنه. ممنون میشم اگه راهنمایی بفرمایید.
    با تشکر

  120. سلام
    کد پایینی درست هستش و غیر از بحث محدودیت اپسیلون. نمیدونم چرا وقتی مدل رو اجرا میکنم برای قطعه (p) اول هیچ تولیدی رو در x در نظر نمیگیره. درحالی که در محدودیت پنجم باید میزان تولید هر جهار قطعه توسط تولیدکننده ها (i) باید برابر باشه و باید برابر میزان تقاضا باشه.
    ممنون میشم اگر راهنماییم کنید که کجای کدم مشکل داره
    با تشکر

  121. سلام وقتتون بخیر
    چند وقتی موقع اجرا با این خطا روبرو میشم
    Error 2019: Solver stopped because of numerical instability
    شما می تونید راهنماییم کنید که چطور می تونم این خطا رو رفع کنم .
    ممنون از شما

  122. سلام و عرض ادب
    مدل بنده در گمز زمانی که از روش MINLP حل میکنم ارور نمیده ولی گوشه سمت چپ پنجره گمز گزینه Solverرا نمایش نمیده و براتونم حل مدلمو میفرستم میخواستم بدنم دلیل این که حل نمیکنه چیه؟
    ممنون از همکاریتون
    .

    MODEL STATISTICS

    BLOCKS OF EQUATIONS 19 SINGLE EQUATIONS 927
    BLOCKS OF VARIABLES 7 SINGLE VARIABLES 481
    NON ZERO ELEMENTS 2,931 NON LINEAR N-Z 320
    DERIVATIVE POOL 6 CONSTANT POOL 60
    CODE LENGTH 1,378 DISCRETE VARIABLES 200

    **** THE MODEL EXCEEDS THE DEMO LIMITS
    **** MAX MATRIX ROWS 300
    **** MAX MATRIX COLUMNS 300
    **** MAX NON ZERO ELEMENTS 2000
    **** MAX NON LINEAR N-Z 1000
    **** MAX DISCRETE VARIABLES 50
    **** Terminated due to a licensing error
    .
    .

  123. ممنون سایت خیلی خوبی که دارید
    میبخشید من توی مدلم پرانتز خیلی زیاد دارم و همش بهم ارور ۸ رو میده که پرانتزها درست نیست و خیلی مشکل پیدا کردن این ک مشکل پرانتز از کجاست میخواستم بدونم چطور میشه تو گمز match بودن پرانتزها رو چک کنم؟

  124. سلام
    من با سالور scip یک مدل بسیار سخت را چندین بار حل کردم. ولی بعد از چند بار ران کردن، یکدفعه ارور گرفت و از third party و … گفت و گیر کرد. این در حالیست که روزهای قبل مشکلی نداشت. به نظرتان مشکل از چیست؟ اگر دوباره نرم افزار را نصب کنم مشکل حل می شود؟
    ممنون

  125. سلام
    خطای ۳۳۸ چه موقع رخ میده؟ من یک کد دارم با ۱۴۰ تا محدودیت اما خطای ۳۳۸ رو میده و وقتی روی خطا دابل کلیک می کنم هر دفعه روی یک محدودیت قرار می گیره

  126. تو گمز من هرکاری میکنم فایل GDX ایجاد نمیشه هرکاری کردم چند بار گمزهای مختلف نصب کردم آفیسو عوض کردم اما تفاوتی ایجاد نکرده
    دیگه دارم کلافه میشم

  127. با سلام،
    من یک مد نوشتم و هنگام اجرا خطایی داده نمیشود و اجرا میشه، ولی هنگام نمایش نتایج و در قسمت REPORT SUMMARY میگه ۳۷ ERRORS ( ****). در فایل خروجی هم من اروری پیدا نمی کنم. این ۳۷ تا اررور چی هستن؟ و چطوری میشه حلشون کرد.
    **** REPORT SUMMARY : 0 NONOPT
    0 INFEASIBLE
    0 UNBOUNDED
    37 ERRORS ( ****)
    یه سوال دیگه اینکه در MODEL STATUS وضعیت من ۸ هست (MODEL STATUS 8 Integer Solution). آیا این به این جواب میشه اعتنا کرد یا باید دنبال تغییر مدلم باشم.

    • سلام
      متن خطا رو بذارین. یکی دو خط قبلش و یکی دو خط بعدش هم.
      اگه استتوس ۸ باشه میشه به عنوان یه جواب قبولش کرد. solver status هم یه نگاه بندازین

      • خطایی به صورت معمول که به رنگ قرمز نشون داده میشه نیس. فقط در قسمت گزارش اینا نوشته شده:
        **** REPORT SUMMARY : 0 NONOPT
        0 INFEASIBLE
        0 UNBOUNDED
        37 ERRORS ( ****)
        وضعیت سالور ۱ هست: SOLVER STATUS 1 Normal Completion

  128. سلام و خسته نباشید
    من یک کد در گمز نوشتم که در قسمت توابع ۱۰ تا ارور ۱۴۹ (uncontrolled set entered constant) داد. که ارور ها بعد از w2 دوم هستن.
    weighting(sc) .. z =e=w2(sc)*(sum(i, E(i)*Z2(i))+ sum(l, F2(l)*W(l))+
    sum((i,k,j), (A(j)+B(j)*t(i,k))* X4(i,k,j))
    + sum((k,l,j), C(j)*t3(k,l)*Y4(k,l,j))
    + sum((l,i,j), (-G(j)+D(j)*t4(l,i))*s(l,i,j))
    + sum((l,j),(H(j)+O(j)*t5(l))* T2(l,j)))
    -(1-w2(sc))*(sum((i,j),m(i,j))*(sum(k,x4(i,k,j))+sum(l,s(l,i,j)))
    +sum((l,j),n(l,j))*(sum(k,y4(k,l,j))+sum(i,s(l,i,j))+t2(l,j)));
    عکس این قسمت رو برای اینکه بهتر مشخص بشه براتون ایمیل هم میکنم.ممنون میشم علت رو راهنمایی کنید.

    • سلام
      ایمیلتون نرسیده.
      ظاهرا از نظر کدینگ این بخش مشکلی روی w2 وجود نداره. پس احتمالا تو بخش equation، شما یه بار weighting رو با اندیس متفاوتی با sc تعریف کردین.

      • آدرس ایمیل رو ظاهرا اشتباه وارد کردم اگر ممکنه یک بار هم ایمیلتونو چک کنید. چون خطاها روی w2 نیستند. روی متغیرهای x4 , y4,s, t2 که برای دومین بار در کد نوشته شده هست.در صورتی که روی همین متغیرها که ابتدا نوشته شده خطا نیاورده…

        • سلام
          خب شما به من اطلاعات غلط دادین. ارور بعد از x4 هست. روی i,j سامیشن بستین، پرانتز بسته رو بذارین آخر فرمول. چون با این پرانتزی که الان هست، گمز فکر میکنه شما میخواین ببینیدین سامیشن رو.

  129. سلام. ی سوال داشتم من قید زیر رو تعریف کردم به شکل زیر ولی ارور ۱۴۹ میده، چجوری حلش کنم؟
    co7(p).. sum(t$Ton(p,t),P(p,t))-Emax(p,t)=l=0
    ممنون میشم از پاسختون

  130. باسلام. برای مساله ای در گمز یک کد را قبلا اجرا کرده بودم ولی الان که همون کد رو اجرا میکنم خطای ۱۴۱ و ۲۵۷ رو میده مربوط به چی است؟ نرم افزار رو مجدد باید نصب کنم؟ چون کد رو قبلا اجرا میکردم و جواب میداد

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

      • متن خطاها به صورت زیر است:
        display cost.l,time.l,z.l,g.l,f.l;
        solve zahra2 using mip minimizing time;
        اینطور که متوجه شدم مربوط به مقدار دهی پارامترها است ولی داده ها رو تعریف کردم در فایل اکسل و قبلا همین فایل رو اجرا کردم. نمیدونم چه مشکلی پیش اومده؟

        • سلام
          این متن خطا نیست مهندس.
          ولی اگه ترتیب این دو خط دقیقا همین شکلیه که نوشتین غلطه.
          خط display رو بذارین بعد از خط solve

  131. سلام و خسته نباشید. ببخشید چطور میشه ۱محدودیتی که حالا خودش هم تو ۱ سطح اطمینانی تعریف میشه رو کد کرد.مثلا تو عدم قطعیت و مثلا برنامه ریزی شانسی، وقتی بخایم محدودیتی ک پارامتر غیر قطعی داره در سطح اطمینان مثلا ۹۰% براورده بشه.محدودیت رو ک نوشتیم اینکه مثلا خود محدودیت بزرگتر مساوی ۰٫۹ باشه رو چطور باید بنویسیم؟ممنونم از توجه شما

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

  132. سلام
    خسته نباشید
    ببخشید این کد مشکلی داره؟
    constraint(i,t).. Alpha(i,t)=e=ifthen((G(i)-Load(t))<0,1,0);
    ارور نمیده ولی تمام مقادیر صفر میشن در صورتی که باید ترکیبی از صفر و یک ها باشن
    مقادیر Loat(t) و G(i) بین صفر و ده هستند

    • سلام
      چون ifthen نوشتین پس احتمالا G,load متغیر هستن. شاید تو حالت بهینه همیشه G بزرگتر مساوی با load باشه واسه همین آلفا رو صفر میده.

  133. من یک برنامه دوسطحی (bilevel) با شرایط KKT ماکزیمم نوشتم ولی جوابها صفر بدست میاد. لطفا راهنمایی کنید.
    ممنون از شما

      • MODEL STATISTICS

        BLOCKS OF EQUATIONS 23 SINGLE EQUATIONS 216
        BLOCKS OF VARIABLES 23 SINGLE VARIABLES 216
        NON ZERO ELEMENTS 771 NON LINEAR N-Z 110
        DERIVATIVE POOL 20 CONSTANT POOL 21
        CODE LENGTH 313 DISCRETE VARIABLES 60

        **** THE MODEL EXCEEDS THE DEMO LIMITS
        **** MAX MATRIX ROWS 300
        **** MAX MATRIX COLUMNS 300
        **** MAX NON ZERO ELEMENTS 2000
        **** MAX NON LINEAR N-Z 1000
        **** MAX DISCRETE VARIABLES 50
        **** Terminated due to a licensing error

        GAMS Development Corporation, Washington, DC G871201/0000CA-ANY
        Free Demo, 202-342-0180, sales@gams.com, http://www.gams.com
        10514980000S 00
        01234567000000
        DC0000 Ref: Generated by Base A Demo

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

  134. و کد دوم

    $onsymxref
    sets i/1*3/
    j/1*3/;
    *parameter c(i) zarayebe tabe hadaf /1 5
    *2 3
    *3 2/
    parameter c(i);
    $call GDXXRW.EXE results.xls par=c rng=sheet2!b1:b3
    $gdxin results.gdx
    $load c
    $gdxin

    parameter d(j) zarayebe samte rast/1 300
    2 400
    3 350/
    .
    .
    .
    *filt, By admin

    و این هم خطای ۴۹۲ :
    symbol not in GDX
    نمی توانم از اکسل هیچ داده ای بخونم
    باز هم خیلی ممنون از وقتی که میگذارین

  135. با عرض سلام و تشکر از سایت و آموزشهای خیلی خوبتون
    من در دو کد زیر در فراخوانی داده از اکسل دچار مشکل میشوم در هر دو مورد خطای ۴۹۲
    کد اول:

    $onsymxref
    sets i/1*3/
    j/1*3/;
    *parameter c(i) zarayebe tabe hadaf /1 5
    *2 3
    *3 2/
    parameter c(i);
    $call GDXXRW.EXE results.xls par=c rng=sheet2!b1:b3
    $gdxin results.gdx
    $load c
    $gdxin
    .
    .
    .
    .
    .
    *filt, By admin

  136. سلام
    اقا من یه مشکلی دارم
    ضریب تابع هدف با پارامتری که تو جدول تعریف کردم نمیخونه
    مثلا تو جدول ضریب v رو تعریف کردم عدد بین ۲و۵
    بعد وقتی مدل حل میشه تو خروجی ضریب رو عدد بی ربط نشون میده مثلا ۲۵۷۴میده
    این چیه مشکلش؟
    v(p,h,j,t)=round(uniform(5,20));
    sum((p,h,j,t),qfr(p,h,j,t)*v(p,h,j,t))

    بعد تو خروجی میزنه
    ۲۵۴۷۶*qfr(1,1,1,1)

    • سلام
      qr و v متغیرن یا پارامتر؟ v رو پارامتر تعریف کردین درسته؟ و qr رو متغیر؟
      این عددی که نشون میده، میگه وقتی محدودیت رو باز کنیم و سامیشن بزنیم ضریب qfr برابر ۲۵۴۷۶ میشه. نگرانش نباشین درسته.

  137. بازهم ممنون بابت وقتی که میذارید و جواب میدین
    فرق infeasible 10 , infeasible 4 چیه ؟
    مشکل از مدل میتونه بیشتر؟(مثلا کم و زیاد بودن محدودیتها؟)
    یا داده های پارامترها ؟
    بهترین روش چیه برای رفعش؟

    • خواهش میکنم.
      ۱۰ دوز نشدنی بودنش بیشتره.
      مشکل از همه میتونه باشه و بهترین راه حلش اینه که از اول پیشگیری بشه. مدل پایه از مقالات پایه آورده بشه، کد بشه، با داده های استاندارد. بعد کم کم توسعه داده بشه.
      الان هم با این وضعیت مقداری داده ها رو تصحیح کنید. تو مدل هم کم کم معادلات رو لحاظ کنین نه همه رو. و هر بار ران و تحلیل کنین نتایج رو.

  138. سلام مجدد
    اقا توی خروجی وقتی مقدار یک متغیر رو منفی بزنه
    توی تابع هدف مقدار منفی محاسبه میشه ؟
    نباید صفر نشونش بده وقتی منفی میشه!؟
    نوع متغیر رو مثبت تعریف کردم(positive variable(

      • مثلا متغیر x(i,j,k,t رو positive تعریف کردم
        بعد وقتی خروجی میگیره
        چند تاش مثبته و چند تاش منفی

        میخوام ببینم جواب منطقیه؟
        یا داره اشتباه حساب میکنه؟(یعنی مقادیر منفی تو تابع هدف هم حساب شده)

        یا اینکه نه منفی نشون میده و در محاسبه تابع هدف ۰ در نظر میگیره

  139. سلام دوباره
    اقا من یه سری متغیر دارم
    اینارو positive تعریف میکنم
    مساله جواب بهینه میده
    بعد که integer تعریف میکنم infesible 10 میده!!

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

    • سلام
      خب مسئله با این شرایط نشدنیه. اولا باید برای متغیرهای integer یه حد بالای بیشتر از ۱۰۰، مثل هزار در نظر بگیرین. چون دیفالت integer ها تو گمز ۱۰۰ هست و اگه مدل نتونه با تخصیص مقادیر زیر ۱۰۰ به متغیر ها جواب شدنی تولید کنه، پس مسئله نشدنی میشه. بهترین کار اینه که حدس بزنین مقادیر خروجی متغیر چقدر میشه (اول مسئله رو ریلکس کنین. یعنی با positive حل کنین بعد طبق اون حدود تقریبی برای متغیرها دستتون میاد) بعد با تخصیص attributeِ .up یه حد بالای براش بذارین.
      اگه باز نشدنی شد و این حرفا. باید مدل، داده ها و کد رو چک کنین.
      توجه: اگه با positive جوابی که ارائه میده درسته (یعنی صحیح هم هست) پس همه چی حله و خیالتون تخت.

  140. سلام
    وقتی کدم رو اجرا می کنم روی نود ۵۳۰۰ متوقف می شه و هیچ کاری انجام نمی ده برای گرفتن log هم باید متوقفش کنم.

    Cbc0010I After 5300 nodes, 1028 on tree, 1e+050 best solution, best possible 21357.84 (207.31 seconds)
    Sending CtrlBreakp signal
    Terminate batch job (Y/N)? 
    forrtl: error (200): program aborting due to control-BREAK event
    Image              PC        Routine            Line        Source             
    coincclib.dll      012798E0  Unknown               Unknown  Unknown
    coincclib.dll      01277053  Unknown               Unknown  Unknown
    coincclib.dll      0126105F  Unknown               Unknown  Unknown
    coincclib.dll      0124E7F7  Unknown               Unknown  Unknown
    coincclib.dll      01260684  Unknown               Unknown  Unknown
    kernel32.dll       7C87643C  Unknown               Unknown  Unknown
    kernel32.dll       7C80B713  Unknown               Unknown  Unknown
    Exit code = -1073741510
    
    • سلام
      مهندس لاگ میشه همون چیزایی که تو پنجره ی process window بهتون گزارش میشه.
      اینکه متوقف میشه به خاطر زمانبر بودن مدل و اینکه سچون سایز بالاست، حجم زیادی رو از حافظه میگیره. پس مشکل زمان و فضای رم موقت میتونه باشه. با سالورهای دیگه هم امتحان کنین

  141. با سلام
    در اجرای گمز به من کلا جواب صفر میده و وقتی equation ها باز میکنم میبینم در محدودیت ها یه صفر گذاشته که اصلا توی محدودیت وجود نداره
    Y_6*47 + (0)*T + L_LSM + (0)*L_jupiter =L= 47
    نمی دونم برای چیه لطفا راهنمایی کنید
    Y_6 هم متغیر صفر ویک است

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

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

  143. با سلام و ممنون از سایت خوبتون
    من یک sum نوشتم و مجموعه ها را هم از قبل تعریف کردم اما وقتی کد زیر را وارد می کنم با خطاهایی روبه رو می شوم.

    sum((i,j,m),b(i)*c(i,j)*(0.6)*power(0.4,(m-1)))
    

    i , j اندیس هستند و مشکلی ندارند اما m اندیس پارامترها نیست و خوده ا عداد مجموعه m را در توان میخواهم محاسبه شود اما برای m-1 که در power تعریف کردم خطاهای ۱۴۸ و ۱۳۳ و ۲۰۱ را می دهد.
    چطور می توانم این خطاها را رفع کنم ؟
    پیشاپیش تشکر می کنم

      • m را در set به صورت مجموعه تعریف کردم:
        i index of demand nodes /1*10/
        j index of existed and new facilitiy nodes /1*7/
        m index of assignment levels /1, 2, 3/ ;
        با power هم می خواستم یک پارامتر که مقدارش ثابت هست ینی ۰٫۴ را به توان m-1 برسانم
        درواقع کل عبارتی که میخواهم کد کنم به صورت زیر هستش:
        ۳تا سیگما که به ترتیب به ازای i و j و m هستند و در مقابلشان حاصل ضرب b(i) و c(i,j) و ۰٫۶ و ۰٫۴ به توان m-1 و x(i,j,m) هست

        • به جای m توی تابع بنویسین ord(m)-1احتمالا درست بشه.
          اگه قبول نکرد، توی دستور set که بالا تعریف کردین، اول m رو تعریف کنین بعد i,j رو.
          بعد توی Power به جای m بزنین m.uel

  144. سلام جناب محمودی. با تشکر از مطالب بسیار ارزنده شما، یه سوال داشتم: محدودیت x(i)=a(i,j) بطوریکه i,j برابر باشند، رو چطوری میشه نوشت؟ ممنون

پاسخ دهید

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