基于遗传算法和模拟退火算法选址举例分析
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
模拟退火来自冶金学的专有名词退火。退火是将材料加热后再经特定速率冷却,目 的是增大晶粒的体积,并且减少晶格中的缺陷。材料中的原子原来会停留在使内能 有局部最小值的位置,加热使能量变大,原子会离开原来位置,而随机在其他位置 中移动。退火冷却时速度较慢,使得原子有较多可能可以找到内能比原先更低的位 置。 模拟退火的原理也和金属退火的原理近似:我们将热力学的理论套用到统计学上, 将搜寻空间内每一点想像成空气内的分子;分子的能量,就是它本身的动能;而搜 寻空间内的每一点,也像空气分子一样带有“能量”,以表示该点对命题的合适程 度。算法先以搜寻空间内一个任意点作起始:每一步先选择一个“邻居”,然后再 计算从现有位置到达“邻居”的概率。 可以证明,模拟退火算法所得解依概率收敛到全局最优解 参考:[4] 维基百科-模拟退火算法 http://zh.wikipedia.org/wiki/%E6%A8%A1%E6%8B%9F%E9%80%80%E7%81% AB
参考: http://blog.csdn.net/v_july_v/archive/2011/01/12/6132775.a spx
Procedures GA: 伪代码 begin initialize P(0); t = 0; //t是进化的代数,一代、二代、三代... while(t <= T) do for i = 1 to M do //M是初始种群的个体数 Evaluate fitness of P(t); //计算P(t)中各个 个体的适应度 end for for i = 1 to M do Select operation to P(t); //将选择算子作用于群体 end for for i = 1 to M/2 do Crossover operation to P(t); //将交叉算子作用于群 体 end for for i = 1 to M do Mutation operation to P(t); //将变异算子作用于 群体 end for for i = 1 to M do P(t+1) = P(t); //得到下一代群体P(t + 1) end for t = t + 1; //终止条件判断 t≦T:t← t+1 转 到步骤2 end while end
适应值
111
113
Βιβλιοθήκη Baidu
12
19
N代
选择
1
1
0
1
1
0
1
1
0
1
0
0
1
0
0
1
1 交叉 1 变异
1
0
1
1
0
1
1
1
0
1
1
1
0
0
1
1
1
1
1
0
0
1
1
0
0
1
1
0
1
1
N+1代
1
1
1
1
0
0
0
1
1
0
0
0
1
0
1
1
遗 传 算 法 的 基 本 流 程
三个基本操作: 1.选择 2.交叉 3.变异 其他高级操作
确定实际问题参数集
%初始种群 %计算初始种群的十 %进制转换
%选择 %重组 %变异
遗传操作: SelCh=select('sus', Chrom, FitnV, GGAP); SelCh=recombin('xovsp', SelCh, 0.7); SelCh=mut(SelCh);
结果
最优解
图1:迭代后的结果
图2:经过25次迭代后最优解的变化和种群均值的变化
对参数进行编码
初始化群体P(t)
评价群体
满足停止 准则
群体P(t+1) 结束 群体P(t)
遗传操作
1) 初始化 t←0进化代数计数器; T是最大进化代数;随机生成M个个 体作为初始群体P(t); 2) 个体评价 计算P(t)中各个个 体的适应度值; 3) 选择运算 将选择算子作用于群 体; 4) 交叉运算 将交叉算子作用于群 体; 5) 变异运算 将变异算子作用于群 体,并通过以上运算得到下一代群 体P(t + 1); 6) 终止条件判断 t≦T: t← t+1 转到步骤2; t>T:终止 输出解。
1、遗传算法介绍
遗传算法的基本概念: 个体(Individual):个体是一个数据结构,用来描述基本的 遗传结构。例如,用0,1组成的串可以表示个体,这样的串叫染 色体,其中每个0或1叫等位基因。这样的一个串与某个个体关 联,成为该个体的基因型。 适应性(Fitness):每个个体有一对应的适应值。在优化问题 中,适应值来自于一个估计函数。 群体(Population):由个体组成的集合。 遗传操作:遗传操作作用于群体而产生新的群体。 标准的代遗传操作一般包括选择(Selection)(或复制 (Reproduction))、交叉(Crossover)(或重组 (Recombination))、变异(Mutation)3种基本形式。 参考:[1] 朱福喜,朱三元,伍春香等.人工智能基础[M].北 京:清华大学出版社,2006:314.
变为xnew。与此对应,系统的能量也从E(xold)变为 E(xnew) ,系统由状态xold变为状态xnew的接受概率 p:
1 if E(xnew)< E(xold)
P=
exp( E ( xnew E ( xold ) ) T
if E(xnew)>=E(xold)
模拟退火算法(流程)
参考:刘萌伟,黎夏.基于Pareto多目标遗传算法的公共五福设施选址研究—以 深圳市医院选址为例.热带地理[J].2010,20(6):650-655.
原始数据
主要步骤
适应度函数: for k=1:NIND for i=1:m for j=1:n a(i,j)=mk(i,j)*exp(-1*sqrt((i-chrom(k,1))^2+(j-chrom(k,2))^2)); end end if(i==m && j==n) eval(k,1)=sum(a(:)); end End
参考:[2] 雷英杰.MATLAB遗传算法工具箱与应用:107-110
结果2
最优解
图3:迭代后的结果
图4:函数值的变动
3、遗传算法选址分析
参考:
编码方法
适应度函数
使服务点覆盖人数最多 dense(c)表示当前栅格c上人口密度,Darea表示当前栅格的 面积大小,exp(-r*disx(c))表示p个选址位置点对于当前栅 格c上人口的吸引程度,其中r是吸引力系数,r取值越大, 表明对于周边栅格的吸引力越小,反之亦然;r取值为1; Cdense为目标函数2的系数
遗传操作:
SelCh=select('sus',Chrom,FitnV,GGAP); SelCh=recombin('xovsp',SelCh,0.7); f=rep([1;100],[1,2]); SelCh=mutbga(SelCh, f);SelCh=fix(SelCh); %变异 %选择 %重组
6、模拟退火算法选址分析
参考:
编码方法
主要步骤
退火过程: while k<kmax Ti = (k/kmax)^q; mu = 10^(Ti*100); % 计算mu 函数: dx = Mu_Inv(2*rand(size(x))-1,mu).*(u - l);% for i=1:m 步长dx for j=1:n a(i,j)=mk(i,j)*exp(-1*sqrt((i-x(1))^2+(j-x(2))^2)); x1 = x + dx; %下一个估计点 x1 = (x1 < l).*l +(l <= x1).*(x1 <= u).*x1 +(u < end x1).*u; %将x1限定在区间[l,u]上 end fx1 = feval(f,x1); % if(i==m && j==n) df = fx1- fx; f=sum(a(:)); if df > 0|rand < exp(-Ti*df/(abs(fx) + eps)/TolFun) %如果fx1>fx或者概率大于随机数z x = x1; fx = fx1; end if fx > fo xo = x; fo = fx1; end k=k+1; end
5、模拟退火算法求取函数值
使用matlab编程实现。 函数:
f ( x) x * sin(10 * pi * x) 2.0
结果
图7:函数曲线
图8:解的变化
结果2
图9:函数曲线
图10:解的变化
主要步骤
while k<kmax Ti = (k/kmax)^q; mu = 10^(Ti*100); % 计算mu dx = Mu_Inv(2*rand(size(x))-1,mu).*(u - l); %步长dx x1 = x + dx; %下一个估计点 x1 = (x1 < l).*l +(l <= x1).*(x1 <= u).*x1 +(u < x1).*u; %将x1限定在区间[l,u]上 fx1 = feval(f,x1); df = fx1- fx; if df > 0|rand < exp(-Ti*df/(abs(fx) + eps)/TolFun) %如果fx1>fx或者概率大于随机 数z x = x1; fx = fx1; end if fx > fo xo = x; fo = fx1; end k=k+1; end
ObjVSel=target(SelCh);
%计算子代目标函数值
[Chrom ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel); %重插入
结果
最优解
图5:函数值的变动
结果2
最优解
图6:函数值的变动
4、模拟退火算法介绍
模拟退火是一种通用概率算法,用来在一个大的搜寻空间内找寻命题的最优解。模 拟退火是 S. Kirkpatrick, C. D. Gelatt 和 M. P. Vecchi 在1983年所发明。而 V.Černý 在1985年也独立发明此算法。
模拟退火算法起源:
物理退火过程: 加温过程 等温过程 冷却退火过程
模拟退火算法与物理退火过程的相似关系
模拟退火 解 物理退火 粒子状态
最优解
设定初温 Metropolis采样过程 控制参数的下降 目标函数
能量最低态
溶解过程 等温过程 冷却 能量
模拟退火算法(METROPOLIS)
Metropolis准则 假设在状态xold时,系统受到某种扰动而使其状态
(1)随机产生一个初始解x0,令 xbest=x0,并计算目标函数值E(x0) (2)设置初始温度T(0)=T0,迭代次数 i=1; (3)Do while T(i)>Tmin 1)for j=1~k 2)对当前最优解xbest按照某一领 域函数,产生一新的解xnew,计算新的 目标函数值E(xnew),并计算目标函数的 增量△ E= E(xnew)- E(xold) 3)如果△ E <0,则xbest= xnew; 4)如果△ E >0,则p=exp(- △ E /T(i))) 1)如果c=random|0, 1|<p,xbest=xnew;否则xbest=xbest; 5)End for (4)i=i+1 (5)End for (6)输出当前最优点,计算结束
2、遗传算法求取函数值
使用遗传算法工具箱(gatbx),使用matlab编程实 现。 函数:
f ( x) x * sin(10 * pi * x) 2.0
主要步骤:
编码: Chrom=crtbp(NIND, PRECI); variable=bs2rv(Chrom, FieldD);
• • • • • • • • • • • •
s := s0; e := E(s) // 设定目前状态为s0,其能量E(s0) k := 0 // 评估次数k while k < kmax and e > emax // 若还有时间(评估次数k还不到kmax) 且结果还不够好(能量e不够低)则: sn := neighbour(s) // 随机选取一临近状态sn en := E(sn) // sn的能量为E(sn) if random() < P(e, en, temp(k/kmax)) then // 決定是否移至临近状态sn s := sn; e := en // 移至临近状态sn k := k + 1 // 评估完成,次数k加1 return s // 回传状态s
基于遗传算法和模拟退火算法选址举例分析
一、遗传算法
(1)遗传算法介绍 (2)遗传算法求取函数值 (3)遗传算法选址分析
二、模拟退火算法
(1)模拟退火算法介绍 (2)模拟退火算法求取函数值 (3)模拟退火算法选址分析
1、遗传算法介绍
遗传算法(Genetic Algorithm,GA)是霍兰德(Holland) 在20世纪60年代末提出来的,是受遗传学中自然选择和遗 传机制启发而发展起来的一种搜索算法。 遗传算法将择优与随机信息交换结合在一起。在每一代中, 使用上代中最好的,即是适应环境的位或片段,形成新的 人工生物集。遗传算法是一个迭代过程,在每次迭代中都 保留一组候选解,并按某种优劣指标进行排序,然后按某 种指标从中选出一些解,利用遗传算子,即遗传操作,对 其进行运算以及产生新一代的一组解,重复上述过程,直 到满足指定的收敛要求为止。
参考: http://blog.csdn.net/v_july_v/archive/2011/01/12/6132775.a spx
Procedures GA: 伪代码 begin initialize P(0); t = 0; //t是进化的代数,一代、二代、三代... while(t <= T) do for i = 1 to M do //M是初始种群的个体数 Evaluate fitness of P(t); //计算P(t)中各个 个体的适应度 end for for i = 1 to M do Select operation to P(t); //将选择算子作用于群体 end for for i = 1 to M/2 do Crossover operation to P(t); //将交叉算子作用于群 体 end for for i = 1 to M do Mutation operation to P(t); //将变异算子作用于 群体 end for for i = 1 to M do P(t+1) = P(t); //得到下一代群体P(t + 1) end for t = t + 1; //终止条件判断 t≦T:t← t+1 转 到步骤2 end while end
适应值
111
113
Βιβλιοθήκη Baidu
12
19
N代
选择
1
1
0
1
1
0
1
1
0
1
0
0
1
0
0
1
1 交叉 1 变异
1
0
1
1
0
1
1
1
0
1
1
1
0
0
1
1
1
1
1
0
0
1
1
0
0
1
1
0
1
1
N+1代
1
1
1
1
0
0
0
1
1
0
0
0
1
0
1
1
遗 传 算 法 的 基 本 流 程
三个基本操作: 1.选择 2.交叉 3.变异 其他高级操作
确定实际问题参数集
%初始种群 %计算初始种群的十 %进制转换
%选择 %重组 %变异
遗传操作: SelCh=select('sus', Chrom, FitnV, GGAP); SelCh=recombin('xovsp', SelCh, 0.7); SelCh=mut(SelCh);
结果
最优解
图1:迭代后的结果
图2:经过25次迭代后最优解的变化和种群均值的变化
对参数进行编码
初始化群体P(t)
评价群体
满足停止 准则
群体P(t+1) 结束 群体P(t)
遗传操作
1) 初始化 t←0进化代数计数器; T是最大进化代数;随机生成M个个 体作为初始群体P(t); 2) 个体评价 计算P(t)中各个个 体的适应度值; 3) 选择运算 将选择算子作用于群 体; 4) 交叉运算 将交叉算子作用于群 体; 5) 变异运算 将变异算子作用于群 体,并通过以上运算得到下一代群 体P(t + 1); 6) 终止条件判断 t≦T: t← t+1 转到步骤2; t>T:终止 输出解。
1、遗传算法介绍
遗传算法的基本概念: 个体(Individual):个体是一个数据结构,用来描述基本的 遗传结构。例如,用0,1组成的串可以表示个体,这样的串叫染 色体,其中每个0或1叫等位基因。这样的一个串与某个个体关 联,成为该个体的基因型。 适应性(Fitness):每个个体有一对应的适应值。在优化问题 中,适应值来自于一个估计函数。 群体(Population):由个体组成的集合。 遗传操作:遗传操作作用于群体而产生新的群体。 标准的代遗传操作一般包括选择(Selection)(或复制 (Reproduction))、交叉(Crossover)(或重组 (Recombination))、变异(Mutation)3种基本形式。 参考:[1] 朱福喜,朱三元,伍春香等.人工智能基础[M].北 京:清华大学出版社,2006:314.
变为xnew。与此对应,系统的能量也从E(xold)变为 E(xnew) ,系统由状态xold变为状态xnew的接受概率 p:
1 if E(xnew)< E(xold)
P=
exp( E ( xnew E ( xold ) ) T
if E(xnew)>=E(xold)
模拟退火算法(流程)
参考:刘萌伟,黎夏.基于Pareto多目标遗传算法的公共五福设施选址研究—以 深圳市医院选址为例.热带地理[J].2010,20(6):650-655.
原始数据
主要步骤
适应度函数: for k=1:NIND for i=1:m for j=1:n a(i,j)=mk(i,j)*exp(-1*sqrt((i-chrom(k,1))^2+(j-chrom(k,2))^2)); end end if(i==m && j==n) eval(k,1)=sum(a(:)); end End
参考:[2] 雷英杰.MATLAB遗传算法工具箱与应用:107-110
结果2
最优解
图3:迭代后的结果
图4:函数值的变动
3、遗传算法选址分析
参考:
编码方法
适应度函数
使服务点覆盖人数最多 dense(c)表示当前栅格c上人口密度,Darea表示当前栅格的 面积大小,exp(-r*disx(c))表示p个选址位置点对于当前栅 格c上人口的吸引程度,其中r是吸引力系数,r取值越大, 表明对于周边栅格的吸引力越小,反之亦然;r取值为1; Cdense为目标函数2的系数
遗传操作:
SelCh=select('sus',Chrom,FitnV,GGAP); SelCh=recombin('xovsp',SelCh,0.7); f=rep([1;100],[1,2]); SelCh=mutbga(SelCh, f);SelCh=fix(SelCh); %变异 %选择 %重组
6、模拟退火算法选址分析
参考:
编码方法
主要步骤
退火过程: while k<kmax Ti = (k/kmax)^q; mu = 10^(Ti*100); % 计算mu 函数: dx = Mu_Inv(2*rand(size(x))-1,mu).*(u - l);% for i=1:m 步长dx for j=1:n a(i,j)=mk(i,j)*exp(-1*sqrt((i-x(1))^2+(j-x(2))^2)); x1 = x + dx; %下一个估计点 x1 = (x1 < l).*l +(l <= x1).*(x1 <= u).*x1 +(u < end x1).*u; %将x1限定在区间[l,u]上 end fx1 = feval(f,x1); % if(i==m && j==n) df = fx1- fx; f=sum(a(:)); if df > 0|rand < exp(-Ti*df/(abs(fx) + eps)/TolFun) %如果fx1>fx或者概率大于随机数z x = x1; fx = fx1; end if fx > fo xo = x; fo = fx1; end k=k+1; end
5、模拟退火算法求取函数值
使用matlab编程实现。 函数:
f ( x) x * sin(10 * pi * x) 2.0
结果
图7:函数曲线
图8:解的变化
结果2
图9:函数曲线
图10:解的变化
主要步骤
while k<kmax Ti = (k/kmax)^q; mu = 10^(Ti*100); % 计算mu dx = Mu_Inv(2*rand(size(x))-1,mu).*(u - l); %步长dx x1 = x + dx; %下一个估计点 x1 = (x1 < l).*l +(l <= x1).*(x1 <= u).*x1 +(u < x1).*u; %将x1限定在区间[l,u]上 fx1 = feval(f,x1); df = fx1- fx; if df > 0|rand < exp(-Ti*df/(abs(fx) + eps)/TolFun) %如果fx1>fx或者概率大于随机 数z x = x1; fx = fx1; end if fx > fo xo = x; fo = fx1; end k=k+1; end
ObjVSel=target(SelCh);
%计算子代目标函数值
[Chrom ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel); %重插入
结果
最优解
图5:函数值的变动
结果2
最优解
图6:函数值的变动
4、模拟退火算法介绍
模拟退火是一种通用概率算法,用来在一个大的搜寻空间内找寻命题的最优解。模 拟退火是 S. Kirkpatrick, C. D. Gelatt 和 M. P. Vecchi 在1983年所发明。而 V.Černý 在1985年也独立发明此算法。
模拟退火算法起源:
物理退火过程: 加温过程 等温过程 冷却退火过程
模拟退火算法与物理退火过程的相似关系
模拟退火 解 物理退火 粒子状态
最优解
设定初温 Metropolis采样过程 控制参数的下降 目标函数
能量最低态
溶解过程 等温过程 冷却 能量
模拟退火算法(METROPOLIS)
Metropolis准则 假设在状态xold时,系统受到某种扰动而使其状态
(1)随机产生一个初始解x0,令 xbest=x0,并计算目标函数值E(x0) (2)设置初始温度T(0)=T0,迭代次数 i=1; (3)Do while T(i)>Tmin 1)for j=1~k 2)对当前最优解xbest按照某一领 域函数,产生一新的解xnew,计算新的 目标函数值E(xnew),并计算目标函数的 增量△ E= E(xnew)- E(xold) 3)如果△ E <0,则xbest= xnew; 4)如果△ E >0,则p=exp(- △ E /T(i))) 1)如果c=random|0, 1|<p,xbest=xnew;否则xbest=xbest; 5)End for (4)i=i+1 (5)End for (6)输出当前最优点,计算结束
2、遗传算法求取函数值
使用遗传算法工具箱(gatbx),使用matlab编程实 现。 函数:
f ( x) x * sin(10 * pi * x) 2.0
主要步骤:
编码: Chrom=crtbp(NIND, PRECI); variable=bs2rv(Chrom, FieldD);
• • • • • • • • • • • •
s := s0; e := E(s) // 设定目前状态为s0,其能量E(s0) k := 0 // 评估次数k while k < kmax and e > emax // 若还有时间(评估次数k还不到kmax) 且结果还不够好(能量e不够低)则: sn := neighbour(s) // 随机选取一临近状态sn en := E(sn) // sn的能量为E(sn) if random() < P(e, en, temp(k/kmax)) then // 決定是否移至临近状态sn s := sn; e := en // 移至临近状态sn k := k + 1 // 评估完成,次数k加1 return s // 回传状态s
基于遗传算法和模拟退火算法选址举例分析
一、遗传算法
(1)遗传算法介绍 (2)遗传算法求取函数值 (3)遗传算法选址分析
二、模拟退火算法
(1)模拟退火算法介绍 (2)模拟退火算法求取函数值 (3)模拟退火算法选址分析
1、遗传算法介绍
遗传算法(Genetic Algorithm,GA)是霍兰德(Holland) 在20世纪60年代末提出来的,是受遗传学中自然选择和遗 传机制启发而发展起来的一种搜索算法。 遗传算法将择优与随机信息交换结合在一起。在每一代中, 使用上代中最好的,即是适应环境的位或片段,形成新的 人工生物集。遗传算法是一个迭代过程,在每次迭代中都 保留一组候选解,并按某种优劣指标进行排序,然后按某 种指标从中选出一些解,利用遗传算子,即遗传操作,对 其进行运算以及产生新一代的一组解,重复上述过程,直 到满足指定的收敛要求为止。