matlab最优化问题
注:本文为阅读《精通matlab最优化计算 第3版》笔记相关记录,具体的算法介绍及代码请参考原文
1、无约束一维极值问题
无约束一维极值问题可简单表述为:
m
i
n
f
(
x
)
,
x
∈
R
,
或
m
i
n
f
(
x
)
,
x
∈
[
x
1
,
x
2
]
min f(x),x∈R , 或min f(x) ,x ∈ [x1,x2]
minf(x),x∈R,或minf(x),x∈[x1,x2]
本章讨论得优化问题是在以下两种情况:(即局部极值点)
(1)在自变量的范围为整个实数区间的前提下求函数的任意一个极值;
(2)在自变量的范围为给定区间的前提下求函数的任意一个极值。
1.1 进退法
1.2 黄金分割法
1.3 斐波那契法
1.4 牛顿法
基本牛顿法
全局牛顿法
1.5 割线法
1.6 抛物线法
1.7 三插值法
1.8 可接受搜索法
Goldstein法
Wolfe-Powell法
1.9 matlab工具箱
fminbnd
函数
(1) x = fininbnd(fun,xl,x2)
,求函数在(x1,x2)上的极小值对应的自变量
(2) x= fminbnd(fun,x1,x2,options)
,options字段说明:
fminbnd函数存在的问题:
(1)只能求连续单变量函数的极值
(2)如果给定区间有多个极值点,只能求一个,且不一定是最小的一个
(3)一个显著缺陷是极值点是区间端点,则收敛速度会比较慢
改进的fminbnd
函数
%% //fminv函数
function fminv(f,x1,x2)
r1 = fminbnd(f,x1,x2);
if abs(r1-x1)<0.001 || abs(r1-x2)<0.001
disp(r1);
return;
else
subfminv(f,x1,x2);
end
end
%% //subfminv函数
function subfminv(f,x1,x2)
if abs(r1-x1)<0.001 || abs(r1-x2)<0.001
return;
else
disp(r1);
subfminv(f,x1,r1);
subfminv(f,r1,x2);
return;
end
end
fminsearch
函数
主要功能是求多变量极值问题,也可以用来求解单变量极值。
(1)[x,fval,exitflag,output]=fminsearch(fun,startpoint)
,以startpoint为起始点搜索
(2)x= fminsearch(fun,x1,x2,options)
,添加选项字段
2、无约束多维极值问题
无约束多维极值问题一般表达式为:
m
i
n
f
(
x
)
,
x
∈
R
n
min f(x),x∈R^n
minf(x),x∈Rn其中
x
x
x为向量,
f
(
x
)
f(x)
f(x)是标量。无约束多维极值一般问题是求全局最小点,然而大多数算法无法做到这点,即只能找到局部最优。 对于实际问题,有时局部最优就是全局最优,多半靠经验判断结果的可行性。
2.1 直接法
模式搜索法(Hooke-Jeeves法)
Rosenbrock法
单纯形搜索法
Powell法
2.2 使用导数计算的间接法
需要用到目标函数的导数(多元函数的梯度),有的算法甚至还用到多元函数的雅可比矩阵。
最速下降法
共轭梯度法
牛顿法
修正牛顿法
拟牛顿法
1.DFP法
2.BFGS法
信赖域法
显式最速下降法
2.3 matlab工具箱
fminsearch
函数
可用来求解无约束多变量极值问题
(1)[x,fval,exitflag,output]=fminsearch(fun,startpoint)
,以startpoint为起始点搜索
(2)x= fminsearch(fun,x1,x2,options)
,添加选项字段
fminunc
函数
也能求解无约束极值问题,调用格式为:
(1)x=fminunc(fun,x0,option)
,表示求从x0出发的极小点
(2)x=fminunc(problem)
,所需求解的极值问题通过problem结构指定,其字段如下:
(3)[x,fval,exitflag,output,grad,hessian]=fminunc( ... )
,返回函数在极小值x点处的梯度和海森矩阵
fx=@(x)-1/((x(1)-2)^2+3)-1/((x{2)+1)^2*2-5);
>> pro.objective = fx; %此处用problem结构求极值
>> pro.x0=[0 0];
>> pro.solver='fminunc'
>> pro.options = optimset('Display', 'iter')
>> [xv,fv,exitflag,output,grad,hess]= fminunc(pro)
fminmax
函数
是解决如下一类优化问题的函数:
min
x
max
i
F
i
(
x
)
,
s.t.
{
c
(
x
)
⩽
0
c
e
q
(
x
)
=
0
A
x
⩽
b
Aeq
⋅
x
=
b
e
q
l
b
⩽
x
⩽
u
b
\min _{\mathbf{x}} \max _{i} F_{i}(\boldsymbol{x}), \quad \text { s.t. }\left\{\begin{array}{l} c(\boldsymbol{x}) \leqslant 0 \\ c e q(\boldsymbol{x})=0 \\ A \boldsymbol{x} \leqslant \mathbf{b} \\ \text { Aeq} \cdot \boldsymbol{x}=\mathbf{b e q} \\ \mathrm{lb} \leqslant \boldsymbol{x} \leqslant \mathrm{ub} \end{array}\right.
xminimaxFi(x), s.t. ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧c(x)⩽0ceq(x)=0Ax⩽b Aeq⋅x=beqlb⩽x⩽ub
对每个定义域中的向量x,向量函数F(x)都存在一个值最大的分量,但是随着向量x取值的不同,值最大的分量也会发生变化,当把分量的值记录下来,找到最小值,就是fminimax
的任务。调用格式为:
(1)x=fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,option)
(2)x=fminimax(problem)
:优化问题由proble字段指定
3、约束优化问题
一般约束优化问题的数学模型为:
min
f
(
x
)
,
s.t.
{
h
i
(
x
)
=
0
,
i
=
1
,
2
,
⋯
,
k
g
j
(
x
)
⩾
0
,
j
=
1
,
2
,
⋯
,
m
\min f(x), \text { s.t. }\left\{\begin{array}{l} h_{i}(x)=0, i=1,2, \cdots, k \\ g_{j}(x) \geqslant 0, j=1,2, \cdots, m \end{array}\right.
minf(x), s.t. {hi(x)=0,i=1,2,⋯,kgj(x)⩾0,j=1,2,⋯,m其中
f
(
x
)
f(x)
f(x)是目标函数,
h
i
(
x
)
h_i(x)
hi(x)为等式约束条件,
g
i
(
x
)
g_i(x)
gi(x)为不等式约束条件。
3.1 Rosen梯度投影法
3.2 罚函数法
1.外点罚函数法
2.内点罚函数法
3.混合罚函数法
4.乘子法
3.3 坐标轮换法
3.4 复合形法
3.5 matlab工具箱
fmincon
函数
用于求解约束优化问题,其调用格式为:
(1)x=fmincon(fun,x0,A,b,Aeq,beq)
,约束条件为
A
x
⩽
b
,
Aeq
⋅
x
=
b
e
q
,
l
b
⩽
x
⩽
u
b
A \boldsymbol{x} \leqslant \mathbf{b},\text { Aeq} \cdot \boldsymbol{x}=\mathbf{b e q} ,\mathrm{lb} \leqslant \boldsymbol{x} \leqslant \mathrm{ub}
Ax⩽b, Aeq⋅x=beq,lb⩽x⩽ub
(2)x=fmincon(fun,x0,A,b,Aeq,beq,nonlcon)
,nonlcon表示目标函数的非线性约束条件
例子:
求解
min
f
(
s
,
t
)
=
s
4
−
4
s
−
8
t
+
15
,
s.t.
{
9
−
s
2
−
t
2
⩽
0
2
s
+
3
t
⩽
2
t
−
s
⩽
5
\min f(s, t)=s^{4}-4 s-8 t+15, \text { s.t. }\left\{\begin{array}{l} 9-s^{2}-t^{2} \leqslant 0 \\ 2 s+3 t \leqslant 2 \\ t-s \leqslant 5 \end{array}\right.
minf(s,t)=s4−4s−8t+15, s.t. ⎩⎨⎧9−s2−t2⩽02s+3t⩽2t−s⩽5,初始点取(s,t)=(1,2)
其线性条件有:
A
=
[
2
3
1
−
1
]
,
b
=
[
2
5
]
\boldsymbol{A}=\left[\begin{array}{cc} 2 & 3 \\ 1 & -1 \end{array}\right], \boldsymbol{b}=\left[\begin{array}{l} 2 \\ 5 \end{array}\right]
A=[213−1],b=[25],
建立目标函数:
function y=OptimFun(x)
y=x(1)^4-4*x(1)-8*x(2)+15;
end
建立其非线性约束函数:
function [c,ceq]=ConFun(x)
c = 9-x(1)^2-x(2)^2;
ceq=[];
end
执行:
>>x=fmincon(@OptimFun,[1 2],A,b,[],[],[],[],@ConFun)
4、非线性最小二乘优化问题
也叫无约束极小平方和问题,是如下无约束极小问题:
min
S
(
x
)
\min S(x)
minS(x)其中
S
(
x
)
=
f
(
x
)
T
f
(
x
)
=
∑
i
=
1
m
f
i
2
(
x
)
S(x)=f(x)^{T} f(x)=\sum_{i=1}^{m} f_{i}^{2}(x)
S(x)=f(x)Tf(x)=∑i=1mfi2(x)
如果
f
(
x
)
=
C
x
+
d
f(x)=Cx+d
f(x)=Cx+d是线性函数,则该问题变为线性最小二乘问题。对于线性最小二乘问题处理起来较简单,matlab中有lsqnonlin
函数求解线性最小二乘问题。
可以用前面的无约束最优化方法求解非线性最小二乘优化,但由于其特殊性,因此有独有的解决办法。
4.1 G-N(高斯牛顿法)法
4.2 修正G-N法
4.3 L-M法
4.4 matlab工具箱
lsqnonlin
函数
用来求解非线性最小二乘优化问题,目标函数是平方和的形式。调用格式:
(1) x= lsqnonlin(fun, x0,lb, ub, options)
此格式中的 options 是优化选项结构;
(2) x= lsquonlin(problem)
, 此格式的优化问题由 problem 结构指定
(3)[x, resnorm,residual,exitflag,output,lambda,jacobian]= sqnonlin(...)
,返回值resnorm是残差的平方,即
f
2
(
x
)
f^2(x)
f2(x);residual是残差,即
f
(
x
)
f(x)
f(x);lambda是最优处拉格朗日乘子;jacobian雅各比矩阵
4.5 小结
本质上, 本章中主要的两种算法 G-N 法和 L-M 法都是来源于无约束优化算法中的牛顿法, 因此它们也继承了牛顿法的优点和缺点, 在实际应用过程中要注意其缺点, 即最优解和初始点有比较大的关系。
5、线性规划
是研究在一组自变量约束条件下,求线性函数的最小或者最大值。数学模型有三要素:
(1)与自变量有关的若干个线性约束条件;
(2)自变量的取值限制;
(3)关于自变量的线性目标函数值。
线性规划的一般形式为:
min
(
max
)
f
=
c
x
,
s.t.
{
A
x
⩾
b
(
⩽
b
)
x
⩾
0
\min (\max ) f=\mathrm{c} x, \quad \text { s.t. }\left\{\begin{array}{l} \boldsymbol{A} x \geqslant \mathbf{b}(\leqslant \mathbf{b}) \\ x \geqslant 0 \end{array}\right.
min(max)f=cx, s.t. {Ax⩾b(⩽b)x⩾0后文算法只考虑最小值问题,对于最大值可以先转化为最小值问题再求解。
5.1 单纯形法
5.2 修正单纯形法
5.3 大M法
5.4 变量有界单纯形法
5.5 matlab工具箱
linprog
函数
用来求解如下一类线性规划问题:
min
x
f
T
x
,
s.t.
{
A
⋅
x
⩽
b
A
e
q
⋅
x
=
b
e
q
l
b
⩽
x
⩽
u
b
\min _{x} f^{T} x, \text { s.t. }\left\{\begin{array}{l} \boldsymbol{A} \cdot x \leqslant \mathbf{b} \\ \boldsymbol{A e q} \cdot x=\mathbf{b e q} \\ \mathrm{lb} \leqslant x \leqslant \mathrm{ub} \end{array}\right.
xminfTx, s.t. ⎩⎨⎧A⋅x⩽bAeq⋅x=beqlb⩽x⩽ub其中
A
A
A 表示不等式约束的系数矩阵,
A
e
q
Aeq
Aeq 表示等式约束的系数矩阵,
b
\mathbf{b}
b表示不等式约束的 常向量,
b
e
q
\mathbf{beq}
beq 表示等式约束的常向量,而
l
b
\mathrm{lb}
lb 、
u
b
\mathrm{ub}
ub 则表示自变量的上下范围。调用格式:
(1) x=linprog(f, A, b,Aeq, beq, lb, ub, x0 , options )
: 此格式通过 options 选项来指定优化参数。
(2) x=linprog( problem)
:此格式的线性规划问题通过结构 problem 来指定, 此格式是
例子:
求解下面的线性规划:
min
f
=
−
4
x
1
−
x
2
,
s.t.
{
−
x
1
+
2
x
2
⩽
4
2
x
1
+
3
x
2
⩽
12
x
1
−
x
2
⩽
3
x
1
,
x
2
⩾
0
\min f=-4 x_{1}-x_{2}, \text { s.t. }\left\{\begin{array}{l} -x_{1}+2 x_{2} \leqslant 4 \\ 2 x_{1}+3 x_{2} \leqslant 12 \\ x_{1}-x_{2} \leqslant 3 \\ x_{1}, x_{2} \geqslant 0 \end{array}\right.
minf=−4x1−x2, s.t. ⎩⎪⎪⎨⎪⎪⎧−x1+2x2⩽42x1+3x2⩽12x1−x2⩽3x1,x2⩾0
>>f=[-4 ;-1]
>>A=[-1 2 ; 2 3 ; 1 -1]
>>b=[4;12;3]
>>[x, fval, exitflag, output,lamda]=lnprog(f, A, b,[],[], zros(2,1))
6、整数规划
是线性规划的特殊形式,其决策量只取整数。在实际问题中,只有取整数才有意义。数学模型可以表示为:
max
(
或 min
)
f
(
x
)
=
c
x
,
s.t.
{
A
x
⩽
b
x
⩾
0
,
x
i
为整数
\max (\text { 或 min }) f(x)=\mathbf{c} x, \text { s.t. }\left\{\begin{array}{l} \boldsymbol{A} x \leqslant \mathbf{b} \\ x \geqslant 0 \end{array}, x_{i}\right. \text { 为整数 }
max( 或 min )f(x)=cx, s.t. {Ax⩽bx⩾0,xi 为整数
6.1 割平面法
最经典的算法为Gomory割平面法
6.2 分支定界法
6.3 0-1规划
6.4 matlab工具箱
bintprog
函数
用来求解0-1整数规划,其优化模型为:
min
f
T
x
,
s.t.
{
A
x
⩽
b
A
e
q
⋅
x
=
b
e
q
x
i
=
0
或
1
\min f^{T} x, \quad \text { s.t. }\left\{\begin{array}{l} \boldsymbol{A} x \leqslant \mathbf{b} \\ \boldsymbol{A} e q \cdot x=\mathbf{b e q} \\ x_{i}=0 \text { 或 } 1 \end{array}\right.
minfTx, s.t. ⎩⎨⎧Ax⩽bAeq⋅x=beqxi=0 或 1其中
f
,
b
,
b
e
q
\boldsymbol{f}, \mathbf{b}, \mathbf{b e q}
f,b,beq 为向量,
A
\boldsymbol{A}
A 和
A
e
q
\boldsymbol{A}eq
Aeq 为矩阵, 而最优解为 0,1 组合而成的向量。调用格式为:
(1) x= bintprog(f,A,b,Aeq,beq)
:此格式求解带不等式约束条件和等式约束条件的 0-1 整数规划
(2) x=bintprog(f, A, b, Aeq,beq, x0)
:此格式求解带不等式约束条件和等式约束条件的 0-1 整数规划, 并且提供初始值 x0 ;
(3) x= bintprog(f,A,b,Aeq,beq, x0, options)
: 此格式中的 options 提供了优化的参数选项;
6.5 小结
整数规划在实际中的应用主要包括以下几个方面 :
- 运作问题, 包括货物分配、生产调度、机器排序等;
- 计划问题, 包括资金预算、设施选址、证券组合分析等;
- 设计问题, 包括生产线设计、网络设计等。
对于这些实际问题的研究, 整数规划起着非常重要的作用, 本章简要介绍了求解整数规划的两种主要算法, 它们都是通过缩小问题的可行域来求得问题的整数解。
7、二次规划
二次规划模型描述为:
min
1
2
x
T
H
x
+
c
T
x
,
s.t.
{
A
e
q
⋅
x
=
b
e
q
A
x
⩾
b
\min \frac{1}{2} x^{T} H x+c^{T} x, \quad \text { s.t. }\left\{\begin{array}{l} A e q \cdot x=\mathbf{b e q} \\ A x \geqslant \mathbf{b} \end{array}\right.
min21xTHx+cTx, s.t. {Aeq⋅x=beqAx⩾b其中
H
\boldsymbol{H}
H 为
n
×
n
n \times n
n×n 的对称矩阵,
A
e
q
\boldsymbol{Aeq}
Aeq和
A
\boldsymbol A
A 为矩阵,
x
,
b
e
q
,
b
\boldsymbol{x}, \mathbf{b e q}, \mathbf{b}
x,beq,b 为列向量。如果
H
\boldsymbol{H}
H 为半正定矩阵, 则称此规划为凸二次规划, 否则为非凸规划。对于非凸规划, 由于存在比较多的驻点, 求解比较困难, 所以本章只讨论凸二次规划的求解方法。
凸二次规划中比较简单的情况是等式约束凸二次规划, 此时可以用拉格朗日法求解, 对于存在不等式约束的凸二次规划, 其基本思想是把不等式约束转化为等式约束再求解。
7.1 拉格朗日法
7.2 起作用集算法
7.3 路径跟踪法
7.4 matlab工具箱
quadprog
函数
可以用来求解如下所示的标准二次规划问题:
(1) x = quadprog(H,f,A,b,Aeq,beq,lb,ub)
:求解标准形式的二次规划问题, 并返回极值点;
(2) x = quadprog(H,f,A,b,Aeq,beq,lb,ub, x0)
:求解指定了初始优化点 x 0 的二次规划问题;
例子:
min
z
=
3
x
1
2
+
2
x
2
2
−
4
x
1
x
2
+
3
x
1
−
4
x
2
,
s.t.
{
2
x
1
+
x
2
⩽
4
−
x
1
+
2
x
2
⩽
4
x
1
⩾
0
,
x
2
⩾
0
\min z=3 x_{1}^{2}+2 x_{2}^{2}-4 x_{1} x_{2}+3 x_{1}-4 x_{2}, \quad \text { s.t. }\left\{\begin{array}{l} 2 x_{1}+x_{2} \leqslant 4 \\ -x_{1}+2 x_{2} \leqslant 4 \\ x_{1} \geqslant 0, x_{2} \geqslant 0 \end{array}\right.
minz=3x12+2x22−4x1x2+3x1−4x2, s.t. ⎩⎨⎧2x1+x2⩽4−x1+2x2⩽4x1⩾0,x2⩾0
解:由题意有
H
=
[
6
−
4
−
4
4
]
,
f
=
[
3
−
4
]
A
=
[
2
1
−
1
2
]
,
b
=
[
4
4
]
,
l
=
[
0
0
]
\boldsymbol{H}=\left[\begin{array}{cc} 6 & -4 \\ -4 & 4 \end{array}\right], \boldsymbol{f}=\left[\begin{array}{c} 3 \\ -4 \end{array}\right] \boldsymbol{A}=\left[\begin{array}{cc} 2 & 1 \\ -1 & 2 \end{array}\right], \boldsymbol{b}=\left[\begin{array}{l} 4 \\ 4 \end{array}\right], \boldsymbol{l}=\left[\begin{array}{l} 0 \\ 0 \end{array}\right]
H=[6−4−44],f=[3−4]A=[2−112],b=[44],l=[00]
>>H=[6 -4;-4 4]
>>f=[3;-4]
>>A=[2 1;-1 2]
>>b=[4;4]
>>lb=[0;0]
>>[x,fval]=quadprog(H,f,A,b,[],[],lb)
7.5 小结
(1) 由于严格凸二次规划的特性, 其局部解都是全局解, 因此本章的算法求得的极小值同时也 是目标函数的最小值;
(2) 起作用集算法在初始点是可行点的情况下, 总能通过有限步迭代得到最优解;
(3) 如果初始点不是可行点, 起作用集算法也有可能得到最优解。
8、粒子群优化算法
概述: PSO是一种进化计算技术,源于对鸟群捕食行为的研究。所有的粒子都有被优化的函数决定的适应值(fittness)目标值
,每个粒子还有一个粒子速度和位置矢量决定下一步迭代的方向。所有粒子除了直到自己发现的最好位置(pbest),还知道整个群体发现的最好位置(gbest),粒子通过自己的经验和同伴经验决定下一步运动。
迭代公式:
v
i
,
j
(
t
+
1
)
=
w
v
i
,
j
(
t
)
+
c
1
r
1
[
p
i
,
j
−
x
i
,
j
(
t
)
]
+
c
2
r
2
[
p
g
,
j
−
x
i
,
j
(
t
)
]
x
i
,
j
(
t
+
1
)
=
x
i
,
j
(
t
)
+
v
i
,
j
(
t
+
1
)
,
j
=
1
,
2
,
⋯
,
d
\begin{array}{l} v_{i, j}(t+1)=w v_{i, j}(t)+c_{1} r_{1}\left[p_{i, j}-x_{i, j}(t)\right]+c_{2} r_{2}\left[p_{g, j}-x_{i, j}(t)\right] \\ x_{i, j}(t+1)=x_{i, j}(t)+v_{i, j}(t+1), j=1,2, \cdots, d \end{array}
vi,j(t+1)=wvi,j(t)+c1r1[pi,j−xi,j(t)]+c2r2[pg,j−xi,j(t)]xi,j(t+1)=xi,j(t)+vi,j(t+1),j=1,2,⋯,d其中
w
w
w为惯性权重,
c
1
,
c
2
c_1,c_2
c1,c2为正的学习因子,
r
1
,
r
2
r_1,r_2
r1,r2为0-1之间的随机数;
p
i
,
j
p_{i,j}
pi,j表示第j维中,粒子i的最优解,即个体极值pbest;
p
g
,
j
p_{g,j}
pg,j表示第j维中,整个种群目前找到的最优解,即全局最优gbest
8.1 基本粒子群算法
算法步骤:
(1) 随机初始化种群中各微粒的位置和速度;
(2) 评价每个微粒的适应度, 将当前各微粒的位置和适应值存储在各微粒的 pbest 中, 将 所有 pbest 中适应值最优个体的位置和适应值存储于 gbest 中;
(3) 用下式更新粒子的速度和位移:
v
i
,
j
(
t
+
1
)
=
w
v
i
,
j
(
t
)
+
c
1
r
1
[
p
i
,
j
−
x
i
,
j
(
t
)
]
+
c
2
r
2
[
p
g
,
j
−
x
i
,
j
(
t
)
]
x
i
,
j
(
t
+
1
)
=
x
i
,
j
(
t
)
+
v
i
,
j
(
t
+
1
)
,
j
=
1
,
2
,
⋯
,
d
\begin{array}{l} v_{i, j}(t+1)=w v_{i, j}(t)+c_{1} r_{1}\left[p_{i, j}-x_{i, j}(t)\right]+c_{2} r_{2}\left[p_{g, j}-x_{i, j}(t)\right] \\ x_{i, j}(t+1)=x_{i, j}(t)+v_{i, j}(t+1), j=1,2, \cdots, d \end{array}
vi,j(t+1)=wvi,j(t)+c1r1[pi,j−xi,j(t)]+c2r2[pg,j−xi,j(t)]xi,j(t+1)=xi,j(t)+vi,j(t+1),j=1,2,⋯,d
(4) 对每个微粒, 将其适应值与其经历过的最好位置作比较, 如果较好, 则将其作为当前 的最好位置;
(5) 比较当前所有 pbest 和 gbest 的值, 更新 gbest;
(6) 若满足停止条件 (通常为预设的运算精度或迭代次数), 搜索停止, 输出结果, 否则返 回(3)继续搜索。
8.2 带压缩因子的粒子群算法
8.3 权重改进的粒子群算法
线性递减权重法
自适应权重法
随机权重法
8.4 变学习因子的粒子群算法
同步变化的学习因子
异步变化的学习因子
8.5 二阶粒子群算法
8.6 二阶震荡粒子群算法
8.7 混沌粒子群算法
8.8 混合粒子群算法
基于自然选择的算法
基于杂交的算法
基于模拟退火的算法
9、遗传算法
概述: 基于自然选择的生物进化,是一种模仿生物进化过程的随机方法。首先对一个物种基因进行编码工作,简化二进制编码,每一代中根据个体适应度大小选择个体,借助遗传学遗传算子进行组合交叉和变异产生新的种群,这个过程就像自然进化一样,后代更加适应环境,可作为问题近似最优解。为遗传算法包括三个基本操作:选择、交叉、变异。
9.1 基本遗传算法
基本遗传算法的步骤:
(1) 随机产生初始种群, 个体数目一定、每个个体表示为染色体的基因编码;
(2) 用轮盘赌策略确定个体的适应度, 并判断是否符合优化准则, 若符合, 输出最佳个体 及其代表的最优解, 并结束计算, 否则转向(3);
(3) 依据适应度选择再生个体, 适应度高的个体被选中的概率高, 适应度低的个体可能被 淘汰:
(4) 按照一定的交叉概率和交叉方法、生成新的个体;
(5) 按照一定的变异概率和变异方法, 生成新的个体;
(6) 由交叉和变异产生新一代的种群, 返回到(2)
9.2 顺序选择遗传算法
9.3 适值函数标定的遗传算法
9.4 大变异遗传算法
9.5 自适应遗传算法
9.6 双切点交叉遗传算法
9.7 多变异自适应遗传算法
9.8 matlab工具箱
ga
函数
遗传算法求解器,既能求解无约束优化问题,也能求解约束优化问题,而且约束条件可以是非线性的。
(1)X = ga(FITNESSFCN,NVARS,A,b,Aeq,beq,lb,ub)
,其中FITNESSFCN
是目标函数,NVARS
是自变量维度
(2)X = ga(FITNESSFCN,NVARS,A,b,Aeq,beq,lb,ub,NONLCON,options)
,NONLCON
是非线性约束条件,有关option选择相关函数可参考option参数
simulannealbnd
函数
模拟退火算法求解器,只能求解无约束优化问题
(1)X = simulannealbnd(FUN,X0,LB,UB)
(2)X = simulannealbnd(FUN,X0,LB,UB,options)
全局优化工具箱: