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

article/2025/11/7 19:26:48

目录

 

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 导入示例

2.2 gas示例解析

2.2.1 示例的通俗语言描述

2.2.2 数据文件与模型文件

2.2.3 结果展示

2.3 数据和模型同文件形式

2.4 带#与否的数据文件


1 绪论

1.1 Cplex简介

  • Cplex是IBM公司开发的一个优化工具引擎,可以用其求解线性规划、二次规划、整数规划等问题;能够快速解决一些行业难题。
  • 自带IBM ILOG Cplex Optimization Studio既能使用自带语言进行编程,也提供了众多流行语言的接口,具有广泛的应用前景

1.1.1 基本界面介绍

1.1.2 处理流程介绍

当我们面对一个问题时,先从给定的数据建立科学的数学模型,然后使用Cplex进行问题求解,输出我们想要的结果。

1.2 OPL语言

OPL语言是ILOG的优化语言,可以用来编制模型文件和数据文件。

包含的文件类型及作用:

  • 项目文件:组织模型和数据的文件,并提供一种方便的方法来维护相关文件和运行选择之间的关系
  • 模型文件:声明数据项目,但是不需要提供数据的初始化工作
  • 数据文件:包含了在模型中声明的数据初始化
  • 设置文件:当你决定一个或多个数学规划和其他的缺省值,该文件保存用户定义的值
  • 运行配置:为了运行的目的而根据项目进行的设置;在一个项目中,可以根据自己的需要定义多个运行配置

模型文件包含以下四个部分:数据、决策变量、目标函数、约束条件;这也是数学建模的四个必备要素。

1.2.1 OPL的主要关键字

数据类型语法规则

代码示例

string{string} 变量名 = {"字符串1", "字符串2","字符串3",...};{string} Products = {"gas", "chloride"};
{string} Components = {"nitrogen", "hydrogen", "chloride"};
float

用来定义浮点数据类型,也就是小数

float 变量名[对应字符串数组变量名] = [数值1, 数值2, ...];

//浮点数
float var = 3.13;
//数组
float Profit[Products] = [30,40];
//二维数组
float Demands[Products][Components] = [[1,3,0],[1,4,0]];

int

用来定义整型数据类型,也就是整数

int 变量名[对应关键字数组数组变量名] = [数值1, 数值2, ...];

//整型
int Fixed = 10;
range

一段连续的整型数据

range 变量名 = startInterge..endInterge

//Range类型
range Rows = 1..10;
int n=10;
range rows = (n+1)..2*(n+1);
dvar

定义决策变量

dvar 数据类型函数 变量名;

数据类型函数后可跟正负号来表示决策变量正负

dvar float+ Gas;
dvar float+ Chloride;
dvar float+ Production[Products];

Maximize

Minimize

maximize或minimize 目标函数的表达式;maximize 40 * Gas + 50 * Chloride;
maximize sum(p in Products) Profit[p] * Production[p];
subject to

subject to{

约束1名称:约束1;

...

约束n名称:约束n;

}

subject to{
ctMaxTotal: Gas + Chloride <= 50;
ctMaxTotal2: 3 * Gas + 4 * Chloride <= 180;
ctMaxChloride: Chloride <= 40;
}

1.2.2 数据文件

  • 以dat为后缀的文件
  • 数据文件与模型文件相对应
  • 模型文件中的...在数据文件中应该使用具体的数据
  • 若数据类型为字符串类型,各数据之间使用空格或逗号隔开
  • 数值型,各数据以逗号或空格隔开;如果不加#数据必须有变量名,否则数据必须是有序的。

示例代码:

Products = {"gas", "chloride"};
Fixed = 30;
Profit = #["chloride":40, "gas":30]#;

 

1.3 如何调用Cplex

1.3.1 使用AMPL脚本语言调用

参考文档

  • 优化模型与AMPL(中文)
  • AMPL_CPLEX 简介(注:台湾同胞写的,例子比较丰富)

  • AMPL CPLEX User's Guide

  • 官方给出的例子

1.3.2 IBM CPLEX Studio IDE

下载完成后的官方示例路径:你的路径\opl\examples\opl

示例运行方式在下文介绍

1.3.3 Cplex with Concert Technology

直接以编程语言的API建立模型并求解,此处可参见我之前的博客文章

运筹优化学习09:一个示例带你入门如何使用C++、C#、Java、Python、Matlab调用Cplex

2 官方gas示例演示

2.1 导入示例

导入之后,可以看到的文件结构如下:

2.2 gas示例解析

2.2.1 示例的通俗语言描述

  • 生产汽和氯化物两种产品,每种产品包含氮氢氯三种组分;
  • 生产天然气需要氮氢氯组分数为1、3、0;生成氯化物需要氮氢氯组分数为1、4、1;
  • 生产天然气和氯化物可以获得收益分别为30和40
  • 库存中包含这三种组分的数量为50、180和40
  • 求生产天然气和氯化物的最大化收益

2.2.2 数据文件与模型文件

数据文件(gas.dat)

Products = { "gas" "chloride" };
Components = { "nitrogen" "hydrogen" "chlorine" };

Demand = [ [1 3 0] [1 4 1] ];
Profit = [30 40];
Stock = [50 180 40];

模型文件(gas.mod)

{string} Products = ...;
{string} Components = ...;

float Demand[Products][Components] = ...;
float Profit[Products] = ...;
float Stock[Components] = ...;
dvar float+ Production[Products];

maximize
  sum( p in Products ) 
    Profit[p] * Production[p];
subject to {
  forall( c in Components )
    ct:
      sum( p in Products ) 
        Demand[p][c] * Production[p] <= Stock[c];
}

2.2.3 结果展示

约束展开:

 

2.3 数据和模型同文件形式

示例还提供了一个将数据在mod文件中直接进行赋值的模型文件,详情如下:

{string} Products = { "gas", "chloride" };
{string} Components = { "nitrogen", "hydrogen", "chlorine" };

float Demand[Products][Components] = [ [1, 3, 0], [1, 4, 1] ];
float Profit[Products] = [30, 40];
float Stock[Components] = [50, 180, 40];

dvar float+ Production[Products];

maximize
  sum( p in Products ) 
    Profit[p] * Production[p];
subject to {
  forall( c in Components )
    ct:
      sum( p in Products ) 
        Demand[p][c] * Production[p] <= Stock[c];
}

运行结果与之前的一致

2.4 带#与否的数据文件

gas.datgasn.dat

Products = { "gas" "chloride" };
Components = { "nitrogen" "hydrogen" "chlorine" };

Demand = [ [1 3 0] [1 4 1] ];
Profit = [30 40];
Stock = [50 180 40];

Products = { "gas", "chloride" };
Components = { "nitrogen", "hydrogen", "chlorine" };

Profit = #["gas":30, "chloride":40]#;
Stock = #["nitrogen":50, "hydrogen":180, "chlorine":40]#;
Demand = #[
            "gas":      #[ "hydrogen":3 "nitrogen":1  "chlorine":0 ]#,
            "chloride": #[ "nitrogen":1 "hydrogen":4 "chlorine":1 ]#
          ]#;

gasn.dat的数据是带#的,因此其中的数据顺序是可以随意指定的,只要带上正确的变量名即可。

上述的gasn.dat文件我们对数据顺序进行了调整,变化如下图所示:

然后,将gas.mod拷贝一份,重命名为gasn.mod,使用默认配置运行;可以看到左下角的数据仍然是正确的数据。


更多精彩,欢迎关注个人公众账号


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

相关文章

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;我希望它显示他们的用…

用R对Twitter用户的编程语言语义分析

Twitter是一个流行的社交网络&#xff0c;这里有大量的数据等着我们分析。Twitter R包是对twitter数据进行文本挖掘的好工具。最近我们被客户要求撰写关于Twitter的研究报告&#xff0c;包括一些图形和统计输出。本文是关于如何使用Twitter R包获取twitter数据并将其导入R&…

前端javascript如何分享内容到twitter和Email

接着上篇讲,上篇讲了如何分享到facebook,这篇我们讲一下如何分享到twitter和Email,首先分享到twitter和Email不像分享到facebook一样可以有回调,这两分享是没有回调的,分享成功失败,也不知道,但是会触发事件. 我们先来看下分享到twitter,首先引入twitter的sdk文件,如下图所示:…

Twitter数据获取

推文获取 申请Twitter API 注册Twitter账号https://dev.twitter.com/apps, 点击create apps。点击确定完成在Application Management的Keys and Access Tokens&#xff0c;点击Generate Access Token. 利用tweepy获取特朗普最近推文 # -*- coding: utf-8 -*- ""&…

推特 我们目前不能注册此邮箱地址_英雄联盟手游来了!最简单的下载/安装/注册教程!...

从英雄联盟手游的消息至今,已经过去这么多天,想必大家早已等不及想要玩上一把了。等了这么久,如今终于在海外公测了,虽然目前国服还不能游玩,但是跟着本篇教程,你也可以轻松玩到海外版本! 苹果用户看这里: 首先得告知下大家,目前只有Android端开放了内测,使用苹果的小…

Twitter群推王:推特全方位营销利器

Twitter群推王是专为Twitter运营提供的一款全方位营销工具&#xff0c;可以自动发帖、自动私信、自动转发、自动关注、自动点赞、自动改资料、自动注册、数据采集等&#xff0c;解决营销中的三大难题&#xff1a;账号问题、同一Ip环境问题、批量自动化问题&#xff0c;是个人、…