国产宅男网站在线|亚洲A级性爱免费视频|亚洲中精品级在线|午夜福利AA毛

  • <dd id="gf5jf"><th id="gf5jf"></th></dd>

    <cite id="gf5jf"><label id="gf5jf"></label></cite>
  • <div id="gf5jf"><listing id="gf5jf"></listing></div>
    學(xué)習(xí)啦 > 學(xué)習(xí)電腦 > 電腦安全 > 系統(tǒng)安全 > java如何調(diào)用cplex

    java如何調(diào)用cplex

    時(shí)間: 黎正888 分享

    java如何調(diào)用cplex

      Cplex是IBM公司的一個(gè)優(yōu)化軟件,可以用來求解線性規(guī)劃(Linear Programming,LP),二次規(guī)劃(Quadratic Programming,QP)、混合整數(shù)規(guī)劃(Mixed Integer Programming,MIP)問題。下面就讓學(xué)習(xí)啦小編給大家說說java如何調(diào)用cplex吧。

      java調(diào)用cplex的方法

      首先需要安裝Cplex軟件,我安裝的版本是cplex_studio122.win-x86-32.exe

      下圖安裝后打開的Cplex自帶的IDE,看上去跟Eclipse差不多。

      在Cplex的安裝目錄下有許多值得我們學(xué)習(xí)的東西,還有一些examples,可供我們參考。

      我是在Eclipse中使用Java調(diào)用Cplex,所以先把一些Cplex依賴加上。

      運(yùn)行依賴:cplex.jar(在..\cplex\lib目錄下找到)和cplex122.dll(在..\cplex\bin目錄下找到)。將cplex.jar加到工程的Build Path中。

      cplex122.dll可以設(shè)置到運(yùn)行時(shí)的環(huán)境中(VM arguments),或者添加到項(xiàng)目的Native library location。

      接下來我們求解一個(gè)具體的線性規(guī)劃問題。

      例如,我們求解下面這樣一個(gè)線性規(guī)劃問題:

      Maximize x1 + 2x2 + 3x3

      subject to

      -x1 + x2 + x3 ≦20

      x1 - 3x2 + x3 ≦30

      with these bounds

      0 ≦x1 ≦40

      0 ≦x2 ≦+∞

      0≦ x3≦ +∞

      先創(chuàng)建一個(gè)IloCplex對象,它是用來創(chuàng)建所有建模對象所需要的模型。此時(shí)會(huì)拋出一個(gè)異常:IloException,需要try\catch。

      代碼如下:static public class Application {

      static public main(String[] args) {

      try {

      IloCplex cplex = new IloCplex();

      // create model and solve it

      } catch (IloException e) {

      System.err.println("Concert exception caught: " + e);

      }

      }

      }

      定義決策變量: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);

      定義目標(biāo)函數(shù):

      IloNumExpr expr = cplex.sum(x[0], cplex.prod(2.0, x[1]),cplex.prod(3.0, x[2]));

      cplex.addMaximize(expr);

      其中這個(gè)地方有許多寫法,大家在使用的時(shí)候可以注意一下。

      定義決策的約束條件:cplex.addLe(cplex.sum(cplex.negative(x[0]), x[1], x[2]), 20);cplex.addLe(cplex.sum(cplex.prod(1, x[0]), cplex.prod(-3, x[1]),cplex.prod(1, x[2])), 30);

      最后解決模型問題:if(cplex.solve()){....}

      如果solve()返回true的話,我們可以獲取一些信息,例如問題的解決狀態(tài)、獲取方案的目標(biāo)值、獲取數(shù)組中的所有決策變量的解值。

      cplex.getStatus()返回值類型:Error、Unknown、Feasible、Bounded、Optimal、Infeasible、Unbouded、InfeasibleorUnbounded。

      獲取方案的目標(biāo)值:double objval = cplex.getObjValue();獲取數(shù)組中的所有決策變量的解值:double[] xval = cplex.getValues(x);

      運(yùn)行程序最后控制臺(tái)的輸出結(jié)果如下所示:


    猜你感興趣的:

    1.java動(dòng)態(tài)調(diào)用方法

    2.Java中對象和引用的具體區(qū)別

    3.ajax調(diào)用java方法

    4.Java怎么調(diào)用系統(tǒng)命令

    5.ajax調(diào)用java后臺(tái)方法是什么

    6.velocity調(diào)用java方法

    2152828