国赛学习——5种数学规划模型
数学规划模型
- 线性规划问题
- 线性规划求解
- Matlab中线性规划的标准型
- Matlab中线性规划的命令
- 例题
- 非线性规划问题
- Matlab中非线性规划的标准型
- matlab求解非线性规划的函数
- 例题
- 整数规划问题
- Matlab整数线性规划求解
- Matlab线性0-1规划求解
- 例题
- 经典整数规划例题
- 背包问题
- 指派问题
- 钢管切割问题
- 最大最小化模型
- 多目标规划模型
数学规划是运筹学的一个分支,用于:
在给定的条件下(约束条件),如何按照某一衡量指标(目标函数)来寻求计划、管理工作中的最优方案。
即 求目标函数在一定约束条件下的极值问题。
线性规划问题
目标函数f(x)和约束条件均是决策变量的线性表达式——解决:单纯形法
线性规划求解
Matlab中线性规划的标准型
mincTx\min c^{T}x mincTx
向量的内积,c=(c1,c2,…,cn)^T, x=(x1,x2,…,xn)^T,n是决策变量。
s.t.{Ax<=bAeq⋅x=beqlb<=x<=ubs.t.\left\{\begin{matrix} Ax <= b \\ Aeq\cdot x = beq\\ lb <= x <= ub \end{matrix}\right. s.t.⎩⎨⎧Ax<=bAeq⋅x=beqlb<=x<=ub
s.t.从上至下分别为:
1. 不等式约束
2. 等式约束
3. 上下界约束(也可以当成不等式约束)
注意:可能只对部分决策变量有约束
Matlab中线性规划的命令
代码:
[x, fval] = linprog[c, A, b, Aeq, beq, lb, ub, X0]
- X0 表示给定Matlab中迭代求解的初始值(一般不用给)
- c, A, b, Aeq, bee, lb, ub的意义和标准型中的意义一致
- 若不存在不等式约束,可用"[]"替代A和b
- 若不存在等式约束,可用"[]"替代Aeq和beq
- 若某个xi无下界或上界,则设置lb(i)=-inf, ub(i)=+inf
- 返回的x表示最小值处的x取值;fval表示最优解处时取得的最小值
- 不是所有的线性规划问题都有唯一解,kennel无解或者有无穷多的解
- 如果求的是最大值,在最后给fval加一个负号:[x, fval] = linprog[c, A, b, Aeq, beq, lb];fval=-fval; maxz⇔min−z\max z \Leftrightarrow \min -zmaxz⇔min−z
例题
minz=0.04x1+0.15x2+0.1x3+0.125x4\min z=0.04x_{1}+0.15x_{2}+0.1x_{3}+0.125x_{4} minz=0.04x1+0.15x2+0.1x3+0.125x4
s.t.{0.03x1+0.3x2+0.15x4>=320.05x1+0.2x3+0.1x4=240.14x1+0.07x4<=42x1,x2,x3,x4>=0s.t.\left\{\begin{matrix} 0.03x_{1}+0.3x_{2}+0.15x_{4} >= 32 \\ 0.05x_{1}+0.2x_{3}+0.1x_{4} = 24\\ 0.14x_{1}+0.07x_{4} <= 42\\ x_{1},x_{2},x_{3},x_{4}>=0 \end{matrix}\right. s.t.⎩⎪⎪⎨⎪⎪⎧0.03x1+0.3x2+0.15x4>=320.05x1+0.2x3+0.1x4=240.14x1+0.07x4<=42x1,x2,x3,x4>=0
用线性代数形式写出目标函数和约束条件
目标函数c:
c=[0.040.150.10.125]c=\begin{bmatrix} 0.04 \\ 0.15 \\ 0.1 \\ 0.125 \end{bmatrix} c=⎣⎢⎢⎡0.040.150.10.125⎦⎥⎥⎤
x=[x1x2x3x4]x=\begin{bmatrix} x_{1} \\ x_{2} \\ x_{3} \\ x_{4} \end{bmatrix} x=⎣⎢⎢⎡x1x2x3x4⎦⎥⎥⎤
约束条件:
- 不等式约束 A=[−0.03−0.30−0.150.14000.07]A=\begin{bmatrix} -0.03 & -0.3&0&-0.15 \\ 0.14&0&0&0.07 \end{bmatrix} A=[−0.030.14−0.3000−0.150.07]b=[−3242]b=\begin{bmatrix} -32 \\ 42 \end{bmatrix} b=[−3242]
- 等式约束Aeq=[0.050.20.1]Aeq=\begin{bmatrix} 0.05 \\ 0.2\\ 0.1 \end{bmatrix} Aeq=⎣⎡0.050.20.1⎦⎤beq=24beq=24 beq=24
- 上下界约束lb=[0000]lb=\begin{bmatrix} 0 \\ 0\\ 0\\ 0 \end{bmatrix} lb=⎣⎢⎢⎡0000⎦⎥⎥⎤ub=[+inf+inf+inf+inf]ub=\begin{bmatrix} +inf \\ +inf\\ +inf\\ +inf \end{bmatrix} ub=⎣⎢⎢⎡+inf+inf+inf+inf⎦⎥⎥⎤ub可省略
Matlab代码
c = [0.04 0.15 0.1 0.125]';
A = [-0.03 -0.3 0 -0.15;0.14 0 0 0.07];
b = [-32 42]';
Aeq = [0.05 0 0.2 0.1];
beq = 24;
lb = [0 0 0 0]';
[x fval] = linprog(c, A, b, Aeq, beq, lb);
%x =
% 0
% 106.6667
% 120.0000
% 0
%
%fval =
% 28
这个题可能有多个解,即有多个x可以使得目标函数的最小值为28(不同版本的到的x值可能不一样,但fval值一定是28)
若无解,则返回x与fval都为空
非线性规划问题
目标函数f(x)或者约束条件中有一个是决策变量x的非线性表达式——解决:Matlab中有4中方法,在选定决策变量的初始值后,通过一定的搜索方法寻求最优的决策变量
Matlab中非线性规划的标准型
minf(x)\min f(x) minf(x)
向量的内积,c=(c1,c2,…,cn)^T, x=(x1,x2,…,xn)^T,n是决策变量。
s.t.{Ax<=b,Aeq⋅x=beq(linear)c(x)<=0,ceq(x)=0(nonlinear)lb<=x<=ubs.t.\left\{\begin{matrix} Ax <= b,Aeq\cdot x = beq (linear) \\ c(x) <= 0,ceq(x) = 0(nonlinear)\\ lb <= x <= ub \end{matrix}\right. s.t.⎩⎨⎧Ax<=b,Aeq⋅x=beq(linear)c(x)<=0,ceq(x)=0(nonlinear)lb<=x<=ub
注意:可能只对部分决策变量有约束
matlab求解非线性规划的函数
[x fval] = fmincon(@fun, X0, A, b, Aeq, beq, lb, ub, @nonlfun, option)
- 非线性规划中对于初始值X0的选取非常重要,因为非线性规划的算法求解出来的是一个局部最优解
- 如果要求“全局最优解”有两种思路:给定不同初始值,在里面找到一个最优解;先用蒙特卡洛模拟,得到一个蒙特卡洛解,然后将这个解作为初始值来求最优解。
- “option”选项可以给丁求解的算法,一共有四种:interior-point(内点法)、sqp(序列二次规划法)、active-set(有效集法)以及trust-region-reflective(信赖域反射算法)。
- 不同的算法有其各自的优缺点和适用情况,我们可以改变求解的算法来看求解的结果是否变好了。
- “@fun”表示目标函数,我们要编写一个独立的“m文件”存储目标函数
funciton f = fun(x); f = ......; end;
fun可以任意取名;f也可任意取名,但返回的f函数内部的f要完全一致;治理的x实际上是一个列向量,表示决策变量;调用函数:function(@fun,…)求解。 - “@nonlfun”表示非线性部分的约束,我们同样得编写一个独立的“m文件”存储约束条件
- 注意要把下标改写为括号
- 若不存在某种约束,则可用“[]”替代,若后面全为“[]”且不指定option(使用默认求解方法),则“[]”也可以略掉
例题
minf(x)=x12+x22+x32+8\min f(x) =x_{1}^2+x_{2}^2+x_{3}^2+8 minf(x)=x12+x22+x32+8
向量的内积,c=(c1,c2,…,cn)^T, x=(x1,x2,…,xn)^T,n是决策变量。
s.t.{x12−x2+x32>=0x1+x22+x32<=20−x1−x22+2=0−x1+2x32=3x1,x2,x3>=0s.t.\left\{\begin{matrix} x_{1}^2-x_{2}+x_{3}^2>=0\\ x_{1}+x_{2}^2+x_{3}^2<=20\\ -x_{1}-x_{2}^2+2=0\\ -x_{1}+2x_{3}^2=3\\ x_{1},x_{2},x_{3}>=0 \end{matrix}\right. s.t.⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧x12−x2+x32>=0x1+x22+x32<=20−x1−x22+2=0−x1+2x32=3x1,x2,x3>=0
化为标准型
其中A,b,Aeq,beq,ub均为"[]"
c=[−x12+x2−x32;x1+x22+x32−20]c=[-x_{1}^2+x_{2}-x_{3}^2; x_{1}+x_{2}^2+x_{3}^2-20]c=[−x12+x2−x32;x1+x22+x32−20]
ceq=[−x1−x22+2;x2+2x32−3]ceq=[-x_{1}-x_{2}^2+2;x_{2}+2x_{3}^2-3]ceq=[−x1−x22+2;x2+2x32−3]
lb=[0,0,0]′lb=[0,0,0]'lb=[0,0,0]′
整数规划问题
一类要求变量取整数值的数学规划:线性整数规划(在线性模型中,有决策变量限定为整数);非线性整数规划(无特定算法,只能用近似,如蒙特卡洛模拟、智能算法)
整数规划的特例:0-1规划——特殊的证书规划,Matlab中也只能求解线性0-1规划,对于非线性0-1规划也只能近似求解。
Matlab整数线性规划求解
与线性规划求解命令[x, fval] = linprog[c, A, b, Aeq, beq, lb, ub, X0]很相似
[x fval] = intlinprog[c, intcon, A, b, Aeq, beq, lb, ub]
- intlinprog不能指定初始值
- 加入了intcon参数可以指定那些决策变量是整数(例如:决策变量有三个:x1,x2,x3;若x1和x3是整数,则intcon=[1, 3])
Matlab线性0-1规划求解
仍使用intlinprog函数,只不过在lb和ub上作文章。
例如:三个决策变量x1,x2,x3中,x1和x3是0-1变量,x2不限制,则intcon=[1, 3],lb=[0;-inf;0],ub=[1;+inf,1]
例题
minz=18x1+23x2+5x3\min z=18x_{1}+23x_{2}+5x_{3} minz=18x1+23x2+5x3
s.t.{500<=107x1+500x2<=500002000<=72x1+121x2+65x3<=2250x3∈zx1,x2,x3>=0s.t.\left\{\begin{matrix} 500<=107x_{1}+500x_{2}<=50000 \\ 2000<=72x_{1}+121x_{2}+65x_{3} <= 2250\\ x_{3} \in z\\ x_{1},x_{2},x_{3}>=0 \end{matrix}\right. s.t.⎩⎪⎪⎨⎪⎪⎧500<=107x1+500x2<=500002000<=72x1+121x2+65x3<=2250x3∈zx1,x2,x3>=0
Matlab代码
c = [18 23 5]';
intcon = 3; %限定为整数
A = [107 500 0;72 121 65;-107 -500 0;-72 -121 -65];
b = [50000 2250 -500 -2000]';
lb = [0 0 0]';
[x fval] = linprog(c, intcon, A, b, [], [], lb);
%x =
% 0
% 1
% 29
%
%fval =
% 168
%
经典整数规划例题
背包问题
有10件货物要从甲地运到乙地,每件货物重量(单位:吨)和利润(单位:元)如下表所示
物品 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
重量(t) | 6 | 3 | 4 | 5 | 1 | 2 | 3 | 5 | 4 | 2 |
利润(元) | 540 | 200 | 180 | 350 | 60 | 150 | 280 | 450 | 320 | 120 |
由于只有一辆载重为30t的货车能用来运送货物,所以只能选择部分货物进行运送。
要求确定运送那些货物,使得运送这些货物的总利润最大。
解:写出目标函数和约束条件
记xi{1,运送了第i件货物0,没有运送第i件货物x_{i}\left\{\begin{matrix} 1, 运送了第i件货物\\ 0, 没有运送第i件货物 \end{matrix}\right. xi{1,运送了第i件货物0,没有运送第i件货物
i=1,2,…,10
记wi表示第i件物品的重量,pi表示第i件物品的利润
则目标函数:max∑i=110pixi\max \sum_{i=1}^{10} p_{i}x_{i} maxi=1∑10pixi
约束条件:
s.t.{∑i=110wixi<=30xi∈0,1s.t.\left\{\begin{matrix} \sum_{i=1}^{10} w_{i}x_{i} <= 30 \\ x_{i} \in {0, 1} \end{matrix}\right. s.t.{∑i=110wixi<=30xi∈0,1
指派问题
5名候选人的百米成绩(s)
蝶泳 | 仰泳 | 蛙泳 | 自由泳 | |
---|---|---|---|---|
甲 | 66.8 | 75.6 | 87 | 58.6 |
乙 | 57.2 | 66 | 66.4 | 53 |
丙 | 78 | 67.8 | 84.6 | 59.4 |
丁 | 70 | 74.2 | 69.6 | 57.2 |
戊 | 67.4 | 71 | 83.8 | 62.4 |
怎么选拔队员组成4×100米混合泳接力队伍?
解:写出目标函数和约束条件
记{i=1,2,...,5⇒五名队员j=1,2,3,4⇒四种泳姿xi{1,队员i参加第j中泳姿0,队员i不参加第j中泳姿tij⇒队员i参加第j种泳姿的耗时\left\{\begin{matrix} i=1,2,...,5 \Rightarrow 五名队员\\ j=1,2, 3,4 \Rightarrow 四种泳姿\\ x_{i}\left\{\begin{matrix} 1, 队员i参加第j中泳姿\\ 0, 队员i不参加第j中泳姿 \end{matrix}\right. \\ t_{ij} \Rightarrow 队员i参加第j种泳姿的耗时 \end{matrix}\right. ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧i=1,2,...,5⇒五名队员j=1,2,3,4⇒四种泳姿xi{1,队员i参加第j中泳姿0,队员i不参加第j中泳姿tij⇒队员i参加第j种泳姿的耗时
则目标函数:min∑j=14∑i=15tijxij\min \sum_{j=1}^{4} \sum_{i=1}^{5} t_{ij}x_{ij} minj=1∑4i=1∑5tijxij
约束条件:
s.t.{∑j=14xij<=1,i=1,2,3,4,5(每个人只能入选4种泳姿之一)∑i=15xij=1,j=1,2,3,4(美中泳姿有且仅有1人参加)xij∈0,1s.t.\left\{\begin{matrix} \sum_{j=1}^{4}x_{ij} <= 1, i=1,2,3,4,5( 每个人只能入选4种泳姿之一) \\ \sum_{i=1}^{5} x_{ij} = 1 ,j=1,2,3,4(美中泳姿有且仅有1人参加) \\ x_{ij}\in {0, 1} \end{matrix}\right. s.t.⎩⎨⎧∑j=14xij<=1,i=1,2,3,4,5(每个人只能入选4种泳姿之一)∑i=15xij=1,j=1,2,3,4(美中泳姿有且仅有1人参加)xij∈0,1
钢管切割问题
假设按照方案A-G切割的原材料数量分别为xi(i = 1,2,…,7),根据上表的数据我们可以建立以下线性整数规划模型:
目标函数:min∑i=17xij\min \sum_{i=1}^{7} x_{ij} mini=1∑7xij
约束条件:{x1+2x2+x7>=100x3+2x4+x5+x7>=1004x1+x2+2x4+6x6+x7>=100xi⇒非负整数(i=1,2,3,4,5,6,7)\left\{\begin{matrix} x_{1} + 2x_{2} + x_{7} >= 100 \\ x_{3} + 2x_{4} + x_{5}+x_{7} >= 100\\ 4x_{1} + x_{2} +2x_{4} + 6x_{6}+x_{7} >= 100 \\ x_{i} \Rightarrow 非负整数(i=1,2,3,4,5,6,7) \end{matrix}\right. ⎩⎪⎪⎨⎪⎪⎧x1+2x2+x7>=100x3+2x4+x5+x7>=1004x1+x2+2x4+6x6+x7>=100xi⇒非负整数(i=1,2,3,4,5,6,7)
求解结果如下表所示
A | B | C | D | E | F | G | |
---|---|---|---|---|---|---|---|
原材料数量 | 14 | 43 | 32 | 2 | 0 | 0 | 0 |
所花费的原材料数量为:91
Matlab代码
最大最小化模型
在对策论中,我们常遇到这样的问题:在最不利的条件下,寻求最有利的策略。如:急救中心选址,投资规划中确定最大风险的最低限度。
为此对每个x
最大最小化问题的一般数学模型
minx{max[f1(x),f2(x),...,fm(x)]}\min_{x} \left\{max[f_{1}(x),f_{2}(x),...,f_{m}(x)]\right\}xmin{max[f1(x),f2(x),...,fm(x)]}
s.t.{Ax<=bAeq⋅x=beqC(x)<=0Ceq(x)=0VLB<=X<=VUBs.t.\left\{\begin{matrix} Ax <= b\\ Aeq\cdot x = beq \\ C(x) <= 0\\ Ceq(x) = 0\\ VLB <= X <= VUB \end{matrix}\right. s.t.⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧Ax<=bAeq⋅x=beqC(x)<=0Ceq(x)=0VLB<=X<=VUB
Matlab
[x fval] = fminimax(@Fun, X0, A, b, Aeq, beq, lb, ub, @nonlfun, option)
目标函数@Fun用一个函数向量表示 code11
funciton f = Fun(x)f = zeros(m, 1)f(1) = ...f(2) = ......f(m) = ...
end
多目标规划模型
若一个规划问题中有多个目标,例如企业在保证利润最大时也要保证生产时产生的污染最少,这种情况下我们可以对多目标函数进行加权组合,是问题变为单目标规划,然后利用前面的模型进行求解
注意:
- 要先将多个目标函数统一为最大化或最小化问题后才可以进行加权组合
- 如果目标函数的量纲不同,则需要对其进行标准化后再进行加权,标准化的方法一般是用目标函数除以某个常量,该常量是这个目标函数的某个取值,具体取值可以根据经验确定
- 对多目标函数进行加权求和时,权重需要由该问题领域的专家给出,在实际建模比赛中,若无特殊说明,我们可令权重相同。
国赛学习——5种数学规划模型相关推荐
- 数学建模国赛2018B题RGV动态调度模型思路复述(这题也太硬了吧(啃不动
目录 一.问题分析 任务一 任务二 二.假设与符号说明 假设 变量 三.思路与模型 情况1:一道工序无故障作业调度 1. 关于RGV运行路径的分析 2. 关于RGV的作业调度方式 3. 调度模型的目标 ...
- 好好学习-三种网络攻击模型
攻击树模型 以AND-OR的树结构来对目标对象进行网络安全威胁分析.树的根节点表示最终的入侵目标,节点序号代表攻击的先后顺序,叶节点是攻击实例. MITRE ATT&CK模型 是一个基于真实世 ...
- 程序员成长之旅——同步IO和异步IO(五种IO模型)
程序员成长之旅--同步IO和异步IO(五种IO模型) 同步和异步 同步 异步 消息通知 场景比喻 阻塞和非阻塞 阻塞 非阻塞 事例 同步IO 阻塞IO 非阻塞IO 信号驱动IO 多路转接IO 异步IO ...
- 备战数学建模国赛,快速搞定算法模型!
全世界只有3.14 % 的人关注了 青少年数学之旅 说到数学建模,大家的第一反应就是国赛.美赛等数学建模比赛,但这只是冰山一角,不过这个反应却也很正常,因为很多小伙伴接触数学建模的契机,大部分还是因为 ...
- [刨根问底] 五分钟搞懂组合评价模型—模糊Borda (以2021 年大学生数模国赛C题为例)
组合评价模型-模糊Borda(Matlab) 我们的征途是星辰大海,而并非烟尘人间. 目录 组合评价模型-模糊Borda(Matlab) 一.模糊Borda法简介 二.模糊Borda法主要步骤 (1) ...
- 2022年数模国赛冲刺之模型复习2
组合预测法 前言 一.组合预测法技术 二.预测性能评价方法 2.1 精度指标 2.2 样本外检验和样本内检验 2.3 动态时间弯曲距离评价方法 2.4 二阶预测有效度评价方法 2.5 预测模型的准确性 ...
- 2022年数模国赛C题(岭回归、区间预测、矩阵热力图、Fisher判别分类模型)——总结心得(附最后一次数模经历,Matlab\SPSS\Lingo的理解综合)
文章目录 一.国赛 二.国赛代码展示 1.1 问题一 1.2 问题二 1.3 问题三 1.4 问题四 三.对于软件的理解 3.1 Matlab 3.1.1 表格的读取 3.1.2 元胞数组的相关函数的 ...
- 【美赛学习记录】模型
美赛学习记录-2022年2月7日 代码! 线性回归 数据拟合 插值 最优化求极值 插值 ARIMA 复杂网络实验 模型验证 K-Fold Cross-validation k折交叉验证 [基础模型] ...
- 线性Frequency Principle动力学:定量理解深度学习的一种有效模型
关于作者:本文的作者是来自上海交通大学致远学院 08 级理科班的四位研究人员.本文由许志钦执笔,张耀宇修改,罗涛和马征审阅校正.这个小组的研究兴趣主要是深度学习理论. 深度学习的广泛成功吸引了大量的科 ...
最新文章
- Solr 中遇到的问题
- 2导出指定表结构_大白话详解大数据hive知识点,老刘真的很用心(2)
- mysql修改主键生成策略信息_常用Hibernate 主键生成策略
- 别让for循环毁了你的程序(二)
- ubuntu java环境变量_hadoop:伪分布模式环境变量的配置
- python调用dos命令_基于Python执行dos命令并获取输出的结果
- Mangos源码分析(9):服务器公共组件实现之环形缓冲区
- Python 模拟黑客帝国中的“代码雨”
- ajax编辑教程,今天手动编写了一个简易的 ajax 发起器(JavaScript)
- Java爬虫入门教程 开篇
- java常见面试微服务_微服务面试一般问什么?java微服务面试题以及答案整理
- 宽带网速如何测试软件,怎样测试网速 多种测试网速方法【推荐】
- 【机器学习】几种常见的有监督学习算法
- 微信做音乐相册html5,js微信应用场景之微信音乐相册案例分享
- TP50 TP90 TP99 TP999 详细说明
- android模拟器 diy,史莱姆机DIY模拟器
- 00812中国现当代作家作品专题研究简答论述题【湖北卷2110考期】
- Springboot 搭建oss文件上传服务器
- 应用程序编程太难?Appy Pie推出“零基础”VR AR设计平台
- QT绘制区域(ROI)框(矩形框和椭圆框)