-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathinitSwarmMemberDpso.m
70 lines (49 loc) · 1.95 KB
/
initSwarmMemberDpso.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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
function particlePos = initSwarmMemberDpso( data, quantity, type )
switch(type)
case 'randomNoDup'
particlePos = randomInitializationNoDuplicate( data, quantity );
case 'randomWithDup'
particlePos = randomInitializationWithDuplicate( data, quantity );
case 'randomFifNoDup'
particlePos = randomInitializationFifNoDuplicate( data, quantity );
otherwise
particlePos = randomInitializationNoDuplicate( data, quantity );
end
end
function particlePos = randomInitializationNoDuplicate( data, quantity )
particlePos = zeros(quantity, size(data,1));
if quantity > factorial(size(data,1))
quantity = factorial(size(data,1));
end
for p=1:1:quantity % iterate through particles
while true
newPermutation = randsample(1:size(data,1), size(data,1));
if ~ismember(newPermutation, particlePos, 'rows')
particlePos(p,:) = newPermutation;
break
end
end
end
end
function particlePos = randomInitializationWithDuplicate( data, quantity )
particlePos = zeros(quantity, size(data,1));
for p=1:1:quantity % iterate through particles
particlePos(p,:) = randsample(1:size(data,1), size(data,1));
end
end
% fif: first is fixed; first position is always position one (1)
function particlePos = randomInitializationFifNoDuplicate( data, quantity )
particlePos = zeros(quantity, size(data,1));
if quantity > factorial(size(data,1))
quantity = factorial(size(data,1));
end
for p=1:1:quantity % iterate through particles
while true
newPermutation = [1 randsample(2:size(data,1), size(data,1)-1)];
if ~ismember(newPermutation, particlePos, 'rows')
particlePos(p,:) = newPermutation;
break
end
end
end
end