GlobalOptimization
Currently, GlobalOptimization provides Particle Swarm Optimization (PSO) and several variants of Differential Evolution (DE) as the only global optimization algorithms supported. Monotonic Basin Hopping (MBH) is in the works.
Simple PSO Example
Let's use PSO to find the minimum to the non-convex Ackley function given by
$J(\mathbf{x}) = -a \exp\left(-b\sqrt{\frac{1}{d}\sum_{i=1}^d x_i^2}\right) - \exp\left(\frac{1}{d}\sum_{i=1}^d \cos (cx_i)\right) + a + \exp(1)$
where $a = 20$, $b = 0.2$, $c = 2\pi$, and d is the length of the decision vector $\mathbf{x}$, subject to the constraint that $-32.768 \leq x_i \leq 32.768 \hspace{1mm} \forall \hspace{1mm} x_i \hspace{1mm} \in \hspace{1mm} \mathbf{x}$.
To begin, we'll first define an Ackley function in Julia as follows:
function ackley(x)
a = 20
b = 0.2
c = 2*π
d = length(x)
sum1 = 0.0
sum2 = 0.0
for val in x
sum1 += val^2
sum2 += cos(c*val)
end
return -a*exp(-b*sqrt(sum1/d)) - exp(sum2/d) + a + exp(1)
endNext, we'll define the OptimizationProblem by providing its constructor our new ackley function and bounds that define the search space. Then, we'll instantiate a StaticPSO (an implementation of the PSO algorithm that does not use parallel computing to evaluate the cost function) to perform the optimization!
using GlobalOptimization
N = 10 # The number of decision variables
LB = [-32.768 for _ in 1:10] # The lower bounds
UB = [ 32.768 for _ in 1:10] # The upper bounds
# Construct the optimization problem
op = OptimizationProblem(ackley, LB, UB)
# Instantiate PSO instance
pso = PSO(op)
# Perform optimization with pso
res = optimize!(pso)Finally, we can get the final optimal decision vector with
best_candidate = res.xbest10-element Vector{Float64}:
-0.054420821462622226
-0.026829729932012124
0.03595167785652808
-0.043717917284868645
-0.03596650790276004
-0.06713506810755934
0.028992382555563134
0.021125138658107282
0.04067131133142162
-0.0967278981956973and the fitness of the final optimal decision vector with
best_candidate_fitness = res.fbest0.3276098984798108Index
GlobalOptimization.AbstractAdaptationStrategyGlobalOptimization.AbstractAlgorithmSpecificOptionsGlobalOptimization.AbstractBinomialCrossoverParametersGlobalOptimization.AbstractCandidateGlobalOptimization.AbstractCrossoverParametersGlobalOptimization.AbstractCrossoverTransformationGlobalOptimization.AbstractEvaluatorGlobalOptimization.AbstractFunctionEvaluationMethodGlobalOptimization.AbstractMBHDistributionGlobalOptimization.AbstractMutationOperatorGlobalOptimization.AbstractMutationParametersGlobalOptimization.AbstractNonlinearEquationProblemGlobalOptimization.AbstractOptimizationProblemGlobalOptimization.AbstractOptimizerGlobalOptimization.AbstractOptimizerCacheGlobalOptimization.AbstractOptionsGlobalOptimization.AbstractPopulationGlobalOptimization.AbstractPopulationBasedOptimizerGlobalOptimization.AbstractPopulationBasedOptimizerCacheGlobalOptimization.AbstractProblemGlobalOptimization.AbstractRandomNeighborhoodVelocityUpdateSchemeGlobalOptimization.AbstractSelectorGlobalOptimization.AbstractVelocityUpdateSchemeGlobalOptimization.AsyncEvaluatorGlobalOptimization.BatchEvaluatorGlobalOptimization.BatchJobEvaluatorGlobalOptimization.Best1GlobalOptimization.Best2GlobalOptimization.BinomialCrossoverParametersGlobalOptimization.BinomialCrossoverParametersGlobalOptimization.BinomialCrossoverParametersGlobalOptimization.CSRNVelocityUpdateGlobalOptimization.CSRNVelocityUpdateGlobalOptimization.ContinuousRectangularSearchSpaceGlobalOptimization.ContinuousRectangularSearchSpaceGlobalOptimization.CovarianceTransformationGlobalOptimization.CovarianceTransformationGlobalOptimization.CurrentToBest1GlobalOptimization.CurrentToBest2GlobalOptimization.CurrentToRand1GlobalOptimization.CurrentToRand2GlobalOptimization.DEGlobalOptimization.DEGlobalOptimization.DEBasePopulationGlobalOptimization.DEOptionsGlobalOptimization.DEPopulationGlobalOptimization.DEPopulationGlobalOptimization.FeasibilityHandlingEvaluatorGlobalOptimization.FixedDimensionSearchSpaceGlobalOptimization.GeneralOptionsGlobalOptimization.GlobalOptimizationTraceGlobalOptimization.LatinHypercubeInitializationGlobalOptimization.LatinHypercubeInitializationGlobalOptimization.LinearOperatorCrossoverTransformationGlobalOptimization.LocalStochasticSearchGlobalOptimization.LocalStochasticSearchGlobalOptimization.MATLABVelocityUpdateGlobalOptimization.MATLABVelocityUpdateGlobalOptimization.MBHGlobalOptimization.MBHGlobalOptimization.MBHAdaptiveDistributionGlobalOptimization.MBHAdaptiveDistributionGlobalOptimization.MBHOptionsGlobalOptimization.MBHStaticDistributionGlobalOptimization.MBHStaticDistributionGlobalOptimization.MBHStepMemoryGlobalOptimization.MCHGlobalOptimization.MCHGlobalOptimization.MinimalOptimizerCacheGlobalOptimization.MinimalPopulationBasedOptimizerCacheGlobalOptimization.MutationParametersGlobalOptimization.MutationParametersGlobalOptimization.MutationParametersGlobalOptimization.NoAdaptationGlobalOptimization.NoTransformationGlobalOptimization.NonlinearLeastSquaresProblemGlobalOptimization.NonlinearLeastSquaresProblemGlobalOptimization.NonlinearLeastSquaresProblemGlobalOptimization.NonlinearLeastSquaresProblemGlobalOptimization.NonlinearProblemGlobalOptimization.NonlinearProblemGlobalOptimization.NonlinearProblemGlobalOptimization.NonlinearProblemGlobalOptimization.OptimizationProblemGlobalOptimization.OptimizationProblemGlobalOptimization.OptimizationProblemGlobalOptimization.OptimizationProblemGlobalOptimization.PSOGlobalOptimization.PSOGlobalOptimization.PSOOptionsGlobalOptimization.PolyesterBatchEvaluatorGlobalOptimization.PolyesterBatchJobEvaluatorGlobalOptimization.PolyesterFunctionEvaluationGlobalOptimization.PolyesterFunctionEvaluationGlobalOptimization.RadiusLimitedSelectorGlobalOptimization.Rand1GlobalOptimization.Rand2GlobalOptimization.RandToBest1GlobalOptimization.RandToBest2GlobalOptimization.RandomAdaptationGlobalOptimization.RandomSubsetSelectorGlobalOptimization.RectangularSearchSpaceGlobalOptimization.ResultsGlobalOptimization.ResultsGlobalOptimization.SearchSpaceGlobalOptimization.SelfBinomialCrossoverParametersGlobalOptimization.SelfBinomialCrossoverParametersGlobalOptimization.SelfMutationParametersGlobalOptimization.SelfMutationParametersGlobalOptimization.SerialBatchEvaluatorGlobalOptimization.SerialBatchJobEvaluatorGlobalOptimization.SerialFunctionEvaluationGlobalOptimization.SerialFunctionEvaluationGlobalOptimization.SimpleSelectorGlobalOptimization.SingleEvaluatorGlobalOptimization.SingleHopperGlobalOptimization.SwarmGlobalOptimization.ThreadedBatchEvaluatorGlobalOptimization.ThreadedBatchJobEvaluatorGlobalOptimization.ThreadedFunctionEvaluationGlobalOptimization.ThreadedFunctionEvaluationGlobalOptimization.TraceElementGlobalOptimization.TraceLevelGlobalOptimization.UncorrelatedCovarianceTransformationGlobalOptimization.UncorrelatedCovarianceTransformationGlobalOptimization.UnifiedGlobalOptimization.UniformInitializationGlobalOptimization.UserLocalSearchGlobalOptimization.UserLocalSearchBase.eachindexBase.lengthBase.sizeGlobalOptimization.DEPopulation_F64GlobalOptimization.TraceAllGlobalOptimization.TraceDetailedGlobalOptimization.TraceMinimalGlobalOptimization.adapt!GlobalOptimization.all_correlatedGlobalOptimization.candidateGlobalOptimization.candidatesGlobalOptimization.check_fitness!GlobalOptimization.check_fitness!GlobalOptimization.check_fitness!GlobalOptimization.check_stopping_criteriaGlobalOptimization.construct_batch_evaluatorGlobalOptimization.construct_batch_job_evaluatorGlobalOptimization.construct_resultsGlobalOptimization.crossover!GlobalOptimization.dim_deltaGlobalOptimization.dim_maxGlobalOptimization.dim_minGlobalOptimization.dim_rangeGlobalOptimization.draw_step!GlobalOptimization.draw_update!GlobalOptimization.enforce_bounds!GlobalOptimization.evaluate!GlobalOptimization.evaluate!GlobalOptimization.evaluate_fitness!GlobalOptimization.evaluate_with_penaltyGlobalOptimization.feasibleGlobalOptimization.fill_identity!GlobalOptimization.fitnessGlobalOptimization.fitnessGlobalOptimization.get_batch_evaluatorGlobalOptimization.get_best_candidateGlobalOptimization.get_best_candidate_in_subsetGlobalOptimization.get_best_fitnessGlobalOptimization.get_elapsed_timeGlobalOptimization.get_function_toleranceGlobalOptimization.get_function_value_checkGlobalOptimization.get_generalGlobalOptimization.get_hopper_setGlobalOptimization.get_iterationGlobalOptimization.get_max_iterationsGlobalOptimization.get_max_stall_iterationsGlobalOptimization.get_max_stall_timeGlobalOptimization.get_max_timeGlobalOptimization.get_min_costGlobalOptimization.get_populationGlobalOptimization.get_scalar_functionGlobalOptimization.get_scalar_function_with_penaltyGlobalOptimization.get_traceGlobalOptimization.handle_local_searchGlobalOptimization.handle_stall!GlobalOptimization.has_gradientGlobalOptimization.hop!GlobalOptimization.initialize!GlobalOptimization.initialize!GlobalOptimization.initialize!GlobalOptimization.initialize!GlobalOptimization.initialize!GlobalOptimization.initialize!GlobalOptimization.initialize!GlobalOptimization.initialize_fitness!GlobalOptimization.intersectionGlobalOptimization.mutate!GlobalOptimization.num_dimsGlobalOptimization.num_dimsGlobalOptimization.optimize!GlobalOptimization.push!GlobalOptimization.push_accepted_step!GlobalOptimization.reset!GlobalOptimization.scalar_functionGlobalOptimization.scalar_functionGlobalOptimization.scalar_function_with_penaltyGlobalOptimization.scalar_function_with_penaltyGlobalOptimization.search_spaceGlobalOptimization.selection!GlobalOptimization.set_fitness!GlobalOptimization.set_fitness!GlobalOptimization.step!GlobalOptimization.step!GlobalOptimization.step_MAD_medianGlobalOptimization.step_stdGlobalOptimization.update_fitness!GlobalOptimization.update_global_best!GlobalOptimization.update_velocity!