مجموعه ی اندیس ها، پارامترها، جداول و متغیرهای مسئله تعریف شد. نوبت می رسد به وارد کردن معادلات، محدودیت ها، تابع هدف و… . همانطور که می دانید، مدل های بهینه سازی شامل دو بخش تابع هدف و محدودیت ها می شود.
معرفی و اعمال این معادلات در دو بخش Equation Declaration و Equation Specification انجام می شود. مثال زیر را در نظر بگیرید:
همانطور که ملاحظه می شود، در بخش اول دستور یا Equation Declaration، به تعریف و اعلام اسامی تابع هدف و محدودیت ها به همراه وابستگی اشان به اندیس های متناظر می پردازیم. co6 را در نظر بگیرید؛ این گذاره صرفا اسمی است که توسط کاربر برای محدودیت ششم انتخاب شده است و هیچ ارزش دیگری ندارد. در حالی که co1(i,j) وابستگی محدودیت اول به اندیس های i و jرا نیز نشان می دهد. و این معادل همان علامت ∀ در جبر خواهد بود. پس در واقع co1(i,j) یعنی قید اول به ازای هر i و j باید برقرار باشد. محدودیت جبری معادل:
در بخش دوم یا Equation Specification، در هر سطر، اسم هر معادله یا نامعادله که در بخش اول به تعریف آن پرداختیم، آورده خواهد شد و سپس دو نقطه (..) مطابق شکل بالا جلویش خواهیم گذاشت. دقت شود که اگر در قید، شرطی مانند i≠j نیز داشته باشیم باید این شرط را قبل از دو نقطه ای که گذاشته ایم اعمال نماییم. اگر مبتدی هستید، هیچگاه تایپ دو نقطه را فراموش نکنید! چون برطرف کردن خطاهایی که به هنگام run کردن مدل خواهید دید، انصافاً شما را به شدت عصبی می کند!
مثال: کد محدودیت زیر را مشاهده می کنید:
محدودیت:
کد:
*Example
co1(i,j,l)$(ord(i) ne ord(j)).. z(i,j,l)=l=z(j,j,l);
در فرمول های بالا قواعد و قوانینی در فرمول نویسی استفاده شده اند که در بخش تابع نویسی توضیح داده خواهند شد. در صورت نیاز به این بخش ها مراجعه نمایید. در اینجا صرفاً مهارتی که در تعریف محدودیت ها کسب می کنید مدل نظر می باشد.
دقت کنید که در بخش اول تنها یک سیمی کالون استفاده می شود، در حالی که در بخش Specification پس از بیان هر معادله باید یک سیمی کالون به کار برده شود.
در معادلات و نامعادلات، دیگر از علایم ≠یا=،≤،≥ استفاده نمی کنیم. نمادهایی که در معادلات و نامعادلات در GAMS به کار می روند به قرار جدول زیراند:
از سنبل هایی که در جدول بالا معرفی شد، به ندرت پیش می آید که از =n= و =c= استفاده شود. در واقع این نمادها کاربرد خاص وتخصصی دارند.
جهت روشن تر شدن موضوع مثال زیر را در نظر بگیرید:
کد مربوط به به بخش معادلات این مدل به شکل زیر می تواند باشد:
*Example2
Equation
objective
Constraint1
constraint2
;
objective.. o=e=x1+x2 ;
constraint1.. x1*x2=l=10 ;
constraint2.. x1-x2=g=2 ;
دقت کنید که کد بالا کامل نیست و باید قبل از تعریف این معادلات متغیرهای x1 و x2 و همچنین متغیر مربوط به تابع هدف یا o قبلاً تعریف شده باشند.
بپردازیم به ادامه ی مثال کاربردی 1:
مدل تنها دو محدودیت دارد. آن ها را به ترتیب cont1 و cont2 و تابع هدف را obj می نامیم. نتیجتاً کد مربوطه به صورت زیر خواهد بود:
بحث در باب تعریف معادلات در GAMS به اتمام رسید. با اندکی تمرین و دقت می توانید به سادگی تعریف کردنِ معادلات و وارد کردن تابع هدف و محدودیت ها را فرا بگیرید. مباحث تکمیلی در همین برگه خدمت عزیزان ارائه خواهد شد.
خدمت عزیزانی که آموزش گام به گام را از ابتدا همراه با ما شروع نموده اند توصیه می شود که پس از مطالعه و مرور این صفحه، جهت ادامه مراحل آموزش به بخش دستورات نهایی مدل، در نوار کناری سمت راست (منوی داینامیک دسته بندی) مراجعه نمایند.
با تشکر
مدیریت سایت gamsbook.ir
ایمیل: Support@gamsbook.ir
شماره تماس: 3325-405–0919
با سلام و احترام
وقتتون بخیر. اینجا یک مورد در مدل دارم که در قسمت sum به مشکل خوردم که روی b ها بسته میشه ولی شرطش اینه که b ها از a تا d هستند، در صورتیکه b ها از a تا f در قسمت set تعریف شده اند.همچنین (b)w به دلیل دیگر توابع هدف و محدودیت ها از a تا f نوشته شده است.من با زمانیکه بازه یک set با عدد تعریف میشه هیچ مشکلی ندارم ولی زمانیکه بازه یک set با حروف تعریف میشه و حالا باید روی sum شرط بگذاریم مشکل دارم و دستورشو اشتباه مینویسم و مدام ارور میده.میشه لطفا برای این قسمت دستورشو راهنماییم کنید؟
با تشکر
سلام وقت بخیر
شما یه مجموعه تعریف کردین به نام b اما همین b یک عضو از خودشه. بعد d هم اسکالره و عضو یک مجموعه. قاعدتا باید ارور بده. از اسامی مناسب استفاده کنین فعلا. مشکل اگر باقی موند مطرح کنین در خدمت هستیم
لطفا در ارتباط با ارور Endogenous relational operations require model type dnlp علت وقوع ارور و روش حل آن توضیح دهید.
با تشکر
معمولا خود گمز خطی که باعث ارور شده رو معرفی میکنه. معمولا به این خاطره که تایپ مدل رو درست انتخاب نکردین که dnlp هست یا nlp.