۳۱۲

تعریف متغیرها

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

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

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

variables-sample

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

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

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 یک سری ویژگی ها را می توان به یک متغیر نسبت داد. به عنوان مثال می توان گفت فلان متغیر مقداری بین فلان تا فلان دارد. در این صفحه فقط به چهار ویژگی اصلی و پر کاربرد متغیرها شامل: حد پایین متغیر، حد بالای متغیر، ثابت کردن یک متغیر و مقدار کنونی متغیر، پرداخته می شود.

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

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

کد بالا نشان می دهد که متغیر x دارای کمترین حد برابر با ۵ و متغیر y دارای حد پایین ۱۰ می باشند.

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

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

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

۳٫ ثابت کردن یک متغیر

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

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

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

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

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

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

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


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

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

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

Example1-Variable-Def

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

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

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

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

 

312 دیدگاه در “تعریف متغیرها

  1. سلام
    بابت مطالب مفیدی که گذاشتید بسیار سپاسگذارم
    اگر امکان دارد راجع به خطاهایی که هنگام اجرا کردن مدل ایجاد می شود، هم توضیحاتی قرار دهید.

      • اوکی متوچه شدم.مرسی

        من تو مدلم یه متغیر موجودی دارم که سه اندیسه است و مقدارش برای دوره صفر ثابت است
        t دوره (۳ تا دوره)
        tt دوره صفر
        i مشتری( مثلا ۲ تا مشتری)
        r کالا (۲ تا کالا)
        میخام بگم موجودیم بری دوره صفر برای هر محصولی در هر مشتری برابر یه مقدار ثابت است و برای بقیه دوره متغیره.

        چه جوری بنویسم؟
        positive variable
        I(i,t,r
        ;
        I.fx(i,tt,r

        ؟؟ مثل جدول بنویسم

        باتشکر

        • سلام
          شما اول مجموعه ها رو تعریف کنید به شکل زیر:

          set tt/0,1*3/
          t(tt)/1*3/
          ;

          بعدش متغیر I رو باید تعریف کنید و مقدار اولیه رو صفر بگیرید.
          به شکل زیر:

          variable II(i,tt,r)
          ;
          I.fx(i,"0",r)=Constant;

          تو کد بالا به جای constant اون مقدار اولیه رو قرار بدین.
          توجه داشته باشید وقتی مجموعه I هم تعریف کردید دیگه متغیر I باید اسمش فرق داشته باشه، مثلا II بشه.
          مقداری هم تو فرمول نویسی دقت کنید که t رو بزنید یا tt رو.
          موفق باشید

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

    • سلام
      بله دقیقاً همین کار رو می کنه.
      اگه مطمئنین که مقدار صفر یا یک میگیره کافیه نوع متغیر رو باینری تعریف کنین.
      اگه مطمئن نیستین که چه اعدادی رو ممکنه بگیره، شما یه متغیر آزاد باید تعریف کنین.
      به کد زیر دقت کنین.

      Binary Variable x;
      Variable Y;

      x صفر و یک بوده و y همه عددی می تونه بگیره.
      متن همین صفحه رو بخونین.
      موفق باشین

  3. سلام. ببخشید من یک سوال در مورد گمز داشتم
    من یک متغییر X دارم که free variable هست. حال می خواهم یک y تعریف کنم که اگر x>0 بود y=x شود در غیر این صورت (یعنی X<=0).
    سوال من این است آیا می شود قبل از مدل این کار را انجام داد؟ یعنی یک y تعریف کرد که شامل مقادیر مثبت x باشد؟

    • سلام
      نه
      باید تو محدودیت ها این کار رو انجام بدین. یا باید محدودیت مناسبش رو بنویسین. و یا اینکه تو یک محدودیت از دستور ifthen استفاده کنید.
      پاینده باشید

      • سلام متشکرم که جواب دادین.
        مگر در قیود هم می توان از if then .. استفاده کرد؟
        میشه یک نموه برا همان x و y که در سوالم پرسیدم بنویسید؟
        متشکرم

        • این یه مثاله:

          c1.. x=e=ifthen(t>3,y,y+1) ;

          یعنی x مساوی y هست اگر t از ۳ بزرگتر باشد. در غیر این صورت x=y+1 است.

  4. با سلام

    در صورتی که در قسمتی از محدودیت ها با متغیر ایکس با اندیس تی کار کرده باشم که اندیس آن را در قسمت مجموعه ها مثلا اعداد شامل ۱ تا ۴۰ در نظر گرفته ام آیا در صورت نیاز به استفاده از متغیر ایکس با اندیس تی منهای یک می توانم منهای یک را صرفا با اضافه کردن ان به اندیس اعمال کنم؟ چون جایی خواندم که با اندیس مثل رشته برخورد می کند و در نتیجه اگر چنین باشد اعمال منهای یک در اندیس درست کار نمی کند…
    اگرواقعا چنین است شما چه راه حلی پیشنهاد می کنید؟

    • سلام
      منها عمل میکنه. فقط به مقادیر پایین و بالای اندیس دقت کنین که مثلا صفر نشه اندیسه. از دستورای شرطی استفاده کنین

  5. سلام و خسته نباشید
    من یک سوال در مورد تعریف متغیر داریم .کلا بحث اینه که دو سری مجموعه داریم E1 و E2 که هر کدومشون تعدادی عضو دارند حالا می خواهیم یک مقدار به یکی از عضوهای E1 اضافه کنیم و مقداری دیگه از تمام اعضای E1و E2 کم کنیم بطوریکه مجموع مقادیر کم شده برابر با اون مقداری باشه که اضافه شده و قاعدتا مقداری رو که می خواییم اضافه کنیم باید برای واحد تحت ارزیابیمون تعریف کنیم. مشکل اصلی تعریف اون متغیر اضافه شده برای واحد تحت ارزیابی است که فقط به خروجیشم اضافه باید بشه .چه جوری باید این متغیر رو معرفی کنم که بفهمه فقط مربوط به خروجی , تحت ارزیابیه؟

    ممنون میشم راهنمایی کنید.البته دو اندیسه هم است.یک اندیس مربوط به واحد تحت ارزیابی یکی هم مربوط به خروجی ها.

  6. با سلام
    این عبارت که متغیر ایکس با اندیس آی و تی داشته باشم و بخواهم بنویسم به ازای آی برابر با یک و هر مقدار تی متغیر صفر شود را چگونه بنویسم؟
    پیشاپیش از توجه شما سپاسگزارم

    • سلام
      این روششه. بعد تعریف متغیر x به شکل زیر بنویسین:

      variable x(i,t);
      x.fx("1",t)=0;

      توجه کنین که fx همون fix کردن یک متغیر هست.
      پاینده باشید

  7. یک برنامه ای دارم می نویسم که یک سری متغیر دو اندیسه را باید بده به عنوان مثال beta(i,j) وقتی این متغیر رو معرفی می کنم اررورuncontrol set entered as constant می ده.
    کلا چه جوری باید این متغیرهای دو و یا چند اندیسه را معرفی کنم.ممنون میشم به سوالم جواب بدین

    • سلام
      مشکلی نداره تعریف یه متغیر. فقط حواستون باشه که سیمیکالون هاتون رو همیشه و با دقت بذارین. معمولا دستور table مشکل واسه متغیر ها ایجاد میکنه. اینو یادتون نره. بعد هر دستوری = سیمی کالون.
      مثالهای تعریف متغیر تو همین تاپیک موجودن

  8. با سلام و ضمن تشکر از راهنماییهای مفیدتان
    متغیر عدد صحیح در برنامه ام تعریف کرده ام که در راهنماهای موجود برای گمز نوشته شده که به صورت پیش فرض برای متغیری که از این نوع تعریف شود مقادیر ۰ تا ۱۰۰ را در نظر می گیرد. چگونه حد بالای این محدوده را تغییر دهم؟
    پیشاپیش سپاسگزارم

    • شما یکی از حدود رو دارین. اگه مینیمم سازی باشه، پس شما مینیمم تابع رو دارین. واسه بدست آوردن ماکسیمم کافیه که تو یه محدودیت، مقدار تابع هدف رو کوچکتر مساوی یک متغیر آزاد قرار بدن. تو حالت بهینه برابر ماکسیمم میشه

  9. سلام وخسته نباشید
    من نرم افزار گمز و متلب رو لینک کرده ام و به راحتی می توانم از متلب یک عدد اسکالر را به Gams بفرستم و سپس نتایج شبیه سازی رو به متلب برگردانم.
    ولی الان نیاز دارم یک ماتریس بفرستم و در Gams به یک Table تبدیل کنم. حال موندم چطوری در گمز یک Table خالی بنویسم.
    میشه کمکم کنید؟ خیلی سپاسگذارم
    من خودم این دستورو مینویسم ولی وقتی از متلب داده میفرستم جدول رو پر نمیکنه.
    sets i /1*2/
    j/1*32/;
    Table Y(i,j)
    / 1
    1
    ;

  10. سلام
    خسته نباشید
    من مدلم را براتان ارسال کردم ولی جوابی ندادین و برای انجام پروژه هم هرچه تماس گرفتم کسی گوشی بر نمی داره.

  11. سلام
    تشکر از مطالبتون
    در قسمت ۴٫ مقدار کنونی یک متغیر دستور داده شده اشتباه است.لطفا اصلاح فرمایید.
    دستور از ۳٫ ثابت کردن یک متغیر

    * How to assign a attribute to the variables
    variable x ;
    x.fx=5 ;
    variable y(j) ;
    y.fx(j)=10; کپی شده

  12. سلام . نرمالیزه کردن در توابع هدف به چه صورت است.من در مدل ریاضی پایان نامه ام دو تا تابع هدف دارم که در کد گمز باید نرمالیزه بشند به چه صورت باید این کار را انجام بدم.لطفا راهنمایی بفرمایید تشکر

      • مرسی

        مدلم مسیریابی داره…برای داده های کوچیک ران کردم…متغیر رو صفر و یک درمیاره…ولی داده ها مو بزرگ میکنم…پیوسته در میاره

        با minlp حل کردم….

        احتمال داره ایراد از لایسنس باشه؟ مثلا گمز و لایسنس بهم نخورن؟

        • سلام
          اگه جواب داده که خیر همچین مشکلی وجود نداره. مشکل نشدنی بودنه ظاهرا
          خواهش میکنم

        • اشکالشو فهمیدم..محدودیت غیر خطی داشت. که باعث شده بود گمز برای مثالهای بزرگتر جواب اشتباه بده…وقتی خطی کردم درست شد. البته با محدودیتهای غیر خطی، مثالهای کوچیک حل میشند ولی جوابشون شدنیه…بهینه نیست

          فقط یه سوال. من مثالمو بزرگتر تر از ۲۰ مشتری میکنم گمز ۱۶ دقیقه حل میکنه بعدش بدون اینکه جوابی بده متوقف میشه…بخش solvar نیست..مشکل از چیه؟

          باتشکر

        • سلام
          شرط توقف در گمز یکیشون زمانه. به صورت دیفالت گمز هزار ثانیه یا ۱۶ دقیقه متوقف میشه.
          خواستین بیشترش کنین کد زیر رو به اول مدلتون اضافه کنین:

          Option reslim=3600;

          3600 یعنی بعد انقد ثانیه متوقف شو
          خواهش میکنم

  13. با سلام
    قبل از هر چیز از مطالب مفیدی که در سایت قرار می دهید تشکر می کنم. من یک سوال در مورد تعریف متغیرها دارم. یک مجموعه ۳۵ عضوی برای j دارم که یکی از متغیرهای مدل تنها می تواند مقادیر ۱۰و۱۳ و ۱۵ را از بین این مجموعه اختیار کند. چگونه می توان بیان نمود که این متغیر تنها به ازای اندیس های فوق برقرار است.
    ممنون

    • سلام
      روش اول، برای اینکار باید از ابتکار عمل داشته باشین. میتونین متغیر رو به ازای j تعریف کنین و این متغیر رو روی یه مقدار که وجودش رو بی معنی میکنه فیکس کنین (مثلا بگین که مقدارش ۱۰۰۰۰۰ میشه و اگه این بشه تاثیری رو جواب نداشته باشه) بعد تو خط بعدی بگین که همین متغیر به ازای ۱۰و۱۳و۱۵ مقدار (level, .L) منطقی رو بهش بدین. چون اگه این کارو بکنین به مدل اجازه میده که به متغیر به ازای این سه عدد بتونه مقدار بده.
      روش دیگه اینه که همچین متغیری تعریف نکنین و صرفا سه متغیر دیگه تعریف کنین و تو دهنتون مثلا x1 رو همون x(“10”) بگیرین و بقیه ماجرا
      روش دیگه اینه که این متغیر رو تعریف کنین. مثل X(j) و j رو هم با مثلا jj آلیاس alias کنید. بعد هرجا x(jj) و j داشتید با استفاده از شرط بگین که jj باید برابر این سه تا باشه
      روش چهارم اینه که بعد اینکه مجموعه رو تعریف کردید، یک مجموعه دیگه تعریف کنید که زیر مجموعه مجموعه اولی باشه و فقط این سه عو توش باشه. مناسب ترین روش احتمالا روش آخره
      چقد زیاد شد
      موفق باشید

  14. سلام
    من متغیرکمکی رو تعریف کردم ولی نمی خواهم اون مقدار مثبت بگیره پس باید متغیر متناظر دوال اون محدودیت مقدار مثبت داشته باشد تا شرط مکمل قوی برقرار باشه چطور می تونم بیان کنم که متغیر دوال متناظر با این قید باید بیشتر از یه عدد ثابت باشه.بعنوان مثال اگر SI متغیر باشه می خواهم در محدودیت اول (CONST1) متغیر متناظر این قید یعنی v1 مثبت بتشه بعبارتی SI.M مثبت باشه چطور میشه این کار رو انجام داد

    • سلام
      بله میشه
      جولبتون دقیق نیست. Solver گمز نتونتسته مقدار شدنی پیدا کنه، اجبارا فرض صحیح بودن متغیر رو ازاد سازی کرده

  15. سلام
    من میخوام در مدلم یکی از متغیرهای باینری رو ریلکس کنم. یعنی فقط یکی از متغیرهای باینریم بجای ۰ یا ۱، مقداری بین ۰ و ۱ داشته باشه. میشه راهنماییم کنید؟
    ممنون

    • سلام
      نوع متغیر رو positive تعریف کنید و برای upper bound و lower bound تعریف کنین.
      برای اطلاع از این دو ویژگی به بخش متغیرها مراجعه کنین
      موفق باشین

      • این کار رو کردم، اما مدل من خیلی بزرگ هست و زمان حل برام خیلی مهمه، با این کار زمان حل خیلی بیشتر شد! گفتم شاید دستوری باشه که بشه بعضی از متغیرها رو ریلکس کرد.
        تشکر

  16. سلام و تشکر از سایت و پاسخگویی بی نظیرتون.
    من یه سوال در مورد تعریف اندیسها دارد.
    فرض کنید یه مجموعه U دارم که اجتماع دو مجموعه I و L هست. تا اینجاش رو همونطور که خودتون گفته بودین نوشتم.

    کد این قسمت و تو کامنت بعدی گذاشتم

    حالا برای اینکه مشخص کنم مثلا هرجا ۱ تا ۳ استفاده شد، منظورم مجموعه I بوده و هرجا اندیس ۴ تا ۸ استفاده شد، منظورم مجموعه L بوده، باید چیکار کنم. چون فرض کنید یه مسأله مسیریابی داریم که همه نقاط تو مجموعه U اومده و وقتی داریم جدول فاصله رو تعریف می کنیم، فاصله همه گرهها رو توش نمایش میدیم. اما گاهی فقط با مجموعه i که مثلا انبارها هست سروکار داریم. ممنون

    • سلام
      ممنون و خواهش میکنم
      کافیه که تو اون محدودیی که متغیر یا پارامتری که استفاده میکنین، به جای u بذارین i یا L.
      یعنی شما یه بار مثلا x(u) رو تعریف میکنین، سری بعد مثلا تو محدودیت اول باید فقط مقادیر i رو بگیره. پی اونجا میزنین x(i).
      به همین سادگی

  17. خیلی ممنون از جواب سریعتون. من البته یه کار دیگه کردم، اونحایی که set تعریف میشه، اندیس ها رو دستی و برای j از ۱ تا ۳ و برای i از ۴ تا ۸ گذاشتم و درست شد. خیلی ممنون.
    یه سوال دیگه هم دارم، من دو متغیر دارم که یکیش غیر منفی (non negative) و اون یکی باینریه. میخوام در صورتی که متغیر اولم مقدار بزرگتر از صفر میگیره، متغیر دومم مقدار یک بگیره و در صورتی که متغیر اولم صفر میشه، دومی هم صفر بشه. میخوام به صورت محدودیت بنویسمش.
    سوالم OR ایه، میدونم ولی احتمالا شما میتونین جواب بدین.
    بازم ممنونم

  18. سلام من یه پروژه گمز دارم موقعی که اجراش می کنم این ارور رو میده شما می دونید مشکل چی هست و مربوط به اعداد هست یا اینکه محدودیت ها؟ واقعا ممنون میشم راهنمایی کنید..

    generating MINLP model test
    Error at line 123: Equation infeasible due to rhs value
    United_8.gms(153) 4 Mb 1 Error
    ...

    • سلام
      مسئله شما نشدنی هست، فضای شدنی رو بررسی کنین. یک یا چندتا از محدودیتا تناقض دارن با هم.
      اول بیاین یه محدودیت رو در نظر بگیرین، کن کم زیادشون کنین، اونجا مشخص میشه مقداری که کدوم یک از محدودیتا داره مشکل ایجاد میکنه.
      سر به سرش بذارین مقداری

      • مرسی که راهنمایی کردین.
        همین کاری که گفتین انجام دادم بعد ۸ تا از محدودیتام مشکل داشت و حذفشون کردم و اجرا که کردم یه جواب بهم داد.
        بعد یه سری تغییر توی داده هام ایجاد کردم، محدودیتارو اضافه کردم دیگه مشکل نداشت ولی جوابی که میده همون مقدار اولیه هست که بدون اون محدودیتا هم همون بود. در حالی که محدودیتای تاثیر گذاری هستن و به نظرم این یه کم غیر منطقیه.
        حتا یه دونه از محدویتام مشکل داشت و دوباره و بدون تغییر، اجراش کردم و دیگه مشکل نداشت! امکان همچین چیزهایی هست یا مشکلی در کل وجود داره؟
        ممنون

        • سلام
          اینکه همون جواب اولیه رو بده مقداری غیر منطقیه، چون احتمالش در حد صفره. پس شما ناحیه شدنیتون مقداری ممکنه مشکل داشته باشه، به قولی تنگ تر کنین محدودیتا رو

  19. با سلام
    من یه محدودیت دارم که باید خطی بشه . ولی تو محدودیت متغیر لگاریتمی دارم. جطور می تونم تغییر متعیر رو اجرا کنم. مثلا فرض کنیم در محدودیت اول داشته باشیم
    log x1+ x2=L=10
    چطور می تونم تغییر متغییر بدم. مثلا
    t=log x1
    تا محدودیت به فرم t+x2=l=10 تبدیل شودو خطی شود.
    با تشکر

    • سلام
      همین روشتون صحیحه. ولی باید t رو متغیر تعریف کنین. و به حدود واقعی t توجه کنین! مقداری دقت کنین بهش. بعد اینکه برنامه هم جواب داد، یه پارامتر به اسم x1 تعریف کنین و مقادیر t رو به x1 تبدیل کنین
      موفق باشین

  20. سلام
    یک سوال داشتم بزرگوار

    من یک ست به این صورت تعریف کرده ام
    set i pump /1,2/ I
    الان اگر بخوام به پمپ یک و ۲ دو هر کدام یک عدد مجزا بدهم چطور باید آدرس دهی کنم؟
    چون اگر اینجوری بنویسم p(i).L=4
    هم پمپ۱ رو ۴ در نظر میگیره هم پمپ۲ رو
    اما من میخوام به پمپ ۱ مقدار ۴ بدهم و به پمپ۲ مقدار۱۰

    ممنون میشوم راهنماییم کنید
    متشکرم

  21. سلام شبتون بخیر واقعا شرمنده ام من دوباره مزاحمتون شدم سؤالی داشتم از حضورتون
    اگر یک متغیر داشته باشیم به نام (X(i,j,k,t که باینری هست و این محدودیت برای هر (i,j) عضو (E(i,j برقرار باشه (عرض کرده بودم خدمتتون که (E(i,j زوج مرتب های (i,j) هست که در اون i از j کوچیکتره) و در اون i باید مخالف صفر باشه، حالا یک متغیر دیگه داریم به نام (X(0,j,k,t که فقط مقادیر ۰ و ۱ و ۲ رو می تونه شامل بشه.من این دو محدودیت رو نمی دونم چطور تعریف کنم اگر کمکم کنید ممنونتون میشم.

    • سلام
      ببینید شما می تونید که i1 رو به عنوان مجموعه مرجعتون تعریف کنین. این محموعه مرجع شامل مقادیر i هست به علاوه مقدار صفر. پس شما بهتره مجموعه i رو زیر مجموعه i1 تعریف کنین. به این شکل: (فرض کنیم که i از یک تا ده باشه)

      set i1/0,1*10/
      i(i1)/1*10/;

      بعد شما نیاز دارین که X رو تعریف کنین. x رو هم به صورت زیر می تونین تعریف کنین. این تعریف به شما این امکان رو میده هرجا بخواین ۰ رو به کار ببرین یا i رو:

      variable x(i1,j,k,t)

      برای اطلاعات کاملتر، بخش مجموعه ها رو کامل بخونین.
      سوالی داشتین در خدمتیم

      • سلام جناب محمودی،ممنون از پاسخگوییتون. فکر کنم شما متوجه منظور بنده نشدید سوال من اینه که ما فقط توی محدودیتها با دستور $ روی دامنه ها شرط می ذاریم ولی الان من این شرطو میخوام توی تعریف متغیر بذارم مثلا توی تعریف متغیر من (X(i,j,k,t عضو مجموعه {۰و۱} هست ولی جلوش این شرط رو داریم که :
        (i,j)∀ که عضو (E(i,j هستش و i≠۰ و هر k عضو K و هر t عضو T
        مشکل من اینه این متغیر تو هیچ محدودیتی نیست که اگر بود من این شرطها رو همونجا براش میذاشتم و این متغیر فقط توی تابع هدف تعریف شده.من این شرطایی که جلوش هست رو نمی دونم کجا براش تعریف کنم.
        و اینکه قسمت دوم سؤالم اینه که همین متغیر در صورتی که i برابر صفر باشه یعنی (X(0,j,k,t علاوه بر مقادیر ۰و۱ مقدار ۲ رو هم می تونه اختیار کنه بنظرتون برای تعریف این متغیر بصورت زیر بنویسم درسته؟
        /set j/1*5
        /set jj/0
        (semiint variable X(jj,j,k,t
        X(jj,j,k,t).lo=0
        X(jj,j,k,t).up=2

        • سلام
          ببینید تو قسمت متغیر، شما نمیتونید این شرط ها رو بذارین. به یاد داشته باشین یه متغیر فقط وقتی تو معادلات استفاده میشه معنی پیدا میکنه. پس شما یه بار X رو تعریف میکنین، تو مرحله بعد، هر جا X استفاده بشه شرط رو می تونین براش بذارین.
          سوال دوم، بله همینی که تعریف کردین درسته. فقط دقت کنین که هر چی کدتون ساده تر باشه ویرایش و فهمش آسون تره. پس خیلی ساده تعریف کنین X1(i,j,k,t) به یک متغیر باینری هست و متغیر x2(j,k,t) یک متغیر شبه صحیحه.

  22. سلام
    سوال داشتم از حضورتون

    من میخواستم یک متغیر رو محدود کنم مثل نرخ بهره که حد بالا و پایین داشته باشه اما وقتی حد بالا و پایین تو بخش اسکار میذارم دستگاه حل نمیشه. دلیلش اینه که من ۱۵۷ متغیر و ۱۵۷ مجهول دارم اما دستگاه میگه متغیرهای آزادت کمه البته جفتش رو ۱۵۷ نشنون میده

    SCALAR
    ROWCLOS rest-of-world closure /1/;
    FSAV.FX = FSAV0;
    EXR.LO = -INF;
    EXR.UP = +INF;
    EXR.L = EXR0;

    RT.LO = 0;
    RT.UP = 0.21;
    RT.L = RT0;

    در بخش جواب هم اینو میگه


    MODEL STATISTICS

    BLOCKS OF EQUATIONS 48 SINGLE EQUATIONS 157
    BLOCKS OF VARIABLES 46 SINGLE VARIABLES 157
    NON ZERO ELEMENTS 583 NON LINEAR N-Z 254
    DERIVATIVE POOL 10 CONSTANT POOL 105
    CODE LENGTH 772

    **** Unmatched variable not free or fixed
    RT

    **** Counts do not match
    Single equations in unmatched =E= blocks 157
    Unmatched single free variables 156

    **** Unmatched free variables = 156

  23. خیلی شرمنده انقد سوال میپرسم اما تنها در صورتی که کد محدودیت رو این

    RT.LO = -INF;
    RT.UP = +INF;
    RT.L = RT0;

    بزنم قبول میکنه و جواب میده.

    در غیر این صورت میگه تعداد معادلاتت از مجهولاتت بیشتره. در واقع با این حد بالا و پایین گذاشتن واسه متغیر دستگاه حل نمیشه چون فکر میکنه یک متغیر کم شده.

    • سلام
      model type رو CNS گذاشتین؟ یا شایدم MCP؟
      فرض میکنم از این دو استفاده کردین. ببینین MCP این محدودیت گذاشتن رو قبول نمیکنه! باید کاملا آزاد باشه متغیرتون. به جاش سعی کنید که یه معادله دیگه به فرمول هاتون اضافه کنین به شکلی که این محدودیت بازه رو که میخواین برای متغیر اعمال کنین رو نشون بده. دیگه با ابتکار خودتون.
      اگه اینا رو نتونستین یه کار دیگه هم میشه کرد. اینکه شما یک متغیر رو optimize کنین با ی چیزی مث dnlp. فعلا گذارش رو بدین تا عرض کنم

  24. سلام،بله شما درست می فرمایید الان متوجه اشتباهم شدم راستش من یک محدودیت دارم که این متغیر توی اون استفاده شده ولی چون این محدودیت برای هر زیرمجموعه ۲ تایی و ۳ تایی و … از مجموعه j باید برقرار باشه استادم به من گفت که چون ممکنه loop ایجاد بشه من این محدودیتو تو مدلم نذارم و در آخر که جوابهامو از مدل گرفتم بصورت دستی بررسی کنم که آیا این محدودیت نقض میشه یا نه؟حالا نمی دونم این کارو بکنم یا نه چون فکر کنم به احتمال زیاد بیشتر جوابهام توسط این محدودیت نقض بشه
    امکانش هست من این محدودیتو براتون اینجا بنویسم تا شما نظرتونو راجع بهش بفرمایید؟شرمنده م ممنون میشم از لطفتون

    • سلام
      این کار حتی اگه یه جواب نشدنی هم به وجود بیاد باز اشتباهه. چون هدف از مدلسازی، ارائه مدلیه که بقیه هم بتونن بهش استناد کنن.
      بفرستین ببینم چجوریه

      • سلام،وقتتون بخیر
        N مثلا مجموعه {۰,۱,۲,۳,۴,۵} و E مجموعه ی (i,j) هایی هست که در اون i,j عضو N هستن و i<j هستش. (E(S هم مجموعه ی (i,j) هایی از E هست که در اون i,j عضو S هستن(S زیرمجموعه N هستش.(X(i,j,k,t و (z(i,k,t هم هر دو متغیرن.
        حالا محدودیت من اینه

        ((sum(i$S,z(i,k,t))-z(e,k,t)=g=sum((i,j)$E(S),X(i,j,k,t

        و این محدودیت برای هر S زیرمجموعه N که حداقل دو عضو داشته باشه(ینی مجموعه های ۲ تایی و ۳ تایی و … و ۶ تایی) و برای هر e عضو مجموعه S و برای هر k و t برقرار هست.
        ممنون ازتون

        • مرسی همچنین.
          مجموعه E رو عرض کردم خدمتتون تو یکی از کامنتا.
          الان مهمترین چیزی که نیاز دارین، تعریف مجموعه s هست. این مجموعه رو میتونین با استفاده از کامنتی که برای آقای غفاری در بخش مجموعه ها گذاشتم تعریف کنین.
          درصورتی که S رو خوب تعریف کنین، فکر میکنم با این اوصاف تمام اون چیزی که نیاز دارین رو فهمیدین. اون کد رو تو گمز کپی کنین و یه بار ران کنین و نتایجش رو ببینین. بعد میفهمین چیکارش کنین
          موفق باشین

        • سلام و وقت بخیر.براتون کامنت گذاشته بودم و اون محدودیتو توضیح داده بودم ولی مثل اینکه نرسیده دوباره براتون می نویسمش.
          یک مجموعه به اسم N داریم که مثلا شامل اعداد {۰,۱,۲,۳,۴,۵,۶} هستش. E مجموعه ای از زوج مرتب های بشکل (i,j) هست که در اون i,j هر دو عضو N هستن و i<j هستش.
          (E(S هم مجموعه (i,j) هایی از E هستش که در اون i , j عضو مجموعه S هستن.(فرض می کنیم S زیرمجموعه N هستش). در ضمن (X(i,j,k,t و (Z(i,k,t هر دو متغیر هستند.

          حالا محدودیتی که من دارم به این شکل هستش:

          (sum((i,j)$E(S),X(i,j,k,t))=l=sum(i$S,Z(i,k,t))-Z(e,k,t

          و این محدودیت به ازای هر S زیرمجموعه N که اندازه ش بزرگتر مساوی ۲ هست برقراره(ینی زیرمجموعه های ۲عضوی و ۳ عضوی و… تا ۶ عضوی) و برای هر e عضو مجموعه S , هر k و هر t ای برقراره.
          میشه لطفا کمکم کنید.خیلی خیلی ممنونتون میشم

  25. سلام و خسته نباشید. چند سوال دارم که ممنون میشم توضیح بدین.

    ۱٫ در حالتی که مساله دو هدفه باشه، روش اپسیلون به چه صورتی هست و باید چیکار کنیم؟

    ۲٫ و اینکه نتایجی که تولید می کنه به صورت چندهدفه هست؟یعنی هربار اجرا به تعداد اهدافمون عدد میده؟

    ۳٫ و در ابعاد کوچک مساله، معمولا توی مساله های تک هدفه، جواب متلب و گمز برابری می کنه، حالا با توجه به اینکه کد متلب هربار بیشتر از یک جواب میده، این برابری به چه صورتی باید باشه؟

    خیلی ممنونم

    • سلام
      ۱٫ خب مدل رو طبق متدی که ارائه شده کد می کنین و ازش جواب میگیرین.
      ۲٫ به تعدادی که مسئله رو تقسیم میکنین جواب برای تابع هدفاتون ارائه می ده. مثلا برای هر کدوم ده عدد بهتون میده
      ۳٫ کد متلب اگه منظورتون الگوریتم های فرا ابتکاری و ابتکاریه، این جوابا دقیق نیستن هر چند ممکنه جواب دقیق رو بدن. کلا هر وقت بخواین دو رویه رو با هم مقایسه کنین باید مقیاس داشته باشین، بعضی مقیاس ها شامل اینا هستن: زمان حل توسط هر رویه، تعداد تکرار برای رسیدن به جواب، گپ هر کدام در یک زمان مشخص و …
      خواهش میکنم و موفق باشین

  26. سلام . وقتتون بخیر و ممنون از این همه وقتی که میزارین
    یه سوالی داشتم . خواستم بپرسم علامت دلار یا همون $ برای چه موقعی استفاده میشه ؟
    من تو مدلم یه مجموعه ای رو تعریف کردم که در اونS>(d(i,j))
    حالا میخوام در یک سامیشن به عنوان کران پایین، j رو عضو این مجموعه تعریف کنم
    میشه کمکم کنید ؟

    • سلام
      دقیقا نفهمیدم سوالتون رو، ولی علامت دلار برای شرط گذاشتن برای گمزه. مثالهایی که به دردتون میخوره تو کامنت های مختلف تو سایت اومده. در هر حال در خدمتم

  27. با سلام
    برای تحلیل حساسیت در نرم افزار گمز (از طریق کدنویسی عادی)، می بایست ابعاد مدل ریاضی را چندین بار بزرگ کنم که چندین جدول بزرگ با اعدادی تصادفی در یک رنج خاص می خواهد. برای وارد کردن جدول اعداد تصادفی(مثلا از روی اکسل) چه فرمول هایی باید به کد گمز اضافه گردد؟
    با تشکر فراوان

  28. سلام،
    من توی گمز خیلی مبتدی ام. یه سواله هرجا میگردم جوابشو پیدا نمیکنم. اگر بخوام بنویسم جمع Xi,j ها به شرطه که i با j برابر نباشد، موقع استفاده از sum چجوری شرط برابر نبودنو بیارم؟ اصلاً علامت نا مساوی تو گمز چیه؟
    با تشکر

  29. سلام
    من میخوام مقدار اولیه یک متغیر رو در زمان صفر برای گمز تعریف کنم، طول دوره زمانی ۲۴ ساعت، و میخوام در زمان صفر مقدار ثابتی به یکی از متغیرهای وابسته به زمانم بدم
    اما متاسفانه به مشکل خوردم، اگه لطف کنید راهنمایی کنید ممنون میشم…

    t /1*24/

    • سلام
      یه t1 تعریف کنین که t زیر مجموعه اون باشه

      Set t1/0*24/
      T(t1)/1*24/;

      بعد به اون t1=0 مقدار اولیه بدین. دقت کنین که متغیر هم باید به ازای t1 تعریف بشه.

  30. سلام
    یه کد نویسی انجام دادم که الان که کامل شده جواب شدنی می ده ولی متغیر های تصمیم باینری رو منفی و اعشاری می دهد؟؟ چرا ؟ چطور درست می شه؟

      • تغییری ایجاد نشد، در ماتریس متغیرهای تصمیم باینری تعدادی ۱ و مابقی اعداد اعشاری مثبت و اعشاری منفی هستند!
        آیا در صورتی که z آزاد در علامت باشد جواب داریم و منفی است؟ z باید آزاد در علامت در نظر گرفته شود؟

  31. با سلام و تشکر از زحماتتون
    در صورتی که روی یک متغیر شرط داشته باشیم و در equation لحاظ کنیم روش چیست؟
    مثلا اگر متغیر Pi بزرگتر از متغیر Pj باشد از رابطه زیر استفاده شود:
    P=sqrt Pi-Pj , و در غیر اینصورت P=sqrt Pj-Pi

    • سلام
      یه مجموعه مرجع تعریف کنین که همه این مجموعه هایی که g و h شامل میشن رو شامل بشه، بعد g و h رو از رو اون انتخاب کنید. یا میتونین x رو به صورت x(*,*,k) تعریف کنین و هر بار چیزی که میخواین رو به کار ببرین. اگه جوابتون رو نگرفتین بیشتر صحبت کنید در مورد مجموعه ها و چگونگی استفاده شون.

      • مرسی از کمکتون
        برای وارد کردن ∀s⊂i∪j∪k ,i∪j⊆s
        و xghv≥۱ ∑ که h∈{i∪j∪k}-s,g∈s,v∈V باید چطوری مجوعه ها و محدودیت رو وارد کنم؟

        • i و j و k رو تعریف کنید.
          بعدش با دستور زیر اینا رو اجتماع بگیرید ازشون.

          set s/set.i,set.j,set.k/

          بعد:

          c1(g,h,v)$(ord(h) ne ord(g)).. x(g,h,v)=g=1;

          دقت کنید که باید s,h,g هر سه آلیاس هم باشن.
          جهت اطلاعات بیشتر به بخش مجموعه‌ها مراجعه کنین.

  32. سلام
    میشه یک مقدار در مورد تحلیل حساسیت توضیح بدید؟ مثلا برای یک محدوده خاص گمز یه فناوری را انتخاب میکنه میخوام بدونم در چه محدوده ایی این انتخاب پایدار ؟ ایا کد خاصی داره یا دستی باید عوض کنیم ؟

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

  33. فرض کنید قرار از بین چندین فناوری با توجه به هزینه و بازده و… برای رسیدن به یک هدف خاص مدل بنویسید که اطلاعات فناوری ها داده های مشخص هستند اما فناوری ها در سه نوع دسته قرار میگیرند که قراره مدل بگه کدوم فناوری ها با توجه به شرایط بهم متصل بشن تا هزینه کل سیستم کمینه باشه. متغیر های انتخاب اتصال باینری است. حالا سوال من اینکه برای اینکه مدل توانایی اتصال موازی فناوری یا سری رو داشته باشه باید چه کار کنم؟فکر کنم منجر به ضرب متغیر های باینری در هم میشه که مسئله رو غیر خطی میکنه اگه مثلا ۳-۴ متغیر باهم ضرب شه گمز میتونه حلش کنه؟ممنون میشم با جزئیات توضیح بدید چون من تازه با گمز کار کردن رو شروع کردم.
    سپاس

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

  34. با سلام و ضمن تبریک سال نو
    با توجه به اینکه برای تعریف توان دوم یک متغیر باید از علات ** در گمز استفاده کرد، اما بنده پس از استفاده این علامت ، در خروجی نرم افزار ضریب متغیر مربوطه را صفر کرده (به جای اینکه به توان دو برساند) در نتیبجه جوابی بدست نمیدهد.
    کد به صورت زیر است:
    eq9(j)..(v2(j))**2=g=a(‘3’,j)*r(j);
    ولی در خروجی به صورت زیر نشان داده میشود:
    —- eq9 =G=

    eq9(1).. (0)*v2(1) – 20*r(1) =G= 0 ; (LHS = 0)

    eq9(2).. (0)*v2(2) + 35*r(2) =G= 0 ; (LHS = 0)

    eq9(3).. (0)*v2(3) – 14*r(3) =G= 0 ; (LHS = 0)

    لطفا کمکم کنید.;)

      • در حالت کلی هم هنگامی که یک متغیر به توان دو را مینویسم ، (حتی بدون سایر محدودیتها و …) نمیتواند توان دو را نشان دهد و به جای آن ضریب را صفر میگذارد.(در حالیکه استفاده از علامت ** برای اعداد چنین مشکلی را پیش نمیاورد.)
        با تشکر

        • سلام
          جالبه. منم الان دقت کردم. کد زیر رو کپی کنین و ران کنین. هر بار به جای ۱+x یه عدد دیگه بذارین. هر سری سر خود یه عددی میده که منم نمیفهممش.

          positive variable x;
          variable z;
          equation obj;
          obj.. z=e=(1+x)**2;
          model a /all/;
          solve a using nlp minimizing z;
          display z.l,x.l;

          منم نمیدونم چرا. شرمنده. دوستان اگه بلدین همینجا بگین.
          خب به دردتون هم فک نکنم بخوره جوابش بهار خانم

  35. با سلام و ادب
    خسته نباشی استاد

    اگر در تایع هدف، یک پارامتری همانند d(i,j,t) در مخرج کسر وجود داشته باشد که برخی از آرایه های آن صفر باشد، سبب می شود تابع تقسیم بر صفر شود و ارور دهد.
    شرط $ را باید کجا نوشت؟
    تمام کامنتا رو بررسی کردم، دیدم همیشه در محدودیت شرط گذاشتید، آیا در توی تابع هدف، در کجا باید شرط کجاست؟

    OF1 .. z1=e= sum((i,j),ATAW(i,j,t)/d(i,j,t))

    • سلام.
      اولا تو دستور sum اندیس t رو فراموش کردین. ثانیا اینجا:

      sum((i,j,t)$(d(i,j,t) ne d(i,j,t)),.....)

      این یکی از کارایی هست که میتونید انجام بدید.
      موفق باشین

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

      • سلام
        خیلی ممنون از پاسختون
        محدودیت های فعلی این ها هستند که برای کنترل ظرفیت یک بخش از سیستم در هر لحظه از زمان هست که زمان را به صورت مجموعه ای از اعداد گسسته در نظر گرفتم:

        c13(t,p) .. Big_number*abs(t-landa(p))=g=1-aa(t,p);
        c14(t,p) .. abs(t-landa(p))=l=(1-aa(t,p))*Big_number;
        c15(t,p) .. Big_number*abs(t-mio(p))=g=1-bb(t,p);
        c16(t,p) .. abs(t-mio(p))=l=(1-bb(t,p))*Big_number;
        c17(t,p) .. sum((tt,p) $ (ord(tt)<t+1),aa(tt,p))-sum((tt,p) $ (ord(tt)<t+1),bb(tt,p))=l=Qauc;

        متغیرهای aa و bb متغیرهای صفر و یک هستند که بررسی میکنند آیا پالت p در لحظه t به سیستم وارد و از اون خارج شده یا نه
        من تنها راهی که به ذهنم میرسه اینه که جاهایی که از t به عنوان متغیر استفاده کردم جاش l(t) رو بزارم و در پارامترها l(t) را به صورت نظیر به نظیر با t تعریف کنم ولی با توجه به زیاد بودن تعداد بازه های زمانی این کار خیلی سخت میشه.
        خیلی ممنون

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

  37. سلام
    می خواستم بدونم مقایسه پارامتر و اندیس در گمز غلطه؟

    loop(j,
    if(a(“1”,j) = 1,
    cnt = 0;
    ******while(cnt > j,
    cnt = cnt + 1;
    );
    b(“1”,j) = cnt;
    );
    );
    ممنون می شم کمک کنید

  38. سلام و وقت بخیر
    اگر در یک سیگما، حد بالا یک متغیر باشه چطوری میشه به عنوان مجموعه تعریفش کرد؟
    در واقع تعداد دوره های زمانی در مسئله بعنوان متغیر تعریف شده و میخواهیم سیگمای یه متغیر دیگر با اندیس زمان را برای کل دوره های زمانی حساب کنیم. (این سیگما هم در محدودیتها هست و هم در تابع هدف)
    یه راه خلاقانه؟؟؟؟!!!!
    متشکرم


    • – S = Sum((i,j)$(q(i,j)>0),q(i,j));

      مثلا در خط بالا برای جمع شرط گذاشته ! شما هم می تونین این جوری تعریف کنین یا اینکه از حلقه ها استفاده کنین. اینکه به طور مستقیم حد بالا سیگما متغیر باشه امکان نداره

      • جهت تکمیل فرمایشات خانم رمضانی،
        شما دو راه اساسی دارین (حداقل من فعلا اینا به ذهنم میرسه):
        یا اینکه مث خانم رمضانی که فرمودن لوپ تعریف کنین و هر بار اضافه کنین ببینین کدوم بهینه ست.
        یا اینکه اگه بتونین محدودیتتون رو جوری بنویسین که دستور ifthen رو بتونین توش پیاده کنین که خوب میشه براتون. ifthen رو تو کامنتای بخش معادلات تشریح کردیم. مثلا شرط بنویسین که اگه t

  39. با سلام و تشکر از مطالب مفیدتون.من یه مدل دار که یه متغییر تصادفی دارای توزیع uniform تعریف شده اگه این متغییر غیر صفر باشه باید اندیسش بره تو یه مجموعه اگه غیر صفر باشه اندیسش تویه یه مجموعه دیگه.میشه لطف کنین راهنمایی کنین چطوری تعریف کنم این شرط رو.
    سپاسگزارم

      • سلام و ممنون از توجهتون.در مدل بنده یه پارامتر هست که از توزیع یکنواخت میاد.حالا اگر مقدار این پارامتر صفر بشه (چون تصادفیه ممکنه صفر بگیره در تولید اعداد) در این صورت اندیسش(که جز set) باید بره عضو یه مجموعه میشه در غیر اینضورت اندیسش عضو یه مجموعه دیگه

        • سلام
          مجددا عذرخواهی میکنم. ولی خوب مطرح نمیکنین سوالتون رو. لطفا با x و y و a و i و j توضیح بدین. و بگین هر کدوم چه نقشی دارن. فکر میکنم مشکل ساده تر از این باشه که پیچیده شده الان.

        • سلام
          اگه بزرگتر مساوی صفر هم هستن، میتونین یه متغیر باینری به اسم u تعریف کنین و برای
          خطی سازی ضرب دو متغیر عدد صحیح به شکل زیر عمل کنین:

          x=l=u*M;
          y=l=(1-u)*M;

          این دو محدودیت باید جایگزین محدودیت مورد نظر شما بشن.
          اگه منفی هم بتونن باشن. بازم باید بررسی بشه.

  40. سلام. اگر متغیر مجهول ما بین دو حد بالا و پایین که دو متغیر معلوم هستند بود،
    مثلا L(j)<Q(j)<U(j)l بود که Q متغیر مجهول و L و U دو پارامتر معلوم که در قسمت پارامترها تعریف و مقداردهی شده اند بود، این عبارت را به صورت دو نامساوی و دو محدودیت جداگانه در قسمتی که محدودیتها را تعریف میکنیم می آوریم یا در قسمت تعریف پارامترها؟

  41. بسیار سپاسگزار.خوشبختانه مشکل حل شد.الان یه مشکل دیگه دارم.ممنون میشم راهنماییم کنید.
    فرض کنید مجموعه i از اجتماع دو مجموعه w,d بدست میاد.حالا یه سری از محدودیت های ما به ازای هر w است.این رو چطوری باید در گمز بنویسیم؟

  42. سلام. ببخشید مزاحم شدم. من تو کدم متغیرهای باینری تعریف کردم و البته مساله به صورت MINLP است. منتهی پس از run و نمایش جوابها، این متغیرها به صورت اعشاری حل شده‌اند. مثلا ۰٫۲ یا ۰٫۸۹٫ مشکل از کجاست؟

  43. با سلام و قدر دانی از شما
    حاصلضرب دو متغیر پیوسته که همزمان نمی توانند مقدار بگیرند به چه صورت خطی می شه؟ مثلا x.y=0 که هیچکدام باینری نیستند و در صورت مقدار گرفتن یکی دیگری صفر میشه.با تشکر

    • سلام
      ممنونم
      اگه بزرگتر مساوی صفر هم هستن، میتونین یه متغیر باینری به اسم u تعریف کنین و برای
      خطی سازی ضرب دو متغیر پیوسته که حاصلضرب آنها برابر صفر است به شکل زیر عمل کنین:

      x=l=u*M;
      y=l=(1-u)*M;

      این دو محدودیت باید جایگزین محدودیت مورد نظر شما بشن.
      اگه منفی هم بتونن باشن. بازم باید بررسی بشه.

  44. با سلام وتشکر بابت مطالب آموزنده تون
    سوالی داشتم ممنون میشم راهنماییم کنید
    میخام متغیری بنویسم که نشان‌ دهنده زمانی باشه که ،یک اندیس از سه اندیس متغیر باینری x مقدار مشخصی رو گرفته، مثلا زمانی که ایکس با j=3 یک میشه رو بیان کنه

    T(x(f,j=3,d)=1)

    در ست / ۳*۱/ j نوشته شده است

  45. سلام و خسته نباشید.
    یه جایی گفته بودید که چطوی میشه در خروجی که نشان میده تعداد اعشار رو دست کاری کرد.من هرچی می گردم نمی تونم پیداش کنم.لطف می کنین دوباره بگین؟
    مثلا اگه عدد ۱٫۳۲۴۵ می خوایم تو خروجی نشون بده ۱٫۲۳
    ممنون

  46. سلام
    می خواستم دستور ((Sum(i,v(i,j را طوری بنویسم که در آن اندیس i برای هر j تغییر کند.
    فرض کنید اندیس j مربوط به یک واحد تولیدی است و بازه ی تغییرات i برای هر واحد به طور خاص تغییر می کند.
    با تشکر

    • سلام
      اگه هر i مربوط به هر j هست که sum نمیخواد.
      اگه برای هر j مثلا چندتا i داریم، باید یه مجموعه چند بعدی تعریف کنین، مث E(i,j) که هر جا E یک بشه یعنی i,j در ارتباط هستن.
      برای تعریف E(i,j) از صفحه ی زیر کمک بگیرین.
      تعریف رابطه بین دو اندیس در گمز
      بعد E باید به صورت شرطی به کد شما اضافه بشه. اینجوری:

      sum(i,$E(i,j),v(i,j));

  47. سلام.
    من یک مجموعه تعریف کردم به شکل مقابل: C //C1*C2
    روی این مجموعه آلیاس گرفتم و مجموعه B رو هم با همین اعضا تعریف کردم.
    مجموعه سومی هم تعریف کردم بدین شکل:
    R //R1*R4
    روی C و B پارامتری دو بعدی تعریف کردم به شکل زیر:
    RR(C,B) //C1.C2 2,C2.C1 2,C1.C3 3,C3.C1 3,C2.C3 4,C3.C2 4
    حالا میخوام در یکی از محدودیتهام به ازای هر عضو BوC، روی متغیری مثل F(C,B,R) روی اندیس R جمع بگیرم، بنحوی که اولا Cهایی که اندیس شون برابره و در پارامتر RR نیستند،(مثل .C1)C1) در نظر گرفته نشن، ثانیا حد بالای R همواره به ازای مقداری که در پارامتر براشون تعریف شده، تغییر کنه، مثلا وقتی که داره محدودیتم رو به ازای C1وC2 محاسبه میکنه، مقدار RR(C1.C2) که برابر ۲ هست رو در نظر بگیره و حد بالای R رو تا ۲ در نظر بگیره. چطوری این محدودیت رو تعریف کنم؟
    مرسی و شرمنده بابت طویل شدن توضیحات!

  48. سلام.
    من مشکلم اینه که سوالمو میپرسم،بعدا قبل از اینکه شما زحمت بکشید، خودم جوابشو پیدا میکنم.هرچند که شما واقعا سریع جواب سوالاتمونو میدید!!
    بازم تشکر.

  49. سلام مجدد،
    اول از همه خیلی ممنونم بخاطر سایت خوبتون، من حتمن به یک طریق از خجالت گردانندگان این وبسایت خوب در میام.
    و اما بعد، من تو مدلم، یک متغیر دارم q_jct، این متغیر در تابع هدف و محدودیت ها با اندیس های مختلف که جنسشون یکسانه حل بکار رفته. منظور از اینکه میگم اندیس های متفاوت با جنس یکسان یعنی این متغیر، به فرم های q_jct، q_j’ct، q_j’c’t در مدل بکار رفته. واضحه که من نیاز به استفاده از آلیاس دارم برای تعریف مجموعه j’ از روی مجموعه j مثلا. سوالم اینه که آیا نیاز هست که من برای هر کدوم از این سه تا متغیر، یک متغیر متمایز تعریف بشه، یعنی مثلا بازای q_jct، q1، بازای q_j’ct، q2، و برای q_j’c’t، q3 ، یا اینکه نیاز نیست و میشه مثلا با تعریف یک q1 و تخصیص اندیس کار رو انجام داد؟
    ببیخشید طولانی شد
    ممنون.

    • سلام
      ممنونم لطف دارین. و خوشحالیم که تونستیم کمکی کرده باشیم بهتون.
      مشکلی نیست. یه دونه تعریف کنین. درستش هم همینه

    • سلام
      تو اینگونه مسائل میتونین مثلا یه I(t) تعریف کنین. که این I موجودی تو هر دوره هست. بعد یه I0 هم تعریف کنین که واسه دوره صفره و پارامتره. هر جا I برا دوره اول داشتین، از I0 استفاده کنین. این سریعترین راه ممکنه. و از همه روشای دیگه هم فکر کمتری لازم داره. روش زیاده. باز خواستین عرض میکنم. فقط به مسئله بستگی داره

      • یعنی واسه موجودی دوره اول یه معادله،واسه بقیه اش یه معادله دیگه؟یا خودش از اون پارامتری I(0) که تعریف کردیم استفاده میکنه با یه معادله؟

  50. سلام یه معادله خطی به این شکل در داخل گمز میخواهیم بنویسم ک
    L (T)= 0 ,T<ET
    L(T)= T-ET/E-ET,ET<T<E
    L(T)=1,E<T<L
    L(T)=EL-T/EL-L,L<TEL
    که در اینجا ET ,EL, E,L,پارامتر اندیس دار هستند، و Tمتغییر است، L هم متغییر،این و چطوری باید نوشت از طریق IFTHEN بنویسیم در نمیاد، معادله رو غیر مشتق پذیر می کنه، از DNLP مدل می گه حل کنین که حل نمی شه، راهکاری داره ایا ؟

    • سلام
      به نظرم شما بهتره که راه حل خلاقانه ای استفاده کنین. به عنوان مثال یه متغیر integer تعریف کنین که سه مقدار ۰ و یک و دو رو بگیره. هر کدوم رو گرفت یکی از معادلات منطقی بشه. فقط خلاقیت میخواد و احتمالا از اعداد بزرگ و یا صفر و یک هم بتونین استفاده کنین. من که الان چیزی به ذهنم نمیرسه. همه جوره میشه احتمالا.

      • یک مثال ساده می زنین که، جواب که قرار تو این رابطه بدست بیاد، ۰ یا ۱ و یا عددی بین ۰و ۱ می تونه باشه یکم راهنمای بیشتری انجام بدین برام

        • الان چیزی خاطرم نیست خب.
          مثلا فرض کنیم اگه متغیر s بین ۰ و ۴ باشه، y باید یک بشه و اگه بیشتر شد، y باید صفر بشه. (شما باید شرطا رو ریز کنین، پیاده کنین، و چک کنین که با هم تناقض نداشته باشن)

          ۴-s=l=y*M;
          s-4=l=(1-y)*M;

  51. سلام
    توی گمز یه کد نوشتم.این کد یک مقدار بهینه رو برای ۲۴ ساعت بهم میده.حالا من میخوام این مقدار در عدد ۳۶۵ ضرب بشه و مقدارش کنار گزاشته بشه.در ادامه یک پارامتر وروردی تغییر کنه (مثلا تمامی مقادیرش +۱ بشه) و یه بار دیگه کد اجرا بشه و مقدارش به دست بیاد .عدد به دست اومده مثل دفعه قبل در ۳۶۵ ضرب کنه و حاصل رو از عدد قبلی که کنار گزاشتیم کم کنه.
    قبول دارم که اینکار به صورت دستی و با دوبار ران گرفتن و تغییر دستی پارامتر میشه انجام داده اما میخوام ببینم این کار توسط گمز چجوری بیاده میشه؟
    با تشکر

    • سلام
      یه loop بنویسین، به ازای تعداد دفعاتی که قراره انجام بشه. مثلا ده بار. یه مجموعه مث s تعریف کنین و لوپ رو به ازای اون بنویسین.
      دستور solve رو بذارین تو لوپ.
      این کد براتون میتونه مفید باشه.

      loop(s,
      p(i)=pp(s,i);
      solve .....z;
      value(s)=z.l+1;
      a=a*ord(s);
      ;);
      display value

      • با تشکر از سایت خووبتون.
        ببخشید در ادامه این سوال یه سوال دیگه اینکه آیا امکان داره که گمز پس از بهینه کردن یک تابع هدف مقدار بهینه را در ادامه مساله در یک بهینه سازی دیگر بکار گیرد؟
        یعنی دو بهینه سازی در یک مساله.که مقدار بهینه تابع اول در بهینه تابع دوم بکار گرفته شود.

  52. یک مثال ساده می زنین که، جواب که قرار تو این رابطه بدست بیاد، ۰ یا ۱ و یا عددی بین ۰و ۱ می تونه باشه یکم راهنمای بیشتری انجام بدین برام

    • سلام
      بسته به مدل شما، میتونین هر راه خلاقانه ای استفاده کنین.
      ساده ترینش که خیلی هم خلاقانه نیست اینه که یه متغیر integer تعریف کنین. و یه کران بالا و پایین (۱ و -۱) براش بذارین. اینجوری فقط این سه مقدار رو میگیره

  53. سلام متغیرهای زیر رو دارم و در قسمت معادلات این فرمول رو دارم

    CONST15_1(h0,bus) $(ord(h0)>1 )..Pes(h0,bus)=e=Pch(h0,Bus)+ Pdch(h0,Bus) ;

    میخوام طوری تعریف کنم که در صورت عدد دار بودن بکی از Pch یا Pdch دیگری صفر در نظر گرفته بشه ممنون میشم اگه راهنمایی کنید البته خودم اینطوری نوشتم ولی فایده نداشت:

    CONST15_1(h0,bus) $(ord(h0)>1 )..Pes(h0,bus)=e=Pch(h0,Bus) xor Pdch(h0,Bus) ;

    Pdch.lo(h0,BusPs)=0;
    Pdch.up(h0,BusPs)=0.0005;
    Pdch.fx(h0,busNoPs)=0;

    Pch.fx(h0,busNoPs)=0;
    Pch.lo(h0,BusPs)=-0.0005;
    Pch.up(h0,BusPs)=0;

    Pes.lo(h0,BusPs)=-0.0005;
    Pes.up(h0,BusPs)=0.0005;
    Pes.fx(h0,BusNoPs)=0;

      • میبخشید مثل اینکه سوالم رو بد مطرح کردم Pdch و Pch متغییرباینری نیستن من یک باز ۲۴ ساعته دارم که در هر ساعت یکی از این دو پارامتر باید در حدود تعریف شده در صورت سوال، قرار بگیرد و متغیر دیگه تو اون ساعت صفر در نظر گرفته شود برای این از xor کردم که البته متوجه شدهم باینری و قابل ااجرا نیست چون میخوام از این پارامتر ها در فرمول زیر در هر ساعت استفاده کنم
        CONST15_7 (h0,bus)$(ord(h0)>1)..Ps(h0,bus)=e=Ps(h0-1,bus)+(Pch(h0,bus)*0.95+Pdch/0.95) ;

  54. سلام.
    من میخوام توی گمز یه تابع هدف نویسم که توش متغیر در ترانهاده اش ضرب میشه نمیدونم چجوری باید متغیر ترانهاده رو وارد کنم.
    اینجوریه:
    ‘wsw
    w متغیره و یه ماتریس ۱*n
    s پارامتره و یه ماتریس n*n
    ممنون میشم راهنمایی کنین چجوری باید بنویسمش

  55. سلام
    من مدلم یه متغیر موجودی داره،که مقدار اولیه درواقع در زمان صفر یه عدد ثابته.
    تو معادلات هم یک معادله برای موجودی دارم چه جوری بنویسم که مشکل نباشه.متغیز موجودیم هم تک اندیسه هست.

    /tt time periods /0,1*6
    /t(tt) /1*6
    من اینو واسه مجموعه ها تعریف کردم.

    اینو واسه متغیر
    ;positive variable I(tt) amount of inventory
    ;I.fx(“0”)=20
    معادله هم اینه
    ((Inventory(t).. I(t)=e=Q(t)+I(t-1)- sum((j),R(j,t

  56. من متغیر باینری دارم،مثلا برای فروش یا تولید که ممکن است تولید نداشته باشیم یا فروش نداشته باشیم،هر کار میکنم متغیرهای باینریم یک میشن.لطفا راهنمایی کنید.

    • سلام
      خب من چه راهنمایی بکنم الان. این وضعیت به چند تا چیز ربط داره که شما همه رو باید چک کنین:
      ۱- ساختار مدل، آیا ساختار اجازه میده که صفر هم بشه؟
      ۲- داده ها، آیا داده ها مشکلی ندارند؟
      ۳- کد، آیا کدم درسته؟
      ۴- تابع هدف، ممکنه یه جوری باشه که به نفعش باشه که همیشه صفر بشه
      مهمترین دلیل ساختار مدل و داده ها هست

  57. سلام با تشکر از مطالب خوبتون
    من داخل برنامه i را از ۱ تا ۳۰ تعریف کرده ام .. در توابع محدودیت نیاز دارم که در هر تابع از چنتد تا از i ها استفاده کنم اما نمیدونم چطور ممکنه
    برای مثال x(i ) که متغیر باینری هم هستن در یک تابه محدودیت فقط از i=1,2,3,4,5,6,7,8 میخوام استفاده کنم ممنون میشم بگید چجوری باید تعریف کنم

  58. برای توضیح سوالم
    تابع هدف من اینه

    OBJ .. Z=e=sum ((i) , as(i)*x(i));

    تابع محدودیت من سیگما ۱ تا ۸ x هاست ممنون میشم بگید چه جوری محدودیتمو بنویسم

  59. سلام
    در مورد نحوه بدست اوردن مقدار احتمال به ازای تابع توزیع نرمال لطفا میشه توضیح بدید
    البته در helpگمز یه تابع تعریف کرده به شکل زیر
    Pdfnormal
    این دستورخطا میده و گمز اونو نمیشناسه
    با تشکر

  60. سلام
    در خصوص توابع توزیع در گمز سوالی داشتم
    نوشته بودید که با دستور normal میشه عددی رندم با توزیع نرمال داشت. می
    خواستم بدونم ایا تابعی در گمز هستش که تابع چگالی احتمال تابع توزیع
    نرمال رو هم بده؟
    البته دستور زیر تو راهنمای گمز دیدم اما گمز میگه نمیشناسمش
    pdfNormal(x,MEAN,STD DEV)
    ممنون میشم اگه راهنمایی بفرمایید

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

        • سلام
          من تابع توزیعش رو کار نکردم متاسفانه. سر فرصت می‌گردم اگه پیدا کردم میذارم اینجا.
          فعلا که من تابعشو نمیدونم چجوریه. ولی میتونین یه کار بکنین. فرض کنیم میانگین m و انحراف معیار sigma و متغیر شما x باشه.
          میتونین اول x رو به صورت تصادفی با توزیع نرمال تولید کنین. بعدش اون مقداری که برا x به دست اومده رو بذارین تو فرمول تابع توزیع نرمال. فرمول رو دستی براش تعریف کنین. اینجوری هم x به دست اومده و هم احتمالش. احتمالا یکم دقت هم بخواد که مجموع احتمالا بالا یک نشه

  61. سلام

    من دوتا متغیر دارم(متغیر مثبت) که میخوام وقتی اون یکی مقدار می گیره یکی دیگه صفر بشه و بر عکس.و در کل هیچگاه با هم مقدار نگیرند.باید چکار کنم؟

    • سلام
      از sos1 استفاده کنین. تو همین تاپیک توضیحاتش اومده.
      مهندس حداقل یه بار تایپک رو مطالعه کنین بعد سوال رو بپرسین. مرسی

    • سلام
      حاصلضربشون رو برابر t بگیرین. بعد اینو در نظر داشته باشین که t همیشه صفر هست، بجز وقتی که هم x,y یک باشن.
      یعنی:

      t=l=x
      t=l=y
      x+y-1=l=t

  62. سلام، وقت بخیر
    یه محدودیت دارم که به ازای i تعریف شده ولی تو این محدودیت دو تا sum دارم که یکی به ازای e عضو t(i) و بعدی به ازای e عضو t(j) تعریف شده، اینو چطور باید کد کنم؟
    با تشکر

  63. سلام خسته نباشید
    من چند تا وسیله خانگی دارم که هر کدوم تا یه بازه ای کار میدنن
    وسیله ها قبلا تو set معرفی شد به این صورت
    /A appliances /Vc,Tv,Pec,Cd,Wm,Dw,Cm
    حالا میخوام دوره عملکردشون بیارم مثلا وسیله Vc تو دوره t بین ۳۸ تا۴۲ و ۱۰۰تا۱۰۳ کار میکنه بازه t هم قبلا معرفی شد ./T periods /1*144
    به این صورت معرفی میکنم تو شناسایی vc ارور میده
    ;parameter withoutV2H(t) operation period without V2H ability
    withoutV2H(t)$(ord(t)>=38 and ord(t)=100 and ord(t)<=103)=vc
    از طرفی نمیتونم بنویسم (ord(a جای vc چون شامل چند تا وسیلس که من فقظ میخوام دوره عمکرد هر کدوم جدا بگم چطور باید عمل کنم

    • سلام
      ممنون
      کدی که شما نوشتین اشتباه است.
      من جای شما بودم دوره را تعریف می کردم و وسایل را زیر مجموعه دوره تعریف می کردم.

      set t/1*44/
      vc(t)/38*42,100*103/

      بقیه هم به این نحو زیر مجموعه دوره تعریف می کردم.

  64. سلام از وبسایت خوبتون
    ممنون می شم اگه این مشکل بنده رو حل کنید
    من می خوام یه متغیر f(i)
    تعریف کنم که برابر min
    یه پارامتر x(i)
    و متغیر y(i)
    هست. یعنی اینطوریه:
    f(i)=min{x(i),y(i)}
    از هر دستوری استفاده کردم نتیجه نگرفتم. دستورات min علامت دلار یا
    ifthen
    هم استفاده کردم. ولی همیشه متغیر رو کوچکتر در نظر می گیره. حتی وقتی متغیره بزرگتره
    دستور ifthen رو اینطوری نوشتم:
    F(i)=e=ifthen(x(i) < y(i),x(i), y(i))
    و این خطا رو داد:
    cannot function 'ifthen'
    دستور ifthen وقتی خطا نمی ده که به جای حالت true ,false
    عدد قرار بدم مثلا اینطوری:
    F(i)=e=ifthen(x(i) < y(i),1, 2)
    همیشه مقدار عدد مربوط به false یعنی ۲ را برمیگرداند. یعنی همیشه مقدار متغیر را کوچکتر در نظر می گیرد. حتی وقتی بزرگتر است. دستور دلار هم نتیجه ای مشابه ifthen می ده.
    لطفا بنده رو راهنمایی بفرمایید دستور مناسب برای min چیه.
    خیلی ممنون

    • سلام حداقل سازی می یاد به گونه ای به متغیرها مقدار دهی می کنه که اونها کم شوند تا جواب بهینه کم باشد. یک حد پایین برای متغیرتون در نظر بگیرین که از پارامتر بیشتر باشه.

      • اینطوری ممکنه متغیر مقدار نادرستی بگیره که صحیح نیست. چون متغیرها از قبل حد پایین مناسبی دارن
        و پارامترها مربوط به مجموعه است و از قبل مشخص است و هر i پارامتر خودش را دارد ولی اختلاف مقدار متغیر و پارامتر قبل از حل مشخص نیست. و برای هر اندیس ممکنه متغیرش بزرگتر یا کوچکتر از پارامترش باشه. یعنی هر پارامتر x(i) متغیر y(i) خودش رو داره و ممکنه بعد از به دست اومدن متغیر ها از پارامتر متناظرش کوچکتر یا بزرگتر باشه. که بین x(i) و y(i) اونی که کوچکتره برابر f(i) می شه.
        مشکل من با f(i) هست که نمی دونم تو عبارت زیر چه طوری تعیینش کنم.
        f(i)=min{x(i),y(i)}

  65. ممنون از اینکه جواب دادین
    خیلی ساده شده مدل من این می شه ولی مدل اصلی غیر خطی و محدویت های زیادی داره:

    sets
    i /1*3/;
    parameters
    x(i) /1 5,2 3,3 6/
    d(i)/1 6,2 2,3 7/
    ;
    positive variables
    y(i)
    f(i)
    ;
    free variables
    z;
    equations
    obj
    A(i)
    B(i);
    obj.. sum(i,y(i)+f(i))=e=z;
    A(i).. y(i)=g=d(i) ;
    B(i).. f(i)=e=min(y(i),x(i));

    الان محدودیت آخری رو چه طوری باید بنویسم؟
    به این صورت که می نویسم خطا می ده:.
    B(i).. f(i)=e=min(y(i),x(i))
    ولی هر چیزی غیر از
    y(i)
    تو این محدودیت می نویسم کار می کنه. فقط با متغیر مشکل داره.
    به صورت زیر هم نوشتم ولی باز خطا میده
    F(i)=e=ifthen(x(i) < y(i),x(i), y(i))
    لطفا کمکم کنید چه طوری بنویسمش

    • سلام برنامه ات درست کار می کنه وقتی پارامتر کوچک تره اونو برمی داره و وقتی متغیر کوچکتره اونو برمی داره. همیشه مقدار متغیر را کوچکتر در نظر نمی گیره .

      ---- ۲۲ VARIABLE z.L = 28.000

      ---- 22 PARAMETER x

      1 5.000, 2 3.000, 3 6.000

      ---- 22 VARIABLE y.L

      1 6.000, 2 2.000, 3 7.000

      ---- 22 VARIABLE f.L

      1 5.000, 2 2.000, 3 6.000

      در برنامه ای که ران شد ۲ بار پارامتر و ۱ بار متغیر و برمی داره.

  66. سلام ممنون از اینکه بررسی کردید و جواب دادید
    فکر کنم تو قسمت solve مدل مشکل دارم چون من قبلش نوع برنامه رو nlp نوشته بودم خطا میداد می گفت dnlp بنویس. این کار رو به صورت زیر نوشتم
    model IRP /all/;
    solve IRP using DNLP minimizing z ;
    display x,y.l,f.l;

    همه متغیرها رو صفر میده و این دو پیغام زیر رو هم می ده:
    can not handle function ‘min’
    can not handle function ‘rel_lt’

  67. سلام.خسته نباشین.
    من توی برنامم یه شرطی دارم این هست که برای یکی از متغیرهام در یک بازه ای باید مقدارش به صورت تابع یکنواخت تعریف بشه.آیا نوشتن این شرط امکان پذیر هست؟

  68. سلام خسته نباشید
    میخوام این عبارت تو متغیرها بیان کنم

    (I.(t
    (.) binary indoctor of appliance
    status at period t , where1 mean on and 0 mean off

    t و . که زمان و وسیله باشن قبلا معرفی شدن . بازه عمکرد وسیله های . هم تعریف شده
    الان من (I.(t باینری تعریف کنم کافیه یا باید با روشنی خاموشیم واسش بیان کنم باز امکانش هست بنویسید برام. ممنوم

    • سلام
      چیزی که من متوجه شدم اینه:
      ۱- t یک اندیس هست
      ۲- . یک اندیس هست
      ۳- بر حسب این دو اندیس میخواین i رو تعریف کنین.
      کافیه I(.,t) رو به صورت باینری تعریف کنین و استفاده کنین. فقط توجه کنین که گمز “.” قبول نمیکنه. براش یه اسم دیگه مث k بذارین

  69. سلام. خیلی ممنون از مطالب مفیدتون. یه سوال دارم که اگه جواب بدین ممنون میشم. تابع هدف مساله من یه جمله داره که برابر با حاصلضرب دو متغیر پیوسته مثبت هست (مثلا a*b که a و b مثبت و پیوسته هستند). میخواستم بدونم توی گمز چطوری باید این جمله رو خطی سازی کنم.

      • سلام. اگه توی تابع هدف یه عبارت مثل a2-b2 (توان دوم a منهای توان دوم b)باشه و a و b متغیرهای مثبت پیوسته باشند خطی سازی به چه شکل انجام میشه؟

        • فکر نمیکنم بتونین خطیش کنین. مگه اینکه شرایط دیگه ای هم داشته باشین. شما میتونین به جای اینکه خطی کنین، بیاین حالتای مختلف غیر خطی معادل این حالت رو امتحان کنین.
          مثلا از a2-b2 رو مساوی x بگیرین. بعد تو تابع هدف بذارین x، اینا رو ببرین تو محدودیت. یا اینکه ازشون لگاریتم بگیرین. (پس این شد دو حالت غیر خطی دیگه!)
          یه حالت غیر خطی دیگه هم داریم:
          تجزیه کنیم:

          (a-b)*(a+b);

          خب حالا a-b رو اسمشو بذاریم x و a+b رو بذاریم y :

          xy=3;

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

  70. سلام خسته نباشید.
    ببخشید من یک متغییر بنام Z(Vmax) یعنی اخرین ماشینی که به مسیر k تخصیص داده شده است ، اینو چطور میتونم کد کنم .
    باتشکر

    • سلام
      مرسی
      بیشتر توضیح بدین. این آخرین ماشین با چه متغیرها و اندیس ها و پارامترهایی در ارتباطه. اساسا اولی یا اخرین ماشین با چی تو مدل نشون داده شده؟

  71. سلام
    مدل یه مسئله ان پی هارد تو سایز خیلی کوچیک رو تو گمز نوشتم. ولی حل نمی کنه و مقادیر متغیرها رو نمی ده و خطایی هم نمی ده. یعنی تو قسمت خروجی فقط بخش های زیر رو داره:
    compilation
    equation listing
    equation
    column listing
    column
    model statistics
    و بقیه بخش ها مخصوصا بخش display رو نشون نمی ده.
    لطفا کمکم کنید. ممنون می شم.

    • یه سوال دیگه
      متغیر x(i) با توجه به مقادیر متغیرهای y(i) و a تا f به صورت زیر مقدار می گیره:
      x(i)=a(i) if y(i)=d(i)
      x(i)=b(i) if y(i)=e(i)
      x(i)=c(i) if y(i)=f(i)
      لطفا راهنمایی کنید چه طور باید تو گمز وارد بشه. البته معادلات اصلیش پیچیده تر از این هست و اینجا ساده کردم.

      • سلام
        یا معادل خطی شده ش رو بنویسین، یا از دستور ifthen استفاده کنید. این دستور توی سایت هست و جستجو کنید تو کامنتا

      • سلام. ممنون که پاسخ دادید.
        بله از لینکی که گذاشتید برا لایسنس، قبلا استفاده کرده ام و همه سالور ها full هستند.
        ولی همچنان مشکل خروجی رو دارم. بدون خطای قرمز.
        ولی تو خلاصه ی خروجی این توضیحات هست ولی نمی فهمم اشکال از کجاست:
        ***model structure has 16 data errors
        ***solve aborted
        ***status:execution error(s)

        • در ضمن با همه سالورهای ممکن بررسی کردم ولی درست نشد و همون خروجی رو میده.

        • سلام
          خواهش میکنم.
          نه مشکل از سالور نیست. چند خط بالاتر از این رو هم بذارین.
          اصن کل فایل log رو اینجا بذارین که ببینم.

  72. سلام مهندس محمدی امیدوارم خوب باشین ببخشین ی سوال دارم؟

    در متلب با ساختار cell میشه یه آرایه که هر کدوم از عناصر خودش ی آرایه دیگه باشه تعریف کرد آیا چنین ساختاری در گمز وجود داره؟ اگه نیست ودر صورت لزوم به چنین ساختاری چطور باید این کار رو انجام بدیم یعنی فرض کنید یک ارایه داریم مثلا ۳۰ در ۳۰ و درهر کدوم از سلولای ارایه می خواهیم ی آرایه ۳۵ در ۳۵ ذخیره کنیم ودر عملیات بعدی ازش استفاده کنیم. ممنونم

    • سلام
      برای اینکار کافیه فقط اندیس اضافه کنین. مثلا یه پارامتر تعریف کنین که چهار اندیس داشته باشه. a(i,j,k,m)
      اون cell تو متلب دقیقا همین کار رو انجام میده. یعنی چهار بعدی میکنه پارامتر رو.

  73. سلام جناب مهندس محمودی
    ممنون از پاسختون
    این فایل log که فرمودید بزارم ببینید:

    — Job IRP.gms Start 01/19/03 18:13:23 24.1.2 r40979 WEX-WEI x86_64/MS Windows
    GAMS 24.1.2 Copyright (C) 1987-2013 GAMS Development. All rights reserved
    Licensee: GAMS / MPSGE Workshop G050310:1251AJ-WIN
    Ann Arbor, MI 2005 DC5176
    License for teaching and research at degree granting institutions
    — Starting compilation
    — IRP.gms(146) 3 Mb
    — Starting execution: elapsed 0:00:00.018
    — IRP.gms(53) 4 Mb
    — Generating MINLP model IRP
    — IRP.gms(143) 6 Mb 16 Errors
    — 69 rows 65 columns 277 non-zeroes
    — 408 nl-code 75 nl-non-zeroes
    — 16 discrete-columns
    *** Model structure has 16 data errors
    — IRP.gms(143) 4 Mb
    *** SOLVE aborted
    — Executing BARON: elapsed 0:00:00.079
    — IRP.gms(143) 4 Mb 16 Errors
    *** Status: Execution error(s)
    — Job IRP.gms Stop 01/19/03 18:13:23 elapsed 0:00:00.093
    Exit code = 3

  74. عرض سلام و خسته نباشید.
    راستش من میخواستم نتایج متلب و گمز رو مقایسه کنم. قصد دارم workspace های متلب رو برای هر سایز ذخیره کنم و داده ها رو با استفاده از دستوری از متلب به گمز انتقال بدم. اما این دستور رو پیدا نکردم. ممکنه راهنمایی کنید؟؟
    خیلی ممنون از وقتی که میگذارید.

  75. سلام، میخواستم بپرسم من یه متغیر دارم (c(t)) که به ازای زمان های مختلف(t)، تغیر میکنه مثلا:
    c(t)=[4+m 4 4-m] مثلا در ساعت اول(t=1) c برابر درایه اول، در ساعت دوم c برابر درایه دوم و..
    m تو این ماتریس یه متغیره
    اینو چطور تو گمز بنویسم؟

  76. سلام
    امکان ضرب ۳ متغیر تصمیم در گمز وجود دارد؟
    مدلم در گمز ران میشه اما جوابی که میده منطقی نیست
    هم چنین در قسمت equation هم متغیرهای تصمیم دو به دو در هم ضرب شدند
    یعنی متغیر u*h و h*x در حالی که در تابع هدف هر ۳ متغیر در هم ضرب شده بودند
    u*x*h

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

      • اگر متغیر تصمیم h مقدار ۱ بگیرد باعث کاهش هزینه میشه، اما مقدار h را برابر صفر در نظر میگیره
        به طور کلی بود یا نبود این متغیرتصمیم تاثیری بر جواب ندارد

        • سلام
          محدودیت هایی که روی h لحاظ شدن هم مهمن. شاید محدودیت ها یه جورین که باعث میشن که h همیشه صفر بشه

    • سلام
      نقش این b چطوریه تو مدلتون؟ داره چیکار میکنه؟
      اگه متغیره که میتونین به شکل باینری تعریف کنین و مجموع sum(i,d(i)) رو برابر با یک بگیرین و به عنوان یه محدودیت در نظر بگیرین. یا اینکه به عنوان SOS تعریفش کنین و براش حد بالای ۱ در نظر بگیرین. اگه اشنایی با SOS ندارین پست زیر رو بخونین.
      تعریف متغیر SOS در گمز
      اگه پارامتره که باید ببینیم نقشش چی هست.

  77. سلام
    من یک مدل مکان یابی تخصیص را در گمز نوشتم
    مدل غیرخطی است و با بارون حل کردم
    زمانی که تعداد گره ها حداکثر ۶ می باشد در زمان کم تر از ۱ دقیقه حل می شود
    ولی وقتی تعداد گره ها را بیش تر می کنم،جوابی برای مسئله بدست نمیاد
    نشدنی میشه
    این به این معنیه که مدلی که نوشتم غلطه؟

        • ۷ گره رو چند دقیقه؟ مثلا اگه یه ساعت طول میکشه بعد میگه نشدنی، امیدی هست که به جواب برسه.
          ولی اگه زود بگه نشدنیه که باید تحلیل کنین که چرا اینجوری شده.
          روش خاصی برای فهمیدن این مشکل نیست. معمولا این کارا برای تحلیل این معضل انجام میشه:
          بررسی مجدد کد، بررسی مدل، تطبیق مدل با مقالات پایه (خیلی مهم)، بررسی داده ها و در صورت امکان استفاده از داده های استاندارد منتشر شده توسط مقالات پایه. حل دستی
          برای بررسی ریز مدل، معمولا باید اول یه چندتا محدودیت رو تو مدل در نظر بگیرین و حل کنین مدل رو. مدل که جواب داد، یه محدودیت دیگه هم اضافه میکنین. این کارو تا جایی ادامه میدین که دیگه گمز بگه نشدنیه مدل. اونجاست که باید تحلیل کنین که این محدودیتی که الان اضافه کردین با چه محدودیت یا محدودیتهایی تناقض داره. دیگه خلاصه باید تحلیل بشه. خیلی شیک و دقیق.
          البته این قصه سر دراز داره که تقریبا ۹۵ درصد مدلها اول این مشکلات رو دارن و کم کم رفع میشن.

  78. بعد از ۱ ساعت ران میگه نشدنیه
    تمام سطور تابع هدف رو غیرفعال کردم و فقط سطر هزینه اولیه احداث دپو ،فعال کردم
    مسئله در کم تر از ۱۰ دقیقه حل شد
    پس با محدودیت ها مشکل نداره…
    به نظرتون دلیل اینکه با تابع هدف مشکل داره چی میتونه باشه؟
    درضمن مدلم رو خطی هم کردم، بعد از خطی سازی هم جواب نشدنی بدست میاره….
    در حالی بقیه مثال ها رو جواب یکسان با مدل غیرخطی میدهد(در تعداد گره های کم)

    • سلام
      الان بدون توان بعد یه ساعت میگه نشدنیه؟ اگه آره که زمان حل رو بیشتر کنین شاید جواب داد. از آپشن reslim استفاده کنین. تو سایت و کامنتا زیاد بحث شده در موردش.
      ممکن هم هست مدل این جواب رو داده باشه: infeasible or unbounded و این یعنی مدل شما احتمالا جواب بیکران داشته باشه. رو علامت های مثبت و منفی بخش های مختلف تابع هدف هم فکر کنین.

    • سلام
      فرض کنیم متغیر شما x هست. اگه با همون نام قراره تو مرحله بعدی هم استفاده بشه، کافیه بعد از دستور solve اول این کد رو بنویسین:
      x.fx=x.l;
      اینجوری مقدار بهینه رو میگیره و فیکس میکنه و از این لحظه به بعد مقدارش همینقدره.

  79. با سلام و عرض ادب
    من در مدلم ضرب دو عدد صحیح رو دارم که مدل من رو غیر خطی کرده. ممنون میشم اگر بنده رو راهنمایی کنید که برای خطی سازی چه کاری انجام بدم؟

    با تشکر

    • سلام
      روش ها بسیار محدود هستند تو این حوزه. عدد صحیحاتون صفر و یک هم توش هست یا هر دو عدد صحیح هستن مثلا ۴ ۳ ۲ اینا رو میتونن بگیرن؟ پاسخ سوالتون منوط به جواب این سوال بنده هست. لطفا پاسخ بدین تا موضوع روشن بشه.

        • سلام
          ببینید تو این حالت خطی سازی مقداری دردسره. تو بهترین حالت باید یه راه خلاقانه به خرج بدین و یا اینکه مثلا شرایط دیگه ای اگه تو مسئله هست رو لحاظ کنین.
          راه حل کلی و نسبتاً مناسب برای اینکار به شکل زیر هست: (این راه حل رو بنده به کار بردم قبلا و روش مناسبی هست- البته بستگی به ساختار مدل داره که چقد جواب بده)
          اولا شما باید خطی سازی ضرب دو متغیر صفر و یک رو یاد بگیرین.
          تو مرحله ی بعد این دو متغیر صحیحی که دارین رو باید به مجموع چند متغیر عدد صحیح تبدیل کنین. برای تبدیل متغیر عدد صحیح به متغیر صفر و یک دو راه دارین. که راه دومی که عرض میکنم چون تعداد متغیرهای کمتری رو تولید میکنه از لحاظ زمانی به صرفه تر هست. جفتشون هم تو کتاب لیبرمن کامل توضیح داده شدن. تو لینک زیر کتاب لیبرمن هست (اگه اشتباهی لینک رو گذاشتم بگین که اصلاح بشه) تو این کتاب تو بخش عدد صحیح انواع خطی سازی ها و تبدیلات رو نوشته. یکی از اون قسمت ها به این شکله که هر متغیر رو به صورت sum(2^t*y(t) میکنین. همونو پیدا کنین و عملی کنین.
          دانلود کتاب لیبرمن
          حالا متغیرهای شما تبدیل شدن به مجموع اعداد صفر و یک. حالا کافیه که ضرب این ها رو بیاین خطی کنین و تمام میشه کار

  80. با سلام وادب
    جناب محمودی من تو مدلم یه متغیر پیوسته دارم ، که حد بالای یه سامیشن هم قرار میگیره ! ممکنه راهنمایی کنید که چجوری میتونم خطیش کنم؟

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

  81. سلام.
    خسته نباشید. منم تو خطی سازی سوال دارم. راستش معادله من از حاصلضرب یک متغیر پیوسته در عدد صحیح تشکیل شده. متغیر پیوسته یک احتمال هست که بین ۰ و ۱ هست. آیا برای این حالت که یکی از متغیرها دارای کران پایین صفر و کران بالای ۱ باشه، راه حلی سراغ دارین؟
    خیلی خیلی ممنونم.

  82. سلام. وقت شما بخیر.
    من چند سوال در رابطه با کد نویسی داشتم :
    ۱٫ پارامتری به شکل Pmin j که min به عنوان اندیس در بالای p و j اندیس در پایین p نوشته میشه، چطور در گمز تعریف می شود و همچنین برای علامت max آن چطور؟ در این مساله P با اندیس ijدر پایین p نیز به عنوان پارامتر و Pj به عنوان متغیر تعریف می شود.

    ۲٫ برای تعریف متغیری که به شکل زیر نوشته شده، دستور آن در گمز چگونه است و زمانی که شرطی نیز در توضیحاتش ذکر شود چگونه نوشته می شود؟

    j,i   :     1    if machine j works at its i th speed level(for 1 ≤ i ≤ pmaxj− pminj− ۱)           ۰ else∆
    

    آیا این شرط باید در محدودیت تعریف شود؟

    ۳٫ زمانی که در محدودیت در قسمت نوشتن سور عمومی ذکر شود که j عضو sk باشد و این عضویت در چندین محدودیت تفاوت داشته باشد و یا اینکه j عضوی از اشتراک دو مجموعه هست و موارد مشابه این چنینی، چطور نوشته می شود؟

    با تشکر فراوان

    • سلام
      ۱- اون Min, max اندیس نیستن. فقط تعریف کنین Pmin(j و Pmax(j
      2- برای تعریفش که عادی تعریف میشه و شرطی روش نمیشه گذاشت تو قسمت تعریف. برای شرط هاش باید تو هر محدودیتی که دلتا استفاده میشه شرط هم گذاشته بشه.
      ۳- این تفاوتی که فرمودین تعیین کننده ست و بهش دقت کنین. من فکر میکنم این دو تا تاپیک زیر رو بخونین روش کار دستتون بیاد.
      اجتماع مجموعه ها
      مجموعه های چند بعدی

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

        delta(j,i) when 1 ≤ i ≤ pmaxj− pminj− ۱
        
        co2 (k,j,t,i)   ..   w(j,k,t) =l= (y(k,t)*p(j,i) + m* (1- delta (j,i)); 
        

        برای دلتا از شرط if باید استفاده کرد؟

        • سلام
          خیر. از دلار باید استفاده کنید. مشروط به اینکه pmax, pmin جفتشون پارامتر باشن.

          co2 (k,j,t,i)$(ord(i) >= 1 and ord(i) <= pmaxj-pminj-1)   ..   w(j,k,t) =l= (y(k,t)*p(j,i) + m* (1- delta (j,i));
          
  83. با سلام.
    در حل مسائل عدد صحیح در صورتی که مقدار متغیر عدد صحیح از ۱۰۰ بیشتر شود، نرم افزار به طور خودکار حد بالای آن را ۱۰۰ در نظر میگیرد.حال سوال اینجاست:
    ۱٫ چرا با وجود اینکه باید مقدار متغیر آزادانه و بهینه تعیین شود نرم افزار چنین کاری را میکند؟
    ۲٫ مقدار مناسب برای حد بالا چگونه تعیین شود؟
    با تشکر

    • سلام
      سوال اول: این یه تکنیک نرم افزاریه که سریعتر به جواب برسه. بیشتر مسائلی که مورد بررسی قرار میگیرن معمولا تو اسکیل کوچیک شده اعداد مورد ارزیابی قرار میگیرن. بابت همین بیشتر اعداد کوچیکتر از ۱۰۰ میشن. قطعا منطقی نیست وقتی مقدار بهینه یه متغیر حول و حوش ۲۰ هست، نرم افزار بیاد اعداد بالاتر از ۵۰۰ رو هم براش تست کنه ببینه جواب چجوریه.
      سوال دوم: x.up=1000;

  84. سلام ببخشید من تابع هدفم به صورت حاصلضرب چهار تا معادله درجه دو هست من به این صورت نوشتم
    (objective..z=e=Prod(i,a(i)*x(i)*x(i)+ b(i)*x(i)+c(i
    با استفاده از تابع prod ولی گمز متوجه نشده جواب اشتباه میده میشه راهنمایی ام کنید چطور وارد کنم a b c مقادیر معلوم هستن و x متغیر تصمیم
    ممنون

    • سلام
      نه اشتباه نمیکنه.
      برای اطمینان خاطر به صورت جدا همونا رو ضرب کنین، به جای prod، بعد نتیجه رو ببینید. به این هم دقت کنین که این کار مدل رو به شدت غیر خطی میکنه احتمالا

  85. اگر در قسمت معادلات بخواهیم معادله ای روی همه اندیس ها به غیر از یک اعمال شود چطور باید عمل کنیم؟ مثلا در برنامه زیر:
    eq(busno).. qp(busno)-loaddata(busno,’pd’)=v(busno)…
    به جای همه موارد اندیس busno، می خواهم یک مورد را جدا کرده و در معادله ای دیگر (با اعمال تغییرات لازم) اجرا کنم.

    • سلام
      مثلا اینجوری:
      eq(busno)$(ord(busno) =1)
      دلار یعنی به شرطی که و ord هم یعنی شمارنده Busno، اینجا اولین باس که تعریف شده رو مد نظر قرار داده، شما میتونین به جای ۱ عدد مورد نظرتون رو بذارین. بقیه محدودیت تغییری نمیکنه

  86. ببخشید منظورم این بود:
    اگر در قسمت معادلات بخواهیم معادله ای روی همه موارد یک اندیس به غیر از یک مورد از آن اندیس اعمال شود چطور باید عمل کنیم؟ مثلا در برنامه زیر:
    eq(busno).. qp(busno)-loaddata(busno,’pd’)=v(busno)…
    به جای همه مقادیر در اندیس busno، می خواهم مقدار شماره ۸ از این اندیس را از معادله فوق جدا کنم. در اینصورت اصلاح شده این معادله چطور باید نوشته شود؟
    با تشکر از پاسخگویی شما

  87. سلام ببخشید من در قسمتی از مدلم این عبارت را دارم
    objective..z=e=prod(i,u(i));
    اگر بخواهم اینها به صورت توانی در هم ضرب بشن باید چیکار کنم؟
    یعنی هر u(i) با یک توان متفاوت در هم ضرب بشن
    ممنون

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *