۱,۰۵۵

معادلات، تابع هدف و محدودیت ها

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

معرفی و اعمال این معادلات در دو بخش Equation Declaration و Equation Specification انجام می شود. مثال زیر را در نظر بگیرید:

Equation-Dec

همانطور که ملاحظه می شود، در بخش اول دستور یا Equation Declaration، به تعریف و اعلام اسامی تابع هدف و محدودیت ها به همراه وابستگی اشان به اندیس های متناظر می پردازیم. co6 را در نظر بگیرید؛ این گذاره صرفا اسمی است که توسط کاربر برای محدودیت ششم انتخاب شده است و هیچ ارزش دیگری ندارد. در حالی که co1(i,j) وابستگی محدودیت اول به اندیس های i و jرا نیز نشان می دهد. و این معادل همان علامت ∀ در جبر خواهد بود. پس در واقع co1(i,j) یعنی قید اول به ازای هر i و j باید برقرار باشد. محدودیت جبری معادل:

Equation-sample

در بخش دوم یا Equation Specification، در هر سطر، اسم هر معادله یا نامعادله که در بخش اول به تعریف آن پرداختیم، آورده خواهد شد و سپس دو نقطه (..) مطابق شکل بالا جلویش خواهیم گذاشت. دقت شود که اگر در قید، شرطی مانند i≠j نیز داشته باشیم باید این شرط را قبل از دو نقطه ای که گذاشته ایم اعمال نماییم. اگر مبتدی هستید، هیچگاه تایپ دو نقطه را فراموش نکنید! چون برطرف کردن خطاهایی که به هنگام run کردن مدل خواهید دید، انصافاً شما را به شدت عصبی می کند!
مثال: کد محدودیت زیر را مشاهده می کنید:
محدودیت:
Equation-sample2
کد:

*Example
co1(i,j,l)$(ord(i) ne ord(j)).. z(i,j,l)=l=z(j,j,l);

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

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

در معادلات و نامعادلات، دیگر از علایم ≠یا=،≤،≥ استفاده نمی کنیم. نمادهایی که در معادلات و نامعادلات در GAMS به کار می روند به قرار جدول زیراند:
equation-syms

از سنبل هایی که در جدول بالا معرفی شد، به ندرت پیش می آید که از =n= و =c= استفاده شود. در واقع این نمادها کاربرد خاص وتخصصی دارند.

جهت روشن تر شدن موضوع مثال زیر را در نظر بگیرید:
Equation-Example1

کد مربوط به به بخش معادلات این مدل به شکل زیر می تواند باشد:

*Example2
Equation
objective
Constraint1
constraint2
;
objective.. o=e=x1+x2 ;
constraint1.. x1*x2=l=10 ;
constraint2.. x1-x2=g=2 ;

دقت کنید که کد بالا کامل نیست و باید قبل از تعریف این معادلات متغیرهای x1 و x2 و همچنین متغیر مربوط به تابع هدف یا o قبلاً تعریف شده باشند.

بپردازیم به ادامه ی مثال کاربردی ۱:

مدل تنها دو محدودیت دارد. آن ها را به ترتیب cont1 و cont2 و تابع هدف را obj می نامیم. نتیجتاً کد مربوطه به صورت زیر خواهد بود:

Example1-Equation definition

بحث در باب تعریف معادلات در GAMS به اتمام رسید. با اندکی تمرین و دقت می توانید به سادگی تعریف کردنِ معادلات و وارد کردن تابع هدف و محدودیت ها را فرا بگیرید. مباحث تکمیلی در همین برگه خدمت عزیزان ارائه خواهد شد.

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

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

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

 

1,055 دیدگاه در “معادلات، تابع هدف و محدودیت ها

  1. مرسی، ولی نه اینجوری نیست
    من میخام ترتیب i ها در بیارم
    مثلا اگه میگم روی i از ۱ تا i-1 جمع بزنم منظورم اینکه روی اولین i(سفر) تا یکی مونده به آخرین سفر جمع ببندم، نه اینکه عدد خود i ها برام مهم باشه!

    (یعنی ممکنه اولین i باشه ۳ دومین i عددش باشه ۱ , من عدد i ها برام مهم نیست. فقط میخام اولین i و دومین i باهم جمع بشن بدون توجه به اینکه عدد i چیه
    )

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

  2. خیلی خیلی ممنون .ولی نمیشه با ord(i) بنویسم ؟

    میخوام بدونم همچین چیزی شدنیه که بنویسم K=0rd(i) بعد روی k تا k-1 جمع ببندم؟
    یا نمیشه ؟

    • طبق اون چیزی که من فهمیدم، خیر. چون شما هنوز نمیدونین که k چقدر هست، و مجهوله، پس نمیشه این دستور دلار رو براش نوشت. یه نگاهی هم به دستور ifthen داشته باشین، شاید اونم بد نباشه.

  3. من تعداد k رو میدونم چندتاست.
    اگر بدونم درسته؟
    میدونین من مطمین نیستم که مفهومord رو دزست فهمیده باشم
    اگر مفهوم ord رو دزست متوجه شدم فک کنم حرفم درست باشه.
    اگه فکر میکنین طبق صحبتم که مفهوم ord رو درست فهمیدم لطفا بگید بهم
    مرسی

  4. سلام ببخشید من قبلا ی سوال پرسیدم و شمام جواب دادید ولی درک نکردم. یه بار دیگه میپرسم شاید بتونید بهترراهنمایی بکنید. یه سامیشن دارم که از k(i) شروع میشه و تا عدد ۶ ادامه داره. حالا خود k(i) یه پارامتره که بین یک تا سه هست. این میشه اینجوری نوشت؟
    scalar
    i number of subsystems/s1*s14/;
    parameter
    k(i)/ s1 2,s2 1,s3 3,s4 2,s5 1,…/;
    .
    .
    .
    obj..rly=e=sum((k(i)$(ord(k(i)),…);

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

  5. =سیگما از f برابر با ki تا ۶ سیگما از q تا ۴
    f یه شمارنده هست.
    ki یه پرامتره( چهارده تا عدد)
    q یه مجموعه هست از یک تا چهار.
    ممنونم.

  6. سلام اگه بخوایم حد بالای سامیشن و بذاریم چطوری میشه؟
    مثلا بگیم سامیشن از l ( ی اندیس از صفر تا شیش) تا q-ki
    q یه شمارنده از صفر تا شیش
    ki یه پارامتر (عدد تصادفی بین یک تا سه)
    i یه اندیس از یک تا چهرده.
    خیلی ممنون.

  7. sets
    i/1*14/
    e/a,c/;
    parameter
    U(i)/1 a,2 a,3 a,4 a,5 a,6 a,7 a,8 a,9 c,10 c,11 c,12 c,13 c,14 c/;
    توی تابع هدف یه سیگما دارم که حد پایینش گفته اگر i عضو a بود آنگاه ال ان بعدش یه سیگما دیگه… میشه اینطوری نوشت؟ اگه نه چطوری درست میشه؟
    sum(u(i) $(ord(u(i)=k(i)),l $(ord(l)=ord(k(i)))),fctrl(q)/(fcrtl(l)*fctrl(q-l))

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

    • من این جوری برداشت کردم که باید یک پارامتر اولیه تعریف کنی و بری سراغ حلقه فور بعد هر تغییری که می دی در نهایت د ر این پارامتر بریزی مثلا
      parameter A(i,j);
      A(i,j)=uniform(1,10);
      for i=1:end
      A(i,j)=A(i,'1')*10;
      end

  9. با سلام و خسته نباشید
    سوالم این بود که من یک محدودیت به فرم زیر دارم
    (CC(iii,j,k)-S(iii,j,k
    الان می خوام متغییر CC آخرین عضومجموعه iii را اختیار کنه ولی متغییر S اولین جمله همان مجموعه را.
    چه شرطی باید بزارم ؟

  10. سلام. وقت بخیر. ممنون از سایت خوبتون.
    من یه متغیر مثل (p(t,k,q دارم. حدود این متغیر به شکل جدول زیر است:
    (table Pmax(k,q
    q1 q2
    k1 150 200
    k2 25 75
    تا وقتی (p(t,k,q برای q1 به مقدار (Pmax(k,q1 نرسد، (p(t,k,q برای q2 مقدارش صفر است. یعنی (p(t,k,q برای q2 تنها زمانی میتواند مقدار غیر صفر داشته باشد که(p(t,k,q برای q1 به مقدار (Pmax(k,q1 رسیده باشد. به عبارتی میخوام یک تابع پله ای صعودی رو تعریف کنم. این محدودیت در گمز چطور بیان میشه؟

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

        • سلام توی محدودیت های گمز نمی تونین از حلقه ها و شروط استفاده کنین و گمز ارور می ده. فقط می تونین از دستور ifthen استفاده کنین.

          X=e=ifthen(condition,expressioniftrue,expressioniffalse);

  11. با عرض سلام و وقت بخیر خدمت جنابعالی . ببخشید مدل من شامل ۷ تابع هدف می بود که آنها را یکی یکی در گمز تعریف نموده ام و چون تابع هدف کلی از مجموع آن ۷ تابع می بود تابع کلی به صورت Min zA =∑_۱^۷▒max⁡z نوشته ام البته مدل دو هدفه می باشد و یک تابع دیگر نیز دارم که به صورت Min zB =Max Cikتعریف شده است. نمیدانم کد مربوط به توابعی که هم شامل مینیمم و هم ماکزیمم هست چگونه نوشته می شود.لطفا بهم کمک کنید. خیلی ممنون از شما و وب سایت خیلی خوبتان.

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

  12. با سلام و عرض خسته نباشید خدمت شما. و با تشکر از سایت خیلی خوبتان. ببخشید من مطالب آموزشیتان را مطالعه نمودم و از آنها استفاده نمودم ولی متاسفانه به مقصود خود نتوانستن برسم و سوالم برطرف نگشت. مدل ریاضی خودم را در گمز اجرا نموده ام و حال برای دو تابع هدف در مدلم از روش رباست استفاده نمودم و آنها را با روش رباست نوشته ام ولی نمی دانم که کد گمز مربوط به انجام توابع رباست چگونه است.دو تابع به صورت زیر می باشند. ممنون می شوم که کمک کنید.
    Zs1= ∑_(s∈)▒p_s z1s + ∑_(s∈)▒p_s )z1s – ∑_(s∈)▒p_s z1s )2
    Zs3= ∑_(s∈)▒p_s z3s + ∑_(s∈)▒p_s )z3s – ∑_(s∈)▒p_s z3s )2

  13. سلام ببخشید من زیاد متوجه توضیحتان نشدم متاسفانه.من یک تابع هدف minzb=maxcik اگر در اینجا b,i,k اندیس باشند با محدودیت zb بزرگتر مساوی است با ci,k را داشته باشم. ابتدا maxcik=u یک مقداری مثل u نمودم.حال در گمز به صورت زیر نوشته ام.که در ادامه توابع قبلی مدلم آورده ام. یعنی این تکه تازه به کارم اضافه شده است.
    obj6.. z4=e=u(i,k);
    obj7.. ZT2=e=we1*z4;
    cont13(i,k).. zt2=g=c(i,k);
    تکه قبلی مدلم در گمز بدونه هیچ errory ران گشته ولی این تکه کار که اضافه شده خیلی مشکل برخوردم.حالا آن قسمت مربوط به solve را می دانم حل می نمایم ولی قسمت مربوط به تابع هدف و محدودیت را نمی داانم چگونه اضافه نمایم.من بعد از اضافه شدن این قسمت به کارم یک مجموعه k به مدل اضافه نموده ام با یک متغیر u به قسمت متغیر ها. و پارامتری ندارم در تابع هدفم یعنی minzb=maxcik که i و k به صورت اندیس بوده و در set تعریف شه است.خیلی ممنون میشوم که کمکم نمایید تا بدانم چگونه باید کد گمز این قسمت را بنویسم و به ادامه مدلم اضافه نمایم.خیلی ممنون از وب سایت واقعا ضروری و خوبتان برای ما.

  14. با سلام خدمت شما. میشه در نوشتن کد زیر کمکم نمایید.اگر تابع هدف MinZ1=MaxQik باشد و محدودیت آن ■(Z1≥Qik &∀i,k)باشد. ابتدا من اماده ام مقدار MaxQik را برابر با عبارت E قرار داده و در ادامهMin Z1 = E با محدودیت E ≥ MaxQik نمیدانم تا اینجای کار درست است یا خیر؟؟؟کد آن در گمز به صورت زیر میزنم اررور میده. میشه کمک کنید. و اینکه ایا در اینجا باید پارامترم تعریف بشه؟؟؟ چون فقط تابع هدفم یک متغیر هست. نمیدانم پارامتر چی بزنم.


    set
    /i productions /i1*i10

    k machines /k1*k5
    positive variables
    E(i,k)
    Equations
    obj1.. Z1=e=E(i,k);
    cont1(i,k).. E=g=Q(i,k);

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

    • سلام
      مرسی و خواهش میکنم.
      ببینید شما هدفتون کمینه کردنه. وقتی همه چی رو متغیر تعریف کنین، گمزم میگه خب به نفعمه یه کاری کنم که تابع هدف صفر بشه (چون E بزرگتر مساوی با صفر هست). و میره صفر رو بهش میده. وقتی مشکلی پیش نمیاد میگه اوکی. جواب همینه. مدل شمام همینجوریه دقیقا. با این دو معادله ای که نوشتین مدل به جایی نمیرسه. از پارامتر هم باید استفاده کنین حتما. از طرفی E رو همه جا با اندیس i,k باید تعریف کنین.

  15. وقت شما بخیر
    چه طور میشه در محدودیت ها از بین دو مقدار ماکزیمم رو بدست بیاره

    مثلاً میزان تاخیر برابر است با تفاضل زمان تکمیل و زمان سررسید است و چون بعضی مواقع منفی میشه میخوایم که صفر حساب کنه.
    (max(0,d-c

    • سلام
      شما به همین شکلی که نوشتین میتونه درست باشه. ولی همه ی سالورها این تابع رو پشتیبانی نمیکنن.
      همچنین این رویه تابع نویسی باعث میشه مدل غیر خطی بشه. بهتره با یه سری تکنیک و خلاقیت خطیش کنین. و محدودیت معادلش رو بذارین به جاش.
      مثلا فرض کنیم. هدف کمینه کردن x هست.
      شما برای عبارت x=max(0,d-c) میتونین بنویسین x=g=d-c
      دیگه بستگی به مدل و خواسته ها و ساختار مدل شما داره.

  16. باسلام من نیاز به یک مدل جدید ریاضی دارم .
    دومقاله را باهم ترکیب کردم وکد را برای مدل جدید نوشتم ولی برای تنظیم و هماهنگی بین تابع هدف و محدودیت مدل جدید مشکل دارم در یکی از محدویت ها نیاز به محاسبه رگرسیون است و در نحوه تعریف ورودی ها مشکل دارم.کد و مقالات را ایمیل کردم لطفا راهنمایی کنید.

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

    مجموعه ها را به صورت ذیل تعریف نموده ام:

    SETS
    i/0*5/
    k/1*2/
    subi(i)/1*5/
    h/1*2/
    u/1*2/
    ;

    alias (i,j,p);
    alias (subi, subj);

    و می خواهم محدودیتی به صورت زیر بنویسم که در آن متغیرهای تصمیم باینری هستند:

    e14(i,j,k,h)..x(j,p,k-1,h)=L=2-x(i,j,k,h)-y(i,j,h);

    اما با ارور زیر مواجه می شوم:

    e14(i,j,k,h)..x(j,p,k-1,h)=L=2-x(i,j,k,h)-y(i,j,h);
    **** $149

    149 Uncontrolled set entered as constant

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

  19. سلام
    لطفا میشه راهنمایی کنید تابع زیر رو که مربوط به ازاد سازی لاگرانژ هست به چه شکل میشه کد کرد
    min∑∑▒〖 zij*√(〖(xi-xj)〗^۲+〖(yi-yj)〗^۲ )+u(i)*(bi-∑ (qj*zij)) 〗

    I=1 to 6
    J= 1to 30

      • سلام
        تابع هدف شما دو بخش داره. برای هر کدوم سامیشن جدا در نظر بگیرین بهتره.
        با این حال پس شما باید یک پرانتز (پرانتز بسته) دیگه به بخش اول اضافه کنین و یه سامیش روی i به بخش دوم (شامل u,b,…) اضافه کنین. این ارور نشون میده که شما یه بار روی j سام نوشتین و دوباره بدون اینکه سام قبلی رو ببندین دوباره دارین روی j سام میزنین.

        • **** The following MIP errors were detected in model allocation:
          **** 51 equation obj.. the function POWER is called with non-constant arguments
          **** 51 equation obj.. the function POWER is called with non-constant arguments
          **** 51 equation obj.. the function SQRT is called with non-constant arguments
          **** 56 equation obj.. VAR operands for *

          سلام
          مجددا برای زحمت مزاحمتون شدم
          من مدلم رو نوشتم . مدل مکانیابی تخصیص که با لاگرانژ باید حل کنم . برای ۳۰ مکان اعداد تصادفی تولید کردم . اما با توجه به اینکه ریشه دوم عدد ثابت میخواد و ارور گرفته شما فکر میکنید من باید به چه شکلی اعداد تصادفی رو در بیارم که ایراد نگیره

  20. با سلام و احترام

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

  21. سلام. binary زمانی استفاده میشه که میخوایم جوابو صفر یا یک کنیم. زمانیکه سه شرط دارم چکار کنم. مثلا:
    max v
    sum(j,x(i,j))-sum(k,x(k,i))={v if i=s(source) ,-v if i=t(sink) ,0 o.w.}
    یا مثلا:
    if -1 (i=0),1 if (i=d and s=S), 0 o.w

  22. سلام
    من یک مدل برنامه ریزی دو هدفه دارم که میخام با برنامه ریزی ارمانی حل کنم. میشه بگید به چه شکلی میتونم توی گمز کد نویسیی کنم؟ تشکر

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

      • سلام اقای محمودی
        من مدل دو هدفه رو مبخام به روش لکسیکوگراف حل کنم.بنظر شما اینجوری کد نویسی درست هست؟
        متشکرمم

        sets m number of objective /1*2/
        I /i1,i2/ ;
        Positive Variables x[I];
        Variable f1,f2;
        Equation g1,g2,Obj(m1),Obj(m2);
        g1.. 2.5 - 0.5*power{(x['i1'] - 2),3} - x['i2'] =g= 0;
        g2.. 3.85 + 8*sqr(x['i2'] - x['i1'] + 0.65) - x['i2'] - x['i1'] =g= 0;
        * ... objective functions
        Obj(m1).. f1 =e= sqr(x['i1'] + x['i2'] - 7.5) + 0.25*sqr(x['i2'] - x['i1'] + 3);
        Obj(m2).. f2 =e= 0.25*sqr(x['i1'] - 1) + 0.5*sqr(x['i2'] - 4 );

        alias (m,j);
        parameter p(m) ’selection of objective’;
        equation objective ’select correct obj by assigning to p’;
        objective.. obj =e= sum(m,p(m)*Obj(m));
        model ap /all/;
        loop(j,
        * select correct objective function
        p(m) = 0;
        p(j) = 1;
        * solve problem
        solve ap using nlp maxiimizing obj;
        * add fixed objective
        obj.fx(j) = obj.l(j);
        );

        • سلام
          خیر. اینجوری p رو همیشه یک میگیره. قضیه رو خیلی ساده بگیرید.
          مدل یه بار با هدف اول حل میشه (دستور solve اول) و هدف اول fix میشه.
          تو مرحله بعد هدف دوم حل میشه (دستور solve دوم)
          همین کافیه برای شما.

  23. سلام و خسته نباشید
    من یک مسئله زمانبندی رو میخوام در گمز کد کنم با هدف min کردن سیگما wj در Uj
    و با استفاده از الگوریتم کوله پشتی
    سه تا کار دارم میخوام بگم همه ترتیب های ممکن از هر سه تا کار رو که میشه ۶ حالت حل کنه بعد کوچکترین مقدار حاصل رو نمایش بده.
    این رو چطوری میتونم کدشو بنویسم توی گمز؟؟

      • سلام
        اندیس i برای تعداد کارها هست که سه تا کار داریم.برای پارامترها هم (p(i زمان پردازش هر یک از کارها و (w(i مطلوبیت هر یک از کارها هست و یک پارامتر دیگه به نام maxw داریم که مقدارش ۱۰۰ هست. و (u(i هم متغیر باینریه. و تابع هدف هم سیگماu(i)*(w(i هست.میخوام بگم تمام ترتیب های ممکن از این سه تا کار رو در نظر بگیره و مقدار تابع هدف رو برای هر کدوم به دست بیاره. یعنی مثلا یک بار u کار یک رو برابر یک قرار بده تابع هدف رو محاسبه کنه یک بار u کار یک و دو رو برابر یک قرار بده و به همین ترتیب که کلا ۶ حالت میشه.بعد کوچکترین مقدار به دست اومده رو display کنه
        منظورم این بود که این دستورها رو چطوری بنویسم توی گمز

        • خب ظاهرا شما تابع هدفتون سیگما u*w هست. پس من در این مورد نظری نمیدم.
          ولی برای display کردن کمترین مقدار u*w بهتره شما یه پارامتر به اسم مثلا UW تعریف کنین. و بعد از دستور solve بیاین کد زیر رو قرار بدین:

          UW=smin(i,u(i)*w(i));
          display UW

        • خیلی ممنون از پاسخگوییتون
          میشه این رو هم راهنمایی کنید من تابع هدف و محدودیتم به این صورت هس
          (max z= ∑u(i)w(i
          100=<(∑u(i)p(i
          i=1,2,3
          11=(p(3)=90 ,p(2)=9 ,p(1
          1,0=(u(i
          میخوام با در نظر گرفتن محدودیت بالا تمام جوابهای ممکن برای z به دست بیاد.این رو چطور میتونم کد کنم؟

        • معادله رو خوب ننوشتین، البته چاره ای هم نیست، مقداری کامنت گذاری اصول خودش رو داره برا فرمول نویسی.
          یعنی چه مقادیر ممکن z؟

    • سلام
      برای فاکتوریل در گمز fact(n)
      و برای سوال دومتون فرض کنیم اینجوری تابعه minMax x+2 حالا معمولا میان x+2 رو مساوی یه چیزی قرار میدن. مثلا A بعد میبرنش تو محدودیت ها و میگن که x+2>=A و تابع هدف رو اینجوری مینویسن. Min A

  24. سلام
    ببخشید این بخشی از مدل من هستش
    L(k,d)=I(k,d) ∀K∋K│t(k)=1,∀D∋D
    k اندیس مسیر
    D اندیس انبار
    t(k) پارامتر : روزی که در ان مسیر k زمان بندی میشود
    L(k,d) متغییر باینری : اگر مسیر k از انبار d شروع شود
    I(k,d) متغییر باینری : اگروسیله نقلیه مربوط به k در ابتدا در انبار d باشد.
    این محدودیت رو چطور میتونم کد کنم ( مشکل من روی t(k) هستش )
    باتشکر از شما و سایت بسیار خوبتون

    • سلام
      مچکرم و خواهش میکنم.
      اگر اون t متغیر هست، پس میتونین از دستور ifthen استفاده کنین که مدل رو غیر خطی میکنه. در صورتی که میخواین غیر خطی نشه، باید با مقداری خلاقیت از M بزرگ یا متغیرهای صفر و یک کمکی یا ترکیب هر دوی اینها یا روشهای دیگه ی خلاقانه استفاده کنین که این مفهوم رو پیاده کنین.
      اگر طبق اون چیزی که شما گفتین t پارامتره، که t رو اول تعریف و عدد دهی کنین، تو مرحله بعد تو محدودیت با استفاده از دستور دلار $(t(k)=1) شرط رو اعمال کنین. مثالاش تو کامنتای بالا هست.

      • مرسی از کمکتون
        یعنی من میتونم یه متغیر پیوسته مثلا زمان رو در اندیس یه متغیر بیارم
        مثلا T زمان اتمام مسیر که متغیر پیوسته هستش و S(T,c) موجودی در زمان T (که متغیر بود) در انبار c (اندیس)

        ببخشید الان من یه محدودیت دارم

        Y(i,k)≤ E(i,V(k)) ∀i∋I , ∀K∋K
        Y(i,k) متغیر : اگر مشتری i توسط مسیر k خدمت ببیند .
        E(i,k) متغیر : اگر مشتری i توسط وسیله نقلیه v خدمت ببیند .
        V(k) پارامتر : وسیله نقلیه مربوط به k
        چطور میتونم اینو کدکنم

        • خواهش میکنم.
          این محدودیت بحث خواصی روش نیست. فقط قضیه روی E هست. درسته که باید توی فرمول ریاضی نوشت v(k) ولی باید سه تا اندیس براش گذاشت، به این اینصورت: E(i,v,k)
          بسته به مدل شما ممکنه همین که هرجای مدل v(k) دیدین، باید دو اندیسه کنین و همین براش کافی باشه.
          ببینید یه بحثی هست تو تعریف اندیس ها بهش میگن multi-dimensional sets که تو یه تاپیک جدا توضیحش دادیم. اونو بخونین ایده اینکه v(k) رو چجوری بیارین تو مدل رو یاد میگیرین. توصیه من اینه که یه متغیر چندبعدی به نام vk(v,k تعریف کنین و تو اون محدودیت (که E رو سه اندیسه کردین) یا محدودیت های مشابه که v(k استفاده شده توشون به عنوان شرط به کار ببرین.
          این تاپیک رو بخونین

  25. با سلام و خسته نباشید
    مرسی از کمکتون RUN شد .
    ببخشید من یه متغیر Boolean به نام Z(k) دارم که به معنی این است که Z(k) برابر ۱ است اگر مسیر k جز راه حل باشد
    v اندیس : مجموعه وسیله نقلیه V=(1,……,Vmax)
    میخواستم بدونم Z(k-Vmax) یعنی اخرین ماشینی که به مسیر تخصیص داده شده است هستش یا نه و اینو چطور میتونم کد کنم
    باتشکر

  26. با سلام
    در تعریف متغیرها اگر بخواهیم روی اندیس متغیر شرط گذاشت به چه شکل باید نوشت؟
    به طور مثال(X(i,n که /i/0*5 و i برای متغیر X حتما صفر باشد.

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

      $(ord(i)=1)

      این مساوی یک منظور همون صفر شماست (شماره نده ش یک باشه یعنی اولین عضوش)

      • ممنونم
        ببخشید مسأله من دو هدفه و مدل به صورت MIP است وقتی به قسمت آخر میرسم و دستور SOLVE به ازای تابع هدف اول و محدودیت ها میدم خطای زیر را پیغام میده مفهومش چیه؟

        ۵۱ Endogenous function argument(s) not allowed in linear models
        256 Error(s) in analyzing solve statement. More detail appears
        Below the solve statement above

        • سلام
          مدل شما خطی نیست. و بخشی غیر خطی توی مدل شما هست. از عباراتی مانند minlp و nlp و dnlp استفاده کنین.

  27. با عرض سلام و خسته نباشید
    من یک متغیری دارم که در دو محدودیت دو اندیس متفاوت گرفت و نمی دونم اینو چطور کد کنم
    متغیر پیوسته x(r,k,p) :مقدار محصول تحویل داده شده به مشتری r توسط مسیر k در دوره p
    متغیر پیوسته y(c,k,p) :مقدار محصولی که توسط مسیر k در دوره p به انبار c وارد می شود.
    پارامتر I(c,p) : مقدار محصول ذخیره شده در مرکز توزیع c در دوره p
    اندیس p : مجموعه ای از دوره ها
    پارامتر fmax : حداکثر مدت متوالی که محصول می تواند ذخیره شود
    محدودیت ۱
    I(c,p-1)+sum(k,y(c,k,p)) =sum((r,k), x(r,k,p))+I(c,p) ∀ p∈P,c∈C
    محدودیت ۲
    I(c,p) ≤ (∑ p-fmax-1 <f< p -1 ∑k x(r,k,f)) ∀ p∈P,c∈C,r∈R
    p-fmax-1 <f< p -1 و k اندیس های زیر سیگما هستن
    مشکل بنده روی اندیس متغیر x هستش .
    با تشکر و مرسی از سایت بسیار خوبتون

    • سلام
      تشکر و خواهش میکنم.
      برای f از دستور alias استفاده کنین. بخش مجموعه ها رو ببینید.
      برای اون شرطی هم که گفته شده، از دستورات شرطی نظیر دلار $ و ord استفاده کنین. مثالاش رو تو کامنتای بالا می بینید.

    • سلام
      میتونین اینو دو تا محدودتش کنین.
      یا اینکه میتونین بعد از تعریف متغیرتون شرط کران بالا و پایین براش بذارین. مثلا اینجوری بنویسین.
      Qk.lo=Qkmin
      Qk.up=Qkmax

  28. سلام خیلی ممنون بابات سایت خوبتان. من یک محدودیتی به شکل زیر تعریف کردم ولی ارور ۹۶ رو گمز میده. مشکل چیه؟ ممنون میشم اگ جواب بدین
    co2(drp,t)$(ord(t)>1)

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

  29. سلام و خسته نباشید
    ببخشید من یه محدودیت دارم به صورت زیر هستش ایا این منطق برای مدل کردن درست هستش و اگه بله میشه کدشو بنویسین .

    متغیر پیوسته I(r,k-1) : میزان موجودی مشتری r در دوره منهای ۱ که وسیله نقلیه k زمانبندی می شود
    متغیر پیوسته sp(r,k) : میزان تقاضای مشتری r که توسط وسیله نقلیه k در همان دوره تحویل داده می شود .
    متغیر پیوسته I(r,k) : میزان موجودی مشتری r در همان دوره ای که وسیله نقلیه k زمانبندی می شود.
    پارامتر t(k) : روزی که وسیله نقلیه k زمانبندی میشود
    محدودیت
    I(r,k-1) + ∑ w∈k ,sp(r,w) = q(r) + I(r,k) ∀K∈K│t(k)≥۱,∀r∈R

    فکر کنم با دستور ord , alias باید بنویسم ولی دقیق نمیدونم چجوری هستش یا اصلا منطق محدودیت درست هستش یا نه .
    باتشکر از سایت بسیار خوبتون

    • سلام
      دوست عزیز شما به سه تا اندیس احتیاج دارین! k,r,t
      مدلهای موجودی رو حتما ببینید شما. حسی مدل ندین. اینجوری بیشتر وقتتونو میگیره. یه مدل پایه برای کارتون انتخاب کنین و همون رو توسعه بدین خیلی صرفه جویی میشه و سردرگمی هم از بین میره.

      • سلام خسته نباشید
        ببخشید من اینو داخل یه مقاله دیدم فقط با این تفاوت که I(r,k) بجای متغیر پارامتر بود یعنی با حالت پارامتر هم این مدل بی معنی هستش
        باتشکر

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

  30. با سلام محدودیت زیر را چطور میشه کد بندی کرد ممنون میشم اگه راهنمایی کنید
    j ∑_q(QIJ)_ijp =∑_v ∑_e (QVI)_vie + ∑_k ∑_p (QKI)_kip ∀i ∈I_∑
    من به صورت زیرکد بندی کردم ولی ارور میده
    ;((constrict4 .. sum((j,p),QIJ(i,j,p))=e= sum((v,e),QVI(v,i,e))+ sum((k,p),QKI(k,i,p

    Uncontrolled set entered as constant

  31. سلام خسته نباشید
    مرسی از کمکهای همیشگی شما
    ببخشید من از داده های یه مقاله استفاده کردم اما یجا نوشته بود مقادر
    پارامتر d(r)∈u[1,400] و df(r) =d(r)-q(r)∈ u[1,400] و w(r)-d(r)∈u[1,400]
    مشکل من روی دوم وسومی هستش که چطور این مقدار رو وارد کنم چون وقتی df(r) =d(r)-q(r)= uniform[1,400] و w(r)-d(r)=uniform[1,400]
    کد میکنم خطا میده .
    باتشکر از سایت بسیار خوبتون

  32. سلام خسته نباشید
    یه سوال داشتم : محدودیت به صورت زیر رو چه جوری باید کد نویسی کرد که اشتباه نباشه،گمز به p+1 که در اندیس u نوشتم ایراد میگیره

    co14(o,oo,p,g) ..u(o,p,g)*u(oo,p+1,g)=e=eu(o,oo,p,g)

    ممنون میشم کمکم کنید

  33. با سلام و احترام و ضمن سپاس از راهنمایی موثر شما
    من در مدلسازی مساله ای با نرم افزار GAMS با مشکلی مواجه شده ام. توضیحات و کد را به ایمیلتان ارسال نموده ام. خواهشمندم در صورت امکان راهنمایی فرمایید.

  34. با سلام
    قصد دارم یک محدودیت برای کنترل رعایت پیشنیازی در مساله زمانبندی پروژه بنویسم که در آن اندیس j محدودیت روی تمام مقادری j هستش و اندیس jj آن روی اعضایی از j که در عنصر j ام از مجموعه p عضو باشد(عنصر j ام p پیشتیازهای فعالیت j را نشان میدهد) در واقع اعضای p میتوانند هر یک خودشان یک مجموعه باشند
    این مورد چه طور باید انجام شود
    co5(j,jj) ..sum((t,m),x(j,m,t))=l=sum((t.m),x(jj,m,t))

  35. ممنون تو همون قسمتی که گفتید روش کار رو پیدا کردم

    ولی الان برای محدودیت زیر خطای کمبود پرانتز (۸) برای بعد از $ میده
    co6(e) ..sum((j$(eq6(e,j)),t,m),x(j,m,t))=e=sum((j$(eq66(e,j)),t,m),x(j,m,t))

  36. سلام و عرض ادب
    درمقاله ای که من کد آن را نوشتم یک محدودیتی دارد که دو مجموعه روی یک سیگما نوشته شده است . در اینجا روی یک سیگما مجموعه i و j که مجموعه گره ها میباشند نوشته شده است. i, j هردو عضو مجموعه کمانها هستند. چطور این را وارد گمز کنم.ممنون از راهنماییتون

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

  37. سلام خسته نباشید
    اگر قیدی به صورت زیر داشته باشیم
    ۱<a<b<3
    a کوچکتر از b و بزرگتر از یک و b بزرگتر از a و کوچکتر از ۳٫
    اگر در معادلات سیگما روی a تا b تعریف شود در گمز به چه ثورت باید نوشت؟
    با تشکر

  38. سلام
    خسته نباشین
    یه سئال از خدمتتون داشتم ممنون میشم راهنمایی بفرمایید
    من در معادلاتم میخوام یه شرطی رو وارد کنم که اون شرط تابع یک متغیره
    cost=e=sum( NDG,DGData(NDG,’replacement-cost’)*sum( i $ (ord(i) le NrepDG(NDG)),1/((1+realrate)
    NrepDG(NDG) خودش یک متغیره و اجازه نمیده همچین شرطی رو وارد کنم
    ممنون میشم راهنمایی بفرمایید چیکار باید بکنم

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

  39. سلام
    من میخواستم کدی بنویسم که عدد تصادفی ۱ یا -۱ را برای من تولید کند، یعنی فقط همین دو عدد و نه عددی در بین آنها، برای اینکار از دستور if به شکل زیر استفاده کردم، ولی خطا داد. ممنون میشم راهنمایی کنید.

    sets i /1*600/
    sets j /1*3/
    ;

    parameter R1(i,j);
    execseed = 20000*(frac(jnow));
    R1(i,j)=uniform(-1,1);
    if (R1(i,j)>=0 ,
    R1(i,j)=1;
    else
    R1(i,j)=-1;
    );

    • سلام
      اینشکلی بنویسین.

      sets i /1*10/
      sets j /1*3/
      ;

      parameter R1(i,j);
      execseed = 20000*(frac(jnow));
      R1(i,j)=uniform(-1,1);
      loop((i,j),
      if (R1(i,j)>=0 ,
      R1(i,j)=1;
      else
      R1(i,j)=-1;
      );
      );
      display r1

  40. سلام
    خسته نباشین
    ببخشید به مشکلی برخوردم ممنون میشم راهنمایی بفرمایید
    در معادلاتم یه تقسیم بر بک نتغیری دارم که ممکنه در ران برنامه صفر بشه و یه عبارت تقسیم بر صفر ایجاد کنه
    که در اینصورت از برنامه خارج میشه
    نمیتونم به عبارتی شرطی رو متعیر هم تعریف کنم
    میخ ام در انتهای برنامه یه ایف تعریف کنم که وقتی این اتفاق افتاد کل جواب نعادله دو صفر کنه و دوباره برنانه رو ران کنه
    میشه راهنمایی بفرمایید چطور این کار و بکنم
    چطور این کد ارور رو بشناسونم به برنامه
    ممنون میشم کمکم کنید

  41. با سلام
    دو محدودیت زیر
    ①A(i,k)+(∑(B(i,j,k).C(i,j,k)))–D(i,k)=A(i,k+1) for each i and K
    ② A(i,1)=0 for each i and k=1
    رو در گمز بصورت زیر کد کردم:
    Positive Variable
    A(i,k)
    A(i,k).fx(i,”1″)=0
    Binary Variables
    C(i,j,k)
    Integer Variable
    B(i,j,k)
    equations
    C(i,k)..loop(k, A(i,k+1)=e= A(i,k)+sum( B(i,j,k))* C(i,j,k)- D(i,k)));
    ولی متوجه شدم هم اینکه گمز اجازه استفاده از دستور های loop و for رو در قسمت معادلات نمیده و اینکه حتی اگر هم این اجازه رو میداد معادله مذکور به درستی کار نمیکنه و با خطا مواجه میشه
    ممنون میشم راهنمایی بفرمایید که این محدودیت رو چطوری کد کنم و اینکه از حلقه ها در کجا میتونم استفاده کنم
    با تشکر از بذل توجه شما

    • سلام
      متن بالا رو حداقل یه بار بخونین. شیوه معادله نویسی در گمز این شکلی نیست. لوپ نباید بیاد. همینکه بگین c(i,k) خودش به این معنی هست که محدودیت به ازای هر i,k باید صادق باشد و عمل خود لوپ رو هم انجام میده یه جورایی. پس بیخیال لوپ بشین

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

  42. با سلام و وقت بخیر…می‌خوام یک معادله شرطی بنویسم اما با اررور روبه‌رو می‌شم…ممنون می‌شم راهنمایی کنید
    J مجموعه از ۱ تا ۱۳
    A پارامتر دوبعدی تعریف شده
    X متغیر باینری

    در واقع می خوام دو تابع رو با هم جمع کنم به طوری که جملات تکراری اون ها فقط یک بار نوشته بشه‏ مثلا:
    f2=x2+x3+x5+x7+x9
    f7=x2+x7
    می خوام جمعشون به این شکل بشه:
    f=x2+x3+x5+x7+x9

    F $ (A (‘2’,j) ne A (‘7’,j)) .. sum (j,A (‘2’,j)*x (j)+sum (j,A (‘7’,j)*x (j)=g=1

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

      f2..(sum(j,A(‘2’,j)*x(j))+sum(j,A(‘7’,j)*x(j)))=g=ifthen((A(‘2’,j)*x(j)eq 1) and (A(‘7’,j)*x(j)eq 1),(1+x(j)),1);
      ارور هم اینه: Uncontrolled set entered as constant

    • سلام
      مقداری سوال شما گنگ هست. ولی به عنوان یه جواب اولیه اینو داشته باشین که یه اندیس کافی نیست برای کد نویسیش احتمالا. شما اندیس i هم که آلیاس j هست رو هم باید تعریف کنین.

  43. بله درست می فرمایید i هم باید تعریف شود. ولی کلا من با کاربرد ifthen مشکل دارم و همیشه با اررور روبه رو می شم. بدون ifthen حلش کردم به این شکل:

    f2 .. (sum(j,A(‘2’,j)*x(j))+sum(j,A(‘7’,j)*x(j)))=g=1+sum(j,((A(‘2’,j)*A(‘7’,j))*x(j)));
    این طور جملات تکراری رو سمت راست نامعادله هم تولید می کنه در نتیجه جملات تکراری حذف خواهند شد. ولی دوست داشتم با ifthen حلش کنم.

    • به نظرم بهترین کار اینه که:
      A1(i) رو که یه پارامتره به عنوان ضریب x(i در تابع هدف اول تعریف کنین. یه برداره قاعدتاً
      A2(i رو که یه پارامتره به عنوان ضریب x(i در تابع هدف دوم تعریف کنین. یه برداره قاعدتاً
      این دو تا A1,A2 یه بردار هستن که یا صفر و یا یک هستن.
      برای نوشتن تابع هدف سوم کافیه بنویسین:
      f3=Sum(A1*A2*xi

  44. با سلام و تشکر از سایت بسیار کاربردی و مفیدتون‏ من یک سوال دیگه داشتم قصد دارم یک معادله در گمز تعریف کنم که یک sum رو محاسبه کنه به صورتی که اگر یکی از جملات ۱ شد بقیه صفر بشن یعنی از مجموع جملات تنها یکی از اون ها اجازه ۱ شدن داشته باشه ممکنه همه صفر بشن اما اگر یکی از اونا ۱ شد باید بقیه صفر بشن: تمام set ها و پارامترهای برنامه به درستی تعریف و مشخص شدن

    h(i) .. sum(j,y(i,j))

    معادله بالا رو چطوری باید توسعه بدم که توضیحاتی که در بالا دادم اتفاق بیفتن؟ ممنون می شم راهنمایی کنید

      • با سلام…در این سوالی که از خدمتتون پرسیدم متغیر من که y هست باید حتما باینری باشه و نمی‌تونه از نوع sos1 باشه…ممنون می‌شم اگه با فرض باینری بودن متغیر پیشنهادی برای حل سوالم بیان کنید

        • سلام
          طبق چیزی که فرمودین، شما باید یه متغیر بایندری y تعریف کنین و یه محدودیت به مدل اضافه کنین، به این شکل که:

          sum(i,y(i))=1

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

        • سلام
          خب مجموعشون رو بزنین کوچکتر مساوی ۱
          اینجوری چیزی که شما فرمودین رو پوشش میده

  45. با سلام و احترام
    ممنون میشم درمورد سوالم راهنماییم کنید.
    در مساله طراحی خانواده محصول در زنجیره تامین دوتا از متغیرام که بهم مربوطند مقدار نمیگیرن
    Located
    Quantity
    سه تا محدودیت ارتباط این دوتارو بیان میکنه،یک میگه اگه خرده فروش k فعال بشه در این صورت میتونه به مشتری نوع ان محصول بده ، که quantity مقداره
    محدودیت دوم داره میگه حجم محصولی که خرده فروش k به مشتری n عرضه میکنه باید کمتر از میزان تقاضای پیش بینی شده است
    که سمت راست مربوط به تقاضاست
    محدودیت ۷ میگه حجم محصول بیشتر از دلتاست. دلتا حداقل سفارش پیش بینی شده مشتری هست

    limit1(k,n)..quantity(k,n)=l= located(k)*bm;

    limit2(k,n)..quantity(k,n)=l= b(k,n)*demand(k)+gamma(k,n)*(sum((i,j)$bx(i,j),qx(i,j)*o(i,j,n))
    +sum((ii,jj)$by(ii,jj),qy(ii,jj)*v(ii,jj,n)))
    -eta(k,n)*(sum((i,j)$bx(i,j),cx(i,j)*o(i,j,n)) +sum((ii,jj)$by(ii,jj),cy(ii,jj)*v(ii,jj,n))+scost(k,n)+mp(n))+bm*(1-located(k));

    limit7(k,n) ..quantity(k,n)=g= delta(n)*located(k);

    iماژول
    J
    آپشن که زیر مجموعه ماژول هست
    K
    خرده فروش
    N
    نوع مشتری
    ii
    همون تعریف i رو داره ولی ماژول اختیاری است
    jj
    هم اختیاری است با تعریف مشابه j

    نمیدونم ایراد کار از کجاست.چکار کنم که متغیرا مقدار بگیرند

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

  46. با عرض سلام و خسته نباشید خدمت شما عزیزان
    یه محدودیت دارم، که اگه متغیر عدد صحیح(Y) برابر صفر باشد محدودیت دوم(x) می تواند هر مقداری بگیر(متغیر دوم هم عدد صحیح است).
    و اگه متغیر y مخالف صفر باشد متغیر x حتما صفر خواهد بود
    در گمز به غیر از دستور IFThen (که مدل رو غیر خطی میکنه)از چه محدودیت و روش دیگه ای می تونم استفاده کنم؟
    پیشاپیش از راهنمائی تون سپاسگذارم

        • با این اوصافی که فرمودین، فک میکنم این محدودیت رو اگه اضافه کنین کافیه برای لحاظ کردن مفاهیم:
          Y<=MX که M یه عدد بزرگه

        • از راهنمائیتون واقعا سپاسگزارم آقای محمودی عزیز
          محدودیتی که اشاره فرمودین(Y=0 (که این شرط در محدودیت مذکور برقراره )
          و اگه y > 0 بود، x=0 (که این شرط برقرار نیست)

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

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

        • با سلام مجددا خدمت دوستان گرامی
          جهت استفاده نکردن از دستور Ifthen به منظور بیان محدودیتهای شرطی از جمله محدودیت ،
          (اگر y>0 باشد، x=0 است
          و اگر Y=0 باشد، x>=0 خواهد بود.
          که دو متغیر عدد صحیح مثبت هستند)
          می توانداز ۶ محدودیت ذیل استفاده نمود.(B متغیر کمکی باینری- M عدد بزرگ)
          y>= x*M*B
          B*M>=Y
          Y>=B
          تذکر:
          عبارت x*B در معادله اول مدل را غیر خطی می کند. می توان با افزودن سه محدودیت دیگر به مدل این عامل غیر خطی را به خطی مبدل نمود.
          فرض: x*B=XB و XB متغیر کمکی عدد صحیح مثبت
          (محدودیت اول به y>= XB*M تبدیل می شود) و سه محدودیت دیگر نیز به مدل اضافه می شود.
          XB<=X
          XB=x+M*(B-1)
          به احتمال زیاد درسته!
          (احتمال دادم برای برخی دوستان مفید باشه، لذا پاسخش رو فرستادم)

        • سلام
          مچکرم بابت بازخورد و شیر اطلاعات.
          این غلطه مهندس. تو فرمولا به جای y صفر بذارین. نتیجه ش اینه که x=0 میشه حتما.

        • خلاصه ۶ محدودیت:
          y>= XB*M
          B*M>=Y
          Y>=B
          XB<=x
          XB=x+M*(B-1)

          x,y,XB عدد صحیح مثبت
          B باینری
          M عدد بزرگ

        • خواهش میکنم
          من این طور استنباط کردم
          اگه y صفر باشه در محدودیت اول حتما باید یکی از متغیرهای B,X صفر باشه
          اما این که کدوم حتما باید صفر باشه در دو محدودیت بعد مشخص میشه
          در محدودیت سوم حتما متغیر باینری B برابر صفر خواهد بود
          محدودیت دوم با صفر بودن B برقرار است
          بنابراین در محدودیت اول با صفر بودن Yو B ، برقرار میشه و
          X میتونه هر مقداری رو بگیره.
          امیدوارم درست 😊

  47. با سلام
    مدل من احتمالی هست و از روش سناریو استفاده کردم ولی تو تابع هدف بعد هر sumارور میگیرم. باتوجه به اینکه پارامترp1(p) کهpتعداد سناریوها هست هم تعریف کردم. ارور بخاطر درست جمع نزدن این سناریو هست.ممنون میشم راهتمایی کنید.
    +((sum(p,p1(p)*(sum((d,c1,t),Q1(d,c1,t,p)*A1(c1,t,p
    -(( sum((d1,c2,t),Q2(d1,c2,t,p)*A2(c2,t,p
    +( sum((s,f,t),Q3(s,f,t,p)*MC
    +(sum((f,d,t),Q4(f,d,t,p)*FC)+sum((f1,d,t),Q5(f1,d,t,p)*FC
    …. ))sum

    • سلام
      وقتی دارین سامیشن میزنین، تو کد نویسی خیلی باید حواستون به باز و بسته کردن پرانتزا باشه. مشکل ظاهرا از همین پرانتزاست. چون کامل نذاشتین نمیشه بهتر نظر داد. متن ارور رو میذاشتین بهتر بود.

  48. با سلام، یک جدول دارم که از اکسل ،فراخوانی کردم تو گمز و به شکل یک ماتریس ۱۰ در ۱۰ هست، الان می خوام بگم که اگر درایه ایی از این جدول مثبت باشد، محدودیت اول را بگیر و اگر درایه ایی منفی باشد محدودیت دوم را بگیر. این شروط را چه جور باید نوشت؟ ممنون از راهنماییتون

    • سلام
      فرض کنیم میخوایم بگیم که اگه درایه ی ۱۱ مثبت باشه محدودیت اول باید برقرار باشه، ولی اگه منفی باشه محدودیت دوم:

      c1$(c('1','1' >0).. equation1Formula
      c2$(c('1','1' <0).. equation2Formula

        • نه دیگه.
          برا ماتریس شما باید صورت اندیسی به شرطی که گذاشتم بدین. مثل این:

          c1$(c(i,j)>0).. firstEqu
          c1$(c(i,j)< =0).. secondEqu

          این در صورتیه که دو تا محدودیت مورد بحث باشه و انتخاب هرکدوم به درایه های ماتریس ربط داشته باشه.

  49. سلام
    وقتتون بخیر

    مدلی رو که تو گمز ران میکنم، تابع هدف که سود هست منفی میشه ( چون بعضی متغیرها مقدار صفر میگیرن)
    ولی وقتی متغیر quantity رو بجای اینکه عدد صحیح باشه تو قسمت متغیرها میذارم، جوابا قابل قبولن ولی بعضی از quantity ها مقدار اعشاری میگیرن
    بنظرتون جوابا رو رند کنم یا اینکه راه حل دیگه ای داره؟

    • سلام
      تابع هدف شما شامل چه اجزایی میشه منفی و مثبت توش هست؟ ماکسیمایز میکنین؟ امتحان کردین که براش با .LO حد پایین صفر بذارین؟
      در مورد quantity خوب توضیح ندادین. منظورتون اینه که به جای integer variable با positive variable تعریفش کردین؟

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

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

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

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

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

  52. سلام می خواستم یک فرمول برگشتی تو GAMs بنویسم به شکل زیر :

    (CS(s,n)=e=CS(s,n-1)+30*n1(s,n
    

    که (CS(s,0 رو هم دارم. میشه راهنمایی کنید چطور باید بنویسم؟

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

      CS(s,n)=e=CS(s,n-1)+30*n1(s,n)+CS0(s)$(ord(n)=1)
      

پاسخ دهید

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