مسائل چندمحصولی چیست؟
در مسائل چندمحصولی، مدل بهینهسازی شامل چندین محصول است که هر کدام ویژگیهای خاص خود (مثل هزینه حمل یا تقاضا) دارند. برای مثال، در مسئله حملونقل، ممکن است بخواهید چند نوع کالا (مثل مواد غذایی و تجهیزات) را از یک انبار به چند شهر ارسال کنید. این کار نیاز به تعریف مجموعهها و پارامترهای چندبعدی دارد.
چرا چندمحصولی مهم است؟
- واقعگرایی: مدلهای چندمحصولی به مسائل واقعی (مثل زنجیره تأمین) نزدیکترند.
- پیچیدگی: نیاز به مدیریت دادههای چندبعدی (مثل هزینه برای هر محصول و شهر).
- انعطافپذیری: امکان مدلسازی سناریوهای متنوع.
مدلسازی چندمحصولی در GAMS IDE
برای مدلسازی یک مسئله چندمحصولی، از مجموعهها، پارامترها، و متغیرهای چندبعدی استفاده میکنیم. دادهها را از اکسل وارد میکنیم تا کار سادهتر شود.
مرحله ۱: ساختار فایل اکسل
فایل اکسل (data_multi.xlsx) برای مسئله حملونقل چندمحصولی:
Sheet1 (هزینهها):

Sheet2 (تقاضاها):

فایل را در پوشه پروژه GAMS IDE (مثل C:\GAMS\workdir) ذخیره کنید.
مرحله ۲: تبدیل اکسل به GDX
- یک فایل GAMS جدید (مثل convert_multi.gms) در GAMS IDE ایجاد کنید:
* تبدیل اکسل به GDX برای مسئله چندمحصولی
Sets
i "شهرها"
j "محصولات";
Parameters
c(i,j) "هزینه حمل"
d(i,j) "تقاضا";
$call gdxxrw data_multi.xlsx par=c rng=Sheet1!A1:C7 par=d rng=Sheet2!A1:C7
$gdxout data_multi.gdx
$unload i j c d
$gdxout
- کد را با کلید F9 در GAMS IDE اجرا کنید.
- فایل data_multi.gdx در پوشه پروژه ایجاد میشود.
مرحله ۳: کد GAMS برای مسئله چندمحصولی
کد زیر دادهها را از data_multi.gdx میخواند و مدل حملونقل چندمحصولی را حل میکند:
* مدل حملونقل چندمحصولی در GAMS IDE
$Ontext
این مدل هزینه حمل دو محصول به سه شهر را با دادههای اکسل کمینه میکند.
$Offtext
* تعریف مجموعهها
Sets
i "شهرهای مقصد"
j "محصولات";
* تعریف پارامترها
Parameters
c(i,j) "هزینه حمل (هزار تومان)"
d(i,j) "تقاضای هر شهر و محصول (واحد)"
s "ظرفیت انبار (واحد)";
* وارد کردن دادهها از فایل GDX
$gdxin data_multi.gdx
$load i j c d
$gdxin
s = 1500; * ظرفیت انبار بهصورت دستی
* تعریف متغیرها
Variables
x(i,j) "مقدار حمل هر محصول به هر شهر (واحد)"
z "هزینه کل (هزار تومان)";
Positive Variable x;
* تعریف معادلات
Equations
Cost "هزینه کل"
Demand(i,j) "تقاضای هر شهر و محصول"
Supply "محدودیت ظرفیت انبار";
Cost.. z =e= sum((i,j), c(i,j)*x(i,j));
Demand(i,j).. x(i,j) =g= d(i,j);
Supply.. sum((i,j), x(i,j)) =l= s;
* تعریف و حل مدل
Model TransportMulti /all/;
Solve TransportMulti using LP minimizing z;
* نمایش نتایج
Display x.l, z.l;
توضیح کد
- وارد کردن دادهها:
- $gdxin data_multi.gdx: فایل data_multi.gdx را باز میکند.
- $load i j c d: مجموعهها (i, j) و پارامترها (c, d) را میخواند.
- اجزا:
- مجموعهها: شهرها (i) و محصولات (j) از اکسل.
- پارامترها: هزینه (c(i,j)), تقاضا (d(i,j)), ظرفیت (s).
- متغیرها: مقدار حمل (x(i,j)), هزینه کل (z).
- معادلات: تابع هدف (Cost), تقاضا (Demand), ظرفیت (Supply).
- اجرا در GAMS IDE:
- فایل را ذخیره کنید (مثل transport_multi.gms).
- با کلید F9 یا دکمه Run اجرا کنید.
- خروجی در پنجره Output یا فایل .lst نمایش داده میشود.
خروجی نمونه
در فایل .lst یا پنجره Output:
x.l(Tehran,Product1) 200.000
x.l(Tehran,Product2) 150.000
x.l(Shiraz,Product1) 300.000
x.l(Shiraz,Product2) 100.000
x.l(Isfahan,Product1) 250.000
x.l(Isfahan,Product2) 120.000
z.l 31750.000
- توضیح: مقدار حمل هر محصول به هر شهر (مثل ۲۰۰ واحد Product1 به تهران) و هزینه کل ۳۱۷۵۰ هزار تومان است.
نکات مهم در GAMS
- مسیر فایل: فایل data_multi.xlsx و data_multi.gdx باید در پوشه پروژه GAMS IDE (مثل C:\GAMS\workdir) باشند.
- ابزار gdxxrw: باید همراه GAMS نصب شده باشد. مسیر آن را در تنظیمات GAMS IDE بررسی کنید.
- خطاها: اگر دادهها خوانده نشد، نام ستونها یا مسیر فایل را در پنجره Output یا .lst بررسی کنید.
- خوانایی: از کامنتها (* یا $Ontext/$Offtext) برای توضیح مراحل استفاده کنید.
نکات کلیدی
- چندمحصولی: مدلسازی با چندین محصول و مجموعههای چندبعدی.
- اکسل و GDX: دادهها از اکسل با $load وارد میشوند.
- GAMS IDE: اجرای کد با F9 و بررسی خروجی در پنجره Output.
- کاربرد: برای مسائل پیچیدهتر مثل زنجیره تأمین.
گام بعدی
در قسمت بعدی، با تحلیل حساسیت در GAMS آشنا میشوید تا تأثیر تغییرات دادهها را بررسی کنید. فایلهای نمونه و ویدئوهای این دوره را از سایت بهینهیار دانلود کنید!
کلمات کلیدی: آموزش GAMS، مدلسازی چندمحصولی در GAMS IDE، وارد کردن داده از اکسل، مدلسازی بهینهسازی، بهینهیار