Error 53: Endogenous $ operation not-allowed

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


; VARIABLES y, x
EQUATION
; first
; (first.. y =E= (x*x) $ (x 0
; x.LO = -10
; x.UP = 10
; /MODEL andre /ALL
; SOLVE andre USING DNLP MINIMIZING y


خطایی که میگیره اینه:

Endogenous $ operation not allowed

مرسی از راهنماییتون

پاسخ به سوال جناب موحد:
سلام
گمز شرطی که واسه متغیر x گذاشتین رو نمیفهمه. به عبارتی تقریبا بیشتر solverهای گمز شرطی که توض متغیر باشه قبول نمیکنن. فقط تعدادی از اونها قبول میکنن.
شما دو راه برای حل این مشکل دارید، اول اینکه شرط رو با یک یا چند محدودیت جایگذاری کنین.
و یا اینکه از تابع ifthen استفاده کنین و از solver هایی که این تابع رو میفهمن استفاده کنین. مثل sbb

ذوستان اگه در این رابطه سوال، نظر یا مطلب مفیدی دارن کامنت بذارن

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

 

درباره نویسنده

30 دیدگاه

  1. pouya

    سوال: فقط ببخشید من اگه امکان داره یه مثال برای ifthen در این رابطه بزنین خیلی ممنون میشم. چون من هرچی گشتم نتونستم مثالی برای کنترل متغیر در معادلات (equations) پیدا کنم.
    ممنون از سایت خوبتون

    1. سلام
      برای تابع هدف

      obj1..PD=e=ifthen(D < = QS,(qs-a)/(bb-a),0);

      برای محدودیت

      con1(j)..sum(i,PD(i))=e=ifthen(D(j) < = QS(j),(qs(j)-a)/(bb-a),0);

  2. pouya

    واقعاً ممنون از پاسختون. فقط اگه بگین منظور از اون صفر آخر چی هستش بسیار کمک می‌کنین.

    1. محمودی

      سلام
      خب یه عبارت شرطیه دیگه. مثلا اگه x مساوی y باشد، آنگاه z=3 در غیر اینصورت z=0

      1. pouya

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

  3. pouya

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

    1. محمودی

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

      1. pouya

        سلام.
        mut(t)$(i(t)-i(t-1)eq 1).. i(tp)$(ord(tp)gt ord(t) and ord(tp) lt ord(t)+mu) =e=i(tp-1);

        mut: minimum up time, i is a binary variable, tp is a set in same size with t and mu is a scalar.
        البته میدونم شرط داخل $ درست نیست، چون ‘i’ یک متغیر است. در واقع من یه چیزی شبیه شرط بالا رو می‌خوام که کاری با برقرار نبودن شرط نداشته باشه. فقط در صورت درست بودن شرط داخل $ این معادله برقرار باشه. ولی فکر کنم تو ifthen باید جواب ( در غیر این صورت ) را نیز به تابع بدهیم.

        ممنون مرسی.

        1. محمودی

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

  4. لیلا

    execseed = 1+ gmillisec(jnow);

    p(‘1′,’1’)=0;
    p(‘%f%’,’1′)=0;
    xx(‘1’)=50; xx(‘%f%’)=50;
    xy(‘1’)=50;xy(‘%f%’)=50;
    tt(i,l)=sqrt (sqr(xx(i)-xx(l))+sqr (xy(i)-xy(l)))/80;
    .
    .
    .
    .

    1. محمودی

      سلام
      ارورهای شما خیلی بیشتر از این حرفاست.
      اولین ارور شما مربوط به اشتباه در به کار بردن ` و ‘ هست. شما باید از ” یا ‘ استفاده کنین…

      1. لیلا

        خطایی که از من گرفته
        خطاهای endogenous
        و
        analyzing solve statement
        هست. گمز دیگه هیچ خطایی نگرفته. بقیه خطاها رو رفع کردم.
        چرا استفاده از “و” ایراد داره؟

        1. محمودی

          سلام
          دقیقا متن خطای اولو بنویسین

      2. لیلا

        خطای اول اینه:
        endogenous operand for * not allowed in linear models
        خطای دوم هم اینه:
        erors(s) in analuzing solve statement . more detail appears bellow the solve statement above.

        1. محمودی

          سلام
          دومی که هیچی. اولی یعنی اینکه تو دستور solve مدل رو خطی فرض کردین، در حالی که بین دو متغیر شما علامت ضرب هست که مدل رو غیر خطی میکنه. nlp,dnlp,mip اینا ممکنه نوع مدل شما باشه

  5. لیلا

    ببخشید برنامه من ارور ۵۶ و ۲۵۶ رو میدی.
    مشکلش چیه؟

  6. 0590130031

    باسلام.
    سوالم اینه که میخام محموعه s را تعریف کنم.که اعضای اون بین ماکسیمم دوتا معادله و مینیم دوتا معادله دیگر قرار دارد
    چنین محدودیتی دارم
    co(k,t) $ ( ord(t) eq 5) ..sum((i,s) $ (ord(s) gt max(ord(t),ef(i)) and ord(s) lt min(ord(t)+d(i)-1,lf(i))),r(i,k)*x(i,s))=l=6

    برای تعریف مجموعه Sدر ست باید چطور اعمال کنم؟؟؟
    در واقع sبین ماکسیمم دومقدار و مینیمم دومقدار دیگر قرار دارد

    1. محمودی

      سلام
      سخت نگیرین براش. حدس بزنین که s بین مثلا ۱ و ۱۰ هست، بعد s رو مثلا به شکل زیر تعریف کنین:

      set s/1*30/

      1. 0590130031

        آخه من مقدار s رو به ازای هر فعالیت i در هر دوره زمانی t دارم.مثلا اگر ۴ تا فعالیت داریم مقدار s برای دوره اول ۴بار ماکس تا مین میشه.و به همین ترتیب برای دوره دوم بازم ۴بار ماکس تا مین دیگه
        در واقع برای ۴ فعالیت در ۵ دوره زمانی من ۲۰ مقدار دوتایی باید داشته باشم

        بازم مهم نیست؟چون ارور میده و sرو نمیشناسه

        1. محمودی

          باور کنین نفهمیدم. شاید من مخم نمیکشه. لطفا فرمول کامل رو اینجا بذارین

  7. لیلا

    سلام.
    آیا میشه در تعریف پارامترها شرط گذاری کرد؟
    مثلا a(i,j) به شرط i=j مقدار خاصی بگیرد؟چطور باید در قسمت پارامترها تعریف کنم؟

    1. محمودی

      سلام بله میشه:

      parameter a(i,j);
      a(i,j)=uniform(2,10);
      a(i,j)$(ord(i) = ord(j))=100;

  8. لیلا

    سلام. خسته نباشید.
    مدل ریاضی من به نظر میرسه مشکلی نداره. ولی وقتی با گمز اجراش میکنم جواب infeasible میده. نمیدونم مشکل چیه. لطفا راهنمایی کنید.
    ممنونم.
    .
    .

    1. محمودی

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

  9. لیلا

    سلام.
    من توی مدلم هم smax دارم و هم متغیر گسسته.
    الان نوع مدلم چیه؟ وقتی dnlp میزنم ازم خطا میگیره که متغیر گسسته دارم.
    با mip هم خطا میگیره چون smax دارم.

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