2016-11-16 45 views
2

我已搜查有關here但是當我嘗試實施LP在Java中與JOptimizer庫失去一切的感覺,如何獲得解決不平等體系的最小值?

我需要找到一個辦法來解決這個簡單的不等式:

x*k+y*k'>0 

有:

1>=x>=0 
1>=y>=0 

其中k和k'是給定的常數。

解決此問題的最佳方法是什麼?

任何人都可以幫我解決我的問題嗎?

+0

(1)這是一個簡單的LP問題,我沒有看到這裏的困難。 (2)你沒有目標,所以你只是在尋找一個可行的解決方案。 (3)以變量範圍爲界的所有解決方案都是可行的(4)在實施過程中究竟是什麼問題?(5)''''''看起來在某種程度上是錯誤的。但是我不知道x是一個一維變量還是矢量或者是什麼。也許你想要一些點積,但你的例子不夠正式來表達。 – sascha

回答

0

似乎你對線性規劃沒有想法。請閱讀有關它。這是您要求的答案。

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

} 
+0

@Gigibit這裏是你的答案,你複製! –

相關問題