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

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

1 绪论

1.1 Cplex简介

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

1.1.1 基本界面介绍

20200127170530743.png

1.1.2 处理流程介绍

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

20200127195024826.png

1.2 OPL语言

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

包含的文件类型及作用:

项目文件:组织模型和数据的文件,并提供一种方便的方法来维护相关文件和运行选择之间的关系

模型文件:声明数据项目,但是不需要提供数据的初始化工作

数据文件:包含了在模型中声明的数据初始化

设置文件:当你决定一个或多个数学规划和其他的缺省值,该文件保存用户定义的值

运行配置:为了运行的目的而根据项目进行的设置;在一个项目中,可以根据自己的需要定义多个运行配置

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


1.2.1 OPL的主要关键字

image.png

image.png

1.2.2 数据文件

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

示例代码:

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

1.3 如何调用Cplex

1.3.1 使用AMPL脚本语言调用

参考文档

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

20200127202309756.png

20200127202346287.png

20200127202514446.png

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

20200127205816273.png

2.2 gas示例解析

2.2.1 示例的通俗语言描述

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

2.2.2 数据文件与模型文件

image.png

2020012720411389.png

2.2.3 结果展示

2020012720364764.png

约束展开:

20200127203817216.png

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 带#与否的数据文件

image.png

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

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

20200127205125797.png

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


相关文章
|
大数据
数学建模1:lingo软件求解优化模型
数学建模1:lingo软件求解优化模型
138 0
|
存储 算法 调度
笔记-Python最优化算法实战(Gurobi)
笔记-Python最优化算法实战(Gurobi)
863 0
|
4月前
|
机器学习/深度学习 算法 数据挖掘
从菜鸟到大师:Scikit-learn库实战教程,模型训练、评估、选择一网打尽!
【9月更文挑战第13天】在数据科学与机器学习领域,Scikit-learn是不可或缺的工具。本文通过问答形式,指导初学者从零开始使用Scikit-learn进行模型训练、评估与选择。首先介绍了如何安装库、预处理数据并训练模型;接着展示了如何利用多种评估指标确保模型性能;最后通过GridSearchCV演示了系统化的参数调优方法。通过这些实战技巧,帮助读者逐步成长为熟练的数据科学家。
143 3
|
5月前
|
机器学习/深度学习 人工智能 TensorFlow
神经网络不再是黑魔法!Python带你一步步拆解,让AI学习看得见
【8月更文挑战第3天】神经网络,曾被视为难以触及的黑魔法,现已在Python的助力下变得平易近人。以TensorFlow或PyTorch为“魔法杖”,仅需几行Python代码即可构建强大的AI模型。从零开始,我们将教导AI识别手写数字,利用经典的MNIST数据集。通过数据加载、预处理至模型训练与评估,每个步骤都如精心编排的舞蹈般清晰可见。随着训练深入,AI逐渐学会辨认每个数字,其学习过程直观展现。这不仅揭示了神经网络的奥秘,更证明了任何人都能借助Python创造AI奇迹,共同探索未来的无限可能。
51 2
|
7月前
|
机器学习/深度学习 数据挖掘 Python
潜力无限:Python与Gurobi合力解决无约束优化问题
潜力无限:Python与Gurobi合力解决无约束优化问题
300 0
|
机器学习/深度学习 自然语言处理 算法
【机器学习实战】10分钟学会Python怎么用EM期望最大化进行参数估计(十五)
【机器学习实战】10分钟学会Python怎么用EM期望最大化进行参数估计(十五)
234 0
|
编译器 C++ 数据格式
鲁棒优化入门(一)——工具箱Xprog和RSOME的安装与使用
Xprog是由新加坡国立大学的Peng Xiong于2016年发布的一款matlab工具箱,可以用于求解确定性优化、随机优化、鲁棒优化和分布式鲁棒优化问题。 还有一个针对鲁棒随机优化设计的matlab工具箱——RSOME(Robust Stochastic Optimization Made Easy),也可以用来解决一般的线性规划、随机规划、鲁棒优化和数据驱动的分布式鲁棒优化问题。...............
|
C# 决策智能
运筹优化学习13:C#中Gurobi的配置及测试
运筹优化学习13:C#中Gurobi的配置及测试
运筹优化学习13:C#中Gurobi的配置及测试
|
决策智能
运筹优化学习07:Lingo的 @if 函数的使用方法
运筹优化学习07:Lingo的 @if 函数的使用方法
运筹优化学习07:Lingo的 @if 函数的使用方法
|
决策智能
运筹优化学习05:Lingo进行TSP路径优化源码分享与经典文献分析
运筹优化学习05:Lingo进行TSP路径优化源码分享与经典文献分析
运筹优化学习05:Lingo进行TSP路径优化源码分享与经典文献分析