подсчет невозможных решений в программном обеспечении GAMS

Я хочу запустить несколько математических моделей в GAMS и подсчитать количество недопустимых решений. Как мне написать условие оператора IF?


person user223276    schedule 24.12.2015    source источник


Ответы (1)


Вы можете проверить атрибут modelstat ваших моделей после их решения. Вот небольшой пример:

equation obj;
variable z;
positive variable x;

obj.. z =e= 1;

equation feasible;
feasible..    x =g= 1;

equation infeasible1;
infeasible1.. x =l= -1;

equation infeasible2;
infeasible2.. x =l= -2;

model m1 /obj, feasible   /;
model m2 /obj, infeasible1/;
model m3 /obj, infeasible2/;

scalar infCount Number of infeasible models /0/;

solve m1 min z use lp;
if(m1.modelstat = %ModelStat.Infeasible%, infCount = infCount+1;)

solve m2 min z use lp;
if(m2.modelstat = %ModelStat.Infeasible%, infCount = infCount+1;)

solve m3 min z use lp;
if(m3.modelstat = %ModelStat.Infeasible%, infCount = infCount+1;)

display infCount;

Если у вас есть целочисленная проблема, вы также должны проверить %ModelStat.Integer Infeasible%, а не только %ModelStat.Infeasible%, поэтому проверка после решения может стать

solve m3 min z use mip;
if(m3.modelstat = %ModelStat.Infeasible% or m3.modelstat = %ModelStat.Integer Infeasible%,
  infCount = infCount+1;
)

Надеюсь, это поможет! Лутц

person Lutz    schedule 07.01.2016