OR-Tools, CP-SAT solver - Максимизируйте, затем максимизируйте - PullRequest
1 голос
/ 28 мая 2019

Я использовал https://developers.google.com/optimization/cp/cp_solver, чтобы попытаться решить проблему программирования ограничений, и я хотел бы максимизировать функцию, а затем максимизировать другую.

Я дважды пытался вызвать Maximize, но, похоже, он не работает.

Вот минимальный пример кода:

var solver = new CpSolver();
var model = new CpModel();

IntVar var1 = model.NewIntVar(100, 300, "var1");
IntVar var2 = model.NewIntVar(200, 500, "var2");
IntVar var3 = model.NewIntVar(100, 400, "var3");

model.Add(var1 + var2 + var3 == 1000);

int prio1 = 1;
int prio2 = 2;
int prio3 = 1;
int secondPrio1 = 4;
int secondPrio2 = 1;
int secondPrio3 = 5;
LinearExpression priority = prio1 * var1 + prio2 * var2 + prio3 * var3;
LinearExpression secondPriority = secondPrio1 * var1 + secondPrio2 * var2 + secondPrio3 * var3;

model.Maximize(priority); // Is overwritten by second Maximize, does not work
model.Maximize(secondPriority);

CpSolverStatus result = solver.Solve(model);

Мне бы хотелось, чтобы мой решатель установил максимальное значение в var2 (500), потому что у него самый высокий prio #, затем он устанавливает максимальное значение в var3 (400), потому что у него самый высокий secondPrio #. Тогда оставшиеся (100) будут назначены на var1.

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...