2

次の式の解を見つけようとしています

目的関数:

最小化(| 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 ツールを使用するのは初めてです。私が見落としたかもしれないより簡単な解決策を提案してください

ありがとう、ラム

4

1 に答える 1