CPLEX求解器入门案例

article/2025/11/7 18:57:22

其他文章:

通过0-1背包问题看穷举法、贪心算法、启发式算法(JAVA)

模拟退火(SA)算法实例介绍(JAVA)

遗传算法(GA)实例介绍(JAVA)

CPLEX求解器入门案例

java集成Cplex:Cplex下载、IDEA环境搭建、docker部署

windows下cplex12.6.3的下载、安装、IDE编程及相关问题解决

windows下cplex20.1.0启动报错: ilog.odms.ide.opllang.IloOplLangPlugin

Cplex20.1版本bin包Linux安装过程


参考B站视频:cplex入门到精通

CPLEX求解器入门案例

官方中文JAVA手册:https://www.ibm.com/docs/zh/icos/12.9.0?topic=application-structure

cplex是IBM开发的一款线性规划问题的求解器。

一、适用范围

cplex适用于求解的问题类型:

CPLEX的适用范围:1.适用于一般的线性规划(LP)问题.2.CPLEX 还可对 LP 的多个扩展求解:2.1.网络流问题,是 LP 的一种特殊情况,CPLEX 可以通过利用问题结构以快得多的速度对其求解。2.2.二次规划 (QP) 问题,其中 LP 目标函数扩展为包括二次项。2.3.二次约束规划 (QCP) 问题,在约束中包括二次项。 实际上,CPLEX 可对二阶锥规划 (SOCP) 问题求解。2.4.混合整数规划 (MIP) 问题,其中任意或所有 LP、QP 或 QCP 变量都进一步限制为采用最优解法中的整数值,并且 MIP 自身扩展为包括诸如特殊有序集合 (SOS) 和半连续变量之类的构造。

二、求解步骤

  1. 创建(IloCplex)
  2. 构建变量(IloNumVar)
  3. 构建表达式(IloNumExpr、IloLinearNumExpr)
  4. 构建目标函数(IloObjective)
  5. 构建约束条件(IloRange)
  6. 求解
  7. 获得求解的结果精确信息

三、编码测试

package com.wuxiaolong.cplex;import ilog.concert.*;
import ilog.cplex.IloCplex;
/***  测试模型:*  目标函数: max y = x[0] + 2*x[1] + 3*x[2]*  约束条件: -x[0] + x[1] + x[2] <= 20.0       0<= x[i] <=100*/
public class Test1 {public static void main(String[] args) throws Exception{try{// 1.创建模型/*** 第一个任务是创建 IloCplex 对象。 它用于创建表示模型所需的所有建模对象。* 例如,通过调用 model.intVar(0, 10) 来创建具有界限 0 和 10 的整数变量,其中 model 是 IloCplex 对象。*/IloCplex model = new IloCplex();/*** 类 IloCplex 实现 接口 IloModeler 及其扩展 IloMPModeler 和 IloCplexModeler。* 这些接口为以下类型的建模对象(可与 IloCplex 一起使用)定义构造函数:** 建模类           描述* IloNumVar	 建模变量* IloRange	     类型为 lb <= expr <= ub 的范围约束* IloObjective	 优化目标* IloNumExpr	 使用变量的表达式  表达式可用于为模型创建约束或目标函数**/// 2.IloNumVar 构建变量// 以下说明如何创建三个连续变量(全部具有界限 0 和 100):IloNumVar[] x = model.numVarArray(3, 0.0, 100.0);// 3.IloNumExpr 构建表达式// 建模变量构建类型为 IloNumExpr 的表达式,以供在优化模型的约束或目标函数中使用。 例如,表达式: x[0] + 2*x[1] + 3*x[2]IloNumExpr expr1 = model.sum( // 求表达式的和x[0],model.prod(2.0, x[1]),  // 求表达式的积model.prod(3.0, x[2]));//            // 3.IloLinearNumExpr 构建表达式
//            // 创建表示同一表达式的对象的另一种方法是使用表达式 IloLinearNumExpr。优点在于可以更轻松在循环中构建线性表达式。
//            // 接口 IloLinearNumExpr 是 IloNumExpr 的扩展,因此可在能够使用表达式的任意位置进行使用。
//            IloLinearNumExpr expr2 = model.linearNumExpr();
//            expr2.addTerm(1.0, x[0]);
//            expr2.addTerm(2.0, x[1]);
//            expr2.addTerm(3.0, x[2]);// 4.构建目标函数// 在其求解的模型中使用该目标  model.addMaximize()  model.addMinimize()// 创建和添加目标有一种快捷表示法:IloNumExpr object = expr1;IloObjective iloObjective = model.addMaximize(object);// 5.构建约束条件// 向模型中添加约束 例如,约束: -x[0] + x[1] + x[2] <= 20.0IloRange iloRange = model.addLe(model.sum(model.negative(x[0]), x[1], x[2]), 20);//同样,为添加其他约束类型(包括等同性约束、大于或等于约束和范围约束)提供了许多方法。// 在内部,它们全部表示为具有相应界限选项的 具有相应界限选择的 IloRange 对象,因此所有这些方法才会返回 IloRange 对象。// 另请注意,可能已通过许多不同方式创建先前表达式,包括使用 IloLinearNumExpr。// 6.求解// 该方法返回布尔值以指示优化是否成功找到解法。 如果未找到解法,那么会返回 false。// 如果返回 true,那么表明 CPLEX 找到可行解法,尽管其未必是最优解法。// 可以从 getStatus 方法获取有关上次调用 solve 方法的结果的更精确信息。boolean solve = model.solve();// 7.获得求解的结果精确信息// 返回值告诉您 CPLEX 找到的有关模型的信息:它找到最优解法还是仅找到可行解法;// 它证明模型无边界还是不可行;或者此时是否尚未证明任何内容。// 通过 getCplexStatus 方法可获取有关终止优化器调用的甚至更详细的信息,参考https://www.ibm.com/docs/en/icos/12.9.0?topic=c-ilocplexstatus。if(solve){model.output().println("解的状态: " + model.getStatus());model.output().println("目标函数值: " + model.getObjValue());// 对应的未知变量的值double[] xVal = model.getValues(x);String msg = "";for( double t : xVal){msg = msg + t + "    ";}model.output().println("决策变量取值(按顺序): " + msg);}else {model.output().println("未找到解法");}// 8.关闭求解器// 一定要关闭求解器,否则会内存泄漏model.end();}catch (IloException e){// 捕获Cplex定义的异常System.out.println("模型出错了"+e.getMessage());}catch (Exception e){// 系统未知异常System.out.println("未知异常"+e.getMessage());}}
}

四、运行结果

image-20211020204512484

五、官方案例

安装完成cplex后,在安装目录里有很多案例可以看。

image-20211020205113733

image-20211020204624322

JAVA参考案例:

https://www.ibm.com/docs/zh/icos/12.9.0?topic=cplex-java-examples


http://chatgpt.dhexx.cn/article/4XppMlZE.shtml

相关文章

Cplex入门教程(二)

一、写在前面 在文章《Cplex入门教程&#xff08;一&#xff09;》的基础上&#xff0c;补充代码的部分 二、如何写代码 代码头&#xff0c;请无脑直接抄。 #include <ilcplex/ilocplex.h> #include <stdio.h> using namespace std;ILOSTLBEGIN声明环境&#x…

【 CPLEX安装】

系列文章目录 提示&#xff1a;版本匹配matlab2019bcplex12.10.0.0 版本查询网址&#xff1a; https://www.ibm.com/software/reports/compatibility/clarity/productsForPrereq.html 一、CPLEX安装 python E:\software\Cplex\python\setup.py install file:///E:/software/…

Cplex求解器

博主个人博客 在求解整数线性规划问题是,Matlab下yalmip+cplex的组合会让如虎添翼。本人是在研究早晚班排班过程中才发现的这一工具。其能够求解各种整数规划模型。在matlab中使用cplex求解时,还可以使用yalmip工具进行建模,比直接使用cplex建模方便很多。 在正式开始使用…

Cplex入门教程(一)

文章目录 1、主要内容2、Cplex简介CPLEX具有的优势 3、安装Cplex 12.94、在 Windows 上设置 CPLEX5、测试代码 1、主要内容 Cplex 简介安装Visual Studio 2017 (64位)安装cplex12.9 (64位)在 Windows 上设置 Cplex在 Visual Studio 中将 Cplex 链接代码逻辑介绍 2、Cplex简介…

Cplex的安装和使用实例

最近有文章复现需要用到Cplex&#xff0c;所以捣鼓了一下&#xff0c;看其他博客感觉不解渴&#xff0c;所以索性在这里记录一些key point 1&#xff09;下载与安装&#xff1a;Cplex的下载可以在官方网站下载&#xff0c;学生是免费下载使用的&#xff0c;非学生可以在网上找…

运筹优化学习19:Cplex中文教程与实例详解

目录 1 绪论 1.1 Cplex简介 1.1.1 基本界面介绍 1.1.2 处理流程介绍 1.2 OPL语言 1.2.1 OPL的主要关键字 1.2.2 数据文件 1.3 如何调用Cplex 1.3.1 使用AMPL脚本语言调用 1.3.2 IBM CPLEX Studio IDE 1.3.3 Cplex with Concert Technology 2 官方gas示例演示 2.1 导…

cplex基础入门(一)

这边文章会以纯新手小白的视角&#xff0c;教会大家如何快速的搭建自己的cplex模型&#xff0c;做到求解模型不求人。 目录 一、引言 1、掌握数据类型及数据结构 2、常规Cplex编程方法 3、Cplex编程步骤 4、cplex 程序框架 5、创建模型 二、规划建模的入门求解案例 1、…

Cplex安装教程与使用介绍

软件可以在ShareApps上下载&#xff0c;小伙伴们嫌麻烦可以用提取链接。 学术版 Cplex12.10 64位Windows 更新一下链接&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1jD9Xved2aWPHtRd-_PLI5Q 提取码&#xff1a;n4og 具体步骤&#xff1a; 下载完成后直接运行就可…

CPLEX入门

求解线性规划、整数线性规划、二次规划等较为经典的优化软件 Cplex专门用于求解大规模的线性规划&#xff08;LP&#xff09;、二次规划&#xff08;QP&#xff09;、带约束的二次规划&#xff08;QCQP&#xff09;、二阶锥规划&#xff08;SOCP&#xff09;等四类基本问题&…

html meta标签使用总结

目录(?)[] 之前学习前端中&#xff0c;对meta标签的了解仅仅只是这一句。 <meta charset"UTF-8"> 但是打开任意的网站&#xff0c;其head标签内都有一列的meta标签。比如我博客的。 但是自己却很不熟悉&#xff0c;于是把meta标签加入了寒假学习计划的最前方…

html标签-meta

之前学习前端中&#xff0c;对meta标签的了解仅仅只是这一句。 <meta charset"UTF-8">但是打开任意的网站&#xff0c;其head标签内都有一列的meta标签。比如我博客的。 但是自己却很不熟悉&#xff0c;于是把meta标签加入了寒假学习计划的最前方。 简介 在查阅…

话说HLS,HTTP,RTSP,RTMP协议的主要区别

HLS,HTTP,RTSP,RTMP协议的区别&#xff1a; 视频全终端观看  用HTTP方式&#xff1a; 先通过服务器将FLV下载到本地缓存&#xff0c;然后再通过NetConnection的本地连接来播放这个FLV&#xff0c;这种方法是播放本地的视频&#xff0c;并不是播放服务器的视频。因此在本地缓…

Web前端后7天

Web前端后7天 1.概念 2.步骤 3.执行原理 4.生命周期 5.Servlet3.0 注解配置 6.Servlet的体系结构 servlet --接口 GenericServlet–抽象类 GenericServlet&#xff1a;将Servlet接口中其他的方法做了默认空实现&#xff0c;只将service()方法作为抽象&#xff0c; 将来定义Ser…

同等画质不同编码的压缩比_视频的编码与封装

视频的编码与封装 【容器——封装格式】 avi——基本都能被软件兼容&#xff0c;但过于老旧&#xff0c;不兼容目前的很多编码方式H.264&#xff0c;其编码方式有也很多&#xff0c;若真要用到&#xff0c;推荐xvid编码&#xff08;对DIVX编码方式的复仇&#xff09;【所谓的a片…

二、实践与视频解决方案

一、视频解决方案 说明&#xff1a; 公司下户拍摄视频&#xff0c;上传存储一直用的优酷云(视频压缩、解码、播放)当然还支持水印。 现在场景&#xff0c;我们公司内部买服务器&#xff0c;下户拍摄视频上传到我们自己服务内&#xff0c;需要解决的问题&#xff0c;下户拍摄视频…

Servlet应用——JavaWeb教案(四)

文章目录 JavaWeb组件1. ServletRequest1. 介绍Request体系**获取请求消息数据****获取请求行**获取请求头获取超链接的所有头信息防盗链操作 获取请求体 其他功能1. 获取请求参数通用方式2. 请求转发:1. 转发给servlet2. 转发给jsp页面 3. 共享数据1. 转发给servlet2. 转发给J…

20201006将音频为48kHz采样率的mp4转为44.1kHz的步骤

20201006将音频为48kHz采样率的mp4转为44.1kHz的步骤 千千静听v5.1.0 MKVToolNix v48.0 MediaInfo 0.7.86 Copyright (c) MediaArea.net SARL 支持多种格式的多媒体文件: Matroska, OGG (包括 OGM) MPEG-1 (包括 VCD) MPEG-2 (包括 DVD, SVCD) MPEG-4 (包括 iTunes M4A…

怎么讲计算机屏幕录制,电脑如何录制屏幕

电脑如何录制屏幕 腾讯视频/爱奇艺/优酷/外卖 充值4折起 电脑如何录制屏幕呢?如果我们的电脑上有自带的屏幕录制软件,点击即可录制,若没有,我们可以借助QQ来进行录制屏幕,一起来看看吧。 1. 首先打开电脑上的QQ APP: 2. 进入登录页面,输入账号和密码,进行登录: 3. 然后…

免费视频制作工具满足非专业用户的视频处理需求:压缩视频、转码视频、倒放视频、合并片段、根据字幕裁切片段、自动配字幕、自动剪辑等

免费视频制作工具满足非专业用户的视频处理需求&#xff1a;压缩视频、转码视频、倒放视频、合并片段、根据字幕裁切片段、自动配字幕、自动剪辑等。有了它你也可以做出优秀的视频啦&#xff5e; Quick Cut 是一款轻量、强大、好用的视频处理软件。它是一个轻量的工具&#xf…

win10访问不了服务器的共享文件,win10访问不了samba共享文件夹怎么办

win10访问不了samba共享文件夹怎么办 腾讯视频/爱奇艺/优酷/外卖 充值4折起 最近很多网友反映win系统升级后,访问不了smb服务器,弹出如下图的提示窗,遇到这个问题怎么办呢?下面一起来看看win10访问不了samba共享文件夹的解决方法。 具体如下: 1. 第一步,右键点击桌面左下…