Solver решает проблему программирования ограничения
-
28-09-2019 - |
Вопрос
Кто-нибудь знает какого-либо простого решателя, который может решить линейные модели по математическим моделям? Пример простая модель:
a + b + c = 100;
a/b/c = 2/3/4;
a > d
Я использую MS Solver Foundation, и это мой код C #, но оно бросает неразлагаться.
SolverContext solverContext = SolverContext.GetContext();
Model model = solverContext.CreateModel();
Decision a = new Decision(Domain.Real, "a");
Decision b = new Decision(Domain.Real, "b");
model.AddDecisions(a, b);
model.AddConstraint("fator", a / b == 4);
model.AddConstraint("sum", a + b == 5);
Solution solution = solverContext.Solve(new ConstraintProgrammingDirective());
Report report = solution.GetReport();
Console.WriteLine("a = {0} ; b = {1}", a, b);
Спасибо за любую помощь
Редактировать:
Поскольку проблема INT CSP (программирование SSTISFACTION SSTISFACTION), вы не должны использовать какую-либо директиву при ее решении. Код должен быть:
SolverContext solverContext = SolverContext.GetContext();
Model model = solverContext.CreateModel();
Decision a = new Decision(Domain.Real, "a");
Decision b = new Decision(Domain.Real, "b");
model.AddDecisions(a, b);
model.AddConstraint("fator", a / b == 4);
model.AddConstraint("sum", a + b == 5);
Solution solution = solverContext.Solve();
Report report = solution.GetReport();
Console.WriteLine("a = {0} ; b = {1}", a, b);
Однако я не знаю, почему я бежал медленно, мне нужно только первое решение в установленном решении.
Решение
В зависимости от ваших потребностей, Wolfram Alpha может быть полезен (по крайней мере, для проверки). Я сомневаюсь, что вы можете решить сложные проблемы, потому что вход - это lenght-limited. Но для простых проблем, как ваш пример, все в порядке.