差分进化算法代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
11.D = 10; %所求问题的维数
12.Gmin = zeros(1,Gm); %各代的最优值
13.best_x = zeros(Gm,D); %各代的最优解
14.value = zeros(1,Np);
15.
16.%产生初始种群
17.%xmin = -10; xmax = 100;%带负数的下界
[plain]view plaincopy
1.function DE(Gm,F0)
2.
3.t0 = cputime;
4.%差分进化算法程序
5.%F0是变异率 %Gm 最大迭代次数
6.Gm = 10000;
7.F0 = 0.5;
8.Np = 100;
9.CR = 0.9; %交叉概率
10.G= 1; %初始化代数
109.G = G + 1;
110.
111.end
112.[value_min,pos_min] = min(Gmin);
113.best_value = value_min
114.best_vector = best_x(pos_min,:)
115.fprintf('DE所耗的时间为:%f \n',cputime - t0);
79.else
80.XG_next_2(i,j) = XG_next_1(i,j);
81.end
82.end
83.end
84.
85.%%%%%%%%%%%%%%%%%%----选择操作---%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
86.for i = 1:Np
87.if f(XG_next_2(i,:)) < f(XG(i,:))
18.xmin = -5.12;
19.xmax = 5.12;
20.function y = f(v)
21.%Rastrigr 函数
22.y = sum(v.^2 - 10.*cos(2.*pi.*v) + 10);
23.end
24.
25.X0 = (xmax-xmin)*rand(Np,D) + xmin; %产生Np个D维向量
116.%画出代数跟最优函数值之间的关系图
117.plot(trace(:,1),trace(:,2));
118.
119.end
88.
89.XG_next(i,:) = XG_next_2(i,:);
90.else
91.XG_next(i,:) = XG(i,:);
92.end
93.end
94.
95.%找出最小值
96.for i = 1:Np
97.value(i) = f(XG_next(i,:));
98.end
99.[value_min,pos_min]_1(i,j) = son(1,j);
65.else
66.XG_next_1(i,j) = (xmax - xmin)*rand(1) + xmin;
67.end
68.end
69.end
70.%%%%%%%%%%%%%%%%%%%%%%%---交叉操作----%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
71.
72.
73.for i = 1: Np
74.randx = randperm(D);% [1,2,3,...D]的随机序列
75.for j = 1: D
76.
77.if rand > CR & randx(1) ~= j % CR = 0.9
78.XG_next_2(i,j) = XG(i,j);
55.
56.%变异算子
57.suanzi = exp(1-Gm/(Gm + 1-G));
58.F = F0*2.^suanzi;
59.%变异的个体来自三个随机父代
60.
61.son = XG(p,:) + F*(XG(j,:) - XG(k,:));
62.for j = 1: D
63.if son(1,j) >xmin & son(1,j) < xmax %防止变异超出边界
42.j = dx(1);
43.k = dx(2);
44.p = dx(3);
45.%要保证与i不同
46.if j == i
47.j = dx(4);
48.else if k == i
49.k = dx(4);
50.else if p == i
51.p = dx(4);
52.end
53.end
54.end
26.XG = X0;
27.
28.%%%%%%%%%%%%%----这里未做评价,不判断终止条件----%%%%%%%%%%%%%%%%%%%%%%%%
29.
30.XG_next_1= zeros(Np,D); %初始化
31.XG_next_2 = zeros(Np,D);
32.XG_next = zeros(Np,D);
33.
34.while G <= Gm
35.G
36.%%%%%%%%%%%%%%%%%%%%%%%%----变异操作----%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
37.for i = 1:Np
38.%产生j,k,p三个不同的数
39.a = 1;
40.b = Np;
41.dx = randperm(b-a+1) + a- 1;
100.
101.%第G代中的目标函数的最小值
102.Gmin(G) = value_min;
103.%保存最优的个体
104.best_x(G,:) = XG_next(pos_min,:);
105.
106.XG = XG_next;
107.trace(G,1) = G;
108.trace(G,2) = value_min;
相关文档
最新文档