差分进化算法代码
- 格式:docx
- 大小:20.04 KB
- 文档页数:3
[plain]view plaincopy 1.
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
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 %防止变异超出边界
64. XG_next_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);
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,:))
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] = min(value);
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;
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); 116. %画出代数跟最优函数值之间的关系图
117. plot(trace(:,1),trace(:,2));
118.
119.end