2016-09-26 20 views
0

我使用SCPSolver來制定java中的線性問題。如何在SCPSolver中爲LP添加非負性約束?

玩具線性問題:

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

可以用Java寫爲:

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); 

我們加上xy非負限制,我可以添加:

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")); 

但是有沒有一個函數調用來添加非負性約束fo所有的變量?像lp.addAllNonNegativityConstraints()

+0

我認爲默認情況下變量是非負的。否則,請調用[setLowerbound](http://scpsolver.org/javadoc/scpsolver/problems/MathematicalProgram.html#setLowerbound(double []))。 –

+0

@ErwinKalvelagen感謝鏈接到文檔。 'setLowerbound'的作品!但默認情況下,所有變量都是無界的 – raghavsood33

回答

0

是的,像這樣。

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

將所有變量的下限設置爲零。