相关文章推荐
近视的砖头  ·  UnsatisfiedLinkError: ...·  1 年前    · 
从未表白的自行车  ·  使用 Databricks ...·  1 年前    · 
无邪的弓箭  ·  javascript - ...·  1 年前    · 

规划中的变量(部分或全部)限制为整数时,称为 整数规划
若在线性规划模型中,变量限制为整数,则称为 整数线性规划
整数线性规划模型大致可分为两类:
(1)变量全限制为整数时,称 纯(完全)整数规划
(2)变量部分限制为整数的,称 混合整数规划

2 建模技巧

我在前面的几篇博客中反复强调过,建立模型的过程是整个数学建模的重点、难点、核心,而求解的过程相对的就不是那么重要(并不是不重要),毕竟市面上有很多的开源和商业版求解器供我们求解特定数学模型。我们的主要任务就是将问题建模成这些特定类型的数学模型(比如线性规划、整数规划、二次规划等等)。在这个过程中,建模技巧至关重要。如决策变量的定义、约束条件变换等不合理将直接导致问题无法求解、或者降低求解速度。
整数规划的应用来源于两种方式:直接的和转化的。
直接的,一般比较简单,直接定义整数决策变量,建立约束条件即可。典型的问题是 投资决策

2.1 投资决策类问题建模

问题
在一个三年的规划周期内,有五个项目可供选择,下表给出了每个项目可以带来的预期收益以及每年的支出(单位:百万元)
在这里插入图片描述
请问,在这个三年规划周期内应该选哪些项目?
建模过程
这个问题可以转化成对每个项目选择为“是/否”的决策,引入二值变量 \begin{aligned} &max \ \ z=20x_1+40x_2+20x_3+15x_4+30x_5 \\ &s.t. \\ &\ \ \ \ 5x_1+4x_2+3x_3+7x_4+8x_5\leqslant 25 \\ &\ \ \ \ x_1+7x_2+9x_3+4x_4+6x_5\leqslant 25 \\ &\ \ \ \ 8x_1+10x_2+2x_3+x_4+10x_5\leqslant 25 \\ &\ \ \ \ x_1,x_2,x_3,x_4,x_5=(0,1) \end{aligned} m a x z = 2 0 x 1 + 4 0 x 2 + 2 0 x 3 + 1 5 x 4 + 3 0 x 5 s . t . 5 x 1 + 4 x 2 + 3 x 3 + 7 x 4 + 8 x 5 2 5 x 1 + 7 x 2 + 9 x 3 + 4 x 4 + 6 x 5 2 5 8 x 1 + 1 0 x 2 + 2 x 3 + x 4 + 1 0 x 5 2 5 x 1 , x 2 , x 3 , x 4 , x 5 = ( 0 , 1 )

2.2 集合覆盖问题建模

在这一类问题中,会有许多服务装置为一些设备提供互相重叠的服务,其目标就是确定安装数量最好的装置来覆盖每一个设备满足服务需求。比如选址问题:几个污水处理厂可以建在不同地点,为不同的城市服务,当一个城市得到不同的污水处理厂的服务时就产生了重叠服务。
案例
现代电网中使用无线接收器读取用户的读表仪器数据,生成电费账单。现在有8个接收器安放点,可服务于10个用户,每一个安放点可服务的用户信息如下:

接收器 1 2 3 4 5 6 7 8
读表仪器 1,2,3 2,3,9 5,6,7 7,9,10 3,6,8 1,4,7,9 4,5,9 1,4,8

如何设置最少数量的接收器服务于这10个读表仪器(对应10个用户)?
建模过程
(1)决策变量:
\begin{aligned} &min \ \ z=\sum_{i=1}^{8}x_i \\ &s.t. \\ &\ \ \ \ x_1+x_4+x_8&\geq 1 \\ &\ \ \ \ x_1+x_2&\geq 1 \\ &\ \ \ \ x_1+x_2+x_5&\geq 1 \\ &\ \ \ \ x_6+x_7+x_8&\geq 1 \\ &\ \ \ \ x_3+x_7&\geq 1 \\ &\ \ \ \ x_3+x_5&\geq 1 \\ &\ \ \ \ x_3+x_4+x_6&\geq 1 \\ &\ \ \ \ x_5+x_8&\geq 1 \\ &\ \ \ \ x_6+x_7&\geq 1 \\ &\ \ \ \ x_i=(0,1), i=(1,2,..,8) \end{aligned} m i n z = i = 1 8 x i s . t . x 1 + x 4 + x 8 x 1 + x 2 x 1 + x 2 + x 5 x 6 + x 7 + x 8 x 3 + x 7 x 3 + x 5 x 3 + x 4 + x 6 x 5 + x 8 x 6 + x 7 x i = ( 0 , 1 ) , i = ( 1 , 2 , . . , 8 ) 1 1 1 1 1 1 1 1 1

2.3 固定费用问题建模

固定费用问题通常包含两种费用形式:一种活动启动即会产生的固定费用,另一种是活动启动后产生的可变费用,这种可变费用与活动开展情况有关。

例如,在生产某种产品之前需要购买一台机器,这台机器的费用是固定费用,与生产多少产品无关,同时,一旦买了机器,劳动力和原材料所耗费用就与生产产品的数量成正比总费用函数可以表示为:
\begin{aligned} x &\leqslant Mw,\\ x &\geqslant \varepsilon-M(1-w),\\ w&=(0,1). \end{aligned} x x w M w , ε M ( 1 w ) , = ( 0 , 1 ) .
总费用函数的分段表示可转化为:
\begin{aligned} C(x)=Fw+cx \\ s.t.=\begin{cases} x&\leqslant Mw ,\\ -x&\leqslant M(1-w)-\varepsilon, \\ w&=(0,1). \end{cases} \end{aligned} C ( x ) = F w + c x s . t . = x x w M w , M ( 1 w ) ε , = ( 0 , 1 ) .

2.4 “or”和“if-then”约束条件的变换技巧

我们知道经典的几类数学模型的约束条件是并列关系,但实践中根据约束建立数学关系时常出现“or”关系和“if-then”关系。我们以例子来说明约束条件变换方法。
案例
Jobco 公司需要在一台机器上进行三项加工,下表给出了每项工作的处理以及应交工日期c 将第一项工作开始处理时的日期定为0,应交工日期从0 算起。

工作处理时间(天数) 应交工日期(天) 延期处罚(元/天)
1 5 25
2 20 22
3 15 35

这个问题的目标是求使得延期处罚最少的工序处理方案。
(1)定义决策变量
\begin{aligned} x_j&= \text{工作j 的开始日期(按天计算,从0 开始计算)} \\ y_{ij}&=\begin{cases} 1 &\text{若工作i在工作j之前处理}\\ 0 &\text{若工作i在工作j之后处理} \\ \end{cases} \end{aligned} x j y i j = 工作 j 的开始日期(按天计算,从 0 开始计算) = { 1 0 若工作 i 在工作 j 之前处理 若工作 i 在工作 j 之后处理
(2)建立合适形式的数学约束条件
约束条件有两个。
第一个约束 :一台机器同时只能处理一项工作,所以三项工作任意两项之间都不能有时间交叉。
假设工作 \begin{aligned} M{y_{1,2}}+x_1-x_2&\geqslant 20 \\ -My_{1,2}+x_2-x_1&\geqslant 5-M \\ M{y_{1,3}}+x_1-x_3&\geqslant 15 \\ -My_{1,3}+x_3-x_1&\geqslant 5-M \\ M{y_{2,3}}+x_2-x_3&\geqslant 15 \\ -My_{2,3}+x_3-x_2&\geqslant 20-M \\ x_1+s_1^--s_1^+&=5-1 \\ x_2+s_2^--s_2^+&=20-2 \\ x_3+s_3^--s_3^+&=15-3 \\ x_1,x_2,x_3,s_1^-,s_1^+,s_2^-,s_2^+,s_3^-,s_3^+ \geqslant 0 \\ y_{1,2},y_{1,3},y_{2,3}=(0,1) \end{aligned} M y 1 , 2 + x 1 x 2 M y 1 , 2 + x 2 x 1 M y 1 , 3 + x 1 x 3 M y 1 , 3 + x 3 x 1 M y 2 , 3 + x 2 x 3 M y 2 , 3 + x 3 x 2 x 1 + s 1 s 1 + x 2 + s 2 s 2 + x 3 + s 3 s 3 + x 1 , x 2 , x 3 , s 1 , s 1 + , s 2 , s 2 + , s 3 , s 3 + 0 y 1 , 2 , y 1 , 3 , y 2 , 3 = ( 0 , 1 ) 2 0 5 M 1 5 5 M 1 5 2 0 M = 5 1 = 2 0 2 = 1 5 3

这是一个混合整数线性规划模型。

3 求解方法

注意 :目前所流行的求解整数规划的方法,往往只适用于整数线性规划。目前还没有一种方法能有效地求解一切整数规划。

根据整数规划不同的情形可以采用不同的算法,大致如下:

(1)分枝定界法—可求纯或混合整数线性规划。
(2)割平面法—可求纯或混合整数线性规划。
(3)隐枚举法—求解“0-1”整数规划:
①过滤隐枚举法;
②分枝隐枚举法。
(4)匈牙利法—解决指派问题(“0-1”规划特殊情形)。
(5)蒙特卡洛法(随机取样法)—求解各种类型规划。

4 参考资料

[1].《运筹学导论(基础篇)》;
[2].《数学建模算法与程序》,司守奎;
[3].《matlab数学建模经典案例实战》。

文章目录1 概论1.1 定义1.2 整数规划 的分类1.3 整数规划 特点1.4 求解 方法 分类2 分枝定界法3 0 −1型 整数规划 3.1 引入0 −1变量的实际 问题 3.1.1 投资场所的选定——相互排斥的计划3.1.2 相互排斥的约束条件3.1.3 关于固定费用的 问题 (Fixed Cost Problem)3.2 0 −1型 整数规划 解法之一(过滤隐枚举法)4 蒙特卡洛法(随机取样法)5 指派 问题 的计算机 求解 6 生产与销售计划 问题 6.1 问题 实例6.2 建立模型6.3 求解 模型 1.1 定义 规划中的变
当决策变量中部分为整数,部分为实数时,称 混合 整数规划 。 线性规划图解法添加整数约束,则可行域变为了多边形内的整点。 可以看出,可行域变成了离散的点,这也使得 整数规划 问题 比线性规划 问题 要更难 求解 ,但现实中的许多决策变量都只能取整数,因此 混合 整数规划 问题 也成为了了研究最多的线性规划 问题 。注意: 整数规划 最优解不能按照实数最优解简单取整而获得。 规划 问题 的数学模型一般由三个因素构成 决策变量 目标函数 约束条件; 数学规划是运筹学的一个重要分支,线性规划是数学规划的一个重要分支; 线性规划即以线性函数为目标函数,线性条件为约束条件; 如果一个线性规划模型中的部分或全部决策变量取整数值,则称该线性规划模型为整数线性规划模型,除此还有非线性 整数规划 。 从决策变量的取值范围来看, 整数规划 通常可以分为以下几种类型: 1、纯 整数规划 :全部决策变量都必须取整数值的 整数规划 模型; 2、 混合 整数规划 :决策变量中有一部分必须取整数值,另一部分
文章目录前言语法介绍具体调用参数介绍参数详解案例一案例二案例三 对于指派 问题 等0 −1 整数规划 问题 ,可以直接利用 Matlab 的函数 bintprog 进行 求解 。 f、x、intcon、b、beq、lb 和 ub 是向量,A 和 Aeq 是矩阵。 具体调用参数介绍 详细介绍: x = intlinprog(f,intcon,A,b) 最小化 f'*x,使得 intcon 中的 x 分量是整数,且 A*x ≤ b。 x = intlinprog(f,intcon,A,b,Aeq
文章目录一、 整数规划 定义分类二、常用算法1.分支定界算法???2.割平面算法???三、指派 问题 1. 0-1变量的使用2. 指派 问题 的标准形式3. 匈牙利解法1)一般步骤:2) matlab代码 一、 整数规划 1.数学规划中的变量(部分或全部)限制为整数时,称为 整数规划 。 2.若在线性规划模型中,变量限制为整数,则称为整数线性规划。 3.目前所流行的 求解 整数规划 方法 ,往往只适用于整数线性规划。目前还没有一种 方法 能有效地 求解 一切 整数规划 。 纯 整数规划 (完全 整数规划 ) 全 整数规划 混合 整数规
数学建模 优化 问题 求解 方法 有很多种,以下是一些常见的 方法 : 1. 线性规划(Linear Programming, LP):适用于目标函数和约束条件均为线性的 问题 ,可以通过线性规划 求解 器(如Simplex算法) 求解 。 2. 整数规划 (Integer Programming, IP):在线性规划的基础上,引入整数变量,适用于需要某些变量取整数值的 问题 。一般情况下, 整数规划 问题 较难 求解 ,可以采用分支定界法、割平面法等 方法 。 3. 非线性规划(Nonlinear Programming, NLP):适用于目标函数或约束条件中存在非线性项的 问题 。常用的 求解 方法 包括牛顿法、拟牛顿法、全局优化 方法 等。 4. 动态规划(Dynamic Programming, DP):适用于具有重叠子 问题 和最优子结构性质的 问题 ,通过将 问题 分解为多个阶段,并逐个解决子 问题 求解 最优解。 5. 启发式算法(Heuristic Algorithms):如遗传算法、模拟退火算法、禁忌搜索等,通过搜索和优化技术寻找 问题 的近似最优解。 6. 网络流优化算法(Network Flow Optimization):适用于 问题 可以抽象为网络流的形式,如最小费用流、最大流等 问题 ,可以使用Ford-Fulkerson算法、最短增广路径算法等 求解 。 以上只是一些常见的 方法 ,具体选择哪种 方法 需要根据具体 问题 的性质和约束条件来确定。在实际应用中,也常常结合多种 方法 进行 求解 ,以获得更好的 求解 效果。
1问:relu为啥能提升逼近能力? 答:首先你需要理解下文章最前面介绍的激活函数的作用。然后仔细看文章中relu章节介绍的几个优点,这些正是使它看起来在同样有限时间内逼近能力比其他几个更好的原因。 2问:relu输入大于0部分等于没用么? 答:看其导函数形式,大于0时为1,反向传播时梯度无衰减和膨胀,这不正是我们希望的么?