cplex基础入门(一)

本文以新手角度详细介绍了如何使用Cplex进行模型构建和求解。内容包括理解数据类型和数据结构、两种Cplex编程方法(显性数学表达式和集合语言)、编程步骤、程序框架,以及通过不使用集合语言和使用集合语言的实例(背包问题和指派问题)来演示建模和求解过程。
摘要由CSDN通过智能技术生成

        这边文章会以纯新手小白的视角,教会大家如何快速的搭建自己的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中等号是用==表示的。

结果为:

 

  • 6
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

且行且安~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值