چرا از اکسل برای دادهها استفاده کنیم؟
وارد کردن دادهها از اکسل در GAMS:
- مدیریت آسان: دادهها را در جدولهای مرتب ذخیره میکند.
- کاهش خطا: از وارد کردن دستی دادهها در کد جلوگیری میکند.
- مقیاسپذیری: برای مدلهای بزرگ با صدها یا هزاران داده مناسب است.
GAMS IDE از فایلهای GDX (GAMS Data eXchange) برای خواندن دادههای اکسل پشتیبانی میکند.
مراحل وارد کردن دادهها از اکسل در GAMS IDE
برای وارد کردن دادهها از اکسل به GAMS IDE:
- ایجاد فایل اکسل: دادهها را در یک فایل اکسل (.xlsx) بهصورت جدول مرتب کنید.
- تبدیل به GDX: از ابزار خارجی مثل gdx2excel یا اسکریپتهای GAMS برای تبدیل اکسل به فایل .gdx استفاده کنید.
- خواندن در GAMS IDE: با دستور $load دادهها را از فایل .gdx به مدل وارد کنید.
مرحله ۱: ساختار فایل اکسل
فرض کنید میخواهید هزینه حمل و تقاضا را برای مسئله حملونقل وارد کنید. فایل اکسل (data.xlsx) باید به این شکل باشد:
Sheet1 (هزینهها):

Sheet2 (تقاضاها):

فایل را در پوشه پروژه GAMS IDE ذخیره کنید (مثلاً C:\GAMS\data.xlsx).
مرحله ۲: تبدیل اکسل به GDX
GAMS IDE بهطور مستقیم ابزار گرافیکی برای تبدیل اکسل به GDX ندارد، بنابراین از یک اسکریپت GAMS یا ابزار خارجی مثل gdx2excel استفاده میکنیم:
- یک فایل GAMS جدید (مثل convert.gms) در GAMS IDE ایجاد کنید:
* تبدیل اکسل به GDX Sets i "شهرها"; Parameters c(i) "هزینه حمل" d(i) "تقاضا"; $call gdxxrw data.xlsx par=c rng=Sheet1!A1:B4 par=d rng=Sheet2!A1:B4 $gdxout data.gdx $unload i c d $gdxout - این کد را در GAMS IDE اجرا کنید (کلید F9 یا دکمه Run).
- فایل data.gdx در پوشه پروژه ایجاد میشود.
مرحله ۳: خواندن دادهها در GAMS IDE
کد زیر دادهها را از فایل data.gdx میخواند و مدل حملونقل را حل میکند:
* مدل حملونقل با دادههای اکسل در GAMS IDE
$Ontext
این مدل هزینه حمل کالا را با دادههای خواندهشده از اکسل کمینه میکند.
$Offtext
* تعریف مجموعهها
Sets
i "شهرهای مقصد";
* تعریف پارامترها
Parameters
c(i) "هزینه حمل (هزار تومان)"
d(i) "تقاضای هر شهر (واحد)"
s "ظرفیت انبار (واحد)";
* وارد کردن دادهها از فایل GDX
$gdxin data.gdx
$load i c d
$gdxin
s = 500; * ظرفیت انبار بهصورت دستی
* تعریف متغیرها
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;
توضیح کد
- وارد کردن دادهها:
- $gdxin data.gdx: فایل data.gdx را باز میکند.
- $load i c d: مجموعه i و پارامترهای c و d را از فایل GDX میخواند.
- بقیه کد:
- مجموعهها (i): از اکسل خوانده میشود.
- پارامترها: هزینه (c) و تقاضا (d) از اکسل، ظرفیت (s) دستی.
- متغیرها: مقدار حمل (x) و هزینه کل (z).
- معادلات: تابع هدف (Cost), تقاضا (Demand), ظرفیت (Supply).
- اجرا در GAMS IDE:
- فایل را ذخیره کنید (مثل transport.gms).
- با کلید F9 یا دکمه Run در GAMS IDE اجرا کنید.
- خروجی در پنجره Output یا فایل .lst نمایش داده میشود.
خروجی نمونه
در فایل .lst یا پنجره Output:
x.l(Tehran) 200.000
x.l(Shiraz) 300.000
x.l(Isfahan) 250.000
z.l 29500.000
- توضیح: ۲۰۰ واحد به تهران، ۳۰۰ واحد به شیراز، ۲۵۰ واحد به اصفهان حمل میشود. هزینه کل ۲۹۵۰۰ هزار تومان است.
نکات مهم در GAMS IDE
- مسیر فایل: مطمئن شوید فایل data.xlsx و data.gdx در پوشه پروژه GAMS IDE هستند (معمولاً C:\GAMS\workdir).
- ابزار gdxxrw: این ابزار باید در سیستم نصب باشد (همراه با GAMS نصب میشود).
- بررسی خطاها: اگر دادهها خوانده نشد، پیامهای خطا در پنجره Output یا فایل .lst را بررسی کنید (مثل مسیر اشتباه فایل یا نام نادرست ستونها).
- خوانایی: از کامنتها (* یا $Ontext/$Offtext) برای توضیح مراحل استفاده کنید.
نکات کلیدی
- اکسل: دادهها را در جدولهای مرتب با نامهای دقیق ذخیره کنید.
- GDX: فایل واسطه برای خواندن دادهها در GAMS IDE.
- دستور $load: برای وارد کردن مجموعهها و پارامترها از GDX.
- GAMS IDE: با اجرای کد (F9) دادهها را میخواند و مدل را حل میکند.
گام بعدی
در قسمت بعدی، با مدلسازی مسائل چندمحصولی آشنا میشوید تا مدلهای پیچیدهتر را حل کنید. فایلهای نمونه و ویدئوهای این دوره را از سایت بهینهیار دانلود کنید!
کلمات کلیدی: آموزش GAMS، وارد کردن داده از اکسل در GAMS IDE، GDX در GAMS، مدلسازی بهینهسازی، بهینهیار