GAMS چیست؟
سیستم GAMS یک زبان برنامهنویسی مدل سازی با قابلیت بالاست.
از GAMS برای حل مسائل برنامهریزی خط (LP)، برنامهریزی غیرخطی (NLP)، برنامهریزی صحیح مختلط (MIP)، برنامهریزی خطی صحیح مختلط (MINLP) و مسائل مکمل خطی (MCP) استفاده میکنند.
روش نصب و راهاندازی GAMS بر روی کامپیوتر شخصی
GAMS در محیطهای DOS ، WINDOWS و UNIX قابل اجراست. در این جا راهاندازی GAMS را برای اجرا تحت DOS بیان میکنیم.
توجه کنید که سیستم GAMS تحت DOS شامل 4 فلاپی 44/1 میباشد.
1- ابتدا یک شاخه دلخواه روی کامپیوتر شخصی خود (مثلاً GAMS) درست کنید. سپس هر چهار فلاپی را روی شاخۀ GAMS کپی کنید. (ترتیب کپی کردن فلاپیها مهم نیست.)
2- برنامۀ gamsinst را اجرا کنید.
این برنامه تمام فایلهای فشردۀ *.Pck را باز میکند.
چگونه یک برنامه GAMS بنویسیم
برای حل یک مسأله توسط GAMS اولین مرحله عبارت است از تشکیل یک فایل متن که بیانکننده مسأله شما به زبان GAMS است. از ویرایشگر متن مثلا Edit در سیستم عامل DOS یا هر ویرایشگر متنی که در اختیار دارید میتوانید استفاده کنید. معمولا فایل حاصل را با پسوند GMS مشخص میکنیم. مثلا اگر برنامهای به نام TEST مینویسید فایلی به نام TEST.GMS ایجاد کنید.
نکاتی در مورد نحوۀ نوشتن برنامۀ GAMS
1- برای رفتن به خط بعدی از ENTER استفاده کنید.
2- هرگز از کلید TAB استفاده نکنید، زیرا موجب پیغام خطا میشود.
3- هر خطی که با '*' شروع شود به عنوان توضیح در نظر گرفته میشود و در برنامه خوانده نمیشود.
4- برای GAMS حروف کوچک و بزرگ فرقی ندارد.
5- یک برنامۀ GAMS شامل بخشهای متعددی است، هر بخش با یک سیمیکالون (؛) خاتمه مییابد.
یک برنامۀ نمونۀ GAMS
قبل از پرداختن به توضیحات مربوط به بخشهای مختلف یک برنامۀ GAMS کلیات برنامۀ زیر را ملاحظه نمائید.
مسأله:
min
به طوری که
برنامۀ مربوط به این مسأله در بخشهای بعدی به عنوان TEST ارجاع داده خواهد شد.
* OPTION LAMRO = 0 , LIMCOL = 0
SETS
J / C1*C6 /
I / B1*B3 / ;
PAPAMETERS
B ( I )
/ B1 6
B2 4
B3 4 /
C ( J )
/ C1 -1
C2 -2
C3 1
C4 -1
C5 -4
C6 2 / ;
TABLE
A ( I , J )
C1 C2 C3 C4 C5 C6
B1 1 1 1 1 1 1
B2 2 -1 -2 4 0 0
B3 0 0 1 1 2 1 ;
VARIABLES
COSTS
POSITIVE VARIABLES
X ( J ) ;
EQUATION
OBJECTIVE
Y ( I ) ;
OBJECTIVE . . COSTS = E = SUM ( J , C ( J ) X ( J ) ) ;
Y ( I ) . . SUM ( J , A ( I , J ) * X ( J ) ) = L = B ( I ) ;
MODEL TEST / ALL / ;
SOLVE TEST USING LP MINIMIZING COSTS ;
DISPLAY X . L , X . M ;
توضیح
بخش SETS
در این بخش تمام اندیسهایی که در نوشتن معادلات مدل استفاده میشوند معرفی میگردند. این اندیسها عباراتی صرفی – عددی هستند. به عنوان مثال در برنامۀ TEST بخش SETS ، ضرایب تابع هدف توسط J و تعداد قیود توسط I مشخص شدهاند.
توجه شود که در اصل J را توسط ضرایب تابع هدف به صورت
J / C1 , C2 , C3 , C4 , C5 , C6 /
یا
J / C1 * C6 /
و I را توسط عناصر صمت راست قیود نامساوی به صورت
I / B1 , B2 , B3 /
یا
I / B1 * B3 /
شمردهایم.
توجه: نام هر اندیس تا ده کاراکتر اجازه داده شده و درج فاصله یا جای خالی در نام اندیس اجازه داده نشده است.
بخش PARAMETERS
در GAMS پارامترها بردارهای ثابت معلوم و مقدار پارامترها به عنوان دادهها در این بخش تعریف میشوند. به منظور تعریف مقادیر بردارها، لازم است، اندیس بردارها قبلا در بخش SETS تعریف شده باشد.
در برنامۀ TEST بردارهای B و C دارای یک مقدار عددی به ترتیب برای هر عنصر مجموعۀ I و J به صورت زیر است.
PAPAMETERS
B ( I )
/ B1 6
B2 4
B3 4 /
C ( J )
/ C1 -1
C2 -2
C3 1
C4 -1
C5 -4
C6 2 / ;
بخش TABLE
در GAMS یک ماتریس، مثلا ماتریس ضرایب قیود در LP ، ماتریس ضرایب هزینه در حمل و نقل و... ، در بخش TABLE آورده میشود.
به صورت زیر :
TABLE
A ( I , J )
C1 C2 C3 C4 C5 C6
B1 1 1 1 1 1 1
B2 2 -1 -2 4 0 0
B3 0 0 1 1 2 1 ;
توجه شود که تنها یک ماتریس در هر بخش TABLE میتوان وارد کرد و لازم است با یک سیمیکالون (؛) خاتمه یابد. برای وارد کردن چندین ماتریس، همان تعداد TABLE لازم است.
بخش متغیرها VARIABLES
در بخش VARIABLES مجهولات مسأله را لیست میکنیم. متغیرها میتوانند اسکالر باشند، یک بردار باشند، یک ماتریس دوبعدی باشند، یک ماتریس سهبعدی باشند و غیره ...
در GAMS متغیرهای نامنفی با عنوان POSITIVE VARIABLES و متغیرهای نامثبت با عنوان NEGATIVE VARIABLES معرفی میشوند.
متغیرها میتوانند BINARY باشند که در این صورت تنها مقادیر صفر و یک میگیرند.
بخش معادلات EQUATIONS
بخش بعدی بخش معادلات است که اسامی تابع هدف و قیود دیگر مسأله در آن تعریف میشود. نامعادلات شبیه معادلات در این بخش ظاهر میشوند.
در برنامۀ TEST نام OBJECTIVE برای عبارتی که باید مینیمم گردد (تابع هدف) انتخاب شده است. نام Y(I) برای قیود مسأله انتخاب شده است.
بعد از نامگذاری، معادلات وارد میشوند. ابتدا نام معادله، به دنبال آن دو نقطه (..) آن گاه تعریف جبری قید که خیلی شبیه علائم استاندارد ریاضی است، میآید. ضرب به وسیلۀ علامت (*) ، تقسیم به وسیلۀ علامت اِسلش (/)، توان به وسیلۀ (**) تعریف میشود.
بعضی از توابع استاندارد
تعریف ریاضی
شرح
نام
قدر مطلق
ABS
COS ( arg )
کسینوس
COS
exp (arg)
تابع نمایی
EXP
لگاریتم در مبنای e از arg
لگاریتم طبیعی
LOG
لگاریتم در مبنای 10 از arg
لگاریتم معمولی
LOG10
Qrg*arg
توان دوم
SQR
Sqrt(arg)
ریشه دوم
SQRT
بعضی از علائم ریاضی
علائم ریاضی معمولی
GAMS
SUM ( I , )
SUM ( ( I , J ) , )
=
= E =
= G =
= L =
در GAMS راهی برای بیان کران بالا، کران پایین و قیود تساوی که با یک متغیر سر و کار دارند وجود دارد، مثال زیر را ببینید:
علائم استاندارد ریاضی
GAMS
X = L = 20
X = G = 20
X = E = 20
به جای تعاریف فوق قبل از EQUATION ، دستورات زیر را میتوانیم بیاوریم.
X . UP = 20 ;
X . LO = 20 ;
X . FX = 20 ;
که در آن UP ، LO ، FX بیانکننده کران بالا، کران پایین و مقدار ثابت هستند.
بخش MODEL و SOLVE
در آخرین قسمت برنامه، MODEL داده میشود، نام مدل (نام فایل) حداکثر 8 تا 10 کاراکتر بسته به GAMS مورد استفاده، انتخاب میشود.
در GAMS کلمۀ مدل مجموعهای از معادلات است که معمولاً یکی از آنها تابع هدف مسأله است، به عنوان مثال:
MODEL TEST / ALL / ;
این معنی را میدهد که تمام معادلاتی را که قبلا معرفی شده است به عنوان مدل TEST در نظر گرفته شود.
از این قسمت میتوان برای حل تجزیۀ LP هم استفاده کرد (Decomposition) طوری که علاوه بر تابع هدف قیودی را که برای حل کردن مد نظر است در این قسمت مینویسیم.
آخرین خط برنامه:
SOLVE TEST USING LP MINIMIZING COSTS ;
به کامپیوتر اعلام میکند که مدل TEST را با استفاده از برنامهریزی خطی (LP) که در کتابخانه برنامه حاضر است، به منظرو مینیممسازی متغیر COSTS (تابع هدف) حل کن.
در انتهای برنامه یک خط دلخواه را میتوان اضافه کرد:
DISPLAY X . L , X . M ;
که این خط باعث میشود در انتهای جواب برنامه، مقدار متغیرهای مسأله اولیه و مسألۀ دوگان به طور خلاصه و جمع و جور نوشته شود.
چگونه یک برنامۀ GAMS را اجرا کنیم؟
بعد از نوشتن برنامه (در یک ویرایشگر)، از آن ویرایشگر خارج میشویم، وقتی وارد صفحۀ DOS شدیم، دستور زیر را برای اجرای برنامۀ TEST.GMS مینویسیم:
(یا سادهتر GAMS TEST) > GAME TEST . GMS
پس از اجرای برنامه، گزارشی از جواب در فایلی به نام TEST . LST ایجاد خواهد شد.به کمک ویرایشگرتان (مثلا EDIT) میتوانید این فایل را ببینید یا آن را چاپ کنید.
اولین بار که برنامهای را اجرا میکنید، احتمالاً شامل خطاهایی خواهد بود، که این خطاها به وسیلۀ چهار ستاره (****) در سمت چپ خط خطا علامتگذاری میشود. در جلوی (****)، علامت $ را با یک عدد ملاحظه خواهید کرد، در انتهای برنامه و جلوی همان عدد نوع خطایی را که مرتکب شدهاید، نوشته شده است، نوع خطا را مطالعه کرده و نسبت به رفع آن اقدام کنید.
بعد از رفع خطاهای برنامه، سرانجام خلاصهای از جواب را در TEST . LST ملاحظه خواهید کرد، که شامل اطلاعاتی است که نیاز خواهید داشت. این قسمت با چهار خط تیره "----" شروع میشود. به عنوان مثال خلاصهای از جواب برنامۀ TEST عبارت است از:
---- EQU Y
LOWER LEVEL UPPER MARGINAL
B1 6.000 6.000 6.000 -2.000
B2 4.000 4.000 4.000 ESP
B3 4.000 4.000 4.000 -1.000
LOWER LEVEL UPPER MARGINAL
---- VAR Z -INF -16.000 + INF
---- VAR Z
LOWER LEVEL UPPER MARGINAL
C1 - - + INF 1.000
C2 - 4.000 + INF -
C3 - - + INF 4.000
C4 - - + INF 2.000
C5 - 2.000 + INF -
C6 - - + INF 5.000
C7 - - + INF 2.000
C8 - 8.000 + INF -
C9 - - + INF 1.000
**** REPORT SUMMARY : 0 NONOPT
0 INFEASIBEL
0 UNBOUNDED
---- 36 VARIABLE X . L
C2 4.000, C5 2.000, C8 8.000
---- 36 VARIABLE X . M
C1 1.000, C3 4.000, C4 2.000, C6 5.000, C7 2.000, C9 1.000
اولین قسمت خلاصه جواب شامل معادلات است. قسمت دوم خلاصه جواب مقدار بهین تابع هدف را ارائه میدهد که برابر 16- است و در ادامه مقدار بهین متغیره هستند که تحت عنوان LEVEL لیست میشوند. در قسمت پنجم و ششم، X.L و X.M را ملاحظه خواهید کرد که همان مقادیر بهینۀ به ترتیب متغیرهای اولیه و دوگان مسأله میباشند.