@@ -28,6 +28,7 @@ mutable struct BorgMOEA{FS<:FitnessScheme,V<:Evaluator,P<:Population,M<:GeneticO
2828 wrecombinate_update_period:: Int
2929 restart_check_period:: Int
3030 max_steps_without_ϵ_progress:: Int
31+ max_restarts:: Union{Int, Nothing} # how many restarts before termination
3132
3233 recombinate:: Vector{CrossoverOperator} # recombination operators
3334
@@ -53,7 +54,7 @@ mutable struct BorgMOEA{FS<:FitnessScheme,V<:Evaluator,P<:Population,M<:GeneticO
5354 params[:τ ], params[:γ ], params[:γ_δ ], params[:PopulationSize ],
5455 Categorical (ones (length (recombinate))/ length (recombinate)),
5556 params[:θ ], params[:ζ ], params[:OperatorsUpdatePeriod ], params[:RestartCheckPeriod ],
56- params[:MaxStepsWithoutEpsProgress ],
57+ params[:MaxStepsWithoutEpsProgress ], params[ :MaxRestarts ],
5758 recombinate,
5859 TournamentSelector (fit_scheme, ceil (Int, params[:τ ]* popsize (pop))), modify, embed)
5960 end
@@ -68,7 +69,8 @@ const BorgMOEA_DefaultParameters = chain(EpsBoxArchive_DefaultParameters, Params
6869 :ζ => 1.0 , # dampening coefficient for recombination operator weights
6970 :RestartCheckPeriod => 1000 ,
7071 :OperatorsUpdatePeriod => 100 ,
71- :MaxStepsWithoutEpsProgress => 100
72+ :MaxStepsWithoutEpsProgress => 100 ,
73+ :MaxRestarts => nothing ,
7274))
7375
7476function borg_moea (problem:: OptimizationProblem , options:: Parameters = EMPTY_PARAMS)
@@ -120,6 +122,10 @@ function step!(alg::BorgMOEA)
120122 return alg
121123end
122124
125+ check_stop_condition (alg:: BorgMOEA , ctrl) =
126+ isnothing (alg. max_restarts) || (alg. n_restarts < alg. max_restarts) ? " " :
127+ " Max number of restarts ($(alg. max_restarts) ) reached"
128+
123129# "kernel function" of step() that would specialize to given xover operator type
124130function recombinate! (alg:: BorgMOEA , recomb_op_ix:: Int , recomb_op:: CrossoverOperator )
125131 # select parents for recombination
0 commit comments