ساختار یک کد ساده در GAMS
یک کد GAMS برای مدلسازی و حل یک مسئله بهینهسازی شامل بخشهای زیر است:
- مجموعهها (Sets): برای سازماندهی دادهها (مثل شهرها یا محصولات).
- پارامترها (Parameters): دادههای ثابت (مثل هزینه یا تقاضا).
- متغیرها (Variables): مقادیر تصمیمگیری که GAMS محاسبه میکند.
- معادلات (Equations): تابع هدف و محدودیتها.
- مدل (Model): ترکیب تمام اجزا.
- حل (Solve): اجرای مدل با یک حلکننده.
- نمایش نتایج (Display): نمایش مقادیر بهینه.
این ساختار به شما امکان میدهد یک مسئله بهینهسازی را از ابتدا تا انتها مدل کنید و حل کنید.
مثال عملی: مسئله حملونقل ساده
فرض کنید میخواهید هزینه حمل کالا از یک انبار به سه شهر (تهران، شیراز، اصفهان) را کم کنید. هر شهر تقاضای مشخصی دارد و هزینه حمل متفاوت است. کد کامل GAMS برای این مسئله بهصورت زیر است:
* تعریف مجموعهها
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;
توضیح کد
- مجموعهها: i شامل سه شهر (تهران، شیراز، اصفهان).
- پارامترها:
- c(i): هزینه حمل به هر شهر (مثل ۵۰ هزار تومان برای تهران).
- d(i): تقاضای هر شهر (مثل ۲۰۰ واحد برای تهران).
- s: ظرفیت انبار (۵۰۰ واحد).
- متغیرها:
- x(i): مقدار کالای حملشده به هر شهر (مثبت).
- z: هزینه کل (آزاد).
- معادلات:
- Cost: هزینه کل (z) برابر مجموع هزینههای حمل (c(i)*x(i)).
- Demand: مقدار حمل به هر شهر (x(i)) حداقل برابر تقاضا (d(i)).
- Supply: مجموع حمل (sum(i, x(i))) حداکثر برابر ظرفیت انبار (s).
- مدل و حل:
- Model Transport /all/: شامل تمام معادلات.
- Solve Transport using LP minimizing z: مدل را بهعنوان برنامهریزی خطی (LP) حل میکند و z را کمینه میکند.
- نمایش: Display x.l, z.l مقادیر بهینه مقدار حمل (x) و هزینه کل (z) را نشان میدهد.
خروجی نمونه
پس از اجرای کد، خروجی (در فایل .lst) چیزی شبیه این خواهد بود:
x.l(Tehran) 200.000
x.l(Shiraz) 300.000
x.l(Isfahan) 250.000
z.l 29500.000
- توضیح: ۲۰۰ واحد به تهران، ۳۰۰ واحد به شیراز، ۲۵۰ واحد به اصفهان حمل میشود. هزینه کل ۲۹۵۰۰ هزار تومان است.
نکات مهم
- ترتیب: همیشه مجموعهها، پارامترها، متغیرها، معادلات، مدل، حل، و نمایش را به ترتیب بنویسید.
- خوانایی: از توضیحات (مثل “هزینه کل”) و کامنتها (با *) استفاده کنید.
- حلکننده: برای مسائل خطی (LP) مثل این مثال، CPLEX یا GUROBI مناسباند.
- خطاها: اگر کد اجرا نشد، فایل .lst را برای خطاها (مثل تعریف نادرست متغیر) بررسی کنید.
ویدئوی آموزشی (۲ دقیقه)
در ویدئوی این قسمت:
- ساختار کد GAMS را با یک نمودار ساده (اجزا: Sets، Parameters، Variables، …) توضیح میدهیم.
- کد نمونه بالا را در GAMS Studio مینویسیم و اجرا میکنیم.
- خروجی Display x.l, z.l را در پنجره Log نمایش میدهیم.
لینک ویدئو: [لینک آپارات یا یوتیوب، پس از آپلود اضافه کنید]
نکات کلیدی
- ساختار کد: شامل Sets، Parameters، Variables، Equations، Model، Solve، و Display.
- مثال ساده: مسئله حملونقل با مجموعهها، پارامترها، و معادلات.
- حل مدل: با دستور Solve و حلکننده مناسب.
- نمایش نتایج: با Display مقادیر بهینه را ببینید.
گام بعدی
در قسمت بعدی، با دستور Solve و حل مدل بهصورت عمیقتر آشنا میشوید. فایلهای نمونه و ویدئوهای این دوره را از سایت بهینهیار دانلود کنید!
کلمات کلیدی: آموزش GAMS، ساختار کد GAMS، مدلسازی بهینهسازی، GAMS برای مبتدیان، بهینهیار