cplex基础入门(一)

  • Post author:
  • Post category:其他


这边文章会以纯新手小白的视角,教会大家如何快速的搭建自己的cplex模型,做到求解模型不求人。


目录


一、引言


1、掌握数据类型及数据结构


2、常规Cplex编程方法


3、Cplex编程步骤


4、cplex 程序框架


5、创建模型


二、规划建模的入门求解案例


1、不使用集合语言的案例


2、使用集合语言案例


一、引言

在讲述基础入门案例之前,需要大家明白几个核心概念,以及内功心法。

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…)

主要思想:

①多个式子之和

a_{1}x_{1}+a_{2}x_{2}+...+a_{n}x_{n} = \sum_{j=1}^{n}a_{j}x_{j}

转为:
sum (j\, \, in \, \, 1..n) \, \, a[j] \ast x[j]\,

②多个约束条件

\left\{\begin{matrix} x_{1} <=b_{1} & \\ x_{2} <=b_{2}& \\ x_{3} <=b_{3} & \end{matrix}\right.

很显然,这可以转化为:
x_{j} <=b_{j}\, j=1,2,...n

在cplex中,我们又该如何表达呢?

forall\, (j\, in\, 1..n)\, \, x_{j} <=b_{j}

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 背包问题

x_{j}\, =\, 1
,表示物品j 放入背包中,若相反则为0。

其背包问题的数学规划模型为:

max\, \, z = \, \sum_{j=1}\, p_{j}\ast x_{j}

s.t.
\sum_{j=1}^{n}\, w_{j}\ast x_{j}\leq C

x_{j} \epsilon \left \{ 0,1\right \}\, j=1,2,...n

我们先分析,已知变量有p,w,C,n,未知变量有x。根据程序框架,写出的程序如下:

接着运行模型,此时需要新建一个运行配置文件,点击配置文件,并命名为config2,如下

最终运行的结果为:


2.2 指派问题

指派问题的数学模型为:

min \: \sum_{i=1}^{n}\sum_{j=1}^{n}\: c_{ij}\,x _{ij}

s.t.
\sum_{i=1}^{n}\: x_{ij}=1,j=1,2...n
………….. (每项工作只有一个人做)

\sum_{j=1}^{n}\: x_{ij} =1,i=1,2...n
……………(每个人只做一项工作)

x_{ij} = 0,1,i,j=12,...n

指派矩阵为:

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中等号是用==表示的。


结果为:



版权声明:本文为qq_20412595原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。