線性最優解java實現+Cplex java調用 - 新聞資訊 - 雲南小程序開發|雲南軟件開發|雲南網站建設-昆明融晨信息技術有限公司

159-8711-8523

雲南網建設/小程序開發/軟件開發

知識

不(bù)管是(shì)網站,軟件還是(shì)小程序,都要(yào / yāo)直接或間接能爲(wéi / wèi)您産生價值,我們在(zài)追求其視覺表現的(de)同時(shí),更側重于(yú)功能的(de)便捷,營銷的(de)便利,運營的(de)高效,讓網站成爲(wéi / wèi)營銷工具,讓軟件能切實提升企業内部管理水平和(hé / huò)效率。優秀的(de)程序爲(wéi / wèi)後期升級提供便捷的(de)支持!

您當前位置>首頁 » 新聞資訊 » 技術分享 >

線性最優解java實現+Cplex java調用

發表時(shí)間:2019-7-5

發布人(rén):融晨科技

浏覽次數:50

一:cplex的(de)使用:
1.1 導入cplex.jar,包的(de)地(dì / de)址:https://pan.baidu.com/s/1Q0Bv24EQdelV2rY-IrLoZQ 提取碼:xn14
1.2 将cplex1290.dll (地(dì / de)址:https://pan.baidu.com/s/1sQXqYTSJWywwaZt5AHVkZQ 提取碼:nm0l)添加到(dào)VM option中,這(zhè)裏以(yǐ)IDEA爲(wéi / wèi)例,
在(zài)這(zhè)裏插入圖片描述
在(zài)這(zhè)裏插入圖片描述
同樣eclipse
在(zài)這(zhè)裏插入圖片描述
**二、求解問題。

  1. 一個(gè)簡單的(de)線性規劃問題:**
    maxs.t.x1+2x2+3x3
    ?x1+x2+x3≤20
    x1?3x2+x3≤30
    0≤x1≤40

java 中的(de) cplex 代碼如下:

import ilog.concert.IloException;
import ilog.concert.IloNumVar;
import ilog.cplex.IloCplex;
 
public class LP1 {
 
 public static void main(String[] args) {
  try {
   IloCplex cplex = new IloCplex(); // creat a model
   
   double[] lb = {0.0, 0.0, 0.0};
   double[] ub = {40.0, Double.MAX_VALUE, Double.MAX_VALUE};
   IloNumVar[] x = cplex.numVarArray(3, lb, ub);
   
   double[] objvals = {1.0, 2.0, 3.0};
   cplex.addMaximize(cplex.scalProd(x, objvals));
   
   double[] coeff1 = {-1.0, 1.0, 1.0};
   double[] coeff2 = {1.0, -3.0, 1.0};
   
   cplex.addLe(cplex.scalProd(x, coeff1), 20.0);
   cplex.addLe(cplex.scalProd(x, coeff2), 30.0);
   
   if (cplex.solve()) {
    cplex.output().println("Solution status = " + cplex.getStatus());
    cplex.output().println("Solution value = " + cplex.getObjValue());
    double[] val = cplex.getValues(x);
    for (int j = 0; j < val.length; j++)
     cplex.output().println("x" + (j+1) + "  = " + val[j]);
   }
   cplex.end();
   
  } catch (IloException e) {
   System.err.println("Concert exception caught: " + e);
  }
 }
}

輸出(chū)結果:

Tried aggregator 1 time.

N

o LP presolve or aggregator reductions.

Presolve time = 0.00 sec. (0.00 ticks)

Iteration log . . .

Iteration: 1 Dual infeasibility = 0.000000

Iteration: 2 Dual objective = 202.500000

Solution status = Optimal

Solution value = 202.5

x1 = 40.0
x2 = 17.5
x3 = 42.5

這(zhè)裏注意一下,求的(de)是(shì)線性公式的(de)最大(dà)值,而(ér)在(zài)MATLAB中利用x=linprog(f,[],[],Aeq,beq,lb);求解的(de)是(shì)最小值(我怎麽調試都不(bù)一緻的(de)原因),這(zhè)裏的(de)參數就(jiù)不(bù)在(zài)贅述了(le/liǎo)。
還有就(jiù)是(shì)設置cplex API在(zài)https://wenku.baidu.com/view/7095dd76777f5acfa1c7aa00b52acfc789eb9fed.html有介紹(雖然是(shì)c#的(de),但是(shì)java可以(yǐ)借鑒。

三 線性最優解的(de)java實現
代碼地(dì / de)址:https://pan.baidu.com/s/1UeyQdPLMideXKqUaDBFYZQ 提取碼:rte1
裏面有詳細注解,這(zhè)裏就(jiù)不(bù)再解釋,希望對大(dà)家有幫助!

借鑒:https://blog.csdn.net/robert_chen1988/article/details/78678289 ,感謝這(zhè)位博主的(de)文章。

相關案例查看更多