现代优化算法

现代优化算法属于启发式算法,包括:禁忌搜索、模拟退火、遗传算法、人工神经网络。它们都有一个共同的目标——求NP难组合优化问题的全局最优解。

1. 模拟退火算法

1.1 物理学中的退火过程
1.1.1 温度T下的状态转移
用粒子的能量定义材料的状态,Metropolis算法用一个简单的数学模型描述了退火过程。假设材料在状态i之下的能量为E(i),那么材料在温度T时从状态i进入了状态j遵循如下规律:

  • 如果 E ( j ) ⩽ E ( i ) E(j)\leqslant E(i) E(j)E(i),则接受该状态被装换。
  • 如果 E ( j ) > E ( i ) E(j)>E(i) E(j)>E(i),则状态转换以如下概率被接受 e E ( i ) − E ( j ) K T e^{\frac{E(i)-E(j)}{KT}} eKTE(i)E(j)式中,K为玻尔兹曼常数;T为材料温度。

1.1.2 温度T下平衡后的状态分布
在某一特定温度下,进行了充分的转换后,材料达到热平衡状态。此时材料处于状态i的概率满足玻尔兹曼分布 P T ( X = i ) = e − E ( i ) K T ∑ j ∈ S e − E ( j ) K T P_T(X=i)=\cfrac{e^{-\frac{E(i)}{KT}}}{\mathop{\sum}\limits_{j\in S}e^{-\frac{E(j)}{KT}}} PT(X=i)=jSeKTE(j)eKTE(i)式中,X为材料当前状态的随机变量;S为状态空间集合。有 lim ⁡ T → ∞ e − E ( i ) K T ∑ j ∈ S e − E ( j ) K T = 1 ∣ S ∣ \lim_{T\to\infty}\cfrac{e^{-\frac{E(i)}{KT}}}{\mathop{\sum}\limits_{j\in S}e^{-\frac{E(j)}{KT}}}=\cfrac{1}{|S|} TlimjSeKTE(j)eKTE(i)=S1式中,|S|为集合S中状态的数量。这表明所有状态在高温下具有相同的概率。当温度下降时 lim ⁡ T → 0 e − E ( i ) − E min ⁡ K T ∑ j ∈ S e − E ( j ) − E min ⁡ K T = { 1 ∣ S min ⁡ ∣ ,   i ∈ S min ⁡ 0 , 其 他 \lim_{T\to0}\cfrac{e^{-\frac{E(i)-E_{\min}}{KT}}}{\mathop{\sum}\limits_{j\in S}e^{-\frac{E(j)-E_{\min}}{KT}}}=\begin{cases}\cfrac{1}{|S_{\min}|},\ i\in S_{\min} \\\\ 0, 其他\end{cases} T0limjSeKTE(j)EmineKTE(i)Emin=Smin1, iSmin0,式中, E min ⁡ = min ⁡ j ∈ S E ( j ) E_{\min}=\mathop{\min}\limits_{j\in S}E(j) Emin=jSminE(j) S min ⁡ = { i ∣ E ( i ) = E min ⁡ } S_{\min}=\left\{i|E(i)=E_{\min}\right\} Smin={iE(i)=Emin}。上式表明当温度降至很低时,材料会以很大概率进入最小能量状态。

1.2 模拟退火寻找优化问题的最小值
1.2.1 优化问题模型
考虑一个组合优化问题:优化函数 f : x ∈ R + f:x\in \bm{R}^+ f:xR+,其中 x ∈ S x\in S xS,它表示优化问题的一个可行解, R + = { y ∣ y ∈ R , y ⩾ 0 } \bm{R}^+=\left\{y|y\in \bm{R},y\geqslant0\right\} R+={yyR,y0},S表示函数的定义域。 N ( x ) ⊆ S N(x)\subseteq S N(x)S表示x的一个邻域集合。

1.2.2 优化问题的求解过程
首先给定一个初始温度 T 0 T_0 T0和该优化问题的一个初始解x(0),并由x(0)生成下一个解 x ′ ∈ N [ x ( 0 ) ] x'\in N[x(0)] xN[x(0)],是否接受 x ′ x' x作为一个新解x(1)依赖于如下概率 P ( x ( 0 ) → x ′ ) = { 1 ,   f ( x ′ ) < f ( x ( 0 ) ) e f ( x ′ ) − f ( x ( 0 ) ) T 0 ,   其 他 P(x(0)\to x')=\begin{cases}1,\ f(x')<f(x(0))\\e^{\frac{f(x')-f(x(0))}{T_0}},\ 其他\end{cases} P(x(0)x)={1, f(x)<f(x(0))eT0f(x)f(x(0)), 于是,对于某一个温度 T i T_i Ti和该优化问题的一个解x(k),可以生成 x ′ x' x。接受 x ′ x' x作为下一个新解x(k+1)的概率为 P ( x ( k ) → x ′ ) = { 1 ,   f ( x ′ ) < f ( x ( k ) ) e f ( x ′ ) − f ( x ( k ) ) T i ,   其 他 P(x(k)\to x')=\begin{cases}1,\ f(x')<f(x(k))\\e^{\frac{f(x')-f(x(k))}{T_i}},\ 其他\end{cases} P(x(k)x)={1, f(x)<f(x(k))eTif(x)f(x(k)), 在温度 T i T_i Ti下,经过多次转移后,降低温度,得到 T i + 1 < T i T_{i+1}<T_i Ti+1<Ti。在 T i + 1 T_{i+1} Ti+1下重复上述过程。因此整个优化过程就是不断寻找新解和缓慢降温的交替过程

1.2.3 平衡后的状态分布
在每个 T i T_i Ti下,所得到的一个新状态x(k+1)完全依赖于前一个状态x(k),因此这是一个马尔科夫过程。使用马尔科夫过程对上述模拟退火的步骤进行分析,结果表明从任何一个状态x(k)生成 x ′ x' x的概率,在 N [ x ( k ) ] N[x(k)] N[x(k)]中使均匀分布的,且新状态 x ′ x' x被接受的概率满足上述公式,那么经过有限次的转换,在温度 T i T_i Ti下的平衡态 x i x_i xi的分布由下式给出 P i ( T i ) = e − f ( x i ) T i ∑ j ∈ S e − f ( x j ) T i P_i(T_i)=\cfrac{e^{-\frac{f(x_i)}{T_i}}}{\mathop{\sum}\limits_{j\in S}e^{-\frac{f(x_j)}{T_i}}} Pi(Ti)=jSeTif(xj)eTif(xi)当温度T降为0时, x i x_i xi的分布为 P i ∗ = { 1 ∣ S min ⁡ ∣ ,   x i ∈ S min ⁡ 0 , 其 他 P_i^*=\begin{cases}\cfrac{1}{|S_{\min}|},\ x_i\in S_{\min} \\ 0, 其他\end{cases} Pi=Smin1, xiSmin0,其中 ∑ x i ∈ S min ⁡ P i ∗ = 1 \mathop{\sum}\limits_{x_i\in S_{\min}}P_i^*=1 xiSminPi=1。表明如果温度下降十分缓慢,在每个温度都有足够多次的状态转移,使之在每一个温度下达到热平衡,则全局最优解将以概率1倍找到。因此可以说模拟退火算法可以找到最优解。

1.2.4 模拟退火算法要注意的问题

  • 理论上,降温过程要足够缓慢,使得在每一温度下达到热平衡。若降温速度过快,很可能得不到全局最优解。实际使用中要综合考虑解的性能和算法速度,在两者间折中。
  • 要确定在每一温度下状态转换的结束准则。实际操作中可考虑当连续m次的转换过程没有使状态发生变化时结束该温度下的状态转换。最终的温度可提前定为一个较小的值 T c T_c Tc,或连续几个温度下转换过程没有使状态发生变化算法就结束。
  • 选择初始温度和确定某个可行解的邻域的方法也要恰当。

1.3 模拟退火算法求解旅行商问题

  1. 确定解空间S:S包括固定起点和终点的所有循环排列集合。可先用蒙特克罗方法求得一个较好地初始解。
  2. 确定目标函数:目标函数为总路径长度。
  3. 产生新解的规则:利用改良圈算法每次修改2条边或3条边得到新解(新路径)。
  4. 计算新解与原解的目标函数之差 Δ f = f ( 新 ) − f ( 原 ) \Delta f=f(新)-f(原) Δf=f()f(),若 Δ f < 0 \Delta f<0 Δf<0则接受新解,若 Δ f ⩾ 0 \Delta f\geqslant0 Δf0则以概率 exp ⁡ ( − Δ f / T ) \exp(-\Delta f/T) exp(Δf/T)接受新解, T 0 = 1 T_0=1 T0=1
  5. 降温:利用选定的降温系数 α \alpha α进行降温,取新的温度为 α T \alpha T αT,可选 α = 0.999 \alpha=0.999 α=0.999。简单起见,每产生一个新解就降一次温。
  6. 确定结束条件:选定终止温度 e = 1 0 − 30 e=10^{-30} e=1030,若 T < e T<e T<e,则算法结束,输出当前状态。

2. 遗传算法

2.1 遗传算法简介
遗传算法是一种基于自然选择原理和自然遗传机制的搜索算法,其实质是通过群体搜索技术,根据适者生存的原则逐代优化,最终得到最优解或准最优解。它必须做以下操作:初始群体的产生、求每一个个体的适应度、根据适者生存的原则选择优良个体、被选出的优良个体两两配对,通过随机交叉并随机变异产生下一代群体,按此方法使群体逐代进化,直到满足进化终止条件。其实现方法如下:

  1. 根据具体问题确定可行解域,确定一种编码方法,能用数值串或字符串表示可行解域的每一解。
  2. 对每一解应有一个度量好坏的依据,用适应度函数表示,一般由目标函数构成。
  3. 确定进化参数群体规模M、交叉概率 p c p_c pc、变异概率 p m p_m pm、进化终止条件。

为便于计算,一般每一代群体的个体数目都取相等。群体规模越大,越容易找到最优解,但计算时间也相应地增加。

2.2 遗传算法求解旅行商问题

  1. 设定算法参数:种群大小M;最大代数G;交叉率 p c p_c pc;变异率 p m p_m pm
  2. 指定编码策略:对于有N个地点的旅行商问题,产生N个0-1的随机数排列作为问题的编码(基因序列、染色体),随机数的升序编号即为地点编号
  3. 选取初始种群:可利用改良圈算法求得一个较好地初始种群,共有M个初始种群
  4. 设置目标函数:选取总路径长度为目标函数
  5. 交叉操作:使用单点交叉,即对两个父代个体 f 1 f_1 f1 f 2 f_2 f2,随机选择第t个基因处为交叉点,一个父代的t前基因列与另一个父代的t后基因列连接生成子代个体。当交叉率为1时,共产生M个子代
  6. 变异操作:按照给定的变异率,对选定的变异个体,随机选择3个整数u,v,w,把u,v之间的基因段插到w后面
  7. 选择:将父代种群、子代种群、变异种群中目标函数最小的M个个体作为下一代,继续进化直至G代进化完成

2.3 改进的遗传算法
在传统的遗传算法结构中,变异操作在交叉操作基础上进行。改进后的遗传算法将变异操作从交叉操作中分离出来,使其成为独立的并列与交叉的寻优操作。在交叉操作中,以“门当户对”原则进行个体的配对,利用混沌序列确定交叉点,实行强度最弱的单点交叉,以确保算法收敛精度,削弱和避免寻优抖振问题;在变异操作中,利用混沌序列对染色体中多个基因进行变异,以避免算法早熟。

2.3.1 改进的交叉操作
以“门当户对”原则,对父代个体进行配对,即父代中目标函数值小的与小的配对,大的与大的配对。然后利用混沌序列确定交叉点的位置,最后对确定的交叉项进行交叉。

2.3.2 改进的变异操作
根据给定的变异率,随机选取两个在基因序列中的整数,对这两个数对应位置的基因进行变异,变异时利用混沌序列把这两个位置的基因换成新的基因值,得到新的基因序列。

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值