کامنتگذاری چیست؟
در GAMS، کامنتگذاری به افزودن توضیحات به کد گفته میشود تا هدف هر بخش (مثل مجموعهها یا معادلات) مشخص شود. این توضیحات توسط GAMS نادیده گرفته میشوند و فقط برای خوانایی کد هستند.
روشهای کامنتگذاری در GAMS
- کامنت تکخطی با *:
- برای توضیحات کوتاه در ابتدای خط استفاده میشود.
- مثال: * این یک کامنت است
- کامنت چندخطی با Ontext/Offtext:
- برای توضیحات طولانیتر یا چندین خط استفاده میشود.
- مثال:
$Ontext این یک مدل حملونقل ساده است برای کمینه کردن هزینه حمل کالا $Offtext
- توضیحات در تعریف اجزا:
- در تعریف مجموعهها، پارامترها، یا معادلات میتوانید توضیحات را در نقلقول (” “) اضافه کنید.
- مثال: Sets i “شهرهای مقصد” /Tehran, Shiraz/
چرا کامنتگذاری مهم است؟
- خوانایی: کد را برای خودتان و دیگران قابلفهم میکند.
- اشکالزدایی: کمک میکند بخشهای مختلف کد را سریعتر شناسایی کنید.
- همکاری: در پروژههای تیمی، توضیحات واضح کار را سادهتر میکند.
- مستندسازی: برای مرور کد در آینده یا آموزش دیگران مفید است.
نحوه کامنتگذاری در GAMS
۱. کامنت تکخطی
برای توضیح یک خط خاص:
* تعریف مجموعه شهرها
Sets i /Tehran, Shiraz/;
۲. کامنت چندخطی
برای توضیحات طولانیتر:
$Ontext
این مدل برای کمینه کردن هزینه حمل طراحی شده است.
دادهها شامل هزینه و تقاضای شهرها هستند.
$Offtext
۳. توضیحات در تعریف
برای اجزای مدل:
Parameters
c(i) "هزینه حمل به هر شهر (هزار تومان)" /Tehran 50, Shiraz 100/;
مثال عملی: مسئله حملونقل با کامنتگذاری
کد زیر یک مدل حملونقل ساده را با کامنتهای مناسب نشان میدهد:
* مدل حملونقل ساده برای کمینه کردن هزینه
$Ontext
این مدل هزینه حمل کالا از یک انبار به سه شهر را کمینه میکند.
دادهها شامل هزینه و تقاضای هر شهر است.
$Offtext
* تعریف مجموعهها
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;
توضیح کد
- کامنت تکخطی: * مدل حملونقل ساده در ابتدای کد.
- کامنت چندخطی: $Ontext/$Offtext برای توضیح کلی مدل.
- توضیحات در تعریف: مثل “هزینه حمل (هزار تومان)” برای خوانایی.
- خروجی: مقادیر x.l (مقدار حمل) و z.l (هزینه کل) در فایل .lst نمایش داده میشود.
خروجی نمونه
در فایل .lst:
x.l(Tehran) 200.000
x.l(Shiraz) 300.000
x.l(Isfahan) 250.000
z.l 29500.000
- توضیح: ۲۰۰ واحد به تهران، ۳۰۰ واحد به شیراز، ۲۵۰ واحد به اصفهان حمل میشود. هزینه کل ۲۹۵۰۰ هزار تومان است.
نکات مهم در کامنتگذاری
- تعادل: از کامنتهای زیاد یا خیلی کم پرهیز کنید. فقط بخشهای مهم را توضیح دهید.
- وضوح: توضیحات کوتاه و معنادار بنویسید.
- استفاده از $Ontext/$Offtext: برای توضیحات طولانی یا غیرفعال کردن بخشهایی از کد.
- خطاها: کامنتها روی اجرا تأثیری ندارند، اما فایل .lst را برای خطاهای دیگر بررسی کنید.
نکات کلیدی
- کامنتگذاری: کد را خواناتر و قابلفهم میکند.
- روشها: تکخطی با *، چندخطی با $Ontext/$Offtext، توضیحات در تعریف.
- کاربرد: برای مستندسازی و همکاری تیمی.
- خوانایی: از توضیحات واضح و کوتاه استفاده کنید.
گام بعدی
در قسمت بعدی، با خطایابی اولیه در GAMS آشنا میشوید تا مشکلات کد را پیدا و رفع کنید. فایلهای نمونه و ویدئوهای این دوره را از سایت بهینهیار دانلود کنید!
کلمات کلیدی: آموزش GAMS، کامنتگذاری در GAMS، Ontext/Offtext، مدلسازی بهینهسازی، بهینهیار