در این بخش از خروجی اطلاعاتی کلی در مورد خروجی مدل، چگونگی حل و نتایج مرتبط با آن منتشر می شود. این بخش از خروجی شامل solve summary ، solequ و solvar می باشد و در صورتی که پس از دستور solve از display هم استفاده کرده باشیم، display را هم در آن مشاهده می کنیم. در عکس زیر قسمت model summary را مشاهده می کنید. خروجی های مربوط به model, type و solver بدیهی بوده و از توضیح آن می گذریم. می توان گفت مهم ترین بخش solution report مربوط به solver status و model status می باشد. برای اینکه مطمئن شویم که مدل ما درست حل شده و یا اینکه شرایط حل آن به خوبی پیش رفته یا نه، باید این دو بخش را مطالعه کنیم. برای اینکه متوحه شوید که هر کدام از عبارات بالا چه مفهومی را ارائه می دهند اینجا کلیک کنید. در ادامه هم جواب ارائه شده برای تابع هدف به همراه گپ و lower bound جزو خروجی های این بخش است. در بخش بعدی نیز زمان حل مدل به همراه تعداد تکرار های مورد استفاده ی در حل مدل ارائه خواهند شد.
قسمت solveEqu و solvar هم به ترتیب اطلاعاتی در مورد محدودیت ها و متغیرهای مدل ارائه می دهند. این اطلاعات شامل مقادیر بهینه (در ستون level)، مقادیر دوگان در ستون marginal و مقادیر مربوط به کران های مربوطه می باشد. (این پست قبلا منتشر شده بود ولی به علت مشکلات دیتا بیس حذف شده است. و اجباراً پست از نو نوشته شده است و قطعا از پست قبلی کیفیت پایین تری دارد. از این بابت از شما عزیزان پوزش می طلبیم)
آموزش گام به گام در اینجا به اتمام می رسد. و خواننده از این به بعد فقط با تمرین و ممارست و کد نویسی مدل های مختلف و مطالعه ی عمیق تر می تواند در استفاده از گمز تبحر پیدا کرده و سطح آکاهی خود را از مبتدی به حرفه ای و سپس توسعه دهنده ارتقا دهد. سایر بخش های مختلف سایت را نیز مطالعه کنید. و به یاد داشته باشید سه مورد به شما خیلی کمک خواهند کرد. 1- استفاده از help نرم افزار و سایت gams.com و 2- کامنت های سایت گمز بوک که با در انها سعی شده است با دقت به کاربران پاسخ مناسبی ارائه شود. 3- مطالعه و استفاده مستمر
منتظر محصولات تصویری ما در آینده ای نزدیک باشید.
موفق و پیروز باشید
سلام
ممنون بابت پاسخگویی به سوالات
من یک مدل خطی دارم، دوگانش رو نوشتم. مقدار تابع هدف دوگان با مقدار تابع هدف مساله اصلی برابر نمیشه. برای چک کردن دوگان (برای استفاده در بندرز) از گمز خواستم که با استفاده از .m مقدار تابع هدف دوگان مساله رو به من بده تا با مقدار تابع هدف مدل دوگان مقایسه کنم. این دو مقدار هم با هم برابر نیستند، چند بار رابطه تابع هدف دوگان و همچنین مدل دوگان (شامل تابع هدف و محدودیت ها) رو چک کردم مشکلی نداره، به نظرتون مشکل کجاست؟
سلام
ممنون بابت پاسخگویی به سوالات
من یک مدل خطی دارم، دوگانش رو نوشتم. مقدار تابع هدف دوگان با مقدار تابع هدف مساله اصلی برابر نمیشه. برای چک کردن دوگان (برای استفاده در بندرز) از گمز خواستم که با استفاده از .m مقدار تابع هدف دوگان مساله رو به من بده تا با مقدار تابع هدف مدل دوگان مقایسه کنم. این دو مقدار هم با هم برابر نیستند، چند بار رابطه تابع هدف دوگان و همچنین مدل دوگان (شامل تابع هدف و محدودیت ها) رو چک کردم مشکلی نداره، به نظرتون مشکل کجاست؟
مشکل در یکی از پارامترها بود و حل شد. خیلی ممنونم.
با سلام
میخاستم ببینم دستور یا کدی هست که مقدار دقت متغیر هدف رو کنترل کنه برای کاستن از تعداد تکرارهای زیاد بعد از optimal شدن آن ؟ چون عدد متغیر هدف بنده 6 یا 7 رقمی هست و نمیخام به خاطر دقت بیش از حد زمان اجرام خیلی طولانی بشه. از دستور iterlim هم نمیخام استفاده کنم چون میخام اول حتما بهینه بشه و بعد از آن به خاطر دقت بیشتر وقت رو تلف نکنه.
سلام وقت بخیر
متوجه نشدم، شما میخواین دقتش چجوری باشه؟ یه مثال میزنید
با سلام
اگر در حل یک مدل minlp در قسمت model status حالت Integer Solution نوشته شده باشه معنیش چیه؟ ایا مشکلی تو حل وجود داره؟
سلام وقت بخیر
معنیش اینه که حداقل یک جواب فیزیبل و عدد صحیح برای شما پیدا کرده ولی هنوز اطمینانی از بهینه بودن اون نداره
سلام و وقت بخیر
نتایج حاصل از حل تابع سه هدفه به روش اپسیلون محدودیت به صورت زیر است. تابع اول و دوم باید min و تابع سوم max بشه. مقادیر اپسیلون هم که مشخصه. حالا سوال من اینه که ایا اینکه جواب ها تا تکرار هفتم ثابت به دست اومده منطقیه یا یه جای کار ممکنه مشکل داشته باشه؟ مثلا نباید تابه هدف اول رو تغییر میداد تا محدودیت های اپسیلون نوشته شده رعایت بشه؟
و ایا طبیعیه که که محدودیت هیای که برای تابع هدف دوم و سوم نوشته شده رعایت نشده؟
ممنون میشم راهنمایی بفرمایید.
E1 E2 of3 of2 of1
1. 3128.097 146542.537 46.264 11887.448 46.264
2 . 3128.097 146542.537 46.264 36875.525 55.435
3 . 3128.097 146542.537 46.264 61863.602 64.606
4 . 3128.097 146542.537 46.264 86851.679 73.777
5 . 3128.097 146542.537 46.264 111839.756 82.948
6 . 3128.097 146542.537 46.264 136827.833 92.119
7 . 3128.097 161815.910 78.900 161815.910 101.289
8 . 3179.036 186803.987 86.123 186803.987 110.460
9 . 3520.597 215435.440 71.270 211792.064 119.631
10. 3764.054 236780.141 72.330 236780.141 128.802
اعداد بالا بهم ریخت متاسفانه
E1————E2———— of3———————of2——————- of1
1. 3128.097—146542.537— 46.264 —11887.448— 46.264
2 . 3128.097— 146542.537— 46.264 —36875.525 —55.435
3 . 3128.097 —146542.537— 46.264 —61863.602— 64.606
4 . 3128.097 —146542.537 —46.264 —86851.679 —73.777
5 . 3128.097 —146542.537 —46.264 —111839.756— 82.948
6 . 3128.097— 146542.537 —46.264 —136827.833 —92.119
7 . 3128.097 —161815.910 —78.900 —161815.910 —101.289
8 . 3179.036— 186803.987 —86.123 —186803.987 —110.460
9 . 3520.597— 215435.440 —71.270 —211792.064 —119.631
10. 3764.054 —236780.141 —72.330 —236780.141 —128.802
سلام و روز بخير.
پيشنهاد ميكنم از كد محدوديت اپسيلون در گمز كمك بگيريد. نمونه ان شبيه چيزي است كه شما دنبال ان هستيد.
اینکه در چند تکرار یک یا چند تا از توابع هدف با تغییر تابع هدف دیگر تغییر نکنن طبیعی هست و این به دلیل فضای جواب گسسته مسئله هست.
اما شما باید چک کنید که محدودیت هایی که اضافه کردین درست عمل میکنن یا نه. به نظر من اول با دو هدف کار رو انجام بدین
سلام، وقتتون بخیر، آیا میشه در نرم افزار گمز با استفاده از سالور CPLEX، جبههی پارتو رسم کرد؟ نحوهی انجام این کار به چه صورتی هستش؟
با تشکر
سلام وقت بخیر
بصورت مستقیم که نمیشه. رویکرد داره.
اول ماتریس trade off رو باید حساب کنید با دو تا دستور solve که هر بار یکی از هدف ها رو بهینه میکنه.
تو مرحله بعد یکی از اهداف به عنوان هدف اصلی انتخاب میشه، یه اندیس تعریف میشه برای دستور loop و بر اساس این اندیس، هر بار مقداری به حالت بهینه هدف دوم اضافه (یا کم) میشه و هر بار جواب هدف اول بهینه میشه:
loop(t,
سلام
من یک مدل mip دارم که میخام یک متغیر آلفا رو ماکزیمم کنم و این متغیر مقداری بین صفر و یک میتونه داشته باشه و چون این متغیر در چند تا متغیر دیگه ضرب شده خطی سازی کردم…..در آخر چون مسئله بزرگه و تعداد سناریو ها زیاده تا ده ساعت هم جواب نمیداد برای همین اومدم تو روابط مربوط به خطی سازی ضرب دو متغیر پیوسته، حد بالای آلفا رو بجای یک گذاشتم 0.2 خیلی سریع جواب داد و مقدارش هم همون 0.2 داد و بعد دوباره زیادتر کردم گذاشتم 0.3 برنامه هی تکرار میکرد ولی به جواب نهایی نمیرسید….در آخر حد بالا رو گذاشتم ۰.۲۶ این خروجی هارو بهم داد
Mip soulation: 0.244035
Final solve: 0.235328
Best possible: 0.260000
Absolute gap:0.015965
Relative gap:0.061403
و وضعیت برنامه هم نرمال و انتیجر میشه ولی واسه یک سناریو optimal میشه با این شرایط. واسه یک سناریو هم اگه حد بالا رو بزارم یک جواب نمیده یعنی هی تکرار میکنه ولی جوابی نمیده اصلا.
الان من میخام بدونم این جواب قابل قبوله یا نه؟ چون حد بالا رو دستکاری کردم….ممنون بابت پاسخگویی و وقتی که میذارین.
سلام و ادب
فرضاً درست هم باشه، برای یه بعد دیگه از مسئله میخواین چیکار کنین؟ هیج! هر چند جواب به نظر درست نیست. حد بالا باید با منطق باشه. اگر از روی منطق می تونید همچین حدی بذارید که حله.
خیلی ممنون بابت پاسخگویی….خوب وقتی حد بالا الفا رو همون یک میزارم جواب تکرار اولش با گپ خیلی بالایی هستش و هی تکرار میکنه ولی اصلا مقدار گپ کم نمیشه و تا ده ساعت هم گذاشتم جواب نهایی رو نداد…باید چیکار کنم؟ راه حلی داره که جواب نهایی رو بهم بده؟ و اینکه کل مسئله همینه و بعد دیگه ای نداره….قراره اون آلفا ماکزیمم بشه و حد بالا و پایینش هم صفر و یکه….
والا من راهی به ذهنم نمیرسه. کلا غیر خطی ها داستان دارن. شاید سالورهای مختلف رو تست کنید جواب بگیرید
منظور بردار جوابی است که در هر مرحله بدست می آید. خود مقدار تابع و هدف و برخی دیگر از اطلاعات مربوط به حل را در گزارش گمز اطلاع می دهد ولی دستوری برای نمایش بردار جواب در هر مرحله وجود دارد؟
یه سری آپشن هست برای cplex که ممکنه براتون مفید باشن. مهم ترینشون mipdisplay هست.
سلام
چه طور میشود خروجی مرحله به مرحله ی یک مساله را که با CPLEX حل شده است را مشاهده نمود؟
سلام
منظورتون از خروجی چی هست؟ کدوم قسمتش رو میخواین؟
از راهنمایی شما بسیار سپاس گزارم.
بزرگوارین
با سلام و تشکر از سایت خوب و مفیدتون
من متلب و گمز رو با هم لینک کردم. تو متلب یک حلقه دارم که بعد از انجام محاسبات و تعیین بعضی پارامترها، گمز رو فراخوانی می کنه و خروجی ها رو تو متلب ذخیره می کنه. یک مشکلی که وجود داره اینه که بعضی وقت ها بهینه سازی ای که تو گمز انجام میشه، ممکنه منجر به جواب های infeasible بشه. میخواستم ببینم آیا متغیر یا flag ای در گمز به عنوان خروجی وجود داره که اون رو به متلب پاس بدم و مطمئن بشم بهینه سازی بدون مشکل و بدون جواب infeasible تو گمز اجرا شده؟ مساله بهینه سازی من خطی هست و از سالور CPLEX استفاده می کنم.
سپاس از توجهتون
سلام
وقت بخیر
میتونین بعد اینکه solve انجام شد، modelstat رو ذخیره کنین و نتیجه رو بفرستین تو متلب. مث مثال زیر:
سلام ،پس از ران کر دن مدل هیچ اروری نمیده ولی تمامی متغیرها و تابع هدف صفر شده چطوری بفهمم مشکل از کجاست؟ممنون میشم کمکم کنید
سلام
model status و solver status چه مقداری گرفتن؟ آخر process window چی گفته؟ خوندید؟
این پیغام را مبدهد
لایسنس ندارین شما. این صفحه رو دنبال کنید.
سلام مهندس
صفر شد خروجی در ال پی متریک و اپسیلون محدودیت به چه معناست
سلام
ممکنه نشدنی شده باشه مدل شما، و یا اینکه مدل به نفعش باشه که ضفر بشه. هر دو حالت رو چک کنین شما. پیام های solver status و model status رو چک کنین.
سلام
خیلی ممنون بابت راهنمایی هاتون.خیلی کمکم کردید.
موفق باشید.
سلام
ببخشید ممکنه در این مدل حلقه Loop رو چطور می شه نوشت؟
آیا این درسته؟ ; loop (o, w1=o ; w2=o+0.01
; w3=1_2*o_0.01
; solve model using mip minimizing
; tFinal(o)=t.l
; qFinal(o)=q.l
; fnFinal(o)=fn.l
; zFinal(o)=z.l
;(
; display zFinal,t.Final,qFinal,fnFinal
من o رو چطوری میتونم به صورت مجموعه تعریف کنم؟ می خوام بین ۰.۰۹ و ۰.۹ تغییر کنه .
o باید scalar باشه یا به صورت set تعریف کنم؟
بهترش کردین آفرین. فقط میمونه تعریف o که بر اساس set باید تعریف بشه.
و تو حلقه هم برای w ها این شکلی بنویسین مثلا:
سلام
من مبحث انواع حلقه رو مطالعه کردم .درسته o نمیتونه set باشه ولی من دلیل خطای ۱۲۱ (set expected) نفهمیدم.پارامترهایی که گفته بودید رو درست تعریف کردم؟ در قسمت پارامتر fnFinal,qFinal,tFinal ,zFinal تعریف کردم.
اندیس هم بدین بهش خب. با loop بنویسین راحت ترین.
پارامترهای جدید رو به این صورت باید تعریف کنم؟ fnFinal,qFinal,tFinal ,zFinal ؟
دلیل خطای ۱۲۱ چیه؟ set expected میاد در خطا .
سلام
بله. باید این کارو بکنین. پیشنهاد من اینه که با loop حلقه رو بنویسین، دردسراش خیلی کمتره و راحت تره. پارامترها هم همونجوری که تو کد نوشتم تعریف کنین. tFinal(o) مثلا
میگه بعد از این دستور باید set استفاده کنین.
سلام
:رو به این شکل گذاشتم solve دستور
.داد t,q,fn و یک w1,w2,w3 هر سه هدفم تغییر کنه ولی به من فقط یک for من میخوام با تغییر وزن ها به وسیله حلقه
سلام
شما باید دستور solve رو بذارین تو for که تعریف کردین. این for که تعریف کردین فقط میاد w ها رو حساب میکنه و آخرین wای که به دست آورده رو میبره تو دستور solve و حل میکنه. این درست نیست.
اینجوری بنویسین:
همونطور که میبینین، تمامی دستور ها رفتن تو دستور for و هر بار که o عدد میگیره، مدل حل میشه و مقادیر هر متغیر تو پارامتر جدیدی که براش تعریف شده ذخیره میشه و درنهایت مقادیر ذخیره شده display میشه. اون پارامترایی که جدیدن رو باید بع عنوان parameter تعریف کنین.
سلام
کارهایی که گفتین انجام دادم ولی فقط خطا ۱۲۱ در قسمت (fn.Final(o),q.Final(o),t.Final(o داد. برای o باید set تعریف کنم؟
سلام
t.Final ندارین شما که. tFinal دارین.
tfinal(o)=t.l;
از این صفحه برای یادگیری انواع حلقه در گمز و نحوه استفاده از اونها بکمک بگیرین.
انواع حلقه در گمز
سلام
روز به خیر
موضوع پایان نامه من برنامه ریزی شیفت چند هدفه استç
تابع هدف objective .. z=e=w1*t/1560+w2*q/26+w3*fn/3800000;
ودر آخر شرط scalar o;
for (o=0.09 to 0.9,
w1=o; w2=o+0.01; w3=1-2*o-0.01);
برای تغییر وزنها قرار دادم ولی بعد از اجرا فقط تابع هدف تغییر می کند و اهداف t,q,fn همچنان ثابت هستند و تغییر نمی کنند . من برای حل پارتو , با تغییر وزنها با حلقه for به تغییر ۳ هدف نیاز دارم. ممنون می شم اگر راهنمایی کنید.
سلام
وزن ها رو درست تولید میکنه؟
دستور solve رو به چه شکل گذاشتین؟
در هر بار solve شدن مدل چه چیزهایی رو و به چه شیوه ای ذخیره میکنین؟