Я использую Microsoft Solver Foundation версии 3.0.2.10889 Express Edition для линейного программирования. У меня нет проблем при использовании LP solver. Однако я не могу установить два ограничения интервала для одного решения за один раз. Я хотел бы установить «D_1 == 0», когда «нижняя граница <= D_1 <= верхняя граница» не была удовлетворена. </p>
Я провел поиск и нашел это:
Microsoft Solver Foundation для полуцелых
Я попытался реализовать это, см. Упрощенный код ниже. Когда я устанавливаю нижний предел для всех решений = 1, все решения разрешаются по крайней мере со значением 1. Чтобы проверить модель больше, я устанавливаю нижний предел для всех решений = 5, надеясь, что Я получу некоторые решения с результатом = 0. Но модель теперь несостоятельна.
Кажется, что модель не работает, как я ожидал. нижний предел в модели все еще действует только как минимальное значение. Не таким образом, что когда нижняя граница недопустима, вернуть 0. Это означает, что двоичная не влияет на модель.
SolverContext context = SolverContext.GetContext();
context.ClearModel();
Model model = context.CreateModel();
Decision D_1 = new Decision(Domain.RealNonnegative, "D_1");
Decision D_2 = new Decision(Domain.RealNonnegative, "D_2");
model.AddDecisions(D_1, D_2);
Decision binary = new Decision(Domain.IntegerRange(0, 1), "binary");
model.AddDecisions(binary);
Term woodproduction = 0.5 * D_1 + 0.7 * D_2;
model.AddConstraint("constraint_woodproduction", woodproduction == 20.5);
Term lowerbound = 10;
Term upperbound = 100;
Term C_1 = lowerbound * binary <= D_1 <= upperbound * binary;
model.AddConstraint("constraint_1", C_1);
Term C_2 = lowerbound * binary <= D_2 <= upperbound * binary;
model.AddConstraint("constraint_2", C_2);
model.AddGoal("cost", GoalKind.Minimize, lpgoal);
Solution solution = context.Solve(new SimplexDirective
{
IterationLimit = -1,
GetInfeasibility = true, //GetSensitivity = true
});
Спасибо за любые отзывы,
Зденек