数学规划问题
A.a 概述
<1>什么是数学规划?
数学规划是运筹学的 ⼀个分⽀ , 其⽤来研究: 在给定的条件 下 (约束条件
), 如何按照某 ⼀衡量指标 (⽬标函数)
来寻求计划、 管理⼯作 中的优⽅案 。 (求 ⽬标函数在 ⼀定约束条件下的极值问题 。 )
<2>数学规划的一般形式
m
i
n
(
或
者
m
a
x
)
z
=
f
(
x
)
min(或者max)\quad z=f(x)
min(或者max)z=f(x)
s
.
t
.
g
i
(
x
)
<
0
,
i
=
1
,
2
,
.
.
.
,
m
(
不
等
式
约
束
,
)
s.t. g_i(x)<0, i=1, 2, ..., m(不等式约束,)
s.t.gi(x)<0,i=1,2,...,m(不等式约束,)也可能有等式约束 , 整数约束 或 两者皆有
x : 决 策 变 量 ( 一 般 有 多 个 自 变 量 ) x:决策变量(一般有多个自变量) x:决策变量(一般有多个自变量)
f ( x ) : 目 标 函 数 f(x):目标函数 f(x):目标函数
不 等 式 约 束 、 等 式 约 束 、 整 数 约 束 : 约 束 条 件 不等式约束、等式约束、整数约束:约束条件 不等式约束、等式约束、整数约束:约束条件
例子:z为目标函数,x1x2x3为决策变量。
整数约束: x 1 , x 2 ∈ Z x_1, x_2\in Z x1,x2∈Z
<3>数学规划的分类
1 线性规划
如果⽬标函数 和 和约束条件均是决策变量的线性表达式 ,
那么此时的数学规划问题就属于线性规划
1947年, 美国数学家丹⻬格 ( GB.Dantz.in)提出了 求解线性规划的单纯形法 , 奠定了这⻔学科的基础 。
2 ⾮线性规划
当⽬标函数和或者约束条件中有⼀个是决策变量 x 的⾮线性表达式, 那么 此时的数学规划问题就属于⾮线性规划 。
解决⾮线性规划要⽐线性规划困难得多 , ⽬前没有通⽤算法, ⼤多数算法都是在选定决策变量的初始值后 ,通过定的搜索⽅法 寻求优的决策变量。
3 整数规划
整数 规划是⼀类要求变量取整数值的数学规划,包括线性整数规划和非线性整数规划。
⽬前, 所流⾏的 求解整数规划 的算法往往只适⽤于线性整数规划, 所以本节学习 的求解均针对线性整数规划。
4 0-1规划
整数规划的特例 , 整数变量的 取值只能为 0 和 1 。
A.b 线性规划问题的求解
<1>MATLAB中线性规划的标准型式
m
i
n
C
T
X
(
向
量
的
内
积
,
C
=
[
C
1
C
2
.
.
.
C
n
]
)
,
X
=
[
x
1
x
2
.
.
.
x
n
]
n
是
决
策
变
量
的
个
数
)
min C^TX(向量的内积,C= \begin{bmatrix} C1 \\C2\\.\\.\\.\\C_n \end{bmatrix} ),X=\begin{bmatrix} x1 \\x2\\.\\.\\.\\x_n \end{bmatrix} n是决策变量的个数)
minCTX(向量的内积,C=⎣⎢⎢⎢⎢⎢⎢⎡C1C2...Cn⎦⎥⎥⎥⎥⎥⎥⎤),X=⎣⎢⎢⎢⎢⎢⎢⎡x1x2...xn⎦⎥⎥⎥⎥⎥⎥⎤n是决策变量的个数)
s . t . { A x ≤ b ( 不 等 式 约 束 ) A e q x = b e q ( 等 式 约 束 ) l b ≤ x ≤ u b ( 上 下 界 约 束 , 也 可 以 当 成 不 等 式 约 束 ) s.t.\begin{cases}Ax\le b(不等式约束)\\ A_{eq}x=b_{eq}(等式约束)\\ lb\le x \le ub(上下界约束,也可以当成不等式约束)\end{cases} s.t.⎩⎪⎨⎪⎧Ax≤b(不等式约束)Aeqx=beq(等式约束)lb≤x≤ub(上下界约束,也可以当成不等式约束)
注意标准形式的符号,如果是求最大值,则将目标函数乘-1,如果约束的符号与上面标准形式展示的不同,则也用两边乘-来变成标准形式;
例子:
u b = [ i n f i n f i n f ] ( 可 以 不 用 写 ) ub=\begin{bmatrix}inf\\inf\\inf\end{bmatrix}(可以不用写) ub=⎣⎡infinfinf⎦⎤(可以不用写)
如果题目给的约束不是大于等于或小于等于号,则需要根据对约束作一定的变换,如大于零可以写成大于等于0.00001。
<2>MATLAB求解线性规划的命令
[x, fval]=linprog[c, A, b, Aeq, beq, lb, ub, X0]
- X0 表示给定Matlab迭代求解的初始值 ( ⼀般不⽤给)
- C.A.b.Aeg.beq.lb.us 的意义和 标准型中 的意义 ⼀致
- 若不存在不等式约束, 可⽤ " [ ] " 替代 A和b
- 先不存在等式约束, 可⽤ " [ ] "替代 Aeq 和 beq
- 若某个 x i x_i xi ⽆下界或 上界, 则 设置 l b ( i ) = − i n f , u b ( i ) = + i n f lb(i)=-inf,ub(i)=+inf lb(i)=−inf,ub(i)=+inf
- 返回的X表示⼩值处的 x取值 ; fval表示最优解处时取得 的最小值。
- 不是所有线性规划问题都有唯一解,可能无解或者无穷多解。
- 如果求的是最大值,别忘了在最后给fval取反。
A.c 整数规划
整数规划分为:
- 线性整数规划 Matlab可进⾏求解 ,线性的意思 :在线性规划的基础上 , 加⼊决策变量取整数的条件)
- ⾮线性整数规划: ⽆特定算法, 只能⽤近似算法 , 如蒙特卡罗模拟 、 智能算法
- 0- 1规划 : 特殊的整数规划 , Matlab中也只能求解线性01规划, 对于⾮线性 0-1规划也只能近似求解 。
<1>MATLAB线性整数规划求解
[x, fval]=linprog[c, A, b, Aeq, beq, lb, ub, x0]
线性规划
[x, fval]intlinprog[c, intcon, A, b, beq, lb, ub]
线性整数规划
注意:
- intlinprog不能指定初始值
- intcon参数可以指定哪些决策变量是整数。
例如:决策变量x1,x2,x3中,x1和x3是整数,则intion=[1,3]
<2>MATLAB线性0-1规划求解
仍然使用intlinpro函数,只不过在lb和ub上做文章。
例如
三个决策变量x1,x2,x3中,x1和x3是0-1变量,x2不限制,则
i
n
t
c
o
n
=
[
1
,
3
]
,
l
b
=
[
0
−
i
n
f
0
]
,
u
b
=
[
1
i
n
f
1
]
intcon=[1,3], lb=\begin{bmatrix}0\\-inf\\0\end{bmatrix},ub=\begin{bmatrix}1\\inf\\1\end{bmatrix}
intcon=[1,3],lb=⎣⎡0−inf0⎦⎤,ub=⎣⎡1inf1⎦⎤。
A.d 非线性规划问题的求解
<1>MATLAB中非线性规划的标准型
m
i
n
f
(
x
)
min f(x)
minf(x)
s
.
t
.
{
A
x
≤
b
,
A
e
q
x
=
b
e
q
(
线
性
条
件
)
C
(
x
)
≤
0
,
C
e
q
(
x
)
=
0
(
非
线
性
条
件
)
l
b
≤
x
≤
u
b
s.t.\begin{cases}Ax\le b,Aeqx=beq(线性条件)\\ C(x)\le 0,Ceq(x)=0(非线性条件)\\lb\le x \le ub \end{cases}
s.t.⎩⎪⎨⎪⎧Ax≤b,Aeqx=beq(线性条件)C(x)≤0,Ceq(x)=0(非线性条件)lb≤x≤ub
注意:可能对部分决策变量有约束;注意标准型的负号
例子:
<2>MATLAB求解非线性规划的函数
[x, fval]=fmincon(@fun, x0, A, b, Aeq, beq, lb, ub, @nonfun, option)
- ⾮线性规划中对于初始值 x0 的选取⾮常重要 , 因为⾮线性规划的算法 求解出来的 是⼀个局部优解 。 (线性规划不存在 这个 问题 )
- 如果要求" 全局优解" ,有两种思路 : 1 给定不同的初始值 , 在⾥⾯找到⼀个优解 ; 2 先⽤蒙特卡罗 模拟, 得到⼀个蒙特卡罗解 , 然后 将这个解作为初始值来求优解 。
- " option" 选项可以给定求解 的算法, ⼀共有四种 : interior-point (内点法) 、 sqp序列⼆次规划法) 、 active-set (有效集法) 以及 trust-region-reflective (信赖域 反射算法) 。
option=optimoptions('fmincon','Algorithm','以上算法名')
- 不同的算法有其各⾃的优缺点和适⽤情况 , 我们 可以改变求解 的算法来看求解的结果是否变 好 了 。
- "@fun"表示⽬标函数,我们要编写⼀个独⽴的 m ⽂件来存⽬标 函数 :
function f=fun(x)
%x是一个向量
% f=x1+x2+x3代码写成x(1)+x(2)+x(3)
f=...
- nonlfun " 表示⾮线性部分的约束 , 我们同样得编写⼀个独⽴的 m ⽂件任⽼存⾮线性约束条件 :
function [C, Ceq]=nonlfun(x)
C=[非线性不等式约束1;
。。。
非线性不等式约束p;]
Ceq=[非线性等式约束1;
...
非线性等式约束q]
A.e 最大最小化模型
<1>模型的一般模型
在博弈论中,我们常常遇到这样的问题:在最不利的条件下,寻求最有利的策略。在实际问题也有许多求最大值的最小化问题,例如急救中心选址问题就是要规划其到所有地点最大距离的最小值,在投资规划中要确定最大风险的最低限度等。为此对每个
x
∈
R
n
x\in R^n
x∈Rn,我们先求各目标值
f
i
(
x
)
f_i(x)
fi(x)的最大值,然后再求这些最大值中的最小值。
最大最小化问题的一般数学模型:
<2>模型求解函数
[x,fval]=fminmax(@Fun,x0,A,b,Aeq,beq,lb,ub,@nolfun,option)
- Fun是一个函数向量。
function f=Fun(x)
f=zeors)m,1;
f(1)=...
f(2)=...
..._
A.f 多目标规划
若⼀个规划问题中有多个 ⽬标,例如企业在保证利润⼤时也要保证⽣产时产⽣的污染少 这种情况下我们 可以对 多 ⽬标 函数进⾏ 加权组合, 使 问题变为单⽬标规划 , 然后再利⽤之前学的知识进⾏求解。
注意:
1 要先将多个⽬标函数统⼀ 为最⼤化或⼩化问题后才可以进⾏ 加权组合
2 如果⽬标函数的量纲 不 相同 , 则 需要对其进⾏标准化 后再进⾏加权, 标准化的⽅法 ⼀般是⽤ ⽬标 函数除以某⼀个常量, 该常量是这个⽬标函数的某个取值, 具体取何值可根据 经验确定
3 对多 ⽬标函数进⾏加权 求和时, 权重需要由该问题领域的专家给定 , 在实际建模 ⽐赛 中, 若 ⽆特殊说明, 我们令权重相同 。