Кто-нибудь знает какой-нибудь простой решатель, который может решать математические модели с линейными ограничениями? Пример простой модели:
a + b + c = 100;
a/b/c = 2/3/4;
a > d
Я использую основу MS Solver, и это мой код C #, но он выдает исключение UnsolvableModelException:
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 (программирование с ограничениями), вы не должны использовать какую-либо директиву при ее решении. Код должен быть:
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);
Однако я не знаю, почему я бежал медленно, мне нужно только первое решение в наборе решений.