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

- Sheet2 (تقاضاها)

فایل را در پوشه پروژه GAMS IDE (مثل C:\GAMS\workdir) ذخیره کنید.
مرحله ۲: تبدیل اکسل به GDX
- فایل GAMS جدید (convert_binary.gms) در GAMS
* تبدیل اکسل به GDX برای مسئله باینری
Sets
i "شهرها"
j "محصولات";
Parameters
c(i,j) "هزینه حمل"
d(i,j) "تقاضا";
$call gdxxrw data_binary.xlsx par=c rng=Sheet1!A1:C7 par=d rng=Sheet2!A1:C7
$gdxout data_binary.gdx
$unload i j c d
$gdxout
- با کلید F9 اجرا کنید تا data_binary.gdx ایجاد شود.
مرحله ۳: کد GAMS با متغیرهای باینری
کد زیر مدل حملونقل را با متغیرهای باینری برای انتخاب مسیرها حل میکند:
* مدل حملونقل چندمحصولی با متغیرهای باینری در GAMS IDE
$Ontext
این مدل با متغیرهای باینری تصمیم میگیرد کدام مسیرهای حمل استفاده شوند.
$Offtext
* تعریف مجموعهها
Sets
i "شهرهای مقصد"
j "محصولات";
* تعریف پارامترها
Parameters
c(i,j) "هزینه حمل (هزار تومان)"
d(i,j) "تقاضای هر شهر و محصول (واحد)"
s "ظرفیت انبار (واحد)";
* وارد کردن دادهها از فایل GDX
$gdxin data_binary.gdx
$load i j c d
$gdxin
s = 1500;
* تعریف متغیرها
Variables
x(i,j) "مقدار حمل هر محصول به هر شهر (واحد)"
y(i,j) "تصمیم باینری برای استفاده از مسیر (۰ یا ۱)"
z "هزینه کل (هزار تومان)";
Positive Variable x;
Binary Variable y;
* تعریف معادلات
Equations
Cost "هزینه کل"
Demand(i,j) "تقاضای هر شهر و محصول"
Supply "محدودیت ظرفیت انبار"
BinaryConstraint(i,j) "پیوند متغیر باینری و مقدار حمل";
Cost.. z =e= sum((i,j), c(i,j)*x(i,j));
Demand(i,j).. x(i,j) =g= d(i,j)*y(i,j);
Supply.. sum((i,j), x(i,j)) =l= s;
BinaryConstraint(i,j).. x(i,j) =l= 1000*y(i,j);
* تعریف و حل مدل
Model TransportBinary /all/;
Solve TransportBinary using MIP minimizing z;
* نمایش نتایج
Display x.l, y.l, z.l;
توضیح کد
- متغیرهای باینری:
- y(i,j): متغیر باینری که مشخص میکند آیا مسیر (شهر-محصول) استفاده میشود (۱) یا خیر (۰).
- Binary Variable y: نوع متغیر y را باینری تعریف میکند.
- معادلات:
- Cost: هزینه کل (z) برابر مجموع هزینههای حمل.
- Demand: مقدار حمل (x(i,j)) حداقل برابر تقاضا (d(i,j)) است اگر مسیر انتخاب شود (y(i,j)=1).
- Supply: مجموع حمل حداکثر برابر ظرفیت انبار (s).
- BinaryConstraint: اگر y(i,j)=0 باشد، x(i,j)=0 میشود (حداکثر مقدار حمل ۱۰۰۰ برای فعال بودن مسیر).
- حل مدل:
- Solve TransportBinary using MIP: از حلکننده MIP (برنامهریزی مختلط) استفاده میکند، زیرا متغیر باینری داریم.
- اجرا در GAMS IDE:
- فایل را ذخیره کنید (مثل transport_binary.gms).
- با کلید F9 اجرا کنید.
- خروجی در پنجره 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
y.l(Tehran,Product1) 1.000
y.l(Tehran,Product2) 1.000
y.l(Shiraz,Product1) 1.000
y.l(Shiraz,Product2) 1.000
y.l(Isfahan,Product1) 1.000
y.l(Isfahan,Product2) 1.000
z.l 31750.000
- توضیح: تمام مسیرها (y.l=1) انتخاب شدهاند و مقدار حمل (x.l) تقاضاها را تأمین میکند. هزینه کل ۳۱۷۵۰ هزار تومان است.
نکات مهم در GAMS IDE
- متغیر باینری: با Binary Variable تعریف میشود و مدل را به MIP تبدیل میکند.
- حلکننده MIP: CPLEX یا GUROBI برای مسائل باینری مناسباند.
- خطاها: اگر مدل حل نشد (مثلاً Infeasible)، فایل .lst را برای مشکلات محدودیتها بررسی کنید.
- GAMS IDE: خروجی را در پنجره Output ببینید و از کامنتها برای مستندسازی استفاده کنید.
نکات کلیدی
- متغیرهای باینری: برای تصمیمهای گسسته (۰ یا ۱) مثل انتخاب مسیر.
- مدل MIP: با متغیرهای باینری، حلکننده MIP (مثل CPLEX) استفاده میشود.
- GAMS IDE: اجرای کد با F9 و بررسی خروجی در پنجره Output.
- کاربرد: برای مسائل واقعی مثل انتخاب مسیر یا انبار.
گام بعدی
در قسمت بعدی، با مدلسازی محدودیتهای منطقی آشنا میشوید تا شرایط پیچیدهتر را مدل کنید. فایلهای نمونه و ویدئوهای این دوره را از سایت بهینهیار دانلود کنید!
کلمات کلیدی: آموزش GAMS، متغیرهای باینری در GAMS IDE، مدلسازی بهینهسازی، مسائل گسسته، بهینهیار