۱۱۷

خروجی های نرم افزار

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

در این فصل به تشریح خروجی های استاندارد، خطاهای متداول و بهبود خروجی GAMS مورد بحث قرار خواهند گرفت.
مثال کاربردی ۱ -که قبلاً کد نویسی کردیم- را در نظر بگیرید. این مدل کاملاً آماده ی حل و گرفتن نتایج حاصله می باشد. برای حل یک مدل چند مسیر عمومی وجود دارد که نهایتاً نتیجه ی یکسانی خواهند داشت. ۱- به منوی File/Run می رویم. ۲- دکمه ی F9 را فشار می دهیم. ۳- در روش سوم طبق شکل زیر در قسمت Command Line دستور ساده ی gams example1 را تایپ می کنیم.

how-to-run

۳- روش سوم که بسیار متداول تر می باشد، استفاده از دکمه ی Run که در شکل زیر نشان داده شده است می باشد.

how-to-run-2

مدل را Run کنید. پس از Run کردن مدل، بلافاصله پنجره ی پویای Proccess Window باز خواهد شد. این پنجره فرآیند کد خوانی GAMS، پیشرفت مرحله به مرحله ی حل مدل، فازهای مختلف آن، زمان شروع و زمان پایانِ حل مسئله، میزان Gap و کران های بالا و پایین، Errorهای احتمالی و اطلاعات لحظه ای این فرآیند را نشان می دهد. در این پنجره Error ها با رنگ قرمز و موقعیت ها و شرایط مهم به هنگام حل مدل (بعضا تغییر در رویه ها و نتیجه گیری های مختلف توسط GAMS و…) با رنگ آبی نشان داده می شوند. با دبل کلیک روی سطر قرمز به سطر مربوط به خطا در کد نوشته شده(یا مکان نما در فایل lst) خواهیم رفت. همچنین با دبل کلیک روی سطر آبی به زیر فرآیند مربوطه در فایل lst خواهیم رفت. توجه شود که Error ها در همین فصل به طور کامل و کاربردی، مورد بحث و گفتگو قرار خواهند گرفت و در صورت مشاهده ی هر گونه خطا در برنامه ی خود به این بخش مراجعه کنید.

process-window

به علاوه Process window دو کلید و دو گزینه نیز دارد.
Summary only : در صورت زدن تیک این گزینه ، تنها خطوط با رنگ آبی یا قرمز و خطوطی که با (—-) شروع شده اند نمایش داده می شوند. به این ترتیب تعداد خطوط نمایش داده شده، کم خواهند شد.
Update : در صورت زدن تیک این گزینه ، همزمان که فرایندِ حل پیشرفت می کند کاربر قادر خواهد بود بدون scroll کردن، آخرین گزارش اجرایی را همزمان با پیشرفت حل مدل ببیند. اگر این تیک برداشته شود، تنها با scroll کردن می توان سطور مختلف این پنجره را مشاهده نمود.
Stop : با زدن این دکمه، تمامی فرایند حل مدل قطع خواهد شد. اگر مدل کاملاً حل شده باشد، دکمه stop به open log تبدیل خواهد شد.
شایان ذکر است که همزمان با حل مدل، سه فایل دیگر همنام با فایل example1.exe ولی با فرمت های متفاوت شامل، .log و .lxi و .lst در دایرکتوری GAMS -که شامل خروجی های GAMS می باشند- تولید می شوند.
یک log file ، فایلی با فرمت (.log) می باشد (در مثال مورد بررسی ما example1.log) که بلافاصله پس از Run کردن مدل در دایرکتوری GAMS تولید می شود. در واقع یک log file همان اطلاعات موجود در process window است که به صورت ایستا برای زخیره سازی و استفاده ی مجدد تعریف شده است. این فایل با استفاده از برنامه های editor (مانند notepad) نیز قابل خواندن می باشد.
یک lxi :
یک فایل lst اصلی ترین خروجی در نرم افزار GAMS می باشد. این خروجی به طور کامل در بخش بعد تحت عنوان خروجی استاندارد تشریح خواهد شد.



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

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

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

 

117 دیدگاه در “خروجی های نرم افزار

  1. سلام ببخشید که مزاحم میشم. من مدلمو تو GAMS نوشتم و Run کردم. مدل به صورت MINLP هست. تو روند حل تا Iteration آخر مینویسه OPT و مقدار تابع هدف منطقی و ثابت هست اما تو آخرین تکرار مینویسه No feasible و مقدار تابع را صفر قرار میده. برای یه مثال کوچیکتر جواب داده و مدل شدنی بوده. می خواستم اگه بشه راهنماییم کنید که چرا جواب نمیده؟ و اینکه ممکنه به خاطر تعداد بالای تکرار باشه و اگه آره میشه جوری تنظیم کرد که در سطح پایین تری متوقف شه؟
    زمان Run حدودا بیست دقیقه ست و Solver استفاده شده Bonmin هست

    • سلام
      این جوابی که داده به خاطر نشدنی بودن مسئله شما هست احتمالا. مدل رو بررسی مجدد کنید.
      بله میشه حتی زمان رو gap رو محدود کرد.
      واسه شرط توقف زمانی از دستور reslim
      و برای توقف از نظر gap: از دستور optcr استفاده کنین.
      مثال:

      option reslim=3600;
      option optcr=0;

      من توصیه م انه که از baron هم استفاده کنین.

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

  3. با عرض سلام و تشکر
    زمانی که برای زمان اجرا از دستور reslim استفاده میکنیم، اگر زمان رسیدن به جواب بهینه کمتر از زمانی است که ما نوشتیم چگونه میتوان به زمانی که جواب مدل به بهینه خود رسیده است را بیابیم?
    باتشکر

  4. سلام

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

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

    باتشکر

    • سلام
      مرسی و خواهش میکنم.
      شما وقتی مدل رو ران میکنین، یه پنجره دیگه باز میشه که اسمش process window هست. همزمان که مدلتون داره ران میشه، دو تا گزینه تو این پنجره میبینین، یکیش stop و اون یکی هم interrupt هست. interrupt رو بزنین، اگه گمز تا اون لحظه به جوابی شدنی رسیده باشه، بهترین جواب شدنی رو بهتون نشون میده. اگه نه که همه متغیرا رو صفر میده. stop که کلا همه چیو متوقف میکنه
      موفق باشین

  5. سلام . وقت بخیر. دوتا سوال دارم
    اول اینکه بعد از اجرای برنامه توی بخش equation وقتی می خوام یکی از توابع رو چک کنم جلوش نوشته none . دلیلش چیه و چطور می تونم تابع رو ببینم؟

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

  6. سلام . آیا توی گمز دستوری وجود داره که زمان اجرای چند خط از برنامه رو نشون بده؟
    مثلا برای ماتریس Q می خوام مقدار زیر رو حساب کنم و سپس زمان محاسبه ش رو بهم نشون بده
    A1(i)=sum(j,Q(i,j));
    A(i)=A1(i)+c(i);
    M=smax(i,A(i));

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

      scalar starttime; starttime = jnow;
      YOURCODE
      scalar elapsed; elapsed = (jnow - starttime)*24*3600;
      display elapsed;

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

        • سلام
          فضای شدنی همه یکی هست؟ یعنی این Lp ها و این MIQCP دقیق داده ها و محدودیت های مشترکی دارن یا خیر؟

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

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

  7. سلام و خسته نباشید. ممکنه ببینین سوال من راه حلش چیه؟
    من یک مساله نمونه با ابعاد بزرگ رو می خوام با بارون حل کنم. تو نمونه های کوچیک حواب می ده ولی در حالت بزرگ، وقتی reslim رو مثلا ۷۰۰۰ میزارم روی حدود یکساعت نرم افزار خود به خود قطع میشه و پیام stop workingمیده. برای چک کردن قدرت کامپیوتر مدل رو خطی و ساده تر کردم و با سیپلکس حل کردم تا حدود سه ساعت هم مشکلی پیش نیومد. به نطرتون چه باید کرد؟

    • سلام
      اروری که داد ارور گمز بود یا از این خطاهایی که ویندوز میده رو داده بود؟
      بله این مشکل پیش میاد بعضی وقتا. پیشنهاد من اینه که از لیندو استفاده کنین. تاپیک زیر رو بخونین حتما
      دانلود گمز به همراه لایسنس و راهنمای نصب
      البته یه پیشنهاد دیگه هم اینه که روی آیکون (یا شورتکات یا جایی که نصب شده یا تو منوی start) گمز کلیک راست کرده و properties رو بزنین. بعد compatibility رو بزنین، بعد تیک run this program رو بزنین، و گزینه ی windows xp (service pack 2) رو انتخاب کنین. شاید درست شد. و اینکه اگه سیستم عامل شما ویندوز نیست من پیشنهادی ندارم

        • متاسفانه هنوز حل نشده . از سالور دیگه ای به جز لیندو استفاده کردم و روی مدل باز کار کردم. ولی بازهم روی حدود ۳ ساعت نتونست جواب پیدا کنه و ارور متوقف شدن نرم افزار اومد (پنجره … has stop working ) و بعد در process window ذکر شد که جوابی پیدا نشد.سیستم عامل هم ویستا است. آیا به نظرتون لیندو می تونه کاری که بارون نتونست رو انجام بده؟

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

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

  8. منظور از عبارات Best possible، Absolute gap، MIP Solution، ،Relative gap، Final Solve چیه؟
    مدل من یه مدل خطی هست و انتظار دارم جواب بهینه دقیق به دست بیارم. چرااین اتفاق نمی افته؟

  9. سلام می بخشید من یه مدل LP-METRIC دارم وقتی تابع z اصلی که ترکیب ۴تا هدفه را مینویسم ارور میده
    Model Assemble /all/ ;
    Solve Assemble using nlp minimizing f1 ;
    Solve Assemble using nlp maximizing f2 ;
    Solve Assemble using nlp minimizing f3 ;
    Solve Assemble using nlp maximizing f4 ;

    Solve Assemble using nlp minimizing Z ;

    objective..z=e=(w1*((f1-z1)/z1)**(p)+w2*((z2 -f2)/z2 )**(p) +w3*((f3- z3 )/z3 )**(p)+w4*((z4 – f4 )/ z4 )**(p))**(1/p)

    — objective =E=

    objective.. (0)*f1 + (0)*f2 + (0)*f3 + (0)*f4 + z =E= 0 ; (LHS = UNDF)

    • سلام
      این روش سوال پرسیدن نیست. شما ارور رو باید بفرستین. ضمن اینکه تو مخرج ها معمولا ماکسیمم f رو مینتویسن. مثلا میزنن f1max-z1/(f1max-f1min)

  10. با سلام خدمت شما.ممنون از سایت مفیدتون
    من یک مسأله minlp نسبتا در ابعاد بزرگ دارم که توابع مثلثاتی توش هست و از dicopt استفاده کردهام. وقتی برنامه را اجرا میکنم اول infeasibility میاره بعد نیم ساعتی objective را نشان میدهد و بعد این پیامoptimal solution convergence too slow و میگه که تغییرات تابع هدف برای چند تکرار خیلی کم بوده و بعد احساس میکنم برنامه واگرا میشه.
    خواستم ببینم آیا دستوری هست که اگه تابع هدف برای چند تکرار یک مقدار داشت، برنامه باز ادامه بده و اون پیامی که گفتم را نیاره.

    • سلام
      مرسی و خواهش میکنم.
      بله همچین دستوری وجود داره. شما باید از optionی به نام continue استفاده کنین که مقدارش صفر باید باشه. کد زیر رو بین دستور Model و solve کپی کنین. yourmodelname هم اسم مدل شماست.

      $onecho > Dicopt.opt
      continue 0
      $offecho
      Your_mode_name.optfile=1;

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

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

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

    • سلام
      علت نشدنی بودن معمولا ایناست:
      ۱- ساختار مدل اشتباه باشه و مدل نویسی مشکل داشته باشه. پس مدل رو با مقالات پایه مقایسه کنین و بیشتر روش فکر کنین. دستورات شرطی خیلی ساده هم روی جواب تاثیر داره. کم کم محدودیت ها رو مدل اضافه کنین و پیدا کنین که کدوم محدودیتا به هم تناقض دارن. تحلیل کنین.
      ۲- داده هایی که مدل داده شده مناسب نباشه. بهتره با یه مثال ساده شروع کنین کار رو.

  13. سلام
    معذرت میخوام من یک مدل غیر خطی بهینه سازی دارم که در گمز کدنویسی کردم و خروجی هم گرفتم ولی در status model ،حالت locally optimal به جای بهینه کلی نوشته شده.میشه لطفا راهنمایی کنید چیکار کنم تا به جواب بهیه کل برسم؟
    اکتفا به همین جواب درسته یا غلط؟
    با تشکر

    • سلام
      اکتفا بهش نمیشه چیزی خواصی در موردش گفت. گپی هم که اعلام کرده مهمه.
      اولا شرط زمان رو مد نظر داشته باشین شما. محدودیت زمانی شما باید بر حسب زمان حل مدل شما باشه. مثلا اگه تو هزار ثانیه متوقف شده و این پیام رو داده، زمان حل رو بیشتر کنین.
      ثانیا یکی از روش هایی که از لوکال خارج میکنه مسئله رو، جواب آغازین هست. شما یه جواب آغازین به متغیرهاتون بدین. مثلا x.l=5 تا جوابای دیگه ای هم بتونه تولید کنه.
      از سالورهای دیگه هم کمک بگیرین.

  14. سلام
    خیلی ممنون از اینکه جواب دادید.
    میشه لطفا بفرمایید زمان حل را چطور افزایش بدم.
    .سالورهای دیگه برای مدل غیر خطی را میشه خواهش کنم نام ببرید.
    سپاسگذارم

    • سلام
      این کد رو به قبل از دستور solve انتقال بدین و مسئله رو ران کنین. ۲۰۰۰۰ همون زمان توقف هست به ثانیه.
      option reslim=20000;
      سالورای زیادی هستن که برای غیر خطی میتونن مناسب باشن. مثلا بارون، لیندو، دیکاپت، اس بی بی. شما اینا رو میتونین تو بخش file/option/solvers ببینین.

  15. با عرض سلام
    معذرت میخوام در نرم افزار گمزی که من نصب کردم بیشتر سالورها در حالت Demo هستند.میشه لطفا یه لینک معرفی کنید که لایسنسی داشته باشه که کل سالورها رو در حالت Full داشته باشه.
    اگر باید تاریخ کامپیوتر هم تغییر بدم لطفا بفرمایید.
    سپاس

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

  16. سلام
    خیلی ممنون از مطالب مفید سایت شما.
    یک سوال داشتم در یک محدودیت می خوام مجموع ظرفیت های i در هر سال برابر با سهم همان سال به علاوه ی مجموع سهم باقیمانده از سال های قبل.چطوری باید متغیر ها رو اندیس بذارم.هر جور مینویسم ارور میده.
    محدودیت مورد نظر:
    con..SUM(i,X(yr,i))=E=UP(yr)+SUM(yr-1,(UP(yr-1)-SUM(i,X(yr-1,i))));
    میشه لطفا بفرمایید درست عبارت بالارو چه جوری بنویسم؟
    ممنون

    • سلام
      مرسی و خواهش میکنم.
      محدودیت رو اشتباه نوشتین.
      con(yr)..SUM(i,X(yr,i))=E=UP(yr)+SUM(yrprime$(ord(yrprime) <= ord(yr) ),(UP(yr-1)-SUM(i,X(yr-1,i)))); ypprime رو باید الیاس yr کنین. مفهومش رو من کاری ندارم.

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

  18. سلام
    آقای محمودی میشه لطفا بفرمایید چطور باید این شرط رو در ساختار مدلم بنویسم؟
    تابع هدف من حاصلضرب مجموع سود ۵ کشاورز است.برخی کشاورزها مجموع سودشان صفر می شود و همین باعث میشه کل تابع هدف صفر بشه.یه دستور می فرمایید که بنویسم و با اون به مدل بگم اگر مجموع سود یک مزرعه صفر شد در تابع هدف اون مزرعه وارد نشود.
    sumation(f)=E=sum(yr,benefit(yr,f);
    تابع هدف
    prod(f,sumation(f))
    تابع هدف بالایی است.اون شر را می فرمایید چیکار کنم؟
    خیلی خیلی ممنون و متشکر

    • سلام
      ابتدا بفرمایین که این ضرب کردن سودها معنی خاصی میده؟ درسته که اینا خوبه که بالا باشن، ولی این ضربشون چه مفهومی پشتش هست؟

  19. سلام
    هدفم استفاده از یک تابع معروف به نام تابع ضربی نش است که میخوام حاصلضرب سود ۵ مزرعه باهم ماکزیمم شود.یه سوال واسم پیش اوم دوباره از شما بپرسم به علاوه سوال قبلم.
    در گمز برای اینکه سود این ۵ مزرعه که هرکدام یک تابع غیر خطی هستند را در تابع هدف ضرب کنم باد از دستور prod استفاده کنم؟
    میشه لطفا فرم صحیح نوشتن prod را بفرمایید.همش به مشکل می خورم.دسترسی ندارم به چیزی فقط از شما میتوونم کمک بگیرم.
    این فرمت درسته آیا؟
    z= prod(f,benefit(f))
    که تابع benefit(f)=E= sum(c,prc(f,c)*y(f,c)*Area(f,c))-sum(c,crop(f,c)*Area(f,c))-sum(c,cw(f,c)*nw(f,c)*Area(f,c))-prc*volume(f);
    می باشد.
    نباید در z =e=prod((f,c),benefit(f)) بنویسم؟
    واقعا ممنون

  20. سلام. من مدلی در گمز نوشتم . این عبارت مربوط به تابع هدفشه که قسمت اول اون رو صفر برمیگردونه… در حالیکه n مجموعه سال هاست و مقدار گرفته
    ممکنه راهنمایین کنین… واقعاً کلافه شدم … خیلی راه ها رو امتحان کردم.. نمیدونم مشکل از کجاست. CF هم یک متغیرثابته…

    Cobj=e=sum(n,(CF**ord(n))*sum(s,F(s,n)*C0(s,n)))

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

  21. با سلام و ضمن تشکر از سایت خوبتون.
    من مدلی در گمز پیاده کردم و Option reslim=3600; قرار دادم. خروجی زیر رو در بخش Solution Report گرفتم:
    MIP status(107): time limit exceeded
    Cplex Time: 3601.25sec (det. 335583.58 ticks)
    Fixing integer variables, and solving final LP…
    Fixed MIP status(1): optimal
    Cplex Time: 0.14sec (det. 22.24 ticks)
    Resource limit exceeded.
    این خروجی دقیقا بعد از ۳۶۰۰ ثانیه به دست اومده. الان یعنی به جواب بهینه رسیده؟ یا یکی از جوابهای موجه رو گزارش میکنه؟
    و اینکه من بر اساس مطالبی که در سایت خوندم برای تعیین زمان اجرای مدل عبارت display Untitled_1.resusd; رو اضافه کردم. با اینکه پس از یک ساعت نرم افزار خروجی رو به من داده ولی به ازای display Untitled_1.resusd; خروجی زیر رو گرفتم:
    —- ۳۷۹ MODEL Untitled_1.ResUsd = 3601.688

    EXECUTION TIME = 1.154 SECONDS 7 MB 24.8.3 r60202 WEX-WEI
    یعنی مدل من در حدود ۱٫۱۵ ثانیه حل شده؟!!
    این در حالیه که حتی در حالت قبل هم که پیش فرض Option reslim=1000; بود نمی تونست جواب رو به دست بیاره…
    ممنون میشم راهنمایی بفرمایید.

    • سلام
      تشکر.
      نه یه جواب موجه رو داره گزارش میکنه. gap رو ببینید. اونجایی که آخر تو پنجره ی process window نوشته absolute gap و relative gap. این میشه مقدار خطایی که با جواب بهینه ی احتمالی داره. نرم افزار خودش اینو حساب میکنه و گزارش میده.
      برا زمان حل هم خیر! همونطور که میبینید نوشته ۳۶۰۱٫۶۸۸ این زمان نهایی حل هست. که یه ثانیه ش تقریبا برا خوندن داده ها و سایر مواردی که گمز رو اماده میکنه تا شروع به حل مدل و توقف کردن مدل هست. اون تایم آخر هم که یه ثانیه ست باید نگاه کنین کجا اینو گفته. احتمالا برای display کردن داده ها و نشون دادن solvar اینا باشه. و قطعا ربطی به زمان حل مدل نداره.

      • ممنونم از راهنماییتون.
        الان خروجی که به من داده این هست:
        MIP Solution: 725.645867 (600530 iterations, 529 nodes)
        Final Solve: 725.645867 (11 iterations)

        Best possible: -924.198551
        Absolute gap: 1649.844418
        Relative gap: 1.000000
        این جواب Best possible مربوط به چی هست؟ راجع به این گپ ها توضیح میدین؟ اون Absolute gap یعنی جواب به دست اومده انقدر با جواب بهینه فاصله داره؟!

        • سلام
          برای گپ:
          گمز یا solver های مرتبط، در حل مسائل MIP دو تعریف عمده دارن. best integer و best estimate . اولی یعنی جواب بهینه مسئله و تو همه محدودیت ها صدق میکنه.
          دومی به این معنیه که بهترین جوابی که میتونه بدون در نظر گرفتن محدودیت integer بودن متغیرها به دست میاد هست.
          تفاوت این دو تعریف میشه absolute gap و اگه به شکل درصدی هم بیانش کنیم میشه relative gap
          جهت مشاهده فرمول دقیق و محاسبات اینجا کلیک کنید.

          برای اینکه الان گپ رو یک داده، این یعنی اینکه مدل فقط تونسته یه جواب شدنی برا مدل تولید کنه و تو این زمانی که دادین نتونسته مسئله اولیه رو به دوگان نزدیک کنه. پس شما باید سعی کنین که جواب رو بهترش کنین.
          زمان رو ببرین بالا
          مدلسازی رو بهترش کنین.
          از شرط ها استفاده کنین که مقداری محدودیت ها کمتر بشه و …
          برای تابع هدفتون هم (در صورتی که باید بزرگتر مساوی صفر باشه) حداقل مقدار صفر قرار بدین. z.lo=0

    • سلام
      چند تا دلیل داره:
      ۱- ممکنه واقعا جواب بهینه ش همین باشه.
      ۲- ممکنه نشدنی باشه با این شرایط و باید چک کنین که توی پنجره ی process window چیزی در مورد نشدنی بودن مدل گفته یانه. این نشدنی بودن ممکنه به چهار دلیل باشه. داده نا مناسب. ضعف سالور. اشتباه بودن مدل سازی. اشتباه بودن کد نویسی.
      ۳- ممکنه لایسنس نداشته باشین. برا لایسنس برید تو بخش دانلود نرم افزار گمز همین سایت. راهنمایی کردیم اونجا.
      همه موارد رو باید چک کنید.

  22. سلام مجدد. باز هم ممنون بابت وقتی که میگذارید.
    راستش با یکی از سالورها جواب گرفتم بالاخره (مدلم MINLP هستش، ولی بعنوان مثال با خیلی از سالورها از جمله بارون جواب نمی گیرم دلیلشم نفهیمیدم).
    جدا از ضعف سالور، آیا ممکنه با یه سالور جواب گرفت در حالیکه بقول شما مدل سازی یا کدنویسی اون اشکال داره؟

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

    • سلام
      خواهش میکنم.
      دلیل نمیخواد. سالورا هر کدوم از یه رویه ای تبعیت می کنن که به جواب برسن. حالا یه سری میرسن. یه سری نه. مطمئن هم بشین که واقعا جواب مناسبی رو بهتون داده.
      بله ممکنه مشکل از کد نویسی هم باشه ولی یه سالور جواب بده. شما اول مدل، بعد داده ها و بعد کد نویسی رو کاملا دقیق چک کنین.
      اینکه حساس نیست چیز عجیبی نیست در کل. ولی اگه از لحاظ منطقی انتظار دارین که حساس باشه. باید مجددا مدل و داده ها رو چک کنین!
      برا اینکه بگین اول با هدف obj بیا مدل رو solve کن. بعدش بیا تابع هدف obj رو فیکس کن. بعد بیا اون متغیری که من میگم رو هم بزرگش کن. میشه. اینجوری:

      solve mymodel using minlp maximizing obj;
      obj.fx=obj.l;
      solve mymodel usiing minlp maximizing myvariable;
      
  23. والا دقیقا همونطوری نوشتم که شما فرمودی منتها ارور میده

    Error 148: dimension difference
    error 246: objective variable is not a free variable
    

    و ۲-۳ خطا در ادامه که احتمالا بخاطر همین دوتا ارور باشه…

    ببینید من میخوام علاوه بر اینکه تابع هدفم ماکزیمم سازی میشه، متغیر تصمیمم که سرعت (سرعتی که وسایل نقلیه بین دو گره حرکت میکنند) هستش optimize بشود. حالا ممکنه این optimization سرعت باتوجه به داده های ورودی مدل حداکثر و یا حداقل شود. ضمن اینکه برای سرعت کران بالا و پایین منظور کرده ام.
    سوال دیگه اینکه آیا میشه قسمت سوم کدی که گفتین رو اینجوری نوشت:

    solve mymodel using minlp optimizing myvariable;
    

    بجای maximizing از کلمه optimizing استفاده کنم، گمز میشناسه?

    • سلام
      لطفا به همون سوال و جوابی که داشتیم ریپلای کنین فقط.
      این دو تا ارور خیلی واظح گفتن که تابع هدف باید متغیر آزاد تعریف بشه. variable or free variable
      سوال دوم: اینجوری مدل دو هدفه میشه و باید از روشهای چند هدفه استفاده کنین. مثلا روشهای وزنی یا روش های پارتویی مثل eps constraint. باید در موردشون مطالعه کنید.
      سوال سوم: خیر.

  24. با سلام و تشکر از سایت خوبتون
    من مدلم minlp هستش که با سالور bonmin حلش کردم، تو کامنتا خوندم شما گفتین بهتره از dicopt و baron استفاده بشه اما این دو برای من demo هستن و با bonmin حل کردم، بعد از حل دو تا ارور ابی رنگ با این متن میاد:

    error at line 136: division by zero (0)
    error at line 137: division by zero (0)
    

    جوابایی که داده هم غیرعادیه ، این ارور بعد از حل برای چی میاد چطور رفع کنم؟ مدلم مشکل داره یعنی؟

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

  25. خیلی خیلی ممنونم ازتون
    همون کاری که گفتید رو کردم هم سالورام فول شد همه و هم اون خطا رفع شد
    ممنون از وقتو حوصله ای که میزارید

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

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

      • ببخشید من وقتی مدلو ران میکنم این پیغامو میده:

        The file you want to run is not in the current process directory.
        

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

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

          option optcr=0, optca=0;
          
        • سلام
          خیلیییییی ممنون مشکل حل شد
          فقط یه سوال دیگه داشتم
          اینکه من از دستور display استفاده کردم
          توی جواب میزنه:

          ۱۰۰VARIABLE z.L = 1185846.103
          این صد قبل از وریبل معنیش چیه؟

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

      • سلام. یعنی همگرا نمیشه . البته وقتی حجم مسئله رو که کوچک میکنم حل میکنه ولی وقتی که حالت اصلی مسئله رو میخوام حل کنه، درصد گپی که تو هر iteration نشون میده رفته رفته زیاد میشه و تو مقدار مثلا ۱۴۰% میمونه

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

  28. با عرض سلام
    من یه برنامه تو گمز ران کردم که تو اون متغیر (FL(B,S به ازای B,S های مختلف یه سری مقادیر گرفته
    حالا می خوام یه متغیر دیگه تعریف کنم که برابر با یکی از مقادیر (FL(B,S هست. یعنی می خوام این
    کد رو بنویسم (C = FL(1,2. چجوری میشه این کد رو نوشت؟

  29. با سلام.
    من یه مدلی رو حل کردم ولی با هر سالوری مختلفی هم که حل میکنم دوگانهای مختلفی رو نشون میده. دلیلش چی میتونه باشه؟
    مربوط به لایسنسش هست آیا؟

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

  30. با سلام و تشکر از سایت خوبتون
    من یک مدل مکانیابی با ۴ تا محدودیت دارم خروجی گمز غیر عادیه و محدودیتام اعمال نمیشه، برای اینکه ببینم ایراد از کجاست کلا محدودیت ها رو برداشتم و ران کردم اما توی خروجی، جواب همه متغیرهامو صفر داد. این غیرعادی نیست؟ امکان داره که تابع هدفم یا پارامترا یا متغیرهارو اشتباه تعریف کرده باشم ؟

    • سلام
      مرسی
      غیر عادی یعنی چی؟
      محدودیت چرا اعمال نمیشه؟
      و وقتی بر میدارین چه پیامی میده؟ model status, solver status و اینکه گفته نشدنیه یا نامحدود؟

      • غیرعادی یعنی اینکه مثلا متغیرهامو باینری تعریف کردم اما بهم بین صفر و یک میده و یا اینکه هزینه هام یا همون تابع هدفم کوچکتر از صفره در صورتی که اصن نه منهی دارم توی تابع هدف و نه پارامترهام منفیه نمیدونم از کجا منفی میکنه، محدودیت هام هم به شکل زیر هستش:

        co1(i,j,m)$(ord(j)&gt;=4).. x(i,j,m)=l=y(j);
        co2(i,m)..  sum(j,x(i,j,m))=e=1;
        co3(i,j).. sum(m,x(i,j,m))=l=1;
        co4 ..   (sum((i,j,m)$(ord(j)&gt;=4),b(i)*x(i,j,m)) / (sum((i,j,m),b(i)*x(i,j,m))+0.000001))=g=0.4;
        co5 ..   sum(j$(ord(j)&gt;=4),y(j))=l=3
        

        مثلا محدودیت شماره ۲ که میگه مجموع x هام به ازای i و m برابر ۱ باشه توی جواب اینطور نیس x رو که باینری تعریف کردم بهم بین صفر و یک میده و اینکه یه جاهایی هم که بین صفر و یک نیست مجدودیت ۲ رو رعایت نمیکنه،
        و وقتی که کلا محدودیت هارو برمیدارم:

        SOLVER STATUS     1 Normal Completion         
        **** MODEL STATUS      2 Locally Optimal           
        **** OBJECTIVE VALUE           267760.0000
        

        اون محدود یا نامحدودی رو که پرسیدین هم نمیدونم از کجا بفهمم یعنی نمیدونم کجاشه
        همه xها رو صفر میده و اینکه من توی متغیرام برای y(j) یه شرطی گذاشته بودم که مثلا برای j های ۱ ۲ و ۳ مقدار y(j) برابر با ۱ باشه حالا به خاطره اون متغیرهای y ام به ازای این سه تا j برابر ۱ میده، اون شرط رو برمیدارم هم اون سه تا هم صفر میشه یعنی کلا همه متغیرها صفر میشه ولی نتایج solver status و اینها همون مثله بالا میشه. منکه توی همه جملات تابع هدفم متغیرهامو دارم چطوره که متغیرها صفره ولی تابع هدفم مقدار میگیره!
        ممنون از وقتی که میذارید

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

          option optcr=0, optca=0;
          

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

  31. خیلی ممنون از لطفتون اون دستور رو گذاشتم اما همچنان جوابای بین صفر و یک دارم و اینکه متوجه شدم محدودیت ۴ ام باعث بین صفر و یک شدن جوابا میشه و همچنین تابع هدفم رو هم اون منفی بینهایت میکنه. ببخشید یک سوال دیگه هم داشتم: اینکه اگر این محدودیت باعث همچین چیزی میشه ممکنه که اشتباه کد کرده باشمو مثلا گمز نفهمیده باشدش یا اینکه ذات محدودیته اشتباهه و با مدل نمیخونه؟

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

      • سلام
        نه نزدیک به صفر نیست مثله همون ۰،۴ و ۰،۳ و این هاست مدلم رو minlp گذاشتم و با dicopt هم حل کردم که توی سایت شما خونده بودم سالوره خوبی برای این مسائل هستش. پس احتمالا مدلم ایراد داره
        خیلی ممنون از شما که پاسخگو هستین

        • سلام
          لطفا با lindo یا baron هم حل کنین، optcr=0 هم قرار بدین، پیامای model status, solver status رو اینجا بذارین

  32. شما گفتین که داده ها ممکنه مشکل داشته باشه من رفتم داده هامو عوض کردم دیدم جواب ها درست نشده ولی بهتر شده و دوباره در اون جهتی که بهتر شده بود تغییر دادم و بعد دیدم که جوابای مسئلم درست شدن کامل. مدل status ام هم به صورت زیر هستش:
    **** SOLVER STATUS 1 Normal Completion
    **** MODEL STATUS 8 Integer Solution
    **** OBJECTIVE VALUE 950869.3099
    واقعا ازتون ممنونم که راهنماییم کردین من گمز اصلا بلد نبودم با سایت شما کد کردمو مشکلاتمو برطرف کردم و بالخره حللش کردم خیلی خیلی ممنونم.

  33. مدل من حل شد خروجیام درست شد اما الان چک کردم و متوجه یه چیزی شدم اینکه من یه محدودیت واسه متغیر X گذاشته بودم که اگر فاصله بیشتر از یک مقداری باشه متغیر بشه صفر جوابش، اما توی جواب ،متغیر برای مقادیری که فاصلشون بیشتر از حدیه که من تعریف کردم صفر نیس بعضی جاها یک شده. به این صورت نوشتم کدشو:
    binary variable x(i,j,m);
    x.m(i,j,m)$(d(i,j)>35)=0;

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

پاسخ دهید

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