2016-09-26 6 views
0

私はSCPSolverを使用して、Javaの線形問題を定式化しています。SCPSolverのLPに非負制約を追加するにはどうすればいいですか?

玩具線形問題:

lp.addConstraint(new LinearBiggerThanEqualsConstraint(new double[] { 1.0, 0.0 }, 0.0, "c3")); 
lp.addConstraint(new LinearBiggerThanEqualsConstraint(new double[] { 0.0, 1.0 }, 0.0, "c4")); 
:今、私は追加することができ xyに非負制約を追加する

LinearProgram lp = new LinearProgram(new double[] { 1.0, 1.0 }); 

lp.addConstraint(new LinearBiggerThanEqualsConstraint(new double[] { 1.0, 2.0 }, -1.0, "c1")); 
lp.addConstraint(new LinearBiggerThanEqualsConstraint(new double[] { 1.0, -2.0 }, -1.0, "c2")); 
lp.setMinProblem(true); 

LinearProgramSolver solver = SolverFactory.newDefault(); 
double[] sol = solver.solve(lp); 

min x + y 
     x + 2y >= -1 
     x - 2y >= -1 

は、などのJavaで書くことができます

しかし、非負制約を追加するための単一の関数呼び出しがありますfo rすべての変数? lp.addAllNonNegativityConstraints()のようなもの?

+0

私はデフォルトで変数は非負であると思います。それ以外の場合は[setLowerbound](http://scpsolver.org/javadoc/scpsolver/problems/MathematicalProgram.html#setLowerbound(double []))を呼び出します。 –

+0

@ErwinKalvelagenさんがdocsにリンクしてくれてありがとうございます。 'setLowerbound'が動作します!しかし、デフォルトでは、すべての変数は無制限です – raghavsood33

答えて

0

はい、このようです。

lp.setLowerbound(new double[lp.getDimension()]); 

は、すべての変数の下限をゼロに設定します。

関連する問題