学习啦 > 学习电脑 > 电脑安全 > 系统安全 > java如何调用cplex

java如何调用cplex

时间: 黎正888 分享

java如何调用cplex

  Cplex是IBM公司的一个优化软件,可以用来求解线性规划(Linear Programming,LP),二次规划(Quadratic Programming,QP)、混合整数规划(Mixed Integer Programming,MIP)问题。下面就让学习啦小编给大家说说java如何调用cplex吧。

  java调用cplex的方法

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

  下图安装后打开的Cplex自带的IDE,看上去跟Eclipse差不多。

  在Cplex的安装目录下有许多值得我们学习的东西,还有一些examples,可供我们参考。

  我是在Eclipse中使用Java调用Cplex,所以先把一些Cplex依赖加上。

  运行依赖:cplex.jar(在..\cplex\lib目录下找到)和cplex122.dll(在..\cplex\bin目录下找到)。将cplex.jar加到工程的Build Path中。

  cplex122.dll可以设置到运行时的环境中(VM arguments),或者添加到项目的Native library location。

  接下来我们求解一个具体的线性规划问题。

  例如,我们求解下面这样一个线性规划问题:

  Maximize x1 + 2x2 + 3x3

  subject to

  -x1 + x2 + x3 ≦20

  x1 - 3x2 + x3 ≦30

  with these bounds

  0 ≦x1 ≦40

  0 ≦x2 ≦+∞

  0≦ x3≦ +∞

  先创建一个IloCplex对象,它是用来创建所有建模对象所需要的模型。此时会抛出一个异常: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);

  定义目标函数:

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

  cplex.addMaximize(expr);

  其中这个地方有许多写法,大家在使用的时候可以注意一下。

  定义决策的约束条件: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的话,我们可以获取一些信息,例如问题的解决状态、获取方案的目标值、获取数组中的所有决策变量的解值。

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

  获取方案的目标值:double objval = cplex.getObjValue();获取数组中的所有决策变量的解值:double[] xval = cplex.getValues(x);

  运行程序最后控制台的输出结果如下所示:


猜你感兴趣的:

1.java动态调用方法

2.Java中对象和引用的具体区别

3.ajax调用java方法

4.Java怎么调用系统命令

5.ajax调用java后台方法是什么

6.velocity调用java方法

2152828