Используя Microsoft Solver Foundation, я до сих пор решал только линейные задачи. Сейчас я пытаюсь решить очень простую нелинейную задачу, но по некоторым причинам решатель Microsoft не может ее решить.
Проблема заключается в максимизации a0 * a1, при a0 <10 и a1 <20.
Вот код, который я использую: </p>
с использованием системы;
использование Microsoft.SolverFoundation.Services;
namespace SolverFoundationDemo
{
Программа класса
{
static void Main (строка [] args)
{
Console.WriteLine ("\ nBegin Solver demo \ n");
var solver = SolverContext.GetContext();
var model = solver.CreateModel();
var decision1 = new Decision(Domain.RealNonnegative, "a0"); model.AddDecision(decision1);
var decision2 = new Decision(Domain.RealNonnegative, "a1"); model.AddDecision(decision2);
model.AddConstraint("Constraint0", "a0 <=10");
model.AddConstraint("Constraint1", "a1 <=20");
model.AddGoal("Goal", GoalKind.Maximize, " a0*a1 ");
var solution = solver.Solve();
Console.WriteLine("\nEnd Solver demo\n");
Console.ReadLine();
}
}
}
Я получаю ошибку «Модель не выпуклая», и это правда, но я ожидал, что решатель Microsoft будет достаточно умен, чтобы найти решение в любом случае.
Большое спасибо за ваш отзыв.
С уважением,