В IDE вы получаете расслабление, потому что ваша модель неосуществима, а с помощью командной строки вы получаете только крошечное сообщение.
Если вы хотите увидеть расслабление с помощью командной строки, выполните oplrun -relax
Очень просто пример .
Позвольте нам go продолжить с
https://www.linkedin.com/pulse/what-optimization-how-can-help-you-do-more-less-zoo-buses-fleischer/
и решить новую проблему: невозможность!
Предположим, у нас есть новая задача: использовать менее 7 автобусов в общей сложности.
Затем мы пишем
int nbKids=300;
float costBus40=500;
float costBus30=400;
dvar int+ nbBus40;
dvar int+ nbBus30;
minimize
costBus40*nbBus40 +nbBus30*costBus30;
subject to
{
ctAllKidsNeedToGo:
40*nbBus40+nbBus30*30>=nbKids;
ctMaxTotalBuses:
nbBus30+nbBus40<=7;
}
ctAllKidsNeedTo Go и ctMaxTotalBuses являются метками для ограничений.
Но тогда проблема становится неосуществимой, поскольку даже с 7 автобусами на 40 мест вы можете взять только 280 = 7 * 40 детей, что меньше 300 детей.
Когда мы запускаем эту модель, мы получаем конфликт
, который означает, что у нас есть конфликт в пределах этих двух ограничений и ослабление, что означает, что если мы ослабим 7 автобусов до 8 автобусов, то у нас будет возможное решение.
Это не очень полезно для этого Крошечный пример, но для реальных моделей это может быть ключевым.
Для получения дополнительной информации см. Расслабление недопустимых моделей в Учебниках по IDE в документации по CPLEX
Примечание:
Вы также можете получить это информация через управление потоком в сценариях:
int nbKids=300;
float costBus40=500;
float costBus30=400;
dvar int+ nbBus40;
dvar int+ nbBus30;
minimize
costBus40*nbBus40 +nbBus30*costBus30;
subject to
{
ctAllKidsNeedToGo:
40*nbBus40+nbBus30*30>=nbKids;
ctMaxTotalBuses:
nbBus30+nbBus40<=7;
}
main
{
thisOplModel.generate();
if (!cplex.solve())
{
writeln(thisOplModel.printRelaxation());
writeln(thisOplModel.printConflict());
}
}
дает
ctMaxTotalBuses
relax [-Infinity,7] to [-Infinity,8] value is -Infinity
ctAllKidsNeedToGo
is in conflict
ctMaxTotalBuses
is in conflict