Python小白的数学建模课-05.0-1规划
Posted youcans
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python小白的数学建模课-05.0-1规划相关的知识,希望对你有一定的参考价值。
0-1 规划不仅是数模竞赛中的常见题型,也具有重要的现实意义。
双十一促销中网购平台要求二选一,就是互斥的决策问题,可以用 0-1规划建模。
小白学习 0-1 规划,首先要学会识别 0-1规划,学习将问题转化为数学模型。
『Python小白的数学建模课 @ Youcans』带你从数模小白成为国赛达人。
1. 什么是 0-1 规划?
0-1 整数规划是一类特殊的整数规划,变量的取值只能是 0 或 1。
0-1 变量可以描述开关、取舍、有无等逻辑关系、顺序关系,可以处理背包问题、指派问题、选址问题 、计划安排、线路设计 、人员安排等各种决策规划问题。进而,任何整数都可以用二进制表达,整数变量就可以表示为多个 0-1 变量的组合,因此任何整数规划都可以转化为 0-1 规划问题来处理。0-1 规划问题与运筹学中的很多经典问题也都有紧密联系。
在数学建模学习中,0-1 规划主要用于求解互斥的决策问题、互斥的约束条件问题、固定费用问题和分派问题。0-1 规划是数模竞赛的常见题型,国赛 B题经常有 0-1规划问题或可以转化为 0-1 规划问题。
0-1 规划的算法都比较复杂,大规模问题一般没有精确解法。本文仍然使用 PuLP 工具包求解 0-1 规划问题,该工具包的使用比较简单。建议本文读者重点关注 0-1 规划问题的分类及建模方法,把握哪些问题是 0-1 规划问题,是哪一类的 0-1 规划问题,如何对这些典型问题进行建模。在此基础上,才能调用 PuLP 函数进行求解。
欢迎关注 『Python小白的数学建模课 @ Youcans』 系列,持续更新
Python小白的数学建模课-A1.国赛赛题类型分析
Python小白的数学建模课-A2.2021年数维杯C题探讨
Python小白的数学建模课-01.新手必读
Python小白的数学建模课-02.数据导入
Python小白的数学建模课-03.线性规划
Python小白的数学建模课-04.整数规划
Python小白的数学建模课-05.0-1规划
Python数模笔记-PuLP库
Python数模笔记-StatsModels统计回归
Python数模笔记-Sklearn
Python数模笔记-NetworkX
Python数模笔记-模拟退火算法
2. 0-1 规划的分类及建模方法
规划问题的数学模型包括决策变量、约束条件和目标函数,围绕这三个要素都可能存在互斥的情况,从而导出不同类型的0-1规划问题,其建模方法也有差别。
2.1 互斥的决策问题
互斥的决策问题,是指决策方案、计划互斥,如决定投资项目、确定投资场所、选择投产产品等。
例如,双十一的促销活动,淘宝、京东、拼多多要求店铺二选一,最多只能选择参加一家平台,否则可能会被封杀,这是典型的互斥决策问题。
背包问题就是经典的互斥决策问题。给定一组 n 个物品,每种物品 i 的价值为 v i v_i vi、重量/体积为 w i w_i wi,背包所能容纳的总重量/总容量为(B),如何选择其中若干种物品(每种物品选 0 个或 1 个),使得物品的总价值最高?
背包问题的建模方法如下:
定义决策变量为:
x
i
=
{
0
,
不
选
择
第
i
个
物
品
1
,
选
择
第
i
个
物
品
x_i = \\begin{cases} 0,不选择第\\;i\\;个物品\\\\ 1,选择第\\;i\\;个物品 \\end{cases}
xi={0,不选择第i个物品1,选择第i个物品
定义目标函数为:
m
a
x
f
(
x
)
=
∑
i
=
1
n
v
i
x
i
s
.
t
.
:
{
∑
i
=
i
n
w
i
x
i
≤
B
,
x
i
=
0
,
1
max\\;f(x) = \\sum_{i=1}^n v_i x_i\\\\ s.t.:\\begin{cases} \\sum_{i=i}^n w_i x_i \\leq B, \\\\ x_i = 0,1 \\end{cases}
maxf(x)=i=1∑nvixis.t.:{∑i=inwixi≤B,xi=0,1
很多应用问题都可以用上述的背包问题数学模型来表达,例如:
- 有 n个项目,每个项目所需投资额为 w i w_i wi,投产后的利润为 v i v_i vi,投资总限额为 B,求利润最大的投资方案;
- 处理器能力有限,任务很多,如何选择使处理器的效用最大;
2.2 互斥的约束问题
互斥的约束问题,是指具有多个互斥的约束条件,这些约束条件只有一个起作用。
例如,货物运输有车运或者船运两种运输方式可供选择,已知采用车运的约束条件和船运的约束条件,必须且只能选择其中一种运输方式。这两个约束条件互斥,有且只有一个起作用,这是可以引入一个 0-1变量来处理。
一般地,设有 m 个互斥的约束条件:
a
i
1
x
1
+
.
.
.
a
i
n
x
n
≤
b
i
,
i
=
1
,
.
.
.
m
a_{i1}x_1 + ...a_{in}x_n \\leq b_i,i=1,...m
ai1x1+...ainxn≤bi,i=1,...m
该类问题的建模方法,为了保证只有一个约束条件起作用,可以引入一个充分大的常数 M 和 m 个 0-1 变量表示约束是否起作用:
y
i
=
{
0
,
第
i
个
约
束
不
起
作
用
1
,
第
i
个
约
束
起
作
用
y_i = \\begin{cases} 0,第 i 个约束不起作用\\\\ 1,第 i 个约束起作用 \\end{cases}
yi={0,第i个约束不起作用1,第i个约束起作用
于是可以构造新的 m+1 个约束条件:
s
.
t
.
:
{
a
i
1
x
1
+
.
.
.
a
i
n
x
n
≤
b
i
+
(
1
−
y
i
)
M
,
i
=
1
,
.
.
.
m
y
1
+
.
.
.
+
y
m
=
1
y
i
=
0
,
1
s.t.:\\begin{cases} a_{i1}x_1 + ...a_{in}x_n \\leq b_i + (1-y_i)M,i=1,...m\\\\ y_1 + ... + y_m = 1\\\\ y_i = 0,1 \\end{cases}
s.t.:⎩⎪⎨⎪⎧ai1x1+...ainxn≤bi+(1−yi)M,i=1,...my1+...+ym=1yi=0,1
由于 M 足够大,新的约束条件就能保证只有 y_i=1 的约束条件起作用,而其它约束条件都不起作用。
2.3 固定费用问题(Fixed cost problem)
固定费用问题,是指求解生产成本最小问题时,总成本包括固定成本和变动成本,而选择不同生产方式会有不同的固定成本,因此总成本与选择的生产方式有关。
固定费用问题,实际上是互斥的目标函数问题,对于不同的生产方式具有多个互斥的目标函数,但只有一个起作用。固定费用问题不能用一般的线性规划模型求解。
一般地,设有 m 种生产方式可供选择,采用第 j j j 种方式时的固定成本为 K j K_j Kj、变动成本为 c j c_j cj、产量为 x j x_j xj,则采用各种生产方式的总成本分别为:
m i n P j = { k j + c j x j , x j ≥ 0 0 , x j = 0 , j = 1 , . . . m min\\;P_j = \\begin{cases} k_j + c_j x_j,&x_j \\geq 0\\\\ 0,&x_j = 0, j=1,...m \\end{cases} minPj={kj+cjxj,0,xj≥0xj=0,j=1,...m
该类问题的建模方法,为了构造统一的目标函数,可以引入 m 个 0-1 变量 y_j 表示是否采用第 j 种生产方式:
y
j
=
{
0
,
不
采
用
第
j
种
生
产
方
式
1
,
采
用
第
j
种
生
产
方
式
y_j = \\begin{cases} 0,不采用第\\;j\\;种生产方式\\\\ 1,采用第\\;j\\; 种生产方式 \\end{cases}
yj=以上是关于Python小白的数学建模课-05.0-1规划的主要内容,如果未能解决你的问题,请参考以下文章