2
我已搜查有關here但是當我嘗試實施LP在Java中與JOptimizer庫失去一切的感覺,如何獲得解決不平等體系的最小值?
我需要找到一個辦法來解決這個簡單的不等式:
x*k+y*k'>0
有:
1>=x>=0
1>=y>=0
其中k和k'是給定的常數。
解決此問題的最佳方法是什麼?
任何人都可以幫我解決我的問題嗎?
我已搜查有關here但是當我嘗試實施LP在Java中與JOptimizer庫失去一切的感覺,如何獲得解決不平等體系的最小值?
我需要找到一個辦法來解決這個簡單的不等式:
x*k+y*k'>0
有:
1>=x>=0
1>=y>=0
其中k和k'是給定的常數。
解決此問題的最佳方法是什麼?
任何人都可以幫我解決我的問題嗎?
似乎你對線性規劃沒有想法。請閱讀有關它。這是您要求的答案。
import com.joptimizer.functions.ConvexMultivariateRealFunction;
import com.joptimizer.functions.LinearMultivariateRealFunction;
import com.joptimizer.optimizers.JOptimizer;
import com.joptimizer.optimizers.OptimizationRequest;
import com.joptimizer.optimizers.PrimalDualMethod;
/**
*
* @author K.P.L.Kanchana
*/
public class Demo {
public static void main(String[] args){
// BasicConfigurator.configure(); // uncomment and see the console log4j:WARN
// setting value for k as k1 variable
double k1 = 100.2;
// setting value for k' as k2 variable
double k2 = 30.4;
// Objective function (plane)
LinearMultivariateRealFunction objectiveFunction = new LinearMultivariateRealFunction(new double[] {-k1, -k2}, 0); // Maximize kX + K'X
//inequalities (polyhedral feasible set G.X<H)
ConvexMultivariateRealFunction[] inequalities = new ConvexMultivariateRealFunction[4];
// x > 0 ('<=' constraints not applicable in JOptimizer)
inequalities[0] = new LinearMultivariateRealFunction(new double[] {-1, 0}, 0); // -x > o
// y > 0 ('<=' constraints not applicable in JOptimizer)
inequalities[1] = new LinearMultivariateRealFunction(new double[] {0, -1}, 0); // -y > o
// x < 1 ('<=' constraints not applicable in JOptimizer)
inequalities[2] = new LinearMultivariateRealFunction(new double[] {1, 0}, -1); // x-1 < o
// y < 1 ('<=' constraints not applicable in JOptimizer)
inequalities[3] = new LinearMultivariateRealFunction(new double[] {0, 1}, -1); // y-1 < o
//optimization problem
OptimizationRequest or = new OptimizationRequest();
or.setF0(objectiveFunction);
or.setFi(inequalities);
or.setToleranceFeas(JOptimizer.DEFAULT_FEASIBILITY_TOLERANCE);
or.setTolerance(JOptimizer.DEFAULT_TOLERANCE);
//optimization
PrimalDualMethod opt = new PrimalDualMethod();
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("X = " + sol[0]);
System.out.println("X = " + sol[1]);
}
}
@Gigibit這裏是你的答案,你複製! –
(1)這是一個簡單的LP問題,我沒有看到這裏的困難。 (2)你沒有目標,所以你只是在尋找一個可行的解決方案。 (3)以變量範圍爲界的所有解決方案都是可行的(4)在實施過程中究竟是什麼問題?(5)''''''看起來在某種程度上是錯誤的。但是我不知道x是一個一維變量還是矢量或者是什麼。也許你想要一些點積,但你的例子不夠正式來表達。 – sascha