如何在 JOptimizer 中表示等式约束?
How to represent equality constraint in JOptimizer?
//Objective function
double[] c = new double[] { -1., -1. };
//Inequalities constraints
double[][] G = new double[][] {{4./3., -1}, {-1./2., 1.}, {-2., -1.}, {1./3., 1.}};
double[] h = new double[] {2., 1./2., 2., 1./2.};
//Bounds on variables
double[] lb = new double[] {0 , 0};
double[] ub = new double[] {10, 10};
//optimization problem
LPOptimizationRequest or = new LPOptimizationRequest();
or.setC(c);
or.setG(G);
or.setH(h);
or.setLb(lb);
or.setUb(ub);
or.setDumpProblem(true);
//optimization
LPPrimalDualMethod opt = new LPPrimalDualMethod();
opt.setLPOptimizationRequest(or);
opt.optimize();
这些代码复制自JOptimizer官方文档。然而,它只展示了如何在 JOptimizer 的线性规划中使用不等式约束。我想知道如何在 JOptimizer 中表示等式约束?我知道我可以通过定义多个不等式约束来实现这个目标,比如 Ax < b 和 -Ax < -b 与 Ax=b 相同。但是我有什么直接的方法可以做到这一点吗?
好的,我找到了答案。这很容易。我们只需要用 setA 和 setB 替换 setG 和 setH。
//Objective function
double[] c = new double[] { -1., -1. };
//Inequalities constraints
double[][] G = new double[][] {{4./3., -1}, {-1./2., 1.}, {-2., -1.}, {1./3., 1.}};
double[] h = new double[] {2., 1./2., 2., 1./2.};
//Bounds on variables
double[] lb = new double[] {0 , 0};
double[] ub = new double[] {10, 10};
//optimization problem
LPOptimizationRequest or = new LPOptimizationRequest();
or.setC(c);
or.setG(G);
or.setH(h);
or.setLb(lb);
or.setUb(ub);
or.setDumpProblem(true);
//optimization
LPPrimalDualMethod opt = new LPPrimalDualMethod();
opt.setLPOptimizationRequest(or);
opt.optimize();
这些代码复制自JOptimizer官方文档。然而,它只展示了如何在 JOptimizer 的线性规划中使用不等式约束。我想知道如何在 JOptimizer 中表示等式约束?我知道我可以通过定义多个不等式约束来实现这个目标,比如 Ax < b 和 -Ax < -b 与 Ax=b 相同。但是我有什么直接的方法可以做到这一点吗?
好的,我找到了答案。这很容易。我们只需要用 setA 和 setB 替换 setG 和 setH。