-
Notifications
You must be signed in to change notification settings - Fork 0
/
DEbest1.m
43 lines (30 loc) · 848 Bytes
/
DEbest1.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
function [Individual] = DEbest1(Pop, j, bestInd)
global F Cr NP bounds D;
% 1. wylosowanie osobników do mutacji; r1, r2, r3 oznaczają indeksy osobników w Pop
r1 = randi([1 NP]);
r2 = randi([1 NP]);
r3 = randi([1 NP]);
while( r1 == r2 || r1 == r3 || r1 == j || r2 == j || r2 == r3 || r3 == j)
r1 = randi([1 NP]);
r2 = randi([1 NP]);
r3 = randi([1 NP]);
end
% 2. utworzenie wektora v („mutacja”)
v = zeros([1 D]);
for i = 1 : D
v(i) = 0.5 * bestInd.x(i) + F * ( Pop(r1).x(i) - Pop(r2).x(i) );
end
% 3. utworzenie wektora u (krzyżowanie)
j_rand = randi([1 D]);
u = v;
for w = 1 : D
if(j_rand <= Cr || w == j_rand)
u(w) = v(w);
else
u(w) = Pop(j).x(w);
end
end
% 4. sprawdzenie, czy współrzęne osobnika po krzyżowaniu mieszczą się
% w zadanym przedziale
u = checkBounds(u);
Individual.x = u;