۱۸۳

دستور solve

پس از تعریف مدل، نوبت به دستورات مربوط به حل مدل می رسد. همچنین همانطور که قبلا ذکر شد، نرم افزار GAMS خود یک نرم افزار solver نیست بلکه حل مدل ها را از طریق دیگر نرم افزارهایی که در آن تعبیه شده است انجام می دهد.

پس در این قسمت باید نوع solver را نیز مشخص نمود.

دستور solve به نرم افزار فرمان می دهد که مدل ما را از فلان متد حل کن. فرم کلی این دستور به صورت زیر می باشد:

Solve Modelname using Modeltype Maximizing Vname ;

Modelname همان نامیست که در دستور model برای مدلمان انتخاب کردیم. Modeltype نوع مدل را مشخص می کند. مثلا یک مدل می تواند LP/NLP/MIP/RMIP باشد. انواع مدل ها در بخش model types تشریح خواهند شد. Maximizing نوع تابع هدف را به solver معرفی می کند. Vname یا variable name همان متغیر اضافی است که در بخش متغیر ها تعریف نموده و در equation معادله ی تابع هدف را مساوی آن قرار دادیم.


بنابر آنچه که ذکر شد، گذاره های زیر معادل و یا مشابه اند:

Solve Modelname using Modeltype Maximizing Vname ;
Solve Modelname using Modeltype Minimizing Vname ;
Solve Modelname Maximizing Vname using Modeltype ;
Solve Modelname Minimizing Vname using Modeltype ;

 دقت کنید که در صورتی که ما مثلا مدل را LP تعریف کنیم در حالی که واقعا LP نباشد نرم افزار هنگام run کردن Errorی می دهد که به سطر solve مربوط است و پیدا کردنِ اینکه مشکل واقعا کجای کار است مقداری سخت است. پس در model type دقت لازم را داشته باشید تا به مشکلاتی اینچنین دست وپاگیر دچار نشوید.
 اگر در دستور solve به یک modelname که در model content مربوطه اش شامل تابع هدف نشده باشد، reference بدهیم، نرم افزار به هنگام run کردن مدل نیز Errorی مشابه Error بالا می دهد که برطرف کردنش ممکن است مقداری وقت گیر باشد.

توجه داشته باشید که همانطور که در یک مدل می توان زیر مدل هایی با دستور model تعریف کرد، متوان با استفاده از دستور solve چند مدل را به صورت همزمان حل نمود. توجه داشته باشید چون GAMS نیز سطر به سطر اعمال را انجام می دهد، اولین دستور Solveی که ببیند حل نموده و سپس به خط بعدی می رود.
GAMS این امکان را به کاربر می دهد که در یک برنامه ی مشخص چندین مدل مختلف یا با راهکارهای مختلف را، همزمان حل کند. مثال:

Solve-statement-example

و در ادامه ی مطلب بپردازیم به ادامه ی کد نویسی مثال کاربردی۱:
مثال موجود در مثال کاربری۱ یک مدل برنامه ریزی خطی می باشد. از طرفی حل کننده ی cplex جهت حل مدل های برنامه ریزی خطی مناسب است. پس ما نیز در این مدل از این solver استفاده می نماییم:

Example1-solve-statement

همانطور که در بخش متغیرها گفته شد، اگر در مدل بخواهیم مقدار یک تابع هدف را بهینه کنیم، باید در بخش variable یک متغیر اضافه بر متغیرهای مسئله تعریف نماییم تا در دستور solve از آن استفاده نماییم. وقتی این متغیر را در دستور solve می گذاریم، GAMS آن را به عنوان Objective می شناسد و آن را minimize یا maximize می کند. در مدل ما نیز متغیر z برابر با تابع هدف در نظر گرفته شد.

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

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

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

 

183 دیدگاه در “دستور solve

    • سلام
      شما وقتی یک تابع دارید، باید برای آن اسمی تعریف کنید. مثلا z
      سپس در بخش متغیرها ک متغیر به نام variable z تعریف نمایید.
      سپس در بخش Equations فرمول تابع را مساوی z قرار دهید.
      سپس در دستور Solve به نرم افزار بفهمانید که z را بهینه کند.
      موفق باشید

  1. سلام ، خسته نباشید
    من میخواستم یک مدل چهار هدفه رو تو گمز مدل کنم.
    ۱٫ شنیدم که گمز مدل چند هدفه رو حل میکنه ، اگه درسته ممکنه بگین با چه دستوری میتونم این کار رو انجام بدم؟
    ۲٫ حلقه for تو گمز چطوری نوشته میشه؟ مثلا میخوام به ازای اندیس های i و t ، روی اندیس j ، جمع (sum) ببندیم.
    پیشاپیش از راهنماییتون ممنونم.

    • سلام
      سوال اول: دستور خاصی نیست. یک روش و قاعده داره که توضیحش زیاده. شما تو سایت gams.com عبارت mulltiobjective optimization رو سرچ بزنین. یک مقدار وقت گیر هست یادگیریش ولی سایت خیلی مفیدیه. البته مقالات زیادی هم تو این حوزه نوشته شده.
      سوال دوم: من فکر میکنم منظورتون از این کار نوشتن صرفا سیگما هست. فرض کنید یک متغیر یا پارامتر دارید به نام (X(i,j,t حال میخواهید روی اندیس j سیگما بزنید. دستور زیر اینو نشون میده.

      sum(j, X(i,j,t) )

      اگر مشکلی داشتید تو همین تاپیک بفرمایید که جواب بدم.
      موفق باشید

    • سلام
      اگر منظورتون سیگما روی I و j هست به شکل زیر: (یعنی سیگما روی هر دو)

      sum((i,j),x(i,j))

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

  2. سلام.خسته نباشید.ببخشید من در نوشتن تابع سیگما دچار مشکل شده ام.شماره خطای ۱۲۵ میده

    eq2 (m,t)..h(t)=e=(1+l(t-1))*(h(t-1)+sum(m,u(m,t-1))-sum (m,v(m,t-1)));
    ممنون میشم راهنمایی کنید.

  3. با سلام و تشکر بابت سایت خیلی خوبتون
    من کد زیر رو میخوام اجرا کنه،ولی خطا میگیره و متوجه نمیشم مشکلش کجاست
    ; 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 گذاشتین رو نمیفهمه. شما باید از تابع ifthen استفاده کنید یا مدلتون رو تغییر بدین مقداری

  4. با سلام و تشکر بابت سایت خیلی خوبتون
    من کد زیر رو میخوام اجرا کنه،ولی خطا میگیره و متوجه نمیشم مشکلش کجاست
    ; 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
    مرسی از راهنماییتون

  5. با سلام و ضمن تشکر از راهنمایی های خوبتون
    من برنامه ای نوشتم که سطر به سطر رو چک کردم و ارور نمیداد اما وقتی میخواهم که برنامه را حل کند پیام می دهد:
    ALL rows and columns eliminated
    و برای مساله مینیمم سازی مقدار ۰ را برمی گرداند در حالیکه محدودیتها مشکلی ندارد.

      • — Job Untitled_5.gms Start 07/10/15 22:28:50 24.1.2 r40979 WEX-WEI x86_64/MS Windows
        GAMS 24.1.2 Copyright (C) 1987-2013 GAMS Development. All rights reserved
        Licensee: Gary Goldstein G010614:2121CA-WIN
        Decision Ware, Inc. DC2807
        — Starting compilation
        — Untitled_5.gms(321) 3 Mb
        — Starting execution: elapsed 0:00:00.006
        — Generating MIP model Untitled_5
        — Untitled_5.gms(319) 14 Mb
        — 45,844 rows 21,254 columns 135,870 non-zeroes
        — 21,069 discrete-columns
        ***
        *** 19183 Integer +INF Bounds have been reset to 100
        ***
        — Executing CPLEX: elapsed 0:00:00.125

        IBM ILOG CPLEX 24.1.2 r40979 Released Jun 16, 2013 WEI x86_64/MS Windows
        — GAMS/Cplex licensed for continuous and discrete problems.
        Cplex 12.5.1.0

        Reading data…
        Starting Cplex…
        Tried aggregator 4 times.
        MIP Presolve eliminated 45012 rows and 20551 columns.
        MIP Presolve modified 20854 coefficients.
        Aggregator did 573 substitutions.
        Reduced MIP has 259 rows, 130 columns, and 665 nonzeros.
        Reduced MIP has 20 binaries, 110 generals, 0 SOSs, and 0 indicators.
        Presolve time = 0.06 sec. (43.58 ticks)
        Found incumbent of value 0.000000 after 0.06 sec. (46.98 ticks)

        Root node processing (before b&c):
        Real time = 0.06 sec. (47.69 ticks)
        Sequential b&c:
        Real time = 0.00 sec. (0.00 ticks)
        ————
        Total (root+branch&cut) = 0.06 sec. (47.69 ticks)
        MIP status(101): integer optimal solution
        Cplex Time: 0.06sec (det. 47.69 ticks)
        Fixing integer variables, and solving final LP…
        Tried aggregator 1 time.
        LP Presolve eliminated 45844 rows and 21254 columns.
        All rows and columns eliminated.
        Presolve time = 0.02 sec. (13.15 ticks)

        Iteration log . . .
        Iteration: 1 Dual objective = 0.000000
        Fixed MIP status(1): optimal
        Cplex Time: 0.03sec (det. 36.14 ticks)

        Proven optimal solution.

        MIP Solution: 0.000000 (0 iterations, 0 nodes)
        Final Solve: 0.000000 (1 iterations)

        Best possible: 0.000000
        Absolute gap: 0.000000
        Relative gap: 0.000000

        — Restarting execution
        — Untitled_5.gms(319) 4 Mb
        — Reading solution for model Untitled_5
        — Untitled_5.gms(319) 7 Mb
        *** Status: Normal completion
        — Job Untitled_5.gms Stop 07/10/15 22:28:51 elapsed 0:00:00.496

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

  6. با سلام
    کدی در گمز زدم که ارور زیر را می دهد ظاهرا مشکلی ندارد
    میشه لطفا راهنمایی کنید
    ۱۲۵ Set is under control already

    با تشکر

  7. با سلام و احترام و ضمن تشکر از راهنماییهای خوبتون

    برنامه ای نوشتم که یکی از محدودیت های آن به صورت زیر است، هیچ کدوم از محدودیت های دیگه این رو نقض نمیکنه..چطور ممکنه که در حالت تساوی و کوچکتر مساوی محدودیت غیر موجه شود..
    C6(t)..sum(i,A(i,t)$subi(i))+r(t)=E=d(t);

    C6(1).. A(3,1) + A(4,1) + A(5,1) + A(6,1) + A(7,1) + A(8,1) + A(9,1) + A(10,1)

    + A(11,1) + A(12,1) + A(13,1) + A(14,1) + A(15,1) + A(16,1) + A(17,1)

    + A(18,1) + A(19,1) + A(20,1) + A(21,1) + A(22,1) + A(23,1) + A(24,1)

    + A(25,1) + A(26,1) + A(27,1) + A(28,1) + A(29,1) + A(30,1) + A(31,1)

    + A(32,1) + A(33,1) + A(34,1) + A(35,1) + A(36,1) + A(37,1) + A(38,1)

    + A(39,1) + A(40,1) + A(41,1) + A(42,1) + R(1) =E= 50 ;

    (LHS = 0, INFES = 50 ****)

  8. سلام
    من یه مدل چندهدفه دارم که کدشو نوشتم و تنها خطایی که داره ارور لایسنس هستش که میگه باید بعد از ۲۰۱۴ باشه ولی همه کرکایی که پیدا کردم واسه قبل از ۲۰۰۵ هستن
    لطفا کمکم کنید

  9. با سلام و خسته نباشید
    من دو تا سوال داشتم
    ۱٫ در یکی از محدودیتای مدلم متغیرم از یک مقدار تابت کمتر می باشد و من اون رو این طوری در گمز نوشتم ولی ایراد میگیره
    x(t) =l= CH
    erorr 149؟ میشه توضیح بدین من باید چه کار کنم؟
    ۲٫ یک عبارت سیگما دارم که شامل متغیری با چهار اندیس می باشد (i,t,g,k,) هر دو اندیس g و k از یک مجموعه می باشند. میخاهم روی سه متغیر i,g,k سیگما بنویسم ..نمیدونم باید چه طور بنویسم…. ممنون…

  10. با سلام مجدد
    عبارت زیر در گمز را باید به چه صورت نوشت ؟برای من ارور ۱۴۵ و ۱۴۸ میده…نمیدونم باید چه کنم؟
    ممنون از سایت خوبتون
    Y(i,t) > Y((i-1),t)

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

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

      Z=e=(z1-z1star)/z1star+(z2-z2star)/z2star ;

      موفق باشید

  12. با سلام و خسته نباشید
    عبارت منطقی or که برای مجموعه محدودیت زیر است . بعد از خطی شدن به صورت زیر است به چه صورت در گمز بیان می شود؟؟
    (Mj=M(j-1
    j binary
    ممنون

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

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

  14. سلام من عضو میشم ولی بعد که می خواهم وارد شوم خطای زیر رو میده
    شما مجوز کافی برای دسترسی به‌این برگه را ندارید.
    چکار کنم

  15. سلام
    برای استفاده از دو تابع هدف برای حل کننده bonmin که امکان کار با دو تابع هدف رو داره ،چجوری دو تابع هدف رو مدل کنم؟تک به تک بنویسم که مینیمم بشه یا به روش های بالا که گفتید باید ازش استفاده کرد؟
    برنامه من موقع کامپایل کردن خطا نمیده اما جوابم نمیده، به نظرتون مشکل چی میتونه باشه؟
    در برنامه من که روی شبکه ها می باشد، یک مجموعه قطر دارم که هرکدوم یک هزینه ای دارند این رو چجوری مدل کنم یعنی بگم قطر(۱) d هزینه (c(1 رو داره؟ بعد برای هر یال یک مجموعه قطر مثلا ۱۴ تا قطر وجود دارد برای مدلسازی فقط باید از متغیرهای باینری( x(i کنار هر کدوم از این قطرهای( d(i استفاده کرد یا روش بهتری برای مدلسازی وجود داره که از این همه متغیر باینری استفاده نشه؟ مثلا آیا میشه همین مجموعه قطر یا هزینه رو با یکم تغییر به عنوان متغیر استفاده کرد؟

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

    • سلام
      اگه میخواین هدف ها با در نظر گرفتن هم جواب بدین از روش eps-constraint استفاده کنین، اگه نه که با دستور model برای هر کدوم هدف رو مشخص کنین و حلش کنین. البته روش زیاده، مث lp-metric

      • مدل منم دو هدفه که باید همزمان مورد بررسی قرار بگیره (در الگوریتم های فراابتکاری مفهوم پارتو) بهم گفتن باید از روش e-cons استفاده کنی آیا استفاده ازین روش درسته؟

  17. سلام در موقع اجر کردن خطای ۷۱ میدهد، علت چیست؟
    من در مساله حدود ۲۰۰ قید دارم که اکثرشان قیدهای مساوی هستند! چطور باید تابع هدف را متمایز کنم؟

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

  18. سلام

    ببخشید از کجا بفهیم که سولور سیپلکس گمز چنده؟ تو مقالات دیدم که نوشته مثلا گمز سولور سیپلکس ۱۲٫۲

    ولی قسمت سولور، عددی ننوشته.

    باتشکر

    • سلام
      دو راه دارید. یکی اینکه برید تو سایت gams و مشخصات نسخه ای از گمز که دارید استفاده میکنید رو مطالعه کنید. اونجا نوشته که کدوم نسخه از سالورها استفاده شده. راه دوم هم اینه که help نرم افزار رو بزنید، و solver manual رو بزنید

  19. سلام
    در تعریف متغییر ها ، دوتا ازمتغییرها باینری (۰ یا ۱) هستند .ولی مقداری که بعد از حل بدست میاید مقداری اعشاری بین ۰ و ۱ است .بنظر شما علت چیه؟
    باتشکر

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

    for (i=1:9,
    for (t=1:487,
    r(t,i)=(price(t+1,i)- price(t,i))/price(t,i);
    ););

    • سلام
      اینکه فرمول درسه یا نه نمیدونم. بستگی به تعاریف شما داره. ولی دستور for رو به loop تبدیل کنید مناسبتره. حلقه رو هم اینجوری بنویسین:

      loop(i, something);

    • سلام
      سوالتون مقداری گنگه، حالا با این فرض که منظورتون همینه جلو بریم.
      فرض کنیم یه مجموعه داریم به اسم s و این s از ۱ تا T=10 رو بتونه بگیره. یعنی:

      Set s/1*10/ ;

      خب. بعد میخواین سام بزنین.

      sum(s,x(s))....

      اگه منظورتون رو نفهمیدم بیشتر توضیح بدین

  21. با سلام . در تعریف متغییر ها عبارت روبرو را دارم
    (x(i,t,j بعد از solve می خواهم روی x.l شرط if بگذارم به چه صورت این کار را انجام دهم.
    یا کلاً روی نتیجه x چه جوری شرط بگذارم

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

      solve first using minlp minimizing z1;

      parameter a(i2,k);
      loop(i2,loop(k,
      if( x1.l(i2,k)=0,
      a(i2,k)=10
      ;)
      ;)
      ;)
      ;

      موفق باشید

  22. سلام
    من یه مدل دارم که دوتا متغیر مثبت پیوسته و یک متغیر باینری داره.قیل از نوشتن مدل مقدار متغیر باینری را برابر یک گذاشتم. با این حساب باید مدل من یک مدل lp بشه ولی وقتی ران میکنم ارور ۶۵ میده و میگه متغیرهای گسسته نمیتونن lp باشن.لطفا راهنماییم کنید.

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

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

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

  24. سلام ، میخوام بدونم که چطور میتونم یه مسئله رو از روش b&b (شاخه و کران ) توی گمز حل کنم ؟
    لطفا ادرس جایی که اموزش کاملش هست رو بدید

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

    • سلام
      یه رویه میتونه به شکل زیر باشه. دقت کنید که y همون تابع شما، و x1,x2 هم متغیرهای باینری هستن:

      one.. b1 + b2 =l= 1;
      defsign.. y =e= x1 - x2;

      موفق باشید

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

    • سلام
      شندنی بودن یک مدل سه تا دلیل اصلی داره:
      اول اینکه مشکل از داده ها باشه. تو این حالت باید داده ها تغییر داده بشن و یه داده منطقی به مدل داده بشه.
      دوم: مشکل از کد نویسی باشه. اینم که مشخصه.
      سوم: مشکل از خود مدل باشه. اینجا باید ساختار مدل تغییر داده بشه و ناحیه ی شدنی ایجاد بشهو احتمالا مشکل شما هم همینه. باید تحلیل کنین دیگه. بگین که مثلا چرا این محدودیت با اونای دیگه مشکل داره؟ مقداری وقت گیره. ولی جواب میده.
      چهارم: مشکل از solver باشه. تو این حالت سایز باید کوچیک بشه. لایسنس نصب بشه و یه سری آپشن دیگه
      پیشنهاد من به شما اینه که سایز مسئله رو اونقدر کوچیک کنین که بتونین راحت تر با عدد گذاری که گمز انجام میده تحلیلش کنین

  27. با سلام
    خسته نباشید
    مسی واسه وقتی که واسه دوستان میزاری
    من یه سوال داشتم، میخوان تو گمز eps رو پیاده کنم. از اون مثالی که ود گمز تو لایبرریش زده سد در نمیارم. از میتونم مثال گمزیشو چیدا کنم؟؟
    مرسی

    • سلام
      ممنونم ازتون.
      در کل نفهمیدم چی میگین. واضح نبود. ولی اگه میخواین eps رو یاد بگیرین که باید مطالعه کنید و یه سری مثال هم پیاده کنین تا به مدل خودتون برسین. اگرم میخواین مدلتون رو بفرستین بدم همکارا کد میکنن براتون.

  28. با سلام
    خسته نباشید
    مرسی واسه وقتی که واسه دوستان میزاری
    من یه سوال داشتم، میخوام تو گمز eps رو پیاده کنم. از اون مثالی که خود گمز تو لایبرریش زده سر در نمیارم. از کجا میتونم مثال گمزیشو پیدا کنم؟؟
    مرسی

  29. سلام
    این خطا رو چطور میشه رفع کرد؟
    ۷ error(s): vcPower: FUNC DOMAIN: x**c, x < 0 (RETURNED 0)
    مدل با mcp حل میشه و نمیتونم حد پایین تعیین کنم به اضافه اینکه توان عدد صحیح نیست که از دستور power استفاده کنم.
    ممنون

    • سلام
      تابع power یه جوریه که شما پایه تون نباید صفر بشه. اگه علامتش براتون مهم نیست، پایه رو بذارین تو abs و اگه براتون مهمه که باید تشخیص بدین خروجی تابع مثبت میشه یا منفی، اگه منفیه بکشینش بیرون در هر صورت باید یه کاری کنین که این علامت منفی از تابع خارج بشه.

  30. یک سوال دیگه: در شبیه سازی وقتی یک پارامتر را تغییر میدم مدل جواب میدهد اما خلاصه
    **** SOLVER STATUS 1 Normal Completion
    **** MODEL STATUS 5 Locally Infeasible

    0 NONOPT
    2 INFEASIBLE (INFES)
    SUM 3.0398E-6
    MAX 1.6689E-6
    MEAN 1.5199E-6
    0 UNBOUNDED
    0 REDEFINED
    1 ERRORS ( ****)

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

    • سلام
      بحث قابلیت اتکا، بستگی به مدل و دقت مدل شما داره.
      راهکار: دستور option optcr=0; رو قبل از دستور solve بذارین. و باز ران کنین مدل رو. اگه شدنی شد که فبها. اگه نشد مدل نشدنیه و باید تحلیل کنین دیگه کامل.
      در ضمن با سالورهای دیگه هم امتحان کنین

  31. سلام. ممنون بابت راهنمایی های مفدیتون.
    دستور یا روشی هست که بعده اینکه گمز مساله رو حل کرد ی صدایی تولید کنه که بفهمیم حل تموم شده؟

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

  33. سلام.
    من چطوری میتونم بفهمم که سالور بارون، جواب بیکران پیدا کرده یا نه؟ شما فرمودین بارون نمیگه به ما که مساله واقعا نشدنی هست یا جواب بیکران داره.

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

  34. سلام من میخوام این دستور رو تو gams اجرا کنم ولی ارور میده دلیل ارورش چیه ؟

    SETS
    I Nodes /1*5.
    .
    .
    .
    COST .. Z =E= SUM(J, X(J)*L(J));
    TARGET(I) .. SUM(J$(C(I) = S(J)), X(J)) - SUM(J$(C(I) = E(J)), X(J)) =E= T(I);

    MODEL GRAPH /ALL/;
    SOLVE GRAPH USING MIP MINIMIZING Z;

  35. سلام.خسته نباشید.من یه مدل دو هدفه دارم که وقتی دو تا هدفو با هم جمع میزنم(یعنی فرض میکنم که اهداف هم جهت باشن و همدیگه رو نقض نکنن) جواب مدل با وقتی که تک تکشون رو جدا حل میکنم و جمع میزنم تقریبا برابر میشه و ی خورده اختلاف داره. بنظر شما این یعنی اینکه توابعم در تضاد نیستن و میشه با جمع بستن حل کرد؟(با هم جمع میزنم ۲۹/۸۹۹ میشه و تک تک حل میکنم یکیش ۲/۴۱۳و دیگری ۲۸/۰۰۱)
    ی سوالم راجع به روش محدودیت اپسیلون دارم؟الان اختلاف مقادیر مقادیر بهینه دو تابع هدف رو باید بدست بیارم و هر چی شد باید به چند قسمت تقسیمش کنم؟

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

        • سلام
          شما دوتا هدف دارین. یکیش زمان انجام پروژه ست یکیشم هزینه پروژه. جفتش رو هم میخواین کم کنین. اگه بخواین زمان رو کم کنین، هزینه هم میره بالا. و بالعکس.
          فرض کنیم کمترین هزینه ۱۰ شد. بیشترین هزینه ۱۰۰ و کمترین زمان ۴۰ و بیشترین زمان ۶۰ شد.
          حالا اگه بخوایم مثلا ۱۰ تا جواب تولید کنیم اپسیلون ما میشه ۱/۱۰، هر بازه رو به ده بخش تقسیم میکنیم.
          بعد مثلا هدف رو هزینه میذاریم. کمینه میکنیم. یه جواب به دست میاد. بعد ده درصد به این مقدار الانش اضافه میکنیم. یه جواب دیگه برا زمان به دست میاد همینجوری میریم جلو تا یه سری جواب اصطلاحا پارتویی تولید بشه.

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

  37. سلام.خسته نباشید.ببخشید من یه مساله mip داشتم یعنی دوتا از متغیرام باینری و یکیش مثبت بود.مسالم دو هدفه هستش که اومدم با روش معیار جامع حلش کردم و تو قسمت solve حل رو با mipزدم خطا میداد و minlp که زدم مدل ران شد ولی متغیرهای باینریم اشتباه شدن و مقادیری غیر از صفر و یک گرفتن در حالیکه بعنوان binary variable هم تعریفشون کردم. نظر شما چیه؟
    برای روش معیار جامع مقدار بهینه هر تابع هدف رو منهای تابع هدف و تقسیم بر تابع هدف کردم

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

      option minlp=baron;
      option optcr=0;

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

  38. سلام. خسته نباشید و ممنون بابت سایت فوق العاده تون
    ببخشید جناب محمودی ی سوال داشتم از خدمتتون. من کد بندرز تصادفی مربوط به مساله PRP رو توی گمز نوشتم که تعدادی تکرار تعریف کردم که توی هر تکرار خروجی یک حد بالا و یک حد پایین هست که زمانی متوقف میشه که این حدود به هم نزدیک بشن. کدم اجرا میشه و اروری نمیده و از درستی کات هایی که نوشتم هم مطمئنم ولی متأسفانه بعد از چند تکرار (تقریبا ۶۰ تا ۸۰ تکرار) دیگه این حدود تغییر نمی کنند من حتی تعداد تکرارها رو به ۵۰۰ تا رسوندم، سایز مسأله رو هم کوچیک کردم ولی باز هم از ی جایی به بعد دیگه حدود تغییر نمی کنن. می خواستم ببینم بر حسب تجربه تون نمی دونید من باید چه تغییری بدم که مشکل برطرف بشه؟ بیشتر از یک ماهه که روی این کد وقت گذاشتم خیلی از تغییرات رو هم امتحان کردم مثلا مقدار integrality tolerance رو تغییر دادم ولی جواب تغییری نکرد. واقعا ممنون میشم ازتون اگر مثل همیشه راهنماییم کنید.

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

  39. با عرض سلام و خسته نباشید و تشکر فراوان بابت سایت بسیار پربارتون .

    من یک مدل غیر خطی تو گز با استفاده از راهنمایی های شما نوشتم و تنها خطای من ۶۵ هست که می گه متغیر گسسته فقط می تونه تو mip و … باشه این درحالیه که به متغیر نام تابع هدف من در مرحله سلو این ارور رو می ده.

    بسیار ممنون میشم اگه منو راهنمایی کنید.

    • سلام
      ممنون و خواهش میکنم
      اگه متغیر گسسته دارین، مدلتون اگه غیر خطی از minlp و اگه خطیه mip استفاده کنین. اونجایی که گفتین solve …. using …. lp….obj به جای lp بزنین minlp

  40. با سلام
    لطفا نحوه استفاده از دستور crbatch.gms که توسط آن چندین فایل را بتوان پشت سر همدیگر اجرا نمود را بفرمایید
    با تشکر

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

    • سلام
      perturbation درسته . به طور مستقیم این آپشن در گمز نیست و من ندیدم و سرچ هم کردم. perturbation یک متد ریاضی هست خواستی روش کارشو برات ایمیل میکنم.

  41. سلام وقتتون بخیر
    ببخشید من یه Z (تابع هدف) دارم که هزینه رو توی “یک روز مشخص”(مثلا sd عدد اسکالریه که بعنوان ورودی تعریف کردم) محاسبه میکنه. حالا میخوام همین تابع هدف رو برای ۳۰ روز بعدی هم نشون بده.یه لوپ تعریف کردم که ۳۰ بار تکرار بشه؛ هربار برنامم solve و display بشه و مقدار sd یکی اضافه بشه. اما چون sd رو در ورودی عدد ثابت تعیین کردم sd همون عدد اولیه میمونه و تغییری نمیکنه. سعی کردم از اندیسی که مربوط به sd است هم استفاده کنم ولی گمز افزایش اندیس صرف یا با ord رو هم ارور میده.ممنون میشم اگه راهنماییم کنین:)

    و اینکه ممنونم بابت سایت خوبتون:)

    • البته از دستور for هم استفاده کردم ولی بازم چون مقدار اولیه ورودی sd مقدار مشخصیه که مقدارش در قسمت scalar ذکر شده؛ هربار برنامه فقط به ازای همون sd اولیه بدست میاد…

    • سلام
      یه اندیس t تعریف کنین که مربوط به ۳۰ روز هست. بعد sdوsdd رو به عنوان پارامتر تعریف کنین و به sd عددی ندین به شکل زیر:

      set t/1*30/
      alias(t,tt)
      parameter sd,sdd(t);

      بعد این به sdd مقدار بدین.
      بعد تو لوپتون به شکل زیر عمل کنین:

      Loop(tt,
      sd=sdd(tt);
      solve...
      .
      .
      );

  42. ممنون از پاسخگوییتون، ولی مشکلی که وجود داره اینه که در طول برنامه و قبل از رسیدن به لوپ نهایی برای solve برنامه، نیاز به مقداردهی به sd هست. در غیراین صورت ارور ۱۴۱ میده:
    ۱۴۱ Symbol neither initialized nor assigned
    A wild shot: You may have spurious commas in the explanatory
    text of a declaration. Check symbol reference list.
    (چون حل برنامه به مقادیر دیتا در روزِ بخصوصِ sd بستگی داره)
    برای حل این مشکل چه کاری میشه کرد؟

  43. سلام، وقتتون بخیر
    من یه محدودیت دارم که به ازای i شامل {a,b} تعذیف شده، تو این محدودیت تابع سام دارم که به ازای k عضو D تعریف شده، که این D تحت عنوان جدولی در قسمت table تعریف شده است، قسمت ord این رو باید چطور بنویسم؟
    sum((iter,t,k)$(ord(k)???)

  44. سلام،دانشجوی ارشد ریاضی کاربردی هستم و موضوع پایان نامه من در مورد بهینه سازی مساله های چند هدفه و حل ان با روش epsilon-constraint است، هیچ کجا نتونستم مقاله یا مطلبی که این روش رو بطور کامل با یه مثال عددی توضیح بده پیدا کنم،کسی هست که بتونه کمک کنه؟ برنامش تو گمز هست ولی باید تو فصل دو این روش رو کامل توضیح بدم

  45. سلام خسته نباشید.من یک مدل برنامه ریزی عدد صحیح مختلط دوهدفه یکی از اهدافminو دیگریmaxمیباشد.میخوام در گمز کدنویسیش کنم.چندتا سوال داشتم.اول اینکه چندهدفه هست روشی ک ساده باشه رو اگر ممکنه معرفی کنید و در اختیارم قرار دهید با روشهای چندهدفه اشنایی ندارم اصلا لطفا کمک کنید.و اینکه در کدنویسی گمز وجود داده های جدولی و اسکالر الزامیست؟؟

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

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

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

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

        • سلام
          شما که تازه کارید اپسیلون برای شما خیلی خیلی زوده استفاده ازش. روش وزنی ساده رو استفاده کنین، یه هدف دارین z1 و یه هدف دیگه دارین z2 جمع وزنی اینا رو میذارین z به صورت z=e=w1*z1+w2*z2 بعد z رو بهینه میکنین. علامت ها و جهت ها رو دقت کنین.
          یعنی چی چجوری تعریف میشه؟

  47. ممنونم.منظورم این هست که کدنویسی پارامترcq باید به چه صورت باشه؟؟
    در روش وزنی ساده سوالم اینجاست ک wک به عنوان وزن در نظر گرفته میشود چطور تعریف شود و چه تفاوتی داره نوع تابع هدفها چی باشهminیا max؟اگ ی مثال بزنید ممنون میشوم بیشتر برایم مشخص میشود.

  48. سلام و خسته نباشید. ممکنه ببینین سوال من راه حلش چیه؟
    من یک مساله نمونه با ابعاد بزرگ رو می خوام با بارون حل کنم. تو نمونه های کوچیک حواب می ده ولی در حالت بزرگ، وقتی reslim رو مثلا ۷۰۰۰ میزارم روی حدود یکساعت نرم افزار خود به خود قطع میشه و پیام stop workingمیده. برای چک کردن قدرت کامپیوتر مدل رو غیر خطی و ساده تر کردم و با سیپلکس حل کردم تا حدود سه ساعت هم مشکلی پیش نیومد. به نطرتون چه باید کرد؟

  49. salam,khaste nabashid
    man unit commitmento ba GAMS neveshtam,hala mikham reserve ezafe konam va bar tebghe maghale gofte hazineie reserve 0.2 locational marginal coste vahedhast,LMP ro az marginale kudum gheid mitunam bedast biaram?

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

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

  52. با سلام.
    من میخواستم مونت کارلو رو در گمز به صورت زیر پیاده کنم:
    loop(IT,

    solve UC using MIP minimizing J;

    display j.l;
    );
    الان میخام هر بار که مساله رو حل کردj ها رو با هم جمع کنه اندیس لوپ هم انگار نمیشه تعریف کرد برای j. چه کار باید بکنم؟ ممنون

  53. سلام.ببخشید برای روش پارامتری وزین.من در یک مایان نامه دیدم ک استفاده شده به صورت خیلی ساده نوشتنmin(aF_bG)
    که a.bوزنها هستند وF.Gتوابع هدف در مدل.و به این صورت تک هدفه کردن ولی در جای دیگر به این صورت به کار رفته است که هر بار مدل را با هریک از توابع حل کنند و نقاطPISوNISرا بدست اورند در فرمولF_PIS/pIs_NIsجایگزین کنند برای هر تابع هدف این کار را بکنند در پایان دو تابع را جمع کنند و در وزنها ضرب کنند ک تک هدفه شود.کدام روش درست میباشد؟؟

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

      • سلام خیلی ممنونم از توضیحاتتون.و ی سوال دیگ اینکه خطای۵۵ دلیلش چیه که نوشته
        endogenous operands for /not allowed in linear models
        احتمالا مربوط به نوع مدل میشود.من نوع مدلمmipهست ولی با تغیراتی در تابع هدف از تقسیم هم استفاده کردم نوع مدل چه میشود؟؟

        • سلام
          تقسیم، ضرب، توان و… بین متغیر ها مدل رو غیر خطی میکنه. مدل شما میشه minlp

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

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

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

  54. در واقع قسمت توان دار و کسری مدل من به صورت زیر هست
    e** mu((1_c)/c)
    که برای cکران پایین تعریف کردم ولی مجدد خطا زد.

  55. سلام.و خسته نباشید.
    من مدلی را ران کرده ام ک solver statusوmodel ststusان نوشته شدهlicensing problemsهست.میشه بفرمایید ایراد از چی میتونه باشه؟ممکنه مشکل از مقدار دهی نادرست پارامترها باشد.چون مقداردهی ها تقریبا فرضی ارایه شده اند

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

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

    • سلام
      تو گمز انتگرال نمیگیریم. یعنی قابلیتشو نداره.
      پس اگه میتونین، دستی انتگرال گیری بکنین، و عبارت معادلش رو (که که اگه ازش مشتق گرفته بشه میشه عبارت زیر انتگرال) تو محدودیت بنویسین مثلا به جای انتگرال x بنویسین، x2/2. یا اینکه از رابطه ی بین گمز و مطلب استفاده کنین.

پاسخ دهید

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