دستور Parameter

تعدادی از بردارهای ثابت و داده های محاسباتی (چه به اندیس ها وابسته باشند چه نباشند) را با دستور Parameter تعریف می کنند. دستور کلی آن تقریبا مشابه کمیت های scalar است. فرض کنیم داده ها و بردارهای زیر را داریم:

parameter-Examples

دستورات مربوط به هر کدام از این بردارها و پارامتر ها به صورت زیر خواهد بود:

*Example1:
parameter tehran/3/;
*Example2:
parameter a/1/, b/3/, c/2.4/, alpha/0.25/;
*Example3:
parameter d/5/, e/2/, f(j)/1 3,2 0,3 6/;
*Example4:
parameter Gela(c)/c1 10,c2 100,c3 1000/;
*Example5:
parameter a(i)/(a1,a4) 4,(a5*a9) 12/;


ذکر این نکته لازم است که برای تعریف f, Gela و a به دلیل اندیس دار بودن این داده ها باید ابتدا اندیس مربوط به هر یک تعریف شده و سپس به تعریف آنها پرداخت. مجموعه های این اندیس ها را می توان به شکل زیر تعریف نمود: (این مجموعه ها باید در خطوطی قبل از دستور parameter تعریف شده باشند.


Sets j/1*3/
c/c1,c2,c3/
i/a1*a9/ ;


توسط دستور parameter می توان داده های با بیش از ۲ بُعد (۲ اندیس) نیز تعریف نمود. دو مثال زیر مثالهایی از داده هایی با ۳ بعد می باشند:

Data-Entry-Parameter-3D

توضیح: در مثال اول پارامتر multi به i,k,j وابسته است. به طوری که اگر i=1 و j=1 و k=2 باشند، multi مقدار ۳۰ را اختیار می کُند. حالَُ اگر ترکیبی مانند i=3, j=2, k=1 وجود داشته باشد، GAMS خود به خود مقدار آن را صفر در نظر می گیرد.
در مثال دوم نیز اگر آقای احمدی(مستخدم) زیر دست آقای عزیزی(مدیر) در”سازمان ۳ ” انجام وظیفه کند دستمزدی معادل ۲۰۰۰ واحد خواهد داشت.

ادامه ی مدل سازی مثال کاربردی ۱:
در صورتی که آموزش گام به گام را از ابتدا پیگیری نموده اید. ملاحظه می فرمایید که در این مثال سه بردار a و b و c موجودند. بردارهای b و c را توسط دستور parameter به شکل زیر می توانیم تعریف نماییم. (بردار a نیز به دلیل سهولت بیشتر توسط دستور Table تعریف خواهد شد- هر چند که این امر با دستور parameter هم قابل اجرا کد کردن است. علت این کار طولانی شدن و وقت گیر بودن کد نویسی مربوطه می باشد.)

parameters-Example1

دستور parameter تا حدی مورد بحث قرار گرفت. امیدواریم که گره ای از مشکلات شما در سر و کله زدن با این دستور گشوده باشیم.

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

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

ایمیل: Support@gamsbook.ir
شماره تماس: ۳۳۲۵-۴۰۵–۰۹۱۹

 

این مقاله برای شما مفید بود؟

مطالب مشابه

4 دیدگاه

  1. Mah

    باسلام و تشکر از سایت مفیدتون
    من در برنامم ۳۰ خودرو دارم که زمان ورود و خروجشون به پارکینگ رو با تابع uniform تولید کردم. حالا میخوام به نحوی تعداد خودروهایی که در زمان t وارد پارکینگ میشن رو به دست بیارم. میشه لطفا راهنماییم کنید؟ (کدم به شکل زیر هست)

    sets
    ev       number of electrical vehicles /ev1*ev30/
    t        time_period/t0*t24/
    
    parameters
    ta        arrival time 
    tp        presence time
    td        approximate departure time 
    ta(ev)=floor(uniform(6,18));
    tp(ev)=floor(uniform(5,8));
    td(ev)=ta(ev)+tp(ev);
    

    خیلی متشکرم

    1. محمودی

      سلام
      من نمیدونم کاربرد اینی که فرمودین چیه دقیقا. برا همین بهترین راه رو نمیتونم پیشنهاد بدم بهتون. ضمنا زمان t که فرمودین مقداری مجهوله. آیا t ثابت و طبق اندیس تعریف شده مثلا t=10 هست یا اینکه یه بازه ست؟ من ثابت رو در نظر می گیرم.

      sets
      ev       number of electrical vehicles /ev1*ev30/
      t        time_period/t0*t24/
      
      parameters
      ta        arrival time
      tp        presence time
      td        approximate departure time
      ;
      ta(ev)=floor(uniform(6,18));
      tp(ev)=floor(uniform(5,8));
      td(ev)=ta(ev)+tp(ev);
      
      scalar
      tt/10/
      numbers;
      numbers=0;
      loop(ev,
      if(ta(ev)=tt,
      numbers=numbers+1;
      
      );
      );
      
  2. Mah

    t به شکل اندیس تعریف شده، نشون دهنده ی بازه های زمانیه و میتونه از ۰ تا ۲۴ باشه.
    من به شکل زیر نوشتمش و درست جواب داد:

    sets
    ev       number of electrical vehicles /ev1*ev30/
    t        time_period/t0*t24/
     
    parameters
    ta        arrival time 
    tp        presence time
    td        approximate departure time 
    N_arv            the number of arrived EVs to the PL at time t
    N_dep            the number of departed EVs from the PL at time t
    ta(ev)=floor(uniform(6,18));
    tp(ev)=floor(uniform(5,8));
    td(ev)=ta(ev)+tp(ev);
    N_arv(t)=sum(ev$(ord(t)=ta(ev)+1),ta(ev)/ta(ev));
    N_dep(t)=sum(ev$(ord(t)=td(ev)+1),td(ev)/td(ev));
    

    خودم از این که تونستم اینجوری حلش کنم خوشحال شدم، گفتم با شماهم به اشتراک بذارم.
    ممنون از سایت خوبتون

دیدگاهی دارید؟