-2
我要解決的問題是:如何解決線性規劃問題,使用JOptimizer Java API提供備選最優解決方案?
/** Maximize 4x+3Y
* Subject to
* 8x+6y <= 25
* 3x+4y <= 15
* x,y >= 0
*/
理論上這個問題的最佳LP解決方案具有無限#。
所有需要的庫,在我的谷歌提供的依賴關係驅動: https://drive.google.com/file/d/0B84k1fZRHSMdak00TjZKNXBKSFU/view?usp=sharing
我的代碼:
package testJOptimizer;
import com.joptimizer.functions.ConvexMultivariateRealFunction;
import com.joptimizer.functions.LinearMultivariateRealFunction;
import com.joptimizer.optimizers.JOptimizer;
import com.joptimizer.optimizers.OptimizationRequest;
/**
*
* @author K.P.L.Kanchana
*/
public class test_4_alternateOptimum {
/**
* @param args the command line arguments
*/
public static void main(String[] args){
// BasicConfigurator.configure();
// Objective function (plane)
LinearMultivariateRealFunction objectiveFunction = new LinearMultivariateRealFunction(new double[] {-4.0, -3.0}, 0); // maximize 4x+3y
//inequalities (polyhedral feasible set G.X<H)
ConvexMultivariateRealFunction[] inequalities = new ConvexMultivariateRealFunction[4];
// 8x+6y <= 25
inequalities[0] = new LinearMultivariateRealFunction(new double[]{8.0, 6.0}, -25); // 8x+6y-25<=0
// 3x+4y <= 15
inequalities[1] = new LinearMultivariateRealFunction(new double[]{1.0, 4.0}, -15); // 3x+4y-15<=0
// x >= 0
inequalities[2] = new LinearMultivariateRealFunction(new double[]{-1.0, 0.0}, 0);
// y >= 0
inequalities[3] = new LinearMultivariateRealFunction(new double[]{0.0, -1.0}, 0);
//optimization problem
OptimizationRequest or = new OptimizationRequest();
or.setF0(objectiveFunction);
or.setFi(inequalities);
//or.setInitialPoint(new double[] {0.0, 0.0});//initial feasible point, not mandatory
or.setToleranceFeas(1.E-9);
or.setTolerance(1.E-9);
//optimization
JOptimizer opt = new JOptimizer();
opt.setOptimizationRequest(or);
try {
int returnCode = opt.optimize();
}
catch (Exception ex) {
ex.printStackTrace();
return;
}
// get the solution
double[] sol = opt.getOptimizationResponse().getSolution();
// display the solution
System.out.println("Length: " + sol.length);
for (int i = 0; i < sol.length; i++) {
System.out.println("answer " + (i+1) + ": " + (sol[i]));
}
}
}
這是一個數學問題或編程問題?如果數學,那麼你在錯誤的網站。如果編程,告訴我們你試過什麼,並解釋你有什麼問題。現在,它看起來像是「爲我工作」的問題,這絕對是StackOverflow的焦點話題。 – Andreas
作爲一個數學問題,答案爲'0 <= Y <= 45/14','X =(25-6y)/ 8',最大化'4X + 3y'在'12.5'。正如你所說:*無限制#個解決方案。* – Andreas
這是一個數學問題,需要用java解決。我使用了JOptimizer庫和我創建的類的數量,這使得使用JOptimizer變得很容易。 –