Skip to content

Commit 9b597cf

Browse files
committed
Fix SPEA2 to be not deterministic
1 parent 17035b0 commit 9b597cf

2 files changed

Lines changed: 16 additions & 17 deletions

File tree

pymoo/algorithms/moo/spea2.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ def _do(self, problem, pop, *args, n_survive=None, **kwargs):
113113
# ---------------------------------------------------------------------------------------------------------
114114

115115

116-
def spea_binary_tournament(pop, P, algorithm, **kwargs):
116+
def spea_binary_tournament(pop, P, algorithm, random_state=None, **kwargs):
117117
n_tournaments, n_parents = P.shape
118118

119119
if n_parents != 2:
@@ -128,12 +128,13 @@ def spea_binary_tournament(pop, P, algorithm, **kwargs):
128128

129129
# if at least one solution is infeasible
130130
if a_cv > 0.0 or b_cv > 0.0:
131-
S[i] = compare(a, a_cv, b, b_cv, method='smaller_is_better', return_random_if_equal=True)
131+
S[i] = compare(a, a_cv, b, b_cv, method='smaller_is_better',
132+
return_random_if_equal=True, random_state=random_state)
132133

133134
# both solutions are feasible
134135
else:
135136
S[i] = compare(a, pop[a].get("SPEA_F"), b, pop[b].get("SPEA_F"), method='smaller_is_better',
136-
return_random_if_equal=True)
137+
return_random_if_equal=True, random_state=random_state)
137138

138139
return S[:, None].astype(int, copy=False)
139140

tests/algorithms/test_deterministic_moo.py

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,28 @@
11
import numpy as np
22
import pytest
33

4+
from pymoo.algorithms.moo.age import AGEMOEA
5+
from pymoo.algorithms.moo.age2 import AGEMOEA2
46
from pymoo.algorithms.moo.cmopso import CMOPSO
7+
from pymoo.algorithms.moo.ctaea import CTAEA
8+
from pymoo.algorithms.moo.dnsga2 import DNSGA2
9+
from pymoo.algorithms.moo.kgb import KGB
10+
from pymoo.algorithms.moo.moead import MOEAD
11+
from pymoo.algorithms.moo.moead import ParallelMOEAD
512
from pymoo.algorithms.moo.mopso_cd import MOPSO_CD
613
# Multi-objective algorithms
714
from pymoo.algorithms.moo.nsga2 import NSGA2
8-
from pymoo.algorithms.moo.rnsga2 import RNSGA2
915
from pymoo.algorithms.moo.nsga3 import NSGA3
10-
from pymoo.algorithms.moo.unsga3 import UNSGA3
16+
from pymoo.algorithms.moo.pinsga2 import AutomatedDM
17+
from pymoo.algorithms.moo.pinsga2 import PINSGA2
18+
from pymoo.algorithms.moo.rnsga2 import RNSGA2
1119
from pymoo.algorithms.moo.rnsga3 import RNSGA3
12-
from pymoo.algorithms.moo.moead import MOEAD
13-
from pymoo.algorithms.moo.age import AGEMOEA
14-
from pymoo.algorithms.moo.age2 import AGEMOEA2
15-
from pymoo.algorithms.moo.ctaea import CTAEA
16-
from pymoo.algorithms.moo.sms import SMSEMOA
1720
from pymoo.algorithms.moo.rvea import RVEA
18-
from pymoo.algorithms.moo.kgb import KGB
21+
from pymoo.algorithms.moo.sms import SMSEMOA
1922
from pymoo.algorithms.moo.spea2 import SPEA2
20-
from pymoo.algorithms.moo.dnsga2 import DNSGA2
21-
from pymoo.algorithms.moo.pinsga2 import PINSGA2
22-
from pymoo.algorithms.moo.moead import ParallelMOEAD
23-
23+
from pymoo.algorithms.moo.unsga3 import UNSGA3
2424
from pymoo.optimize import minimize
2525
from pymoo.problems.multi import ZDT1
26-
from pymoo.util.ref_dirs import get_reference_directions
27-
from pymoo.algorithms.moo.pinsga2 import AutomatedDM
2826

2927

3028
# Simple deterministic automated decision maker for testing

0 commit comments

Comments
 (0)