模拟退火算法
出自 MBA智库百科(https://wiki.mbalib.com/)
模拟退火算法(Simulate Anneal Arithmetic,SAA)
目录 |
模拟退火算法(Simulate Anneal Arithmetic,SAA)是一种通用概率演算法,用来在一个大的搜寻空间内找寻命题的最优解。模拟退火是S.Kirkpatrick, C.D.Gelatt和M.P.Vecchi在1983年所发明。而V.Černý在1985年也独立发明此演算法。模拟退火算法是解决TSP问题的有效方法之一。
模拟退火来自冶金学的专有名词退火。退火是将材料加热后再经特定速率冷却,目的是增大晶粒的体积,并且减少晶格中的缺陷。材料中的原子原来会停留在使内能有局部最小值的位置,加热使能量变大,原子会离开原来位置,而随机在其他位置中移动。退火冷却时速度较慢,使得原子有较多可能可以找到内能比原先更低的位置。
模拟退火的原理也和金属退火的原理近似:将热力学的理论套用到统计学上,将搜寻空间内每一点想像成空气内的分子;分子的能量,就是它本身的动能;而搜寻空间内的每一点,也像空气分子一样带有“能量”,以表示该点对命题的合适程度。演算法先以搜寻空间内一个任意点作起始:每一步先选择一个“邻居”,然后再计算从现有位置到达“邻居”的概率。
模拟退火算法的模型[1]
模拟退火算法可以分解为解空间、目标函数和初始解三部分。
- 模拟退火的基本思想:
- (1) 初始化:初始温度T(充分大),初始解状态S(是算法迭代的起点), 每个T值的迭代次数L
- (2) 对k=1,……,L做第(3)至第6步:
- (3) 产生新解S′
- (4) 计算增量Δt′=C(S′)-C(S),其中C(S)为评价函数
- (5) 若Δt′<0则接受S′作为新的当前解,否则以概率exp(-Δt′/T)接受S′作为新的当前解.
- (6) 如果满足终止条件则输出当前解作为最优解,结束程序。终止条件通常取为连续若干个新解都没有被接受时终止算法。
- (7) T逐渐减少,且T->0,然后转第2步。
算法对应动态演示图:
- 模拟退火算法新解的产生和接受可分为如下四个步骤:
- 第一步是由一个产生函数从当前解产生一个位于解空间的新解;为便于后续的计算和接受,减少算法耗时,通常选择由当前新解经过简单地变换即可产生新解的方法,如对构成新解的全部或部分元素进行置换、互换等,注意到产生新解的变换方法决定了当前新解的邻域结构,因而对冷却进度表的选取有一定的影响。
- 第二步是计算与新解所对应的目标函数差。因为目标函数差仅由变换部分产生,所以目标函数差的计算最好按增量计算。事实表明,对大多数应用而言,这是计算目标函数差的最快方法。
- 第三步是判断新解是否被接受,判断的依据是一个接受准则,最常用的接受准则是Metropolis准则: 若Δt′<0则接受S′作为新的当前解S,否则以概率exp(-Δt′/T)接受S′作为新的当前解S。
- 第四步是当新解被确定接受时,用新解代替当前解,这只需将当前解中对应于产生新解时的变换部分予以实现,同时修正目标函数值即可。此时,当前解实现了一次迭代。可在此基础上开始下一轮试验。而当新解被判定为舍弃时,则在原当前解的基础上继续下一轮试验。
模拟退火算法与初始值无关,算法求得的解与初始解状态S(是算法迭代的起点)无关;模拟退火算法具有渐近收敛性,已在理论上被证明是一种以概率l 收敛于全局最优解的全局优化算法;模拟退火算法具有并行性。
模拟退火算法的简单应用[1]
作为模拟退火算法应用,讨论货郎担问题(Travelling Salesman Problem,简记为TSP):设有n个城市,用数码(1,…,n)代表。城市i和城市j之间的距离为d(i,j) i, j=1,…,n.TSP问题是要找遍访每个域市恰好一次的一条回路,且其路径总长度为最短.。
求解TSP的模拟退火算法模型可描述如下:
解空间:解空间S是遍访每个城市恰好一次的所有回路,是{1,……,n}的所有循环排列的集合,S中的成员记为,并记wn + 1 = w1。初始解可选为(1,……,n)
目标函数:此时的目标函数即为访问所有城市的路径总长度或称为代价函数:
我们要求此代价函数的最小值。
新解的产生 随机产生1和n之间的两相异数k和m,若k<m,则将
变为:
如果是k>m,则将
变为:
上述变换方法可简单说成是“逆转中间或者逆转两端”。
也可以采用其他的变换方法,有些变换有独特的优越性,有时也将它们交替使用,得到一种更好方法。
代价函数差:设将变换为, 则代价函数差为:
模拟退火算法求解TSP问题的伪程序[1]
根据上述分析,可写出用模拟退火算法求解TSP问题的伪程序:
Procedure TSPSA: begin init-of-T; { T为初始温度} S={1,……,n}; {S为初始值} termination=false; while termination=false begin for i=1 to L do begin generate(S′form S); { 从当前回路S产生新回路S′} Δt:=f(S′))-f(S);{f(S)为路径总长} IF(Δt<0) OR (EXP(-Δt/T)>Random-of-[0,1]) S=S′; IF the-halt-condition-is-TRUE THEN termination=true; End; T_lower; End; End
模拟退火算法的应用很广泛,可以较高的效率求解最大截问题(Max Cut Problem)、0-1背包问题(Zero One Knapsack Problem)、图着色问题(Graph Colouring Problem)、调度问题(Scheduling Problem)等等。
模拟退火算法的参数控制问题[1]
模拟退火算法的应用很广泛,可以求解NP完全问题,但其参数难以控制,其主要问题有以下三点:
(1) 温度T的初始值设置问题。
温度T的初始值设置是影响模拟退火算法全局搜索性能的重要因素之一、初始温度高,则搜索到全局最优解的可能性大,但因此要花费大量的计算时间;反之,则可节约计算时间,但全局搜索性能可能受到影响。实际应用过程中,初始温度一般需要依据实验结果进行若干次调整。
(2) 退火速度问题。
模拟退火算法的全局搜索性能也与退火速度密切相关。一般来说,同一温度下的“充分”搜索(退火)是相当必要的,但这需要计算时间。实际应用中,要针对具体问题的性质和特征设置合理的退火平衡条件。
(3) 温度管理问题。
温度管理问题也是模拟退火算法难以处理的问题之一。实际应用中,由于必须考虑计算复杂度的切实可行性等问题,常采用如下所示的降温方式:
式中k为正的略小于1.00的常数,t为降温的次数。
基于模拟退火算法的证券投资最优组合理论研究[2]
证券投资是在证券市场上购买有价证券,以利息、股息或出售赢利等形式取得利润收益的一项经济活动。证券投资者最关心的是投资收益率的高低及投资风险的大小,投资者在选择投资策略时,总希望收益率大而风险最小,但二者不可能同时满足。初涉股市者往往惧怕风险,不求收益最大而求风险最小确定投资策略使投资风险最小,是投资者最关心的问题。现代证券组合理论是关于在收益不确定条件下投资行为的理论,它由Markowitz提出,且认为理性的投资者应具有“非满足性”和“风险回避性”两个特征。基于Markowitz理论模型,许多学者在定量分析基础上,结合实际操作内容,对其进行改进,得到很多有效的求解证券组合间题的方法,如一种确定最优组合投资权重的新方法、不允许卖空的组合证券投资决策方法以及不允许卖空的证券组合选择模型等。在上述方法中,一般均假定Markowitz模型中的协方差矩阵是正定的,但该条件不具有一般性,因而在使用上受到限制本文提出将模拟退火算法用于求解证券组合问题,探讨如何在预期收益率一定的条件下,使得投资风险最小。
一、模拟退火算法模拟
退火算法是基于迭代求解策略的一种随机寻优算法,它从一较高初温开始,利用具有概率突跳特性的Metrpols抽样策略在解空间中进行随机搜索,伴随温度的不断下降重复抽样过程,直至得到问题的全局最优解标准模拟退火算法的一般步骤描述如下:
(1)给定初温t = t0,随机产生初始状态:s = s0,令k=0;
(2)Repeat;
Repeat;
产生新状态sj = Generate(s);
if min{1,exp[-(C(sj)-C(s))/tk]}[0,1]s = sj;
Until抽样稳定准则满足:
退温tk + 1 = update(tk),并令k=k+1
(3)Until算法终止准则满足;
(4)输出算法结果。
从以上步骤可以看出,新状态产生函数、新状态接受函数、退温函数、抽样稳定准则和退火结束准则以及初始温度是直接影响算法优化结果的主要环节。由于模拟退火算法采取随机搜索策略所以能够较快地搜索目标函数的全局最优解。
二、模型的建立
设一个金融机构可以选择的风险证券为n种,每种证券的收益率为ri,,则可看作是随机变量;R是证券i的预期收益率.设这。种风险证券的投资权重为,则是概率向量;其证券组合的预期收益率为:;用δij表示第i种证券预期收益和第i种证券预期收益的协方差,E是该证券组合的协方差矩阵。
为使投资风险最小,间题归结为求解如下问题:
其中第一个关系式反映投资风险极小化是预期收益率一定的条件下的投资目标:第二个关系式是预期收益率满足一个理想且合理的条件;第三个关系式是概率向量固有性质;RP是供投资决策者选择证券组合的预期收益率。
在投资中,投资比重可能含有负分量,即对应的证券进行卖空操作,卖空是卖出该证券,将出售的收人投资于其它种类的证券.但是有时不允许卖空,因此本文假设投资比重大于零。
借鉴标准的模拟退火算法,结合上述模型,具体分析过程如下:。
步骤1:确定初始投资概率向量,满足X1 + X2 + ldots + Xn = 1。计算目标函数值。
确定最大的循环迭代次数L,在实际计算中,可将L定为一固定数矿,其中n^2为变量个数,置k=1;
步赚2;随机迭取变量可在[0,1]内选取),进行归一化处理,使之成为概率量。令,计算新目标函数值;
步骤3:比较两个目标函数值如果,则用新向量代替原向量;
步骤4:若不满足停止判据且尚未达到最大迭代次数,则置k=k十1,转步骤2;否则停止计算,输出最终结果。停止判据可以设为:
。
其中ε为预先设定的小的正数。
实证分析。
下面结合上述具体过程,利用实例说明在收益率RP固定情况下,求风险最小的投资组成的可行性。若一个证券组合由三个证券组成,根据历史资料,由前述协方差矩阵计算公式,得出其协方差矩阵的估计值如下:。
其中收益率RP以及三个证券的预期收益率由程序输人,运行结果如表1所示。
程序运行结果
输人 | R1 = 0.24;R2 = 0.15;R3 = O.33 | ||||
RP=0.75 | RP=0.95 | ||||
输出结果 | I | II | III | IV | |
X1 | 0.356600 | 0.166200 | 0.460700 | 0.711900 | |
X2 | 0.397493 | 0.291663 | 0.420600 | 0.059233 | |
X3 | 0.245907 | 0.542137 | 0.118700 | 0.228867 | |
csfx | 0.295987 | 0.248332 | 0.571878 | 0.507709 | |
jsfx | 0.235932 | 0.336376 | 0.448742 | 0.582512 | |
X[1] | 0.132252 | 0.166200 | 0.332737 | 0.711900 | |
X[2] | 0.248348 | 0.291663 | 0.073387 | 0.059233 | |
X[3] | 0.619401 | 0.542137 | 0.593876 | 0.228867 |
通过结合分析可得到如下结论:
(1)随着组合证券预期收益率RP的增大,组合证券投资的风险严格增大。
(2)计算的投资比例向量可直接作为投资比例系数,虽然计算结果不一定最优,但至少可保证结果令人满意。
(3)由表1数据可以看出,由于随机产生初始投资向量与新产生的投资向量,因此在输人量相同情况下,可导致最终输出结果不一致,因此可适当增加其迭代次数或将进一步缩小程序停止判据条件范围,反复调试,即可得到满意的组合证券投资比例向最。
(4)若最终计算的风险值jsfx大于初始风险值csfx时,则输出初始投资向量;否则用新产生的投资向量代替初始投资向量,这符合投资者心理行为。投资者希望提高投资的收益率,但增加的风险会远远超过投资者的实际(或者心理)承受能力,因此投资者应权衡收益与风险的利弊,做出慎重选择。
基于模拟退火算法的证券组合优化解决方法,它不要求马氏模型中的协方差矩阵具有任何特性,计算得到的投资概率向量可直接作为投资比例系数,为证券投资者提供了理论依据。
写的太好了