这边文章会以纯新手小白的视角,教会大家如何快速的搭建自己的cplex模型,做到求解模型不求人。
目录
一、引言
在讲述基础入门案例之前,需要大家明白几个核心概念,以及内功心法。
1、掌握数据类型及数据结构
数据类型以及数据结构,转到Cplex的数据类型结构及基本语法功能,请先自行学习。
2、常规Cplex编程方法
有2中形式。
1)不使用集合语言,你可以直接理解为显性数学表达式。
Example 求解如下模型
min z = 2x+3y
s.t. 2x + 3y >=20,
x + y >=10,
x,y >=0且为整数
2)使用集合语言.(sum,forall...)
主要思想:
①多个式子之和
转为:
②多个约束条件
很显然,这可以转化为:
在cplex中,我们又该如何表达呢?
3、Cplex编程步骤
①正确地表达清楚数学规划模型
③确定模型中的已知量、未知量(类型、及范围等)
③编写程序
4、cplex 程序框架
- 定义已知星(int,float,range,..)
- 定又未知量(dvar int,float,boolean,int+,float+)
- 定义目标函数:maximize,minimize
- 定义约束条件:subject to {...}
- 补充,有些程序会补充脚本文件
- 【脚本】execute{...}
5、创建模型
①首先通过文件,点击文件--新建--模型
②编写模型
③运行模型,这里往往是很多新手小白不会的地方,这里将会重点讲述。
第一步:点击该项目,新建一个运行配置文件,并需要英文命名它。
如果运行文件与你的模型脱节,不在一个文件下,需要拖动模型到运行配置里,直到形成上面截图的那样,即可。
第二步:直接点击配置文件,截图上面的config1,右键-->直接运行这个文件,即可。
最终结果如下:
二、规划建模的入门求解案例
1、不使用集合语言的案例
如上面的案例说明
min z = 2x+3y
s.t. 2x + 3y >=20,
x + y >=10,
x,y >=0且为整数
已在1.5里以这个例子进行了阐述,不在过多讲述。
2、使用集合语言案例
2.1 背包问题
,表示物品j 放入背包中,若相反则为0。
其背包问题的数学规划模型为:
s.t.
我们先分析,已知变量有p,w,C,n,未知变量有x。根据程序框架,写出的程序如下:
接着运行模型,此时需要新建一个运行配置文件,点击配置文件,并命名为config2,如下
最终运行的结果为:
2.2 指派问题
指派问题的数学模型为:
s.t. .............. (每项工作只有一个人做)
...............(每个人只做一项工作)
指派矩阵为:
c = [3 8 2 10 3
8 7 2 9 7
6 4 2 7 5
8 4 2 3 5
9 10 6 9 10 ]
同理,我们先分析模型中哪些变量是已知变量,哪些是未知变量,最终写出的程序模型为:
留意:cplex中等号是用==表示的。
结果为: