广告合作
  • 今日头条

    今日头条

  • 百度一下

    百度一下,你就知道

  • 新浪网

    新浪网 - 提供新闻线索,重大新闻爆料

  • 搜狐

    搜狐

  • 豆瓣

    豆瓣

  • 百度贴吧

    百度贴吧——全球领先的中文社区

  • 首页 尚未审核订阅工具 订阅

    详解Java如何调用Cplex

    来源:网络收集  点击:  时间:2025-02-19
    【导读】:
    Cplex是IBM公司的一个优化软件,可以用来求解线性规划(Linear Programming,LP),二次规划(Quadratic Programming,QP)、混合整数规划(Mixed Integer Programming,MIP)问题。下面介绍一下Java如何调用Cplex。工具/原料morecplex 12.2eclipse方法/步骤1/13分步阅读

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

    2/13

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

    3/13

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

    4/13

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

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

    5/13

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

    6/13

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

    7/13

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

    Maximize x1 + 2x2 + 3x3

    subject to

    -x1 + x2 + x3 ≦20

    x1 - 3x2 + x3 ≦30

    with these bounds

    0 ≦x1 ≦40

    0 ≦x2 ≦+∞

    0≦ x3≦ +∞

    8/13

    先创建一个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);

    }

    }

    }

    9/13

    定义决策变量: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);

    10/13

    定义目标函数:

    IloNumExpr expr = cplex.sum(x, cplex.prod(2.0, x),cplex.prod(3.0, x));

    cplex.addMaximize(expr);

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

    11/13

    定义决策的约束条件:cplex.addLe(cplex.sum(cplex.negative(x), x, x), 20);cplex.addLe(cplex.sum(cplex.prod(1, x), cplex.prod(-3, x),cplex.prod(1, x)), 30);

    12/13

    最后解决模型问题:if(cplex.solve()){....}

    如果solve()返回true的话,我们可以获取一些信息,例如问题的解决状态、获取方案的目标值、获取数组中的所有决策变量的解值。

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

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

    13/13

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

    Java
    本文关键词:

    版权声明:

    1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。

    2、本站仅提供信息发布平台,不承担相关法律责任。

    3、若侵犯您的版权或隐私,请联系本站管理员删除。

    4、文章链接:http://www.1haoku.cn/art_1242016.html

    相关资讯

    ©2019-2020 http://www.1haoku.cn/ 国ICP备20009186号05-06 14:28:13  耗时:0.022
    0.0223s