feat(algorithms): add MOEA/D with Tchebycheff decomposition
Implementation of Zhang & Li 2007 MOEA/D — the canonical
decomposition-based MOEA. Different paradigm from Pareto-dominance
algorithms: each subproblem is a scalarized single-objective problem
defined by a Das–Dennis weight vector, and subproblems with similar
weight vectors form neighborhoods that share genetic material.
Each generation iterates over every weight vector `i`:
1. Pick two parents uniformly from the T-nearest neighbors of weight i
(T = neighborhood_size).
2. Apply variation, evaluate the child.
3. Update the ideal point z* with the child's objectives.
4. Walk the entire neighborhood: for each j, if the child's
Tchebycheff value g(child | w_j, z*) <= g(current[j] | w_j, z*),
replace current[j] with the child.
Tchebycheff scalarization:
g(f | w, z*) = max_k w_k · |f_k - z*_k|
(With the standard `w_k = 1e-6` floor when a weight is zero, so the
max well-defined.)
Public API:
MoeadConfig {
generations,
reference_divisions, // Das-Dennis H, also fixes population size
neighborhood_size, // T
seed,
}
Moead { config, initializer, variation }
impl<P, I, V> Optimizer<P> for Moead<I, V>
Population size equals the number of weight vectors generated by
das_dennis(num_objectives, reference_divisions). Re-exported from the
prelude. Tests cover non-empty Pareto front, deterministic reruns,
and panic on `reference_divisions` that would yield zero weights.
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
//! Built-in reference optimizers.
|
||||
|
||||
pub mod differential_evolution;
|
||||
pub mod moead;
|
||||
pub mod nsga2;
|
||||
pub mod nsga3;
|
||||
pub mod paes;
|
||||
@@ -9,6 +10,7 @@ pub mod random_search;
|
||||
pub mod spea2;
|
||||
|
||||
pub use differential_evolution::*;
|
||||
pub use moead::*;
|
||||
pub use nsga2::*;
|
||||
pub use nsga3::*;
|
||||
pub use paes::*;
|
||||
|
||||
Reference in New Issue
Block a user