Skip to content

paulduf/active_set_es

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Python implementation of the Active-Set (1+1)-ES

We implement the elitist evolution strategy with active-set constraint handling and a projection/repair method based on SciPy's SLSQP.

The active constraints are detected from the nonzero values of the Lagrange multipliers' estimates after SLSQP svolved the projection subproblem. To achieve this, we need to slightly modify the output of the SciPy's Python wrapping code around the core Fortran routine. See also this issue.

Use the algorithm

The Python code implements a ActiveSetElitistES class. The algorithm assume explicit constraints, which means the user must provide the constraints and constraints jacobian functions as callables to the class object. The algorithm provides an ask-and-tell interface (see also the __main__ part of the python script for an example).

Running the algorithm for 500 iterations gives the following picture which agrees with the paper's numerical experiment.

You can generate this figure calling the main script python -m actseteles.active_set_elitist_es.

References

Arnold, D.V. (2016) ‘An Active-Set Evolution Strategy for Optimization with Known Constraints’, in Handl, J. et al. (eds) Parallel Problem Solving from Nature – PPSN XIV. Cham: Springer International Publishing (Lecture Notes in Computer Science), pp. 192–202. doi:10.1007/978-3-319-45823-6_18.

TODOs

This is work in progress, in the future I plan to implement the feature following from this paper:

Arnold, D.V. (2017) ‘Reconsidering constraint release for active-set evolution strategies’, in Proceedings of the Genetic and Evolutionary Computation Conference. GECCO ’17: Genetic and Evolutionary Computation Conference, Berlin Germany: ACM, pp. 665–672. doi:10.1145/3071178.3071294.

other TODOs

  • Write the docstring for ActiveSetElitistES
  • Describe parameters in the __init__ method

Releases

No releases published

Packages

No packages published

Languages