دستور Solve چیست؟
در GAMS، دستور Solve مدل تعریفشده (شامل مجموعهها، پارامترها، متغیرها، و معادلات) را به یک حلکننده (Solver) ارسال میکند تا مسئله بهینهسازی حل شود. حلکنندهها الگوریتمهای تخصصی هستند که مقادیر بهینه متغیرها (مثل مقدار حمل کالا) و تابع هدف (مثل هزینه کل) را محاسبه میکنند.
اجزای دستور Solve
دستور Solve ساختار زیر را دارد:
Solve model_name using solver_type minimizing/maximizing objective_variable;
- model_name: نام مدل (مثل Transport) که در بخش Model تعریف شده.
- solver_type: نوع حلکننده (مثل LP برای برنامهریزی خطی یا NLP برای غیرخطی).
- minimizing/maximizing: مشخص میکند که تابع هدف باید کمینه یا بیشینه شود.
- objective_variable: متغیر تابع هدف (مثل z برای هزینه کل).
انواع حلکنندهها
GAMS از حلکنندههای مختلفی پشتیبانی میکند:
- CPLEX و GUROBI: برای مسائل خطی (LP) و مختلط (MIP).
- BARON و CONOPT: برای مسائل غیرخطی (NLP).
- MINOS: برای مسائل خطی و غیرخطی. برای مسائل ساده مثل برنامهریزی خطی، CPLEX یا GUROBI انتخابهای خوبی هستند و در نسخه دموی GAMS در دسترساند.

مثال عملی: حل مسئله حملونقل
فرض کنید میخواهید هزینه حمل کالا از یک انبار به سه شهر (تهران، شیراز، اصفهان) را کم کنید. کد کامل GAMS با تمرکز روی دستور Solve بهصورت زیر است:
* تعریف مجموعهها
Sets
i "شهرهای مقصد" /Tehran, Shiraz, Isfahan/;
* تعریف پارامترها
Parameters
c(i) "هزینه حمل (هزار تومان)" /Tehran 50, Shiraz 100, Isfahan 80/
d(i) "تقاضای هر شهر (واحد)" /Tehran 200, Shiraz 300, Isfahan 250/
s "ظرفیت انبار (واحد)" /۵۰۰/;
* تعریف متغیرها
Variables
x(i) "مقدار حمل به هر شهر (واحد)"
z "هزینه کل (هزار تومان)";
Positive Variable x;
* تعریف معادلات
Equations
Cost "هزینه کل"
Demand(i) "تقاضای هر شهر"
Supply "محدودیت ظرفیت انبار";
Cost.. z =e= sum(i, c(i)*x(i));
Demand(i).. x(i) =g= d(i);
Supply.. sum(i, x(i)) =l= s;
* تعریف و حل مدل
Model Transport /all/;
Solve Transport using LP minimizing z;
* نمایش نتایج
Display x.l, z.l;
توضیح کد
- دستور Solve:
- Solve Transport using LP minimizing z: مدل Transport را با حلکننده برنامهریزی خطی (LP) اجرا میکند و متغیر z (هزینه کل) را کمینه میکند.
- اجزا:
- مجموعهها (i): شهرها.
- پارامترها: هزینه (c), تقاضا (d), ظرفیت (s).
- متغیرها: مقدار حمل (x), هزینه کل (z).
- معادلات: تابع هدف (Cost), تقاضا (Demand), ظرفیت (Supply).
- خروجی: پس از اجرا، GAMS مقادیر بهینه x.l (مقدار حمل به هر شهر) و z.l (هزینه کل) را نشان میدهد.
خروجی نمونه
در فایل خروجی (.lst):
x.l(Tehran) 200.000
x.l(Shiraz) 300.000
x.l(Isfahan) 250.000
z.l 29500.000
- توضیح: ۲۰۰ واحد به تهران، ۳۰۰ واحد به شیراز، ۲۵۰ واحد به اصفهان حمل میشود. هزینه کل ۲۹۵۰۰ هزار تومان است.
نکات مهم در استفاده از Solve
- انتخاب حلکننده مناسب:
- برای مسائل خطی (LP) از CPLEX یا GUROBI استفاده کنید.
- برای مسائل غیرخطی (NLP)، BARON یا CONOPT مناسباند.
- نوع مسئله: نوع مسئله (LP، NLP، MIP) را درست مشخص کنید.
- خطاها: اگر مدل حل نشود (مثلاً به دلیل محدودیتهای ناسازگار)، فایل .lst را بررسی کنید.
- خوانایی: از کامنتها (با *) برای توضیح بخشهای کد استفاده کنید.
نکات کلیدی
- دستور Solve: مدل را به حلکننده میفرستد.
- حلکنندهها: CPLEX و GUROBI برای مسائل خطی مناسباند.
- خروجی: مقادیر بهینه متغیرها و تابع هدف.
- خطاها: فایل .lst را برای رفع خطا بررسی کنید.
گام بعدی
در قسمت بعدی، با نمایش نتایج (Display) و تحلیل خروجی آشنا میشوید. فایلهای نمونه و ویدئوهای این دوره را از سایت بهینهیار دانلود کنید!
کلمات کلیدی: آموزش GAMS، دستور Solve در GAMS، حل مدل بهینهسازی، GAMS برای مبتدیان، بهینهیار