دستور Solve

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

پس در این قسمت باید نوع solver را نیز مشخص نمود.

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

Solve Modelname using Modeltype Maximizing Vname ;

Modelname همان نامیست که در دستور model برای مدلمان انتخاب کردیم. Modeltype نوع مدل را مشخص می کند. مثلا یک مدل می تواند LP/NLP/MIP/RMIP باشد. انواع مدل ها در بخش model types تشریح خواهند شد. Maximizing نوع تابع هدف را به solver معرفی می کند. Vname یا variable name همان متغیر اضافی است که در بخش متغیر ها تعریف نموده و در equation معادله ی تابع هدف را مساوی آن قرار دادیم.


بنابر آنچه که ذکر شد، گذاره های زیر معادل و یا مشابه اند:

Solve Modelname using Modeltype Maximizing Vname ;
Solve Modelname using Modeltype Minimizing Vname ;
Solve Modelname Maximizing Vname using Modeltype ;
Solve Modelname Minimizing Vname using Modeltype ;

 دقت کنید که در صورتی که ما مثلا مدل را LP تعریف کنیم در حالی که واقعا LP نباشد نرم افزار هنگام run کردن Errorی می دهد که به سطر solve مربوط است و پیدا کردنِ اینکه مشکل واقعا کجای کار است مقداری سخت است. پس در model type دقت لازم را داشته باشید تا به مشکلاتی اینچنین دست وپاگیر دچار نشوید.
 اگر در دستور solve به یک modelname که در model content مربوطه اش شامل تابع هدف نشده باشد، reference بدهیم، نرم افزار به هنگام run کردن مدل نیز Errorی مشابه Error بالا می دهد که برطرف کردنش ممکن است مقداری وقت گیر باشد.

توجه داشته باشید که همانطور که در یک مدل می توان زیر مدل هایی با دستور model تعریف کرد، متوان با استفاده از دستور solve چند مدل را به صورت همزمان حل نمود. توجه داشته باشید چون GAMS نیز سطر به سطر اعمال را انجام می دهد، اولین دستور Solveی که ببیند حل نموده و سپس به خط بعدی می رود.
GAMS این امکان را به کاربر می دهد که در یک برنامه ی مشخص چندین مدل مختلف یا با راهکارهای مختلف را، همزمان حل کند. مثال:

Solve-statement-example

و در ادامه ی مطلب بپردازیم به ادامه ی کد نویسی مثال کاربردی۱:
مثال موجود در مثال کاربری۱ یک مدل برنامه ریزی خطی می باشد. از طرفی حل کننده ی cplex جهت حل مدل های برنامه ریزی خطی مناسب است. پس ما نیز در این مدل از این solver استفاده می نماییم:

Example1-solve-statement

همانطور که در بخش متغیرها گفته شد، اگر در مدل بخواهیم مقدار یک تابع هدف را بهینه کنیم، باید در بخش variable یک متغیر اضافه بر متغیرهای مسئله تعریف نماییم تا در دستور solve از آن استفاده نماییم. وقتی این متغیر را در دستور solve می گذاریم، GAMS آن را به عنوان Objective می شناسد و آن را minimize یا maximize می کند. در مدل ما نیز متغیر z برابر با تابع هدف در نظر گرفته شد.

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

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

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

 

این مقاله برای شما مفید بود؟

مطالب مشابه

2 دیدگاه

  1. Mah

    سلام
    نحوه استفاده از آپشن nodlim در سالور sbb چطوریه؟

    1. محمودی

      سلام
      اولا دقت کنین که کد زیر رو بین دستور Model و solve قرار بدین. ثانیا yourmodelname همون اسم مدلتونه. فرضا بخواین برابر هزار قرار بدین.

      YourModelName.nodlim = 1000;
      

دیدگاهی دارید؟