moo-1.2: Genetic algorithm library

Safe HaskellNone
LanguageHaskell98

Moo.GeneticAlgorithm.Multiobjective

Contents

Synopsis

Types

type MultiPhenotype a = (Genome a, [Objective]) Source #

An individual with all objective functions evaluated.

Evaluation

evalAllObjectives Source #

Arguments

:: (ObjectiveFunction fn a, GenomeState gt a) 
=> MultiObjectiveProblem fn

a list of problems

-> [gt]

a population of genomes

-> [MultiPhenotype a] 

Calculate multiple objective per every genome in the population.

NSGA-II: A non-dominated sorting genetic algorithm

stepNSGA2 Source #

Arguments

:: ObjectiveFunction fn a 
=> MultiObjectiveProblem fn

a list of objective functions

-> SelectionOp a 
-> CrossoverOp a 
-> MutationOp a 
-> StepGA Rand a 

A single step of the NSGA-II algorithm (Non-Dominated Sorting Genetic Algorithm for Multi-Objective Optimization).

The next population is selected from a common pool of parents and their children minimizing the non-domination rank and maximizing the crowding distance within the same rank. The first generation of children is produced without taking crowding into account. Every solution is assigned a single objective value which is its sequence number after sorting with the crowded comparison operator. The smaller value corresponds to solutions which are not worse the one with the bigger value. Use evalAllObjectives to restore individual objective values.

Reference: Deb, K., Pratap, A., Agarwal, S., & Meyarivan, T. A. M. T. (2002). A fast and elitist multiobjective genetic algorithm: NSGA-II. Evolutionary Computation, IEEE Transactions on, 6(2), 182-197.

Deb et al. used a binary tournament selection, base on crowded comparison operator. To achieve the same effect, use stepNSGA2bt (or stepNSGA2 with tournamentSelect Minimizing 2 n, where n is the size of the population).

stepNSGA2bt Source #

Arguments

:: ObjectiveFunction fn a 
=> MultiObjectiveProblem fn

a list of objective functions

-> CrossoverOp a 
-> MutationOp a 
-> StepGA Rand a 

A single step of NSGA-II algorithm with binary tournament selection. See also stepNSGA2.

stepConstrainedNSGA2 Source #

Arguments

:: (ObjectiveFunction fn a, Real b, Real c) 
=> [Constraint a b]

constraints

-> ([Constraint a b] -> Genome a -> c)

non-negative degree of violation

-> MultiObjectiveProblem fn

a list of objective functions

-> SelectionOp a 
-> CrossoverOp a 
-> MutationOp a 
-> StepGA Rand a 

A single step of the constrained NSGA-II algorithm, which uses a constraint-domination rule:

“A solution i is said to constrain-dominate a solution j, if any of the following is true: 1) Solution i is feasible and j is not. 2) Solutions i and j are both infeasible but solution i has a smaller overall constraint violation. 3) Solutions i and j are feasible, and solution i dominates solution j.”

Reference: (Deb, 2002).

stepConstrainedNSGA2bt Source #

Arguments

:: (ObjectiveFunction fn a, Real b, Real c) 
=> [Constraint a b]

constraints

-> ([Constraint a b] -> Genome a -> c)

non-negative degree of violation

-> MultiObjectiveProblem fn

a list of objective functions

-> CrossoverOp a 
-> MutationOp a 
-> StepGA Rand a 

A single step of the constrained NSGA-II algorithm with binary tournament selection. See also stepConstrainedNSGA2.

Performance metrics

hypervolume Source #

Arguments

:: ObjectiveFunction fn a 
=> MultiObjectiveProblem fn

multiobjective problem mop

-> [Objective]

reference point (the worst point)

-> [MultiPhenotype a]

a set of solutions to evaluate

-> Double

hypervolume

Calculate the hypervolume indicator using WFG algorithm.

Reference: While, L., Bradstreet, L., & Barone, L. (2012). A fast way of calculating exact hypervolumes. Evolutionary Computation, IEEE Transactions on, 16(1), 86-95.