آموزش GAMS – قسمت ۱۹: دیباگ کردن مدل‌های GAMS در GAMS IDE

برای شروع یادگیری همین حالا تماس بگیرید ...

در قسمت‌های قبلی مجموعه آموزشی GAMS سایت بهینه‌یار، با تحلیل نتایج و گزارش‌دهی پیشرفته آشنا شدیم. حالا در قسمت بیست و نهم، به سراغ دیباگ کردن (Debugging) مدل‌های GAMS می‌رویم. دیباگ کردن به معنای شناسایی و رفع خطاها در کد یا مدل است تا مدل به‌درستی اجرا شود. این آموزش برای مبتدیان طراحی شده و با یک مثال عملی در GAMS IDE، نحوه پیدا کردن و رفع خطاها در یک مسئله حمل‌ونقل را یاد می‌گیرید. بیایید شروع کنیم!

آخرین اخبار مهندسی صنایع و مدیریت

پایان نامه ارشد زنجیره تامین
انجام پایان‌نامه مهندسی صنایع ارشد در حوزه زنجیره تأمین؛ یک راهنمای جامع و تخصصی برای دانشجویان
زمان مطالعه: 5 دقیقه
استخراج مقاله از پایان نامه مهندسی صنایع
آموزش استخراج مقاله از پایان‌نامه مهندسی صنایع | راهنمای تخصصی برای دانشجویان صنایع
قیمت پایان نامه مهندسی صنایع
هزینه انجام پایان نامه مهندسی صنایع در سال ۱۴۰۴
زمان مطالعه: 5 دقیقه
انتخاب موضوع پایان نامه
موضوعات پایان‌نامه مهندسی صنایع ۱۴۰۴ + ۵۰ موضوع جدید و قابل استخراج مقاله ISI
زمان مطالعه: 5 دقیقه
انتخاب موضوع پایان نامه مهندسی صنایع
انتخاب موضوع پایان نامه مهندسی صنایع از صفر تا صد، راهنمای کامل برای دانشجویان
مصاحبه استخدام مهندسی صنایع
مصاحبه استخدام مهندسی صنایع، ۴ سرفصل مهم و هرآنچه که باید بدانید
زمان مطالعه: 3 دقیقه

دیباگ کردن در GAMS چیست؟

دیباگ کردن فرآیند شناسایی و رفع خطاها در کد GAMS یا مدل بهینه‌سازی است. خطاها ممکن است شامل مشکلات سینتکس، داده‌های نادرست، یا مدل غیرقابل‌حل (Infeasible/Unbounded) باشند.

انواع خطاهای رایج در GAMS

  • خطای سینتکس: اشتباه در نوشتن کد (مثل typo یا ساختار نادرست).
  • خطای داده: داده‌های ورودی نامعتبر (مثل تقاضای منفی).
  • خطای مدل: مدل Infeasible (بدون جواب) یا Unbounded (جواب نامحدود).
  • خطای مسیر فایل: مشکل در دسترسی به فایل‌های اکسل یا GDX.

ابزارهای دیباگ در GAMS IDE

  • پنجره Output: نمایش پیام‌های خطا.
  • فایل .lst: گزارش دقیق اجرا و خطاها.
  • دستور Display: بررسی مقادیر متغیرها و پارامترها.
  • حل‌کننده‌ها: پیام‌های حل‌کننده (مثل CPLEX) برای مشکلات مدل.

دیباگ کردن در GAMS IDE

برای این آموزش، یک مسئله حمل‌ونقل چندمحصولی را مدل می‌کنیم که عمداً یک خطا (تقاضای کل بیشتر از ظرفیت) دارد. سپس مراحل دیباگ را نشان می‌دهیم. داده‌ها از اکسل وارد می‌شوند.

مرحله ۱: ساختار فایل اکسل

فایل اکسل (data_debug.xlsx) برای مسئله حمل‌ونقل چندمحصولی:

Sheet1 (هزینه‌ها):

Sheet2 (تقاضاها):

فایل را در پوشه پروژه GAMS IDE (مثل C:\GAMS\workdir) ذخیره کنید.

مرحله ۲: تبدیل اکسل به GDX

  1. فایل GAMS جدید (convert_debug.gms) در GAMS IDE:
  • تبدیل اکسل به GDX برای مسئله دیباگ
Sets
i "شهرها"
j "محصولات";
Parameters
c(i,j) "هزینه حمل"
d(i,j) "تقاضا";
$call gdxxrw data_debug.xlsx par=c rng=Sheet1!A1:C7 par=d rng=Sheet2!A1:C7
$gdxout data_debug.gdx
$unload i j c d
$gdxout
  1. با کلید F9 اجرا کنید تا data_debug.gdx ایجاد شود.

مرحله ۳: کد GAMS با خطا و دیباگ

کد زیر مدل را اجرا می‌کند و ما خطای Infeasible را شناسایی و رفع می‌کنیم:

* مدل حمل‌ونقل با خطا برای دیباگ در GAMS IDE
$Ontext
این مدل هزینه حمل را کمینه می‌کند و خطای Infeasible را بررسی می‌کنیم.
$Offtext

* تعریف مجموعه‌ها
Sets
  i "شهرهای مقصد"
  j "محصولات";

* تعریف پارامترها
Parameters
  c(i,j) "هزینه حمل (هزار تومان)"
  d(i,j) "تقاضای هر شهر و محصول (واحد)"
  cap "ظرفیت انبار (واحد)"
  x_result(i,j) "نتایج مقدار حمل برای ذخیره"
  z_result "نتیجه هزینه کل برای ذخیره";

* وارد کردن داده‌ها از فایل GDX
$gdxin data_debug.gdx
$load i j c d
$gdxin
cap = 1500;

* بررسی داده‌ها
Display c, d, cap;

* تعریف متغیرها
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= cap;

* تعریف و حل مدل
Model TransportDebug /all/;
Solve TransportDebug using LP minimizing z;

* ذخیره نتایج در پارامترها
x_result(i,j) = x.l(i,j);
z_result = z.l;

* ذخیره نتایج در فایل GDX
$gdxout results_debug.gdx
$unload x_result z_result
$gdxout

* انتقال نتایج به فایل اکسل
$call gdxxrw results_debug.gdx par=x_result rng=Sheet1!A1 par=z_result rng=Sheet2!A1 o=results_debug.xlsx

دیباگ کردن خطا

  1. اجرای اولیه:
    • با اجرای کد، مدل به دلیل تقاضای کل (۲۰۰ + ۱۵۰ + ۳۰۰ + ۱۰۰ + ۲۵۰ + ۲۰۰۰ = 3000) بیشتر از ظرفیت (۱۵۰۰) Infeasible می‌شود.
    • پیام خطا در پنجره Output یا فایل .lst ظاهر می‌شود:**** MODEL STATUS 4 Infeasible **** SOLVER STATUS 4 Terminated by Solver
  2. بررسی فایل .lst:
    • بخش EQUATION LISTING را بررسی کنید:Demand(Isfahan,Product2).. x(Isfahan,Product2) =g= 2000 Supply.. sum((i,j), x(i,j)) =l= 1500
    • مشکل: تقاضای ۲۰۰۰ برای Isfahan-Product2 با ظرفیت ۱۵۰۰ قابل‌تأمین نیست.
  3. رفع خطا:
    • تقاضای Isfahan,Product2 را در فایل اکسل به ۱۲۰ (مقدار معقول) تغییر دهید.
    • فایل GDX را دوباره با convert_debug.gms تولید کنید.
    • کد را دوباره اجرا کنید.
  4. خروجی پس از رفع خطا: در فایل اکسل (results_debug.xlsx):
    • Sheet1 (مقدار حمل):ijx_resultTehranProduct1200TehranProduct2150ShirazProduct1300ShirazProduct2100IsfahanProduct1250IsfahanProduct2120
    • Sheet2 (هزینه کل):z_result31750
    • توضیح: پس از رفع خطا، مدل قابل‌حل شده و تقاضاها تأمین می‌شوند.

نکات مهم در GAMS IDE

  • پیام‌های خطا: پنجره Output و فایل .lst را برای جزئیات خطا بررسی کنید.
  • دستور Display: برای بررسی داده‌های ورودی (مثل c, d) قبل از حل.
  • رفع خطا: داده‌های ورودی (مثل تقاضا) یا محدودیت‌ها (مثل ظرفیت) را اصلاح کنید.
  • تست مدل: با داده‌های کوچک شروع کنید تا خطاها راحت‌تر شناسایی شوند.

نکات کلیدی

  • دیباگ کردن: شناسایی و رفع خطاها با بررسی .lst و Output.
  • خطای Infeasible: معمولاً به دلیل ناسازگاری محدودیت‌ها (مثل تقاضا > ظرفیت).
  • GAMS IDE: استفاده از Display و فایل .lst برای دیباگ.
  • کاربرد: برای اطمینان از صحت مدل و داده‌ها.

گام بعدی

در قسمت بعدی، با مقیاس‌پذیری مدل‌ها (Scaling Models) آشنا می‌شوید تا مدل‌های بزرگ‌تر را بهینه اجرا کنید. فایل‌های نمونه و ویدئوهای این دوره را از سایت بهینه‌یار دانلود کنید!

کلمات کلیدی: آموزش GAMS، دیباگ کردن در GAMS IDE، رفع خطا، مدل‌سازی بهینه‌سازی، بهینه‌یار

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *