数学建模matlab 优化模型,数学建模实验中三种优化模型的分析
1. 引言
在20世纪中期,数学建模 [1] 就在欧美国度首次被发现,而在中国的呈现稍晚些,但是大约在80年代初始咱们国家也就有了。它的核心即是创立数学模型 [2] ,使得问题获得最优化的解决。而数学建模最关键而又最难的是模型的建立。建造模型是一种创作,成功的模型往往是科技和创作的结果。
在建模前就要做一些准备工作,比如:认识须要处理题目的现实状态以及现实成果,尽可能多的了解处理东西的种种相关知识;接着用数学思想来分析问题的最本质的内在联系,把数学思维与问题的全过程充分结合;最后用数学语言的形式来描述具体问题,并且所描述的结果有具体的要求;首先是符合数学理论和习惯,其次是清晰准确。
本文主要罗列了三的优化方法:线性、非线性 [3] 以及整数规划模型 [4] 。并通过一些实例详细说明。
2. 优化模型
最优化方法 [5] ,也称做运筹学方法,是数学的一个分支,是上世纪二次大战前后慢慢累积成的一门学科。最优化方法最核心的内容是通过运用数学方法来对各种系统的优化途径以及方案进行研究,为决策者提供科学决策依据,以便做出合理科学的决策。
从数学角度上来说,最优化方法的本质就是一种求极值的方法,具体的说就是在一组约束条件为等式或者不等式的情形下,使得系统的目标函数要么达到最大值,要么达到最小值。常用的优化方法有线性、非线性以及整数规划模型。
2.1. 线性规划模型
线性规划 [6] 是探究由线性等式或不等式构成的约束条件下的极值题目,可以解决种种规划、出产、运输等科学解决与工程范畴方面的问题。它的主要算法是单纯形法。
线性规划问题的特点:第一,题目都是用代表性的变量表现一个方案,这组代表性变量的值就代表详细的方案,这些变量的取值是不能为负数的。第二,存在必然的约束前提,该前提可以用线性函数来表现。第三,都有一个要求到达的目标,他可以用决策变量的线性函数来表现,这个函数称为目标函数,按题目的差别,要求目标函数实现最大化或者最小化。下面,通过几个例子来说明一下。
2.1.1. 数学表示
在线性规划的一般形式中,有n个变化的量,m个约束前提,这个前提是等式,变化的量非负,要求函数的最小值,这个表达式为:
min
f
=
c
1
x
1
+
c
2
x
2
+
⋯
+
c
n
x
n
s
.
t
.
{
a
11
x
1
+
a
12
x
2
+
⋯
+
a
1
n
x
n
=
b
1
a
21
x
1
+
a
22
x
2
+
⋯
+
a
2
n
x
n
=
b
2
⋮
a
m
1
x
1
+
a
m
2
x
2
+
⋯
+
a
m
n
x
n
=
b
m
x
1
,
x
2
,
⋯
,
x
n
≥
0
;
b
i
≥
0
(
i
=
1
,
2
,
⋯
,
m
) (1)
在这个表达式中,满足各约束前提的右端项
b
i
≥
0 ,不然两边乘以“−1”,可简写为
min
f
=
C
T
X
s
.
t
.
{
A
X
=
B
x
i
,
b
j
≥
0
(
i
=
1
,
2
,
⋯
,
n
;
j
=
1
,
2
,
⋯
,
m
) (2)
A
=
(
a
i
j
)
m
×
n 约束前提的系数矩阵,一般
n
≥
m
>
0 ,
C
=
(
c
1
,
c
2
,
⋯
,
c
n
)
T 为价值向量,
B
=
(
b
1
,
b
2
,
⋯
,
b
m
)
T 称为资源向量,
X
=
(
x
1
,
x
2
,
⋯
,
x
n
)
T 为决策向量。
知道了标准型之后,任意一个形式的数学模型都可以转化为标准型来求解 [7] 。
2.1.2. MATLAB实现
这个模型的MATLAB命令是linprog,假设该规划题目的数学模型 [8] 为
min
f
T
x
s
.
t
.
{
A
∗
x
≤
b
A
e
q
∗
x
=
b
e
q
l
b
≤
x
≤
u
b (3)
式中,
f
,
x
,
b
,
b
e
q
,
l
b 和
u
b 为向量,
A 和
A
e
q 为矩阵。这里,须要指出的是,MATLAB中给的量和矩阵的值是从上往下进行的,行中间用“;”离隔每行元素可用“,”也可用空格,矩阵右上角用“’”表现转置运算。
Linprog函数 [9] 的调用格式如下:
1)
[
x
,
f
v
a
l
]
=
l
i
n
p
r
o
g
(
f
,
A
,
b
) ,解线性规划题目的
min
f
T
x ,前提为
A
∗
x
≤
b ,返回解
x 处所要求解的值
f
v
a
l 。
2)
[
x
,
f
v
a
l
]
=
(
f
,
A
,
b
,
A
e
q
,
b
e
q
) ,解线性规划题目的
min
f
T
x ,前提为
A
∗
x
≤
b ,但增加了一个前提,即
A
e
q
∗
x
=
b
e
q ;若不等式不存在,则令A = ,、b = ,,同时返回解
x 处的目标函数值
f
v
a
l 。
3)
[
x
,
f
v
a
l
]
=
l
i
n
p
r
o
g
(
f
,
A
,
b
,
A
e
q
,
b
e
q
,
l
b
,
u
b
) ,求解线性规划题目的
min
f
T
x ,约束前提为
A
∗
x
≤
b 及
A
e
q
∗
x
=
b
e
q ,并定义变量
x lb(下界)和ub(上界),使
x 一直在该范畴内,若不存在,则令A = ,、B = ,,即令返回解
x 处的所求函数值
f
v
a
l 。
4)
[
x
,
f
v
a
l
]
=
l
i
n
p
r
o
g
(
f
,
A
,
b
,
A
e
q
,
b
e
q
,
l
b
,
u
b
,
x
0
) ,求该题的
min
f
T
x ,有一个前提是
A
∗
x
≤
b ,和
A
e
q
∗
x
=
b
e
q ,同样也有下界和上界,有一个初始
x
0 ,同时执行上一环中的最后一步。
5)
[
x
,
f
v
a
l
]
=
l
i
n
p
r
o
g
(
f
,
A
,
b
,
A
e
q
,
b
e
q
,
l
b
,
u
b
,
x
0
,
o
p
t
i
o
n
s
) ,求该题的
min
f
T
x ,也有前提是
A
∗
x
≤
b ,以及
A
e
q
∗
x
=
b
e
q ,同样有上下界和初始值
x
0 ,不同的是用
o
p
t
i
o
n
s 使指定的参数到达最小化,同时执行上一环中的最后一步。
6)
x
=
l
i
n
p
r
o
g
(
...
) ,仅输出解
x 的值,不输出所求的函数值
f
v
a
l 。
2.1.3. 运输问题
某工场出产甲、乙两种产物,有要求:1 kg产物甲须要用材料A 5 kg,材料B 6 kg;生产1 kg产物乙需要材料A 3 kg,材料B 7 kg,材料C 5 kg。若1 kg产物甲和乙的价钱划分为6万和5万,三种材料的限制分别为100 kg、160 kg、180 kg。试求出使得总销售达到最高的方法?
解:令出产产物甲的数目为
x
1 ,出产产物乙的数目为
x
2 ,由要求可得模型:
max
6
x
1
+
5
x
2
s
.
t
.
{
5
x
1
+
3
x
2
≤
100
6
x
1
+
7
x
2
≤
160
5
x
2
≤
180
x
,
x
2
≥
0 (4)
这个题目要使所求的函数值达到最大,则根据MATLAB的标准 [10] 进行转化,即让所求函数最小,即:
min
−
6
x
1
−
5
x
2
s
.
t
.
{
5
x
1
+
3
x
2
≤
100
6
x
1
+
7
x
2
≤
160
5
x
2
≤
180
x
,
x
2
≥
0 (5)
MATLAB求解程序清单为:
»
f
=
[
−
6
,
−
5
]
′
A
=
[
5
,
3
;
6
,
7
;
0
,
5
]
′ ;
b
=
[
100
,
160
,
180
]
′ ; (6)
l
b
=
[
0
,
0
]
′ ;
[
x
,
f
v
a
l
]
=
l
i
n
p
r
o
g
(
f
,
A
,
b
,
□
,
□
,
l
b
)
结果输出为:
x
=
12.9412
11.7647 (7)
f
v
a
l
=
−
136.4706
说明生产产品甲、乙的数量分别为12.9 kg、11.76 kg时,创造的最高总售价为136.47万元。
2.2. 整数规划模型
在之前所说的线性题目中,有时候解是分数有时候却是小数,也有时会出现针对一些的题目要求解不能是上述情况(称为整数解)。例如,要求机器的台数、工场的人数或卸货的车辆数等。通常称这种题目为整数规划(Integer Programming),简称IP,它是规划论中的一个分支。
该规划中,全部的量均取整数时就叫做纯整数规划(Pure Integer Programming);部分变化的量取整数的称混合整数规划 [11] (Mixed Integer Programming);变化的量只取0或1两种值的规划称为0--1规划。
2.2.1. 数学表示
max
(
或
min
)
z
=
∑
j
=
1
n
c
j
x
j
s
.
t
.
{
∑
j
=
1
n
a
i
j
x
i
j
≤
(
=
,
≥
)
b
i
(
i
=
1
,
2
,
⋯
,
m
)
x
j
≥
0
(
j
=
1
,
2
,
⋯
,
n
)
x
1
,
x
2
,
⋯
,
x
n
中
部
分
或
全
部
取
整
数 (8)
2.2.2. MATLAB实现
由于整数规划的解法有很多,所以,用MATLAB实现的方法也有很多,下面将会结合具体的事例来阐述。
2.2.3. 限制问题
某工场打算要出产甲、乙两种衣服,得知制作甲、乙衣服须要耗损A、B两种材料,A、B两种材料的耗损以及进价按下表1所示:(A最多只能用8 m,B最少要用6 m)
试问:工厂应分别生产多少件甲、乙,才能使得所花的钱最少?
解:设工厂应分别生产甲、乙种衣服
x
1
,
x
2 件,根据题意建立如下数学模型:
min
z
=
x
1
+
4
x
2
s
.
t
.
{
2
x
1
+
x
2
≤
8
x
1
+
2
x
2
≥
6
x
1
,
x
2
≥
0
且
为
整
数 (9)
在MATLAB命令 [12] 窗口输入:
»
f
=
[
1
,
4
]
′ ;
A
=
[
2
,
1
;
−
1
,
−
2
] ;
b
=
[
8
,
−
6
] ; (10)
l
b
=
[
0
,
0
] ;
[
x
,
f
v
a
l
]
=
l
i
n
p
r
o
g
(
f
,
A
,
b
,
□
,
□
,
l
b
)
结果输出为:
x
=
3.3333
1.3333 (11)
f
v
a
l
=
8.6667
不符合题意,确定分支
x
1
≤
3 和
x
1
≤
3 两部分。
Table 1. The material consumption and purchase price of A, B two kinds materials
表1. A、B两种材料的耗损和进价
1) 先考虑
x
1
≤
3 的部分,即求解
min
z
=
x
1
+
4
x
2
s
.
t
.
{
2
x
1
+
x
2
≤
8
x
1
+
2
x
2
≥
6
x
1
≤
3
x
1
,
x
2
≥
0
且
为
整
数 (12)
在MATLAB命令窗口中输入
»
f
=
[
1
,
4
]
′ ;
A
=
[
2
,
1
;
−
1
,
−
2
;
1
,
0
] ;
b
=
[
8
,
−
6
,
3
] ; (13)
l
b
=
[
0
,
0
] ;
[
x
,
f
v
a
l
]
=
l
i
n
p
r
o
g
(
f
,
A
,
b
,
□
,
□
,
l
b
)
结果为:
x
=
3.0000
1.5000 (14)
f
v
a
l
=
9.0000
仍然不满足全部为整数解的要求。
2) 考察分支
x
1
≤
3 ,再加上限制
x
2
≤
1 ,求解
min
z
=
x
1
+
4
x
2
s
.
t
.
{
2
x
1
+
x
2
≤
8
x
1
+
2
x
2
≥
6
x
1
≤
3
x
2
≤
1
x
1
,
x
2
≥
0
且
为
整
数 (15)
在MATLAB命令窗口中输入:
»
f
=
[
1
,
4
]
′ ;
A
=
[
2
,
1
;
−
1
,
−
2
;
1
,
0
;
0
,
1
] ;
b
=
[
8
,
−
6
,
3
,
1
] ; (16)
l
b
=
[
0
,
0
] ;
[
x
,
f
v
a
l
]
=
l
i
n
p
r
o
g
(
f
,
A
,
b
,
□
,
□
,
l
b
)
结果出现错误信息提示,但仍输出为:
x
=
3.0000
1.5000 (17)
f
v
a
l
=
9.0000
因为有信息错误,说明该解有问题,而且也不符合整数解要求,继续求解:
3) 考察分支
x
1
≤
3 和
x
2
≥
2 ,即求解
min
z
=
x
1
+
4
x
2
s
.
t
.
{
2
x
1
+
x
2
≤
8
x
1
+
2
x
2
≥
6
x
1
≤
3
x
2
≥
2
x
1
,
x
2
≥
0
且
为
整
数 (18)
在MATLAB命令窗口中输入:
»
f
=
[
1
,
4
]
′ ;
A
=
[
2
,
1
;
−
1
,
−
2
;
1
,
0
;
0
,
1
] ;
b
=
[
8
,
−
6
,
3
,
−
2
] ; (19)
l
b
=
[
0
,
0
] ;
[
x
,
f
v
a
l
]
=
l
i
n
p
r
o
g
(
f
,
A
,
b
,
□
,
□
,
l
b
)
结果出现错误信息提示,但仍输出为:
x
=
2.0000
2.0000 (20)
f
v
a
l
=
10.0000
此时,解全部为整数,但是否为最优解尚需对其他没有考察的分支进行进一步的计算,最后得到结论,即
x
1
∗
=
x
2
∗
=
2
,
z
∗
=
10 (21)
2.3. 非线性规划模型
之前所说的这两种规划的目标函数和约束前提中,函数均为线性的,但在现实中另有大量的题目,其目标函数或约束前提很难用线性来表达,其中包括了很多的非线性函数,则称这种规划为非线性规划问题。
2.3.1. 数学表示
实际中所碰到的题目多半是非线性的,其数学表达式 [13] 为:
min
(
或
max
)
f
(
x
1
,
x
2
,
⋯
,
x
n
)
s
.
t
.
{
g
(
x
1
,
x
2
,
⋯
,
x
n
)
≥
(
=
,
≤
0
)
x
j
≥
0
i
=
1
,
2
,
⋯
,
m
j
=
1
,
2
,
⋯
,
n (22)
2.3.2. MATLAB实现
当要求的变量只有一个,且没有约束的限制时,常用到的MATLAB函数为
f
min
b
n
d 、
f
min
s
e
a
r
c
h 、
f
min
u
n
c ,用于求多变量无约束非线性规划的MATLAB函数为
f
min
s
e
a
r
c
h 、
f
min
u
n
c 。
1)
f
min
b
n
d 命令用
f
min
b
n
d 可求区间
[
x
1
,
x
2
] 内单变量函数的最小值,工程应用中常用的格式如下:
①
[
x
,
f
v
a
l
]
=
f
min
b
n
d
(
f
u
n
,
x
1
,
x
2
) ,返回区间上最小解
x 及解
x 处的所求函数值。
②
[
x
,
f
v
a
l
]
=
f
min
b
n
d
(
f
u
n
,
x
1
,
x
2
,
o
p
t
i
o
n
s
) ,采用
o
p
t
i
o
n
s 参数指定的优化参数进行最小化,若没有设置
o
p
t
i
o
n
s 选项,可令
o
p
t
i
o
n
s
=
□ ,同时返回最小解
x 及解
x 处的目标函数值。
③
x
=
f
min
b
n
d
(
...
) ,仅返回解
x 的数值,不返回目标函数值。
2)
f
min
u
n
c 命令利用
f
min
u
n
c 可求解单变量及多变量函数的最小值,工程中常用的格式如下:
①
[
x
,
f
v
a
l
]
=
f
min
u
n
c
(
f
u
n
,
x
0
) ,给定初始值
x
0 ,返回所求函数极小值
x 和所求函数值。
②
[
x
,
f
v
a
l
]
=
f
min
u
n
c
(
f
u
n
,
x
0
,
o
p
t
i
o
n
s
) ,给定初始值
x
0 ,用
o
p
t
i
o
n
s 参数指定的优化参数进行最小化,若没有设置
o
p
t
i
o
n
s 选项,可令
o
p
t
i
o
n
s
=
□ ,同时返回目标函数的极小值
x 和目标函数值。
③
x
=
f
min
u
n
c
(
...
) ,仅返回解
x 的数值,不返回目标函数值。
3)
f
min
s
e
a
r
c
h 命令利用
f
min
s
e
a
r
c
h 可求的问题和
f
min
u
n
c 一样,工程中常用的格式如下:
①
[
x
,
f
v
a
l
]
=
f
min
s
e
a
r
c
h
(
f
u
n
,
x
0
) ,给定值
x
0 ,返回所求函数极小值
和所求函数值。
②
[
x
,
f
v
a
l
]
=
f
min
s
e
a
r
c
h
(
f
u
n
,
x
0
,
o
p
t
i
o
n
s
) ,给定初始值
x
0 ,用
o
p
t
i
o
n
s 参数指定的优化参数进行最小化,若没有设置
o
p
t
i
o
n
s 选项,可令
o
p
t
i
o
n
s
=
□ ,同时返回目标函数的极小值
x 和目标函数值。
③
x
=
f
min
s
e
a
r
c
h
(
...
) 。仅返回解
x 的数值,不返回目标函数值。
4) 参数说明
①
f
u
n 为目标函数,若对应的函数采用
M 文件表示,即
f
u
n
=
'
m
y
f
u
n
' ,则
m
y
f
u
n
.
m 必须采用下面的形式,即
f
u
n
c
t
i
o
n
f
=
m
y
f
u
n
( x )
f
=
...
②
,为优化参数选项,可以通过
o
p
t
i
m
s
e
t 函数设置或改变这些参数。
5) 注意事项
① 三个函数均可能只输出局部最优解。
② 三个函数均只对变量为实数的题目进行优化。
③
f
min
b
n
d 函数和
f
min
u
n
c 函数要求目标函数必需连续。
④ 若变量为复数,对于
f
min
u
n
c 函数和
f
min
s
e
a
r
c
h 函数来说,需将相应的复数分为实部和虚部两部分分别进行优化计算。
2.3.3. 工程应用实例
某工场有个边长为5 m的正方形铁板,欲制成一个方形无盖水槽,问在它的4个角处剪去多长时,能使水槽的容纳的水最多?
解:设裁去的正方形的边长为
x ,则水槽的容积为
f
(
x
)
=
(
5
−
2
x
)
2
x ,分析可知,裁去的正方形的边长不超过2.5 m,即
x 位于区间
(
0
,
2.5
) 上。现要求确定该区间上的一个
x ,使
f
(
x
) 到达最大,根据MATLAB的要求,将目标函数最小化,即获得如下函数模型 [14] :
min
−
f
(
x
)
=
−
(
5
−
2
x
)
2
x
1) MATLAB求解程序清单一:
»
[
x
,
f
v
a
l
]
=
f
min
b
n
d
(
'
−
(
5
−
2
∗
x
)
^
2
∗
x
'
,
0
,
2.5
) (23)
结果输出为:
x
=
0.8333 (24)
f
v
a
l
=
−
9.2593
2) MATLAB求解程序清单二:
首先,在
M
−
f
i
l
e
e
d
i
t
o
r 中编写如下
M 文件:
f
u
n
c
t
i
o
n
f
=
m
y
f
u
n
( x )
f
=
−
(
5
−
2
x
)
^
2
∗
x ; (25)
以文件名字
m
y
f
u
n
3
_
1 存在MATLAB目次下的work文件夹中。然后,在MATLAB命令窗口中调用
f
min
b
n
d 函数:
»
[
x
,
f
v
a
l
]
=
f
min
b
n
d
(
'
m
y
f
u
n
3
_
1
'
,
0
,
2.5
)
结果同样输出为:
x
=
0.8333 (26)
f
v
a
l
=
−
9.2593
可见,减掉正方形的边长为0.8333 m时,水槽能容纳的水最多,且最多为9.2593 m3。
这篇文章主要总结了数学建模中的优化模型,将常用的优化模型分为了三类:线性规划、整数规划以及非线性规划模型。分成了四大部分来罗列这三种模型,第一,先总结模型的概念,第二,模型一般的表达式,第三模型在MATLAB中的实现,最后,结合实例建立了模型并且用MATLAB求解出最优结果。
数学建模matlab 优化模型,数学建模实验中三种优化模型的分析相关推荐
- matlab在光学实验中的应用,Matlab在光学信息处理仿真实验中的应用
收稿日期 :200402213 基金项目 :佛山科学技术学院校级科研课题经费资助 作者简介 :谢嘉宁(1971 - ) ,女 ,广东潮州人 ,佛山科学技术学院物理系讲师 ,光学工程硕士 ,主要从事光学 ...
- 必get!建模中的对称美 | 3D MAX中三种对齐工具
其实大家有时候会不会觉得学习建模实在是太难,主要是哪些地方做错了或者哪里卡住了,可能花很长时间都不知道哪里做错了想解决问题也解决不了,我觉得自学最纳闷就是这点,而且教程里也不一定会提到,不知道有没有这 ...
- 三种Cross-lingual模型 (XLM, XLM-R, mBART)详解
本文将详述三种Cross-lingual模型,按照其在Arxiv上发表论文的时间,分别是XLM(2019/1/22).XLM-R(2019/11/5).mBART(2020/1/22),有意思的是这三 ...
- 基于三种机器学习模型的岩爆类型预测及Python实现
写在前面 由于代码较多,本文仅展示部分关键代码,需要代码文件和数据可以留言 然而,由于当时注释不及时,且时间久远,有些细节笔者也记不清了,代码仅供参考 0 引言 岩爆是深部岩土工程施工过程中常见的一种 ...
- Linux中5种IO模型
在了解IO模型时需要清楚什么是同步和异步,什么是阻塞和非阻塞 同步/异步 阻塞/非阻塞 当IO操作发生时,一定是两方参与的,分别是调用方和被调用方.阻塞和非阻塞相对于的事调用方,同步和异步相对于的好似 ...
- 深入理解C语言-二级指针三种内存模型
二级指针相对于一级指针,显得更难,难在于指针和数组的混合,定义不同类型的二级指针,在使用的时候有着很大的区别 第一种内存模型char *arr[] 若有如下定义 char *arr[] = {&quo ...
- reactor线程模型_简单了解Java Netty Reactor三种线程模型
1. Reactor三种线程模型 1.1. 单线程模型 Reactor单线程模型,指的是所有的IO操作都在同一个NIO线程上面完成,NIO线程的职责如下: 1)作为NIO服务端,接收客户端的TCP连接 ...
- Reactor三种线程模型与Netty线程模型
一.Reactor三种线程模型 1.1.单线程模型 单个线程以非阻塞IO或事件IO处理所有IO事件,包括连接.读.写.异常.关闭等等.单线程Reactor模型基于同步事件分离器来分发事件,这个同步事件 ...
- 浅析常用软件架构中的一定要理解的三种架构模型
2019独角兽企业重金招聘Python工程师标准>>> 常用的软件架构模型可以归类为三种架构模型:3/N层架构."框架+插件"架构.地域分布式架构. 一.三种架构 ...
最新文章
- C语言-main方法的两个参数是干什么的?
- 验证输入的是否数字的几种方法
- (网络编程)UDP实现聊天
- java中截取字符串的方式
- C++堆排序(附完整源码)
- Windows导出所有计划任务方法
- 李晓菁201771010114《面向对象程序设计(java)》第十三周学习总结
- cacti安装和配置 技术交流群:146510248
- java当前月份减一个月_Java获取当前时间的上一个月和下一个月,第一天和最后一天,任意时间的第一天和最后一天,任意时间上一个月和下一个月...
- 2010年经典语录,我们全OUT了
- 读研计算机统计学怎样,【新加坡国立大学统计专业读研】 - 环外新加坡留学网...
- FreeMarker(七)Html转义
- Java基础,删除指定索引的元素,编程思路详解
- python网络通信基础-udp+NetAssist(网络调试助手)
- 主成分分析法的SPSS操作
- 基于MapGuide的在线WebGIS站点介绍
- 电子计算机发明于20世纪什么年代,电子计算机发明于哪一年
- C#语言实例源码系列-自定义ListBox背景
- 【Java+MySQL】使用JDBC连接MySQL 8.0数据库
- 微软2013暑假实习生笔试题解析