۲۱

Error 143: A suffix is missing

سوال از جانب جناب محمدی:

سلام با سپاس از سایت خوبتون
من یه دستور شرطی نوشتم و هنگام ران کردن با خطای ۱۴۳(A suffix is missing) مواجه میشم . به نظرتون اشکال کارم کجاست؟

پاسخ به جناب محمدی:

مشکل از اینه که شما تو جایی که باید از ویژگی هایی مانند l، .lo, .up, .scale, .fx و… استفاده کنین، استفاده نکردین.
مثلا مدل شما حل شده و بعد تو دستور display میخواین مقادیر بهینه متغیر تصمیم X رو تو خروجی براتون نشون بده. اگه فقط بنویسین display X این عمل دقیقا همین ارور شما رو میده، درستش اینه که .L رو هم بزنین.

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

 

21 دیدگاه در “Error 143: A suffix is missing

  1. ۱۳۰ PUT EFCCR ;
    131 PUT L.TL:7:5,’ ‘;
    132 PUT TETA.L:7:5,’ ‘;
    133 PUT TETL.L:7:5,’ ‘;
    134 PUT TETM.L:7:5,’ ‘;
    135 PUT TETU.L:7:5,’ ‘;
    136 PUT /;
    137 );
    138
    139 TETA
    .
    .
    با سلام ممنون ازسایت بسیار خوبتون
    ببخشید مشکل مدل من از کجاست؟ TETA رو چطور بنویسم که دیگه ارور نده

    با تشکر

  2. سلام مدلی که من کدنویسی کردم minlp است و د. متغیر عددصحیح و باینری در هم ضرب شده اند برای اینکه مدلم را خطی کنم متغیری تعریف کردم که ضرب دو متغیر فوق بود ولی گمز error 143 نشون میده لطفا راهنمایی کنید. متغیرهای من به صورت زیر است.
    variable z ;
    integer variable y(p,i,j);
    integer variable u(p,j,k);
    binary variable B1(m,p,i,j);
    binary variable B2(m,p,j,k);
    integer variable n1(m,p,i,k);
    integer variable n2(m,p,j,k);

    n1= y(p,i,j)*B1(m,p,i,j);
    n2= u(p,j,k)*B2(m,p,j,k);

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

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

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

        خطوطشون این ها هستن:
        ObjectiveFunction .. Cost =e= sum(g,a(g) + b(g)*Pg(g) + c(g)*Pgl(g))

        Pgl(g) .. Pgl(g) =e= Pg(g)*Pg(g)

        • تو این فرمولی که نوشتین، pgl رو به عنوان یه اسم برای محدودیت انتخاب کردین؟ نمیشه که!
          ضمنا این تفاوتی در غیر خطی بودن، کاهش زمان حل، یا هر چیز دیگه ای نمیکنه. با همون توان دو تو تابع هدف بویسین، اگه ارور x** هم گرفت pg رو بذارین تو قدر مطلق، البته معمولا برای pg ها یه حدودی در نظر گرفته میشه که فک نکنم صفر بشن

        • پس حدسم درست بوده
          ذات این مدل NLP هست
          فقط یه مشکلی هست، اونم این که وقتی به صورت عادی (NLP) می نویسمش و ران می کنم برنامه بدون ارور ران میشه، ولی نتیجه محاسبات صفر میشه
          اون رو پیدا نمی کنم
          علی القاعده نباید صفر بشه

  4. با سلام. ممنون از سایت بسیار خوبتون. مثل همیشه هروقت به مشکلی در GAMS برمیخورم که خودم از پسش بر نمیام، از شما کمک میخوام. این بار مشکلم در نوشتن لوپه. من یه الگوریتم آزادسازی لاگرانژ رو درGAMS کد کردم، در انتهای الگوریتم نیاز دارم که ضرایب لاگرانژ برام محاسبه بشه. ضرایب لاگرانژم هم به صورت گاما و با دو اندیس تعریف کردم.
    برای محاسبه هر کدوم از ضرایب به ازای دو اندیس i ; l ، باید یک شرط چک بشه.
    من در واقع داخل لوپی که به ازای این دو اندیس i وl نوشتم، باید مقدار هر کدوم از ضرایب رو چک کنم که فکر میکنم باید از suffix استفاده کنم. کد رو به این صورت نوشتم. از () suffix gamma.l که استفاده میکنم، خطا میده، بدون suffix هم جواب های غیرمنطقی میده. یعنی همه گاماها رو صفر میگذاره انگار در هر تکرار مقدار گاما رو اصلا ذخیره نکرده.
    خیلی ممنونم از وقت و تخصصی که میذارین.

    loop(l,
    loop(i,
    if (sum(r,z.l(i,l,r))>y.l(i),
    gama(i,l)=gama(i,l)+stepsize;

    else
    gama(i,l)= max(0, gama(i,l)-stepsize);

    );
    );
    );

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

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

پاسخ دهید

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