A Clojure implementation of the Push programming language and PushGP genetic programming system for evolutionary computation.
Clojush is an open-source implementation of the Push programming language and the PushGP genetic programming system, built in Clojure. It enables evolutionary computation by evolving Push programs to solve problems, supporting multiple data types and automatic program simplification. The system is designed for flexibility, allowing experimentation with genetic operators and problem-specific configurations.
Researchers and developers working in evolutionary computation, genetic programming, and artificial intelligence who need a flexible, stack-based system for evolving programs. It is particularly suited for those exploring autoconstructive evolution or meta-genetic programming.
Clojush offers a unique combination of the Push language's minimal syntactic constraints, Clojure's concurrency capabilities, and features like automatic simplification and Plush genomes. It stands out for its support of multi-type evolution and its foundation for advanced evolutionary algorithms beyond standard genetic programming.
The Push programming language and the PushGP genetic programming system implemented in Clojure.
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Push language's minimal syntactic constraints enable evolution of programs with multiple data types and automatic modularization, supporting novel approaches like autoconstructive evolution.
Leverages Clojure's multi-core concurrency to speed up evolutionary runs, as mentioned in the README for large-scale computations.
Iteratively simplifies evolved programs to remove redundant code while preserving functionality, aiding in interpretability and efficiency.
Allows customization of Push instructions for specific domains, with a registry that can be easily extended using Clojure functions.
Requires a Clojure environment, Leiningen, or Docker, and familiarity with genetic programming concepts, making initial adoption challenging.
The README admits missing features like the NAME type and instructions such as *.DEFINE, limiting full compatibility with the Push3 standard.
Evolutionary runs can be slow and memory-heavy, with reliance on garbage collection potentially impacting performance in large-scale experiments.