در مطالب پیشین بیان شد که منظور از پارامتر در تحقیق در عملیات بخشی از داده ها است که از نظر ما معلوم هستند. ولی متغیر نوعی از داده ها است که به عنوان متغیر تصمیم مشهورند و یکی از اهداف حل مدل، محاسبه این مقادیر است.

به عبارت دیگر متغیرها بخشی از مجهولات مسئله هستند.
فرض کنید یک مسئله ی بهینه سازی دارید. این مسئله دارای یک تابع هدف و چند محدودیت می باشد. بنا بر علم تحقیق در عملیات، قبل از اعمال محدودیت ها، هر جوابی برای تابع هدف قابل قبول می باشد. این محدودیت ها فضای جواب را محدود کرده و فضایی ایجاد می کنند که فضای شدنی نام دارد. حال وقتی یک مسئله حل می شود، منظور این است که تابع هدف با توجه به فضای شدنی که توسط محدودیت ها اعمال شده است، بهینه شود. و این امر وقتی اتفاق می افتد که متغیرهای مختلف مقادیری به خود بگیرند که در فضای شدنی قابل قبل باشند. بنابراین چگونگی و مهارت در تعریف متغیرها نیز به برنامه ی شما در جهت رسیدن به جوابی بهتر و بعضاً سریع تر کمک خواهد نمود.

همانطور که اطلاع دارید متغیر به چند قسمت مانند متغیر آزاد در علامت، مثبت، منفی، صفر و یک و… تقسیم بندی می شوند. در این بخش به نحوه ی تعریف متغیرهایی که در مدل شما مورد استفاده قرار می گیرند، پرداخته می شود.
فرض کنید در مدلتان متغییرهای زیر را دارید. همانطور که مشاهده می کنید، متغیرهای xو yو z متغیرهایی آزاد در علامت، متغیر m عدد صحیح مثبت، v صفر و یک و همچنین متغیر u فقط به ازای اندیس هایی از j که در آنها j برابر با 5 تا 10 است صادق خواهد بود، بنابراین متغیر u به نوعی محدود شده است. این متغیرها را در GAMS چطور تعریف می کنید؟

variables-sample

اینکه این متغیرها را در GAMS به چه شکل تعریف کنیم بسیار ساده است. متغیرها را با دستور کلی Variable می توان تعریف نمود. در تعریف متغیرها به دو امر بسیار مهم باید دقت نمود:

1. نوع یک متغیر
در علم تحقیق در عملیات، انواع متغیرها به متغیر آزاد در علامت، متغیر مثبت، منفی، غیر منفی و… تعریف می شوند. مروری بر این متغیرها را در شکل زیر می توان مشاهده نمود:

Variable-Types

جدول بالا خلاصه شده و واضح به نظر می رسد. بنابراین نیازی به توضیح تک تک این نوع متغیرها احساس نمی شود. اما جهت توضیح هر چه بیشتر در مورد چگونگی تعریف این متغیرها در GAMS، متغیر x را در نظر بگیرید که دارای اندیس j است. انواع متغیرها به ترتیب به صورت زیر می توانند تعریف شوند.

* Examples: How to define a variable in different types
variable x(j) ;
free variable x(j) ;
positive variable x(j) ;
nonnegative variable x(j) ;
negative variable x(j) ;
integer variable x(j) ;
binary variable x(j) ;
semicont variable x(j) ;
semiint variable x(j) ;
sos1 variable x(j) ;
sos2 variable x(j) ;


2. ویژگی های یک متغیر
در برنامه نویسی توسط GAMS یک سری ویژگی ها را می توان به یک متغیر نسبت داد. به عنوان مثال می توان گفت فلان متغیر مقداری بین فلان تا فلان دارد. در این صفحه فقط به چهار ویژگی اصلی و پر کاربرد متغیرها شامل: حد پایین متغیر، حد بالای متغیر، ثابت کردن یک متغیر و مقدار کنونی متغیر، پرداخته می شود.

1. حد پایین یک متغیر
توسط دستوراتی می توان به یک متغیر ویژگی نسبت داد. یکی از این ویژگی ها حد پایین می باشد. کد زیر که شامل تعریف کلی و یک مثال از تعیین حد پایین برای دو متغیر x و y است را در نظر بگیرید:

* How to assign an attribute to the variables
variable x ;
x.lo=5 ;
variable y(j) ;
y.lo(j)=10;


کد بالا نشان می دهد که متغیر x دارای کمترین حد برابر با 5 و متغیر y دارای حد پایین 10 می باشند.

2. حد بالای یک متغیر
تخصیص حد بالای به یک متغیر نیز مشابه حد پایین آن می باشد. کد زیر این امر را به ضوح به نمایش می گذارد:

* How to assign an attribute to the variables
variable x ;
x.up=5 ;
variable y(j) ;
y.up(j)=10;


کد بالا به این امر دلالت دارد که حداکثر مقداری که متغیرهای x و y می توانند به خود بگیرند به ترتیب برابر با 5 و 10 می باشد.

3. ثابت کردن یک متغیر

* How to assign an attribute to the variables
variable x ;
x.fx=5 ;
variable y(j) ;
y.fx(j)=10;


در کد بالا دو متغیر به نام های x, y که آزاد در علامت هستند تعریف شده و سپس مقداری ثابت (5 و 10) به آنها تخصیص داده شده است. این شیوه ی کد نویسی به کاربر امکان تحلیل حساسیت بهتر می دهد. حتی کابر می تواند توسط این کد (ثابت کردن یک متغیر بر روی یک مقدار معین) اشکالات مدل خود از جمله نشدنی شدن جواب و یا غیر واقعی بودن آن را مورد تجزیه و تحلیل قرار دهد که این امر بسته به تجربه و کارآزمودگی وی دارد.

4. مقدار کنونی یک متغیر
نوع دیگری از ویژگی های متغیرها مقدار کنونی آن ها می باشد. منظور از مقدار کنونی آن مقداریست که GAMS پس از طی مراحلی به صورت خط به خط به متغیر تخصیص داده است. به عنوان مثال یک کد GAMS را در نظر بگیرید که در آن دو مدل کد نویسی شده اند. و متغیری به نام x باید پس از مقدار گرفتن در مدل اول، جهت حل در مدل دوم، به عنوان عددی ثابت a (پارامتر ورودی) به مدل دوم معرفی شود. بنابراین کد ساده ی زیر پس از دستور solve ر مدل اول باید قرار داده شود و بدین صورت به مدل دوم فهمانده می شود که پارامتر a که در مدل دوم دقیقاً همان مقداری را دارد که متغیر x در مدل اول در حالت بهینه به خود گرفته است:

* How to assign an attribute to the variables
variable x ;
x.l=5 ;
variable y(j) ;
y.l(j)=10;


(توجه شود که در صورت عدم آشنایی با دستور solve به بخش مربوطه در نوار کناری دسته بندی، بخش حل مدل توسط GAMS مراجعه فرمایید). مثالی از این نوع مدل ها مدل های پویا در مهندسی مکانیک، مدل تعالی عمومی در اقتصاد کلان و مدل زمان بندی در مهندسی صنایع می توند باشد

نمایش ویژگی های متغیرها

فرض کنید مدلتان حل شد و پس اط حل آن مایلید تعدادی از ویژگی های متغیرهایتان به نمایش گذشته شود. به عنوان مثال می خواهید مقداری که یک متغیر در حالت بهینه به خود گرفته پس از حل مدل به نمایش گذاشته شود. جهت نمایش ویژگی های متغیرها می توان از دستور display استفاده نمود. مثال زیر این امر را به نمایش می گذارد. (دستور display در بخش مربوطه توضیح داده شده است)

ٍDisplay x.l, x.lo, y.scale, z.up ;


توسط کد بالا، GAMS پس از حل مدل شما، مقدار بهینه ی متغیر x، حد پایین متغیر x، و حد بالای متغیر z را به شما با خواهد گرداند.

بپردازیم به ادامه ی مثال کاربردی 1:
(در صورتی که با مثال کاربردی 1 آشنایی ندارید اینجا کلیک کنید). با دقت به مثال کاربردی 1، مشاهده می شود که مسئله دارای یک دسته متغیر به نام x می باشد که دارای اندیس j می باشند. پس باید یک متغیر آزاد در علامت به نام x تعریف نماییم.
نکته مهم: توصیه ی اکید می کنیم که به هنگام تعریف متغیرها همیشه یک متغیر اضافی (آزاد در علامت) نیز با نام دلخواه تعریف کنید. جهت روش تر شدن موضوع به این موضوع دقت کنید که وقتی شما یک مسئله را کمینه یا بیشینه می کنید، همیشه برای تابع هدفتان یک نام تعریف می کنید. نامی که در این مثال برای تابع هدف تعریف شده است Z می باشد. پس باید دو متغیر x و z را به صورت آزاد در علامت تعریف کنیم

Example1-Variable-Def

بحث در مورد تعریف متغیرها تقریباً به اتمام رسید. مباحث تکمیلی متغیرها در آینده در همین تاپیک اضافه خواهند شد.

خدمت عزیزانی که آموزش گام به گام را از ابتدا همراه با ما شروع نموده اند توصیه می شود که پس از مطالعه و مرور این صفحه، جهت ادامه مراحل آموزش به بخش معادلات در لیست مطالب مراجعه نمایند.

با تشکر
مدیریت سایت gamsbook.ir

ایمیل: Support@gamsbook.ir
شماره تماس: 3325-405–0919