GAMS (General Algebraic Modeling System) یک سیستم مدل سازی سطح بالا برای مسائل برنامه نویسی ریاضی است. این آموزش برای تازه واردان در این حوزه می باشد. توجه داشته باشید که این آموزش از آموزش شروع سریع بروس مک کارل اقتباس شده است.
سه مدل اصلی
اکثر مدلسازان علاقه مند به GAMS حداقل به دنبال حل یکی از مسائل های زیر هستند:
- آنها می خواهند مسائل بهینه سازی محدودیت دار با توابع هدف حل کنند.
- آنها به دنبال سیستمی برای حل مسائل تعادل عمومی هستند که در زمینه های مختلف اقتصاد بوجود آمده است.
- آنها مایل به حل سیستم های معادلات غیر خطی به وجود آمده در زمینه مهندسی هستند.
GAMS مجهز به مدل سازی و حل هر سه نوع مسئله است. ما با معرفی نمونه هایی برای هر سه حوزه شروع می کنیم و بحث های بعدی به این سه مثال اساسی اشاره می کند.
مثال اول: حل مسئله برنامه نویسی خطی (LP)
ساده ترین مسئله بهینه سازی محدود LP است. در ادامه یک مسئله برنامه ریزی خطی ساده آورده شده است که در آن سود حداکثر می شود:
توجه داشته باشید که سه متغیر تصمیم وجود دارد: Xcorn نشان دهنده زمین اختصاص داده شده به کشت ذرت ، Xwheat زمین اختصاص داده شده به کشت گندم و Xcotton نشان دهنده زمینی است که پنبه در آن کشت می شود. در خط اول کل سود به عنوان تابعی از زمین اختصاص داده شده به سه محصول بیان می شود، ضرب کننده ها سود مورد انتظار در هکتار را بسته به نوع محصول نشان می دهند. محدودیت اول محدودیتی برای زمین موجود، محدودیت دوم محدودیتی برای نیروی کار موجود و سه خط پایانی متغیرهای تصمیم را به مقادیر غیر منفی محدود می کند.
توجه داشته باشید که سه متغیر تصمیم وجود دارد: Xcorn نشان دهنده زمین اختصاص داده شده به کشت ذرت ، Xwheat زمین اختصاص داده شده به کشت گندم و Xcotton نشان دهنده زمینی است که پنبه در آن کشت می شود. در خط اول کل سود به عنوان تابعی از زمین اختصاص داده شده به سه محصول بیان می شود، ضرب کننده ها سود مورد انتظار در هکتار را بسته به نوع محصول نشان می دهند. محدودیت اول محدودیتی برای زمین موجود، محدودیت دوم محدودیتی برای نیروی کار موجود و سه خط پایانی متغیرهای تصمیم را به مقادیر غیر منفی محدود می کند.
این مسئله ممکن است در GAMS به شرح زیر بیان شود:
Positive Variables Xcorn, Xwheat, Xcotton;
Variables Z;
Equations obj, land, labor;
obj.. Z =e= 109 * Xcorn + 90 * Xwheat + 115 * Xcotton;
land.. Xcorn + Xwheat + Xcotton =l= 100;
labor.. 6 * Xcorn + 4 * Xwheat + 8 * Xcotton =l= 500;
Model farmproblem / obj, land, labor /;
solve farmproblem using LP maximizing Z;
مثال دوم: حل تعادل اقتصادی(Economic Equilibrium)
ساده ترین مدل تعادل عمومی ، مسئله تک کالا و تک بازار است. فرض کنید می خواهیم مسئله تعادل زیر را حل کنیم:
اجزای مدل
اکنون که مدل اصلی خود را در اختیار داریم، آنها را تجزیه و تحلیل کرده و اجزای آنها، از جمله متغیرها، معادلات ،تعاریف مدل ، شرایط حل و نقاط شروع را مورد بحث قرار می دهیم.
متغیرها
متغیرهای موجود در GAMS باید به عنوان متغیرهایی با دستور متغیر اعلام شوند. جملات متغیر در مثالهای بالا در زیر تکرار می شوند:
Positive Variables Xcorn, Xwheat, Xcotton;
Variables Z;
توجه داشته باشید که GAMS به حروف کوچک و بزرگ حساس نیست و اجازه می دهد تا از تعریف در خطوط مجزا به جای کاما استفاده شود. بنابراین، سه نگارش متغیر زیر همه معتبر هستند و تأثیر یکسانی دارند:
POSITIVE VARIABLES Xcorn, Xwheat, Xcotton;
Positive Variables xcorn,
xwheat,
xcotton;
positive variables Xcorn
Xwheat , Xcotton;
در فرمول GAMS مسئله مورد نظر، ما متغیر Z را علاوه بر سه متغیری که در فرمول ریاضی مشخص شده است، معرفی کرده ایم. توجه داشته باشید که GAMS به مدل بهینه سازی نیاز دارد:
Maximize cx
فرم زیر را داشته باشد:
Maximize z
z = cx
در اینجا z یک متغیر است که متغیر تابع هدف نیز نامیده می شود. توجه داشته باشید که این متغیر تابع هدف است که به حداکثر می رسد، نه تابع cx. نام متغیر هدف ممکن است آزادانه توسط کاربر، مانند هر نام متغیر دیگری، انتخاب شود. متغیر هدف یک متغیر آزاد است، بدین معنی که هیچ محدودیتی ندارد. بنابراین، برای هر مسئله بهینه سازی باید همیشه حداقل یک متغیر آزاد وجود داشته باشد.
با توجه به نیاز یک متغیر تابع هدف در یک مسئله بهینه سازی، ما باید یک متغیر آزاد جدید تعریف و معادله ای برای آن معرفی کنیم. در این مثال ما Z را به عنوان یک متغیر آزاد اعلام کردیم، سپس معادله obj را تعریف کردیم و به حل کننده دستور دادیم که Z را به حداکثر برساند. خطوط مربوطه کد از مثال اول به شرح زیر است:
Variables Z;
Equation obj, land , labor;
obj.. Z =e= 109 * Xcorn + 90 * Xwheat + 115 * Xcotton;
solve farmproblem using LP maximizing Z;
معادلات در مدل
هر معادله در یک مدل ابتدا باید با یک بیانیه اعلام معادله اعلام و سپس با یک بیانیه تعریف معادله تعریف شود. ما عبارت مربوطه را از مثال زیر تکرار می کنیم:
Equations obj, land, labor;
obj.. Z =e= 109 * Xcorn + 90 * Xwheat + 115 * Xcotton;
land.. Xcorn + Xwheat + Xcotton =l= 100;
labor.. 6 * Xcorn + 4 * Xwheat + 8 * Xcotton =l= 500;
توجه داشته باشید که بیانیه اعلام معادله با کلمه کلیدی Equation (s) شروع می شود. هدف اصلی این کار تعریف نام برای هر معادله می باشد.
ساختار جبری معادله در عبارت تعریف معادله مشخص شده است ، جایی که نام معادله با دو نقطه دنبال می شود .. و رابطه. رابطه بین سمت چپ و سمت راست با نمادهای خاصی مشخص می شود که نوع معادله را مشخص می کند. رایج ترین نمادها = e = برای برابری ، = l = برای رابطه کمتر یا مساوی و = g = برای رابطه بزرگتر یا مساوی است.
تعاریف مدل
وقتی همه عناصر ساختاری یک مدل تعریف و مشخص شدند ، از یک عبارت مدل برای تعریف مدلی که حل می شود استفاده می شود.
Model farmproblem / obj, land, labor /;
حالت های حل
پس از تعریف مدل، باید حل شود، یعنی یافتن راه حلی برای متغیرها. دستور حل به GAMS دستور می دهد تا از یک حل کننده برای بهینه سازی مدل یا حل سیستم معادلات استفاده کند.
solve farmproblem using LP maximizing Z;
اجرای برنامه GAMS
فرمول مدل یک مدل GAMS در یک فایل متنی با پسوند .gms ذخیره می شود ، به عنوان مثال myfile.gms. سپس فایل به GAMS ارسال می شود. GAMS دستورالعمل های فایل .gms را اجرا می کند ، در نتیجه محاسبات انجام می شود ، از حل کننده ها استفاده می شود و یک فایل خروجی با نتایج راه حل ایجاد می شود. فایل خروجی را فایل فهرست نیز می نامند. به طور پیش فرض ، فایل فهرست نام فایل ورودی myfile.gms myfile.lst خواهد بود.
دو روش برای ارسال کد به GAMS وجود دارد: از طریق خط فرمان و از طریق GAMS IDE.
اجرای GAMS در خط فرمان
فرمول مدل یک مدل GAMS در یک فایل متنی با پسوند .gms ذخیره می شود ، به عنوان مثال myfile.gms. این فایل ممکن است با GAMS با استفاده از تماس زیر اجرا شود:
> gams myfile
توجه داشته باشید که پسوند .gms ممکن است حذف شود. این فراخوانی اولیه GAMS ممکن است با آرگومان هایی که پارامترهای خط فرمان نامیده می شوند ، گسترش یابد. مثال زیر به عنوان تصویر عمل می کند:
> gams trnsport pw=80 ps=9999 s=mysave
توجه داشته باشید که سه پارامتر خط فرمان وجود دارد: اول عرض صفحه را روی ۸۰ تنظیم می کند ، دومی طول صفحه را روی ۹۹۹۹ تنظیم می کند و پارامتر سوم این است که یک فایل کاری به نام mysave ذخیره می شود. GAMS پارامترهای خط فرمان زیادی را ارائه می دهد ، آنها در فصل پارامترهای فراخوانی و خط فرمان GAMS معرفی و مورد بحث قرار می گیرند.
اجرای GAMS با IDE
محیط توسعه یکپارچه GAMS یک رابط کاربری گرافیکی برای Windows است که ویرایش ، توسعه ، اشکال زدایی مدل های GAMS و اجرای مشاغل GAMS را تسهیل می کند.
بررسی خروجی
خروجی اجرای GAMS در فایل خروجی یا فهرست ذخیره می شود. در این بخش خروجی تولید شده با اجرای مدل نمونه را بررسی می کنیم.
Echo Print
فایل فهرست همیشه با echo print شروع می شود. echo print یک کپی از فایل ورودی است که شماره خط به آن اضافه شده است. به عنوان مثال ، یک نمونه از echo print در ادامه آورده شده است.
۱ Positive Variables Xcorn, Xwheat, Xcotton;
۲ Variables Z;
۳
۴ Equations obj, land, labor;
۵
۶ obj.. Z =e= 109 * Xcorn + 90 * Xwheat + 115 * Xcotton;
۷ land.. Xcorn + Xwheat + Xcotton =l= 100;
۸ labor.. 6 * Xcorn + 4 * Xwheat + 8 * Xcotton =l= 500;
۹
۱۰ Model farmproblem / obj, land, labor /;
۱۱
۱۲ solve farmproblem using LP maximizing Z;
بعلاوه توجه داشته باشید که echo print به عنوان یک راهنمای مرجع مهم عمل می کند، زیرا GAMS شماره خطوط خطاهای شناسایی شده و دستورات حل را بر پایه همین شماره گذاری در echo print گزارش می کند.
خروجی تولید مدل
هنگامی که GAMS فایل ورودی را با موفقیت کامپایل کرد و هرگونه محاسبات عددی انجام شد، دستورات حل اجرا می شود. اولین قدم ایجاد نسخه قابل خواندن کامپیوتر از معادلات در مسئله است که به یک سیستم حل کننده مناسب منتقل می شود. در مرحله تولید مدل ، GAMS خروجی زیر را ایجاد می کند:
- فهرست معادلات مدل.
- فهرستی از متغیرهای مدل
- خلاصه ای از ساختار مدل
- اگر خطاهایی در هنگام تولید مدل تشخیص داده شود ، آنها نیز گزارش خواهند شد.
لیست معادلات
فهرست معادله اولین قسمت از خروجی است که توسط یک دستور حل تولید می شود.
Equation Listing SOLVE farmproblem Using LP From line 12
---- obj =E=
obj.. - 109*Xcorn - 90*Xwheat - 115*Xcotton + Z =E= 0 ; (LHS = 0)
---- land =L=
land.. Xcorn + Xwheat + Xcotton =L= 100 ; (LHS = 0)
فهرست ستون
فهرست ستون یا متغیر شامل لیستی از ضرایب است که بر اساس ستون و نه بر اساس سطر مرتب شده اند (مانند فهرست معادله). به طور پیش فرض ، سه ورودی اول برای هر متغیر، همراه با حد پایین .lo ، حد بالا .up و سطح سطح فعلی .l نشان داده می شود. فهرست ستون دو متغیر اول برای هر مثال در زیر آورده شده است.
Column Listing SOLVE farmproblem Using LP From line 12
---- Xcorn
Xcorn
(.LO, .L, .UP, .M = 0, 0, +INF, 0)
-۱۰۹ obj
۱ land
۶ labor
---- Xwheat
Xwheat
(.LO, .L, .UP, .M = 0, 0, +INF, 0)
-۹۰ obj
۱ land
۴ labor
آمار مدل
در حالی که مدلی برای حل آماده می شود، اطلاعات نهایی تولید شده بلوک آمار است. بارزترین کاربرد آن ارائه جزئیات در مورد اندازه و غیر خطی بودن مدل است. آمار مدل نمونه در ادامه آمده است.
MODEL STATISTICS
BLOCKS OF EQUATIONS 6 SINGLE EQUATIONS 6
BLOCKS OF VARIABLES 6 SINGLE VARIABLES 6
NON ZERO ELEMENTS 20 NON LINEAR N-Z 10
DERIVATIVE POOL 20 CONSTANT POOL 16
CODE LENGTH 22
گزارش راه حل
آخرین جزء اصلی فایل فهرست، خروجی حل است. این شامل خلاصه، مقداری خروجی مخصوص حل کننده و گزارش راه حل معادلات و متغیرها می باشد.
خلاصه حل کنید
خلاصه حل بسیار مهم است زیرا شامل یک مرور کلی از اطلاعات کلیدی راه حل است. خلاصه یک نمونه حل در زیر آورده شده است.
S O L V E S U M M A R Y
MODEL wall OBJECTIVE ba
TYPE NLP DIRECTION MINIMIZE
SOLVER CONOPT FROM LINE 16
**** SOLVER STATUS 1 Normal Completion
**** MODEL STATUS 2 Locally Optimal
**** OBJECTIVE VALUE 1.0000
RESOURCE USAGE, LIMIT 0.034 1000.000
ITERATION COUNT, LIMIT 7 2000000000
EVALUATION ERRORS 0 0
گزارش حل کننده
قسمت بعدی فایل فهرست ، گزارش حل کننده است. این شامل خروجی مخصوص حل کننده است. خروجی یک حل نمونه به شرح زیر است:
CONOPT 3 24.7.3 r58181 Released Jul 11, 2016 DEG x86 64bit/MacOS X
C O N O P T 3 version 3.17A
Copyright (C) ARKI Consulting and Development A/S
Bagsvaerdvej 246 A
DK-2880 Bagsvaerd, Denmark
Pre-triangular equations: 0
Post-triangular equations: 0
** Optimal solution. There are no superbasic variables.
فهرست حل
لیست حل ها به ترتیب سطر به ستون و سپس ستون به ستون از راه حل هایی است که توسط برنامه حل کننده به GAMS بازگردانده می شود. هر معادله و متغیر جداگانه شامل سطح و مقادیر حاشیه ای آنها و مرزهای پایین و بالای آنها فهرست شده است. لیست راه حل نمونه به شرح زیر است:
LOWER LEVEL UPPER MARGINAL
---- EQU obj . . . 1.0000
---- EQU land -INF 100.0000 100.0000 52.0000
---- EQU labor -INF 500.0000 500.0000 9.5000
LOWER LEVEL UPPER MARGINAL
---- VAR Xcorn . 50.0000 +INF .
---- VAR Xwheat . 50.0000 +INF .
---- VAR Xcotton . . +INF -13.0000
---- VAR Z -INF 9950.0000 +INF