Я пытаюсь найти решение для следующего выражения
Функция цели:
минимизировать (| x - c0 | + | y - c1 |)
Ограничение:
0 < x < A
0 < y < B
, где c0, c1, A, B - положительные постоянные
После преобразования, указанного в http://lpsolve.sourceforge.net/5.1/absolute.htm
Я изменил выражение на
Ограничения:
(x - c0) <= xbar
-1 *(x - c0) <= xbar
(y - c1) <= ybar
-1 *(y - c1) <= ybar
0 < x < A
0 < y < B
Функция цели:
minimize(xbar + ybar)
Однако я не могу это реализовать. Я попробовал следующий фрагмент
#include "ortools/linear_solver/linear_solver.h"
#include "ortools/linear_solver/linear_expr.h"
MPSolver solver("distanceFinder", MPSolver::GLOP_LINEAR_PROGRAMMING);
MPVariable* x = solver.MakeNumVar(0, A, "x");
MPVariable* y = solver.MakeNumVar(0, B, "y");
const LinearExpr e = x;
const LinearExpr f = y;
LinearExpr X;
LinearExpr Y;
LinearRange Z = slope * e + offset == f; // Where 'slope' & 'offset' are real numbers.
solver.MakeRowConstraint(Z);
const LinearRange r = -1 * (e - c0) <= X;
const LinearRange s = (e - c0]) <= X ;
const LinearRange m = -1 * (f - c1) <= Y;
const LinearRange k = (f - c1) <= Y ;
solver.MakeRowConstraint(r);
solver.MakeRowConstraint(s);
solver.MakeRowConstraint(m);
solver.MakeRowConstraint(k);
MPObjective* const objective = solver.MutableObjective();
objective->MinimizeLinearExpr(X+Y);
Я получаю сообщение об ошибке, E0206 16: 41: 08.889048 80935 linear_solver. cc: 1577] Решение не существует. MPSolverInterface :: result_status_ = MPSOLVER_INFEASIBLE
Мои варианты использования всегда приводят к возможным решениям (я пытаюсь найти наименьшее манхэттенское расстояние между точкой и линией).
Я очень новичок в используя инструменты GOOGLE-OR. Пожалуйста, предложите любое более простое решение, которое я мог бы пропустить. Любая помощь будет оценена
Спасибо, Ram