diff --git a/examples/NSGAIIAsAnEvolutionaryAlgorithm.jl b/examples/NSGAIIAsAnEvolutionaryAlgorithm.jl index 10958af..1955e81 100644 --- a/examples/NSGAIIAsAnEvolutionaryAlgorithm.jl +++ b/examples/NSGAIIAsAnEvolutionaryAlgorithm.jl @@ -3,7 +3,7 @@ using Dates # NSGA-II algorithm configured from the evolutionary algorithm template function main() - problem = ZDT1() + problem = ZDT4() solver::EvolutionaryAlgorithm = EvolutionaryAlgorithm() solver.name = "NSGA-II" @@ -12,24 +12,19 @@ function main() offspringPopulationSize = 100 solver.solutionsCreation = DefaultSolutionsCreation(problem, populationSize) - solver.evaluation = SequentialEvaluation(problem) - solver.termination = TerminationByEvaluations(25000) mutation = PolynomialMutation(1.0 / numberOfVariables(problem), 20.0, problem.bounds) + crossover = SBXCrossover(0.9, 20.0, problem.bounds) """ mutation = UniformMutation(1.0/numberOfVariables(problem), 20.0, problem.bounds) - crossover = BLXAlphaCrossover(1.0, 0.5, problem.bounds) """ - crossover = SBXCrossover(0.9, 20.0, problem.bounds) solver.variation = CrossoverAndMutationVariation(offspringPopulationSize, crossover, mutation) - solver.selection = BinaryTournamentSelection(solver.variation.matingPoolSize, DefaultDominanceComparator()) - solver.replacement = RankingAndDensityEstimatorReplacement(DominanceRanking(DefaultDominanceComparator()), CrowdingDistanceDensityEstimator()) startingTime = Dates.now() diff --git a/examples/SMPSOAsPSO.jl b/examples/SMPSOAsPSO.jl index 8656d72..db8c063 100644 --- a/examples/SMPSOAsPSO.jl +++ b/examples/SMPSOAsPSO.jl @@ -7,7 +7,7 @@ function main() solver = ParticleSwarmOptimization() solver.name = "SMPSO" - problem = ZDT4() + problem = kursawe() swarmSize = 100 solver.solutionsCreation = DefaultSolutionsCreation(problem, swarmSize) @@ -24,7 +24,8 @@ function main() solver.inertiaWeightComputingStrategy = ConstantValueStrategy(0.1) - mutationOperarator = PolynomialMutation(1.0/numberOfVariables(problem), 2.0, bounds(problem)) + mutationOperarator = PolynomialMutation(1.0/numberOfVariables(problem), 20.0, bounds(problem)) + mutationFrequency = 6 solver.perturbation = FrequencySelectionMutationBasedPerturbation(mutationFrequency, mutationOperarator) diff --git a/src/operator/mutation.jl b/src/operator/mutation.jl index 9961f69..2c5f319 100644 --- a/src/operator/mutation.jl +++ b/src/operator/mutation.jl @@ -58,7 +58,6 @@ struct PolynomialMutation <: MutationOperator variableBounds::Vector{Bounds{Float64}} end - function polynomialMutation(x::Vector{T}, mutationOperator::PolynomialMutation)::Vector{T} where {T<:Real} probability::Real = mutationOperator.probability distributionIndex::Real = mutationOperator.distributionIndex diff --git a/src/util/comparator.jl b/src/util/comparator.jl index 8d3f0b1..deb042b 100644 --- a/src/util/comparator.jl +++ b/src/util/comparator.jl @@ -46,6 +46,14 @@ end function compare(comparator::DefaultDominanceComparator, x::Vector{T}, y::Vector{T})::Int where {T<:Number} @assert length(x) == length(y) "The vectors have a different length" + """ + x==y && return 0 + + all(t->(t[1]≤t[2]), zip(x, y)) && return -1 + all(t->(t[1]≤t[2]), zip(y, x)) && return 1 + return 0 + """ + bestIsSolution1 = 0 bestIsSolution2 = 0