خطایابی در GAMS چیست؟
خطایابی به معنای پیدا کردن و رفع اشکالات در کد GAMS است که مانع اجرای صحیح مدل میشوند. GAMS خطاها را در فایل خروجی (.lst) یا پنجره Log گزارش میدهد. این خطاها ممکن است به دلیل مشکلات نگارشی (Syntax Errors) یا منطقی (Logical Errors) باشند.
انواع خطاها
- خطاهای نگارشی (Syntax Errors):
- مشکلات در ساختار کد، مثل اشتباه در نوشتن دستورات یا فراموش کردن سمیکالن (;).
- مثال: نوشتن Set بهجای Sets.
- خطاهای منطقی (Logical Errors):
- مدل درست اجرا میشود، اما نتایج نادرست است (مثلاً به دلیل محدودیتهای ناسازگار).
- مثال: تقاضای بیشتر از ظرفیت انبار.
- خطاهای حلکننده:
- مدل قابلحل نیست (مثلاً Infeasible یا Unbounded).
- مثال: محدودیتهایی که هیچ راهحلی ندارند.
چگونه خطاها را پیدا کنیم؟
GAMS خطاها را در فایل خروجی (.lst) یا پنجره Log در GAMS Studio گزارش میدهد. برای خطایابی:
- پنجره Log: پیامهای خطا (Error Messages) را بررسی کنید. خطاها با کد (مثل *** Error 149) و توضیح نمایش داده میشوند.
- فایل .lst: جزئیات خطا، شماره خط، و توضیحات را نشان میدهد.
- نکات کلیدی:
- شماره خط (Line Number) را بررسی کنید.
- پیام خطا را بخوانید (مثل Unknown symbol برای متغیر تعریفنشده).
- از کامنتها برای غیرفعال کردن بخشهای کد و تست استفاده کنید.
مثال عملی: خطایابی در مسئله حملونقل
فرض کنید کد زیر برای کمینه کردن هزینه حمل کالا نوشته شده، اما خطا دارد:
* مدل حملونقل با خطا
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;