دستور 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

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

Example1-solve-statement

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

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

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

ایمیل: Support@gamsbook.ir
شماره تماس: 3325-405—0919

 

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

مطالب مشابه

9 دیدگاه

  1. Mah

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

    1. محمودی

      سلام
      اولا دقت کنین که کد زیر رو بین دستور Model و solve قرار بدین. ثانیا yourmodelname همون اسم مدلتونه. فرضا بخواین برابر هزار قرار بدین.
      [css]
      YourModelName.nodlim = 1000;
      [/css]

  2. محمد فروزان

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

    1. محمودی

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

  3. محمد فروزان

    ممنونم از پاسختون.
    ببینید فرض کنید یه شبکه ای از خیابان ها داریم و در کنار اینا چند پروژه پیشنهادی تعریف شده که یک سری خیابان های جدید به شبکه قبلی اضافه بشن. تابع هدف ما یک شاخص فنی در شبکه هست که این شاخص باید ماکزیمم بشه. در واقع هدف اینه که بفهمیم با اضافه شدن کدام پروژه پیشنهادی به شبکه این شاخص بیشترین افزایش رو داره. حالا این شاخص فنی وابسته به کوتاه ترین مسیر در شبکه است. با اضافه شدن هر خیابان به شبکه موجود کوتاه ترین مسیر از هر نقطه شبکه به سایر نقاط ممکن تغییر بکنه. منظور از کوتاهترین مسیر اینه که فرض کنید الان کوتاه ترین مسیر بین دو گره 1 و 8 به صورت 1378 هست اما با اضافه شدن یک پروژه جدید کوتاه ترین مسیر می‌َشود 1398
    ممنون میشم راهنماییم کنید

    1. محمودی

      سلام
      ممنون بابت توضیحاتتون. حالا بفرمایید که کوتاه ترین مسیر رو چطوری قراره محاسبه کنید؟

  4. محمد فروزان

    کوتاهترین مسیر خودش یک مسئله بهینه سازی هست. یعنی من از خود وبسایت گمز استفاده کردم و یه کد بدست آوردن shortest path برداشتم. دوتا بهینه سازی رو باید همزمان انجام بده گمز

  5. amir

    با عرض سلام وخسته نباشید
    ببخشید یه مثال ساده از تیوری تصمیم گیری مبنتی بر شکاف اطلاعاتی (IGDT) که تو گمز مدل شده باشه، از کجا میشه پیدا کرد؟

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