-
Notifications
You must be signed in to change notification settings - Fork 0
/
DErand2.m
48 lines (35 loc) · 1.05 KB
/
DErand2.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
42
43
44
45
46
47
function [ Individual ] = DErand2(Pop, j)
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]);
r4 = randi([1 NP]);
r5 = randi([1 NP]);
while( r1 == r2 || r1 == r3 || r1 == r4 || r1 == 5 || r2 == r3 || r2 == r4 || r2 == r5 || ...
r3 == r4 || r3 == r5 || r4 == r5 || r1 == j || r2 == j || r3 == j || r4 == j || r5 == j)
r1 = randi([1 NP]);
r2 = randi([1 NP]);
r3 = randi([1 NP]);
r4 = randi([1 NP]);
r5 = randi([1 NP]);
end
% 2. utworzenie wektora v („mutacja”)
v = zeros([1 D]);
for i = 1 : D
v(i) = Pop(r5).x(i) + F * ( Pop(r1).x(i) - Pop(r2).x(i) ) + F * (Pop(r3).x(i) - Pop(r4).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;