Cplex入门教程(二)

article/2025/11/7 18:58:37

一、写在前面

在文章《Cplex入门教程(一)》的基础上,补充代码的部分

二、如何写代码

  • 代码头,请无脑直接抄。
#include <ilcplex/ilocplex.h>
#include <stdio.h>
using namespace std;ILOSTLBEGIN
  • 声明环境,建立模型。
IloEnv env;IloModel model(env);
  • 定义决策变量,使用ilocplex包含的数据类型,或自己定义新的变量。
IloInt
IloNumVarArray
IloNumArray
IloIntVarArray
IloIntArray
typedef IloArray<IloNumVarArray> IloNumVarArray2;
typedef IloArray<IloNumVarArray2> IloNumVarArray3;IloNumVarArray3 t(env, I); 
for (int i = 0; i < I; i++)
{	t[i] = IloNumVarArray2(env, I);for (int j = 0; j < I; j++){	t[i][j] = IloNumVarArray(env, I, 0, 100000);}
}
  • 定义模型系数,可使用常用数据类型(int等)或ilocplex包含的数据类型。 可以直接赋值,也可以通过读取.txt/.dat文件输入
ifstream inn;
inn.open("data.txt");
if (inn)
{   inn >> b_1; inn >> b_2; inn >> b_3; inn >> b_4;   }
inn.close();

在这里插入图片描述

  • 使用以下网站查询各数据类型的用法:
    http://www-eio.upc.es/lceio/manuals/cplex-11/html/refcppcplex/html/index/index.html#I

  • 定义目标函数,可以直接写,也可以使用IloExpr定义一个表达式。

// 适用于简单表达
model.add(IloMaximize(env, vars[0] + 2 * vars[1] + 3 * vars[2]));
// 适用于求和等需要迭代的表达
IloExpr v3(env);
v3 += (x[i][j] * b[i][j]);
model.add(IloMinimize(env, v3));
  • 添加约束条件,同样有两种方法。
model.add(-vars[0] + vars[1] + vars[2] <= 20);
IloExpr v1(env);
for (i = 0; i < 4; i++)
{v1.clear();for (j = 0; j < 4; j++){  v1 += (x[i][j]);  }model.add(v1 == 1);
}
  • 求解,无脑直接抄+1。
IloCplex cplex(model);
if (!cplex.solve()) {env.error() << "Failed to optimize LP." << endl;throw(-1);
}
  • 输出结果,env.out() << 语句。
env.out() << "Solution status = " << cplex.getStatus() << endl;env.out() << "Solution value = " << cplex.getObjValue() << endl;env.out() << "Values = " << vars << endl;

三、Example 1

  • 问题:
    min x1 + 2 x2 + 3 x3
    s.t. -x1 + x2 + x3 ≤ 20
    x1 - 3 x2 + x3 ≤ 30
    0 ≤ x1 ≤ 40
    0 ≤ x2
    0 ≤ x3
#include <ilcplex/ilocplex.h>
#include <stdio.h>
using namespace std;ILOSTLBEGINint main( void * )
{IloEnv env;try {IloModel	model( env );IloNumVarArray	vars( env );vars.add( IloNumVar( env, 0.0, 40.0 ) );                                /* 0 <= x1 <= 40 */vars.add( IloNumVar( env ) );                                           /* 0 <= x2 */vars.add( IloNumVar( env ) );                                           /* 0 <= x3 */model.add( IloMaximize( env, vars[0] + 2 * vars[1] + 3 * vars[2] ) );   /* maximize x1 + 2 x2 + 3 x3 */model.add( -vars[0] + vars[1] + vars[2] <= 20 );                        /* subject to -x1 + x2 + x3 <= 20 */model.add( vars[0] - 3 * vars[1] + vars[2] <= 30 );                     /* x1 - 3 x2 + x3 <=30 */IloCplex cplex( model );if ( !cplex.solve() ){env.error() << "Failed to optimize LP." << endl;throw(-1);}IloNumArray				vals( env );env.out() << "Solution status = " <<	cplex.getStatus() << endl;env.out() << "Solution value = " <<	cplex.getObjValue() << endl;cplex.getValues( vals, vars );env.out() << "Values = " << vals << endl;}catch ( IloException & e ) { cerr << "Concert exception caught: " << e << endl; }catch ( ... ) { cerr << "Unknown exception caught" << endl; }env.end();system( "pause" );return(0);
}

四、Example 2

  • 问题:
    在这里插入图片描述
    在这里插入图片描述
#ifndef abcde /* ifndef做预处理,进行条件编译 */
#include <ilcplex/ilocplex.h>
typedef IloArray<IloIntVarArray>	IntVarMatrix;
typedef IloArray<IloNumVarArray>	NumVarMatrix;
typedef IloArray<IloIntArray>		IntMatrix;
typedef IloArray<IloNumArray>		NumMatrix;
/* 定义各种数组 */
#endifILOSTLBEGINint main( int argc, char **argv )
{IloEnv env;IloModel model( env );IloExpr obj( env );IloInt	i, j;IloInt	c;IloExpr v1( env );IloExpr v2( env );IloExpr v3( env );IloNumArray b_1( env );IloNumArray b_2( env );IloNumArray b_3( env );IloNumArray b_4( env );/* 文件输入 */ifstream inn;inn.open( "data.txt" );if ( inn ){inn >> b_1; inn >> b_2; inn >> b_3; inn >> b_4;}inn.close();NumMatrix b( env, 4 );for ( i = 0; i < 4; i++ ){b[i] = IloNumArray( env, 4 );}b[0] = b_1; b[1] = b_2; b[2] = b_3; b[3] = b_4;IntVarMatrix x( env, 4 );for ( i = 0; i < 4; i++ ){x[i] = IloIntVarArray( env, 4, 0, 1 );}for ( i = 0; i < 4; i++ ){v1.clear();v2.clear();for ( j = 0; j < 4; j++ ){v1	+= (x[i][j]);v2	+= (x[j][i]);v3	+= (x[i][j] * b[i][j]);}model.add( v1 == 1 );model.add( v2 == 1 );}model.add( IloMinimize( env, v3 ) );obj.end();/* 设置模型迭代结束条件 */IloCplex cplex( model );cplex.setParam( cplex.EpAGap, 0.001 );cplex.setParam( cplex.EpGap, 0.001 );/* 处理异常 */cout << "begin to solve." << endl;try{if ( !cplex.solve() ){if ( (cplex.getStatus() == IloAlgorithm::Infeasible) ||(cplex.getStatus() == IloAlgorithm::InfeasibleOrUnbounded) ){cout << endl << "No solution - starting Conflict refinement" << endl;}env.error() << "Failed to optimize LP." << endl;throw( -1 );}cout << "异常处理完毕" << endl;/* 输出结果及状态 */env.out() << "Solution status = " << cplex.getStatus() << endl;env.out() << "Solution value = " <<	cplex.getObjValue() << endl;env.out() << "obj = " << cplex.getValue( v3 ) << endl;}catch( IloException & e ){cerr << "Concert exception caught: " << e << endl;
/* save results */}catch( ... ){cerr << "Unknown exception caught" << endl;}/* 目标结果输出 */ofstream of;of.open( "result.txt" );of << cplex.getValue( v3 ) << "\n";of.close();
/* 决策变量输出 */ofstream xij;xij.open( "result_xij.txt" );if ( !xij ){cout << "dabuda" << endl;}else {for ( i = 0; i < 4; i++ ){for ( j = 0; j < 4; j++ ){c = cplex.getValue( x[i][j] );xij << c << ",";cout << c << ",";}xij << endl;cout << endl;}}xij.close();env.out() << endl;env.end();system( "pause" );return(0);
}

http://chatgpt.dhexx.cn/article/F4OAOvHJ.shtml

相关文章

【 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. 第一步,右键点击桌面左下…

php twitter 登陆sdk,使用Twitter OAuth(PHP)登录Twitter的问题

好吧&#xff0c;我正在尝试使用Twitter API做一个非常简单的登录脚本。我需要的只是让用户通过Twitter登录网站的一种简单方法。如果他们目前没有登录&#xff0c;我的主页上有一个按钮&#xff0c;显示“登录或注册Twitter”。如果他们已登录&#xff0c;我希望它显示他们的用…