Package: pyshgp
PyshGPPush Genetic Programming in PythonWARNING: The public API of this package may see breaking changes until the 1.0 version.MotivationWhat is PushGP?Push is programming language that plays nice with evolutionary computing / genetic programming. It is a stack-based language that features 1 stack per data type, including code. Programs are represented by lists of instructions, which modify the values on the stacks. Instructions are executed in order.More information about PushGP can be found on thePush ReduxthePush Homepageand thePush Language Discourse.Why use PushGP?PushGP is a leading software synthesis (sometimes called "programming by example") system. It utilized stochastic (typically evolutionary) search methods to produce programs that are capable of manipulating all the common data types, control structures, and data structures. It is easily extendable to specific use cases and has seen impressive human-competitive coding results. PushGP hasdiscovered novel quantum computer programspreviously unknown to human programers, and has achieved human competitive results infinding algebraic terms in the study of finite algebras.In contrast to the majority of other ML/AI methods, PushGP does not require the transformation of data into numeric structures. PushGP does not optimize a set of numeric parameters using a gradient, but rather attempts to intelligently search the space of programs. The result is a system where the primary output is a program written in the Turing complete Push language.PushGP has proven itself to be one of the most power "general program synthesis" frameworks. Like most evolutionary search frameworks, it usually requires an extremely high runtime, however it can solve problems that few other programming-by-example system can solve.Additional references on the successes of PushGP:On the difficulty of benchmarking inductive program synthesis methodsGeneral Program Synthesis Benchmark SuiteThe Push3 execution stack and the evolution of controlGoals of PyshGPPrevious PushGP frameworks have focused on supporting genetic programming and software synthesis research. One of the leading PushGP projects isClojush, which is written in Clojure and heavily focused on the experimentation needed to further the research field.Pyshgpaims to bring PushGP to a wider range of users and use cases. Many popular ML/AI frameworks are written in Python, and withpyshgpit is much easier to compare PushGP with other methods or build ML pipelines that contain PushGP and other models together.Although PushGP is constantly changing through research and publication,pyshgpis meant to be a slowly changing, more stable, PushGP framework. It is still possible to usepyshgpfor research and development, however accepted contributions to the main repository will be extensively benchmarked, tested, and documented.Installing pyshgppyshgpis compatible with python 3.7.x and up.Install from pippipinstallpyshgpThat's it! Read through the docs and examples to learn more.Build From sourceClone the repocd into thepyshgprepo directoryrunpip install . --upgradeThat's it! Read through the docs and examples to learn more.Running TestsRun the following command from project root directory. Make sure all the packages fromrequirements-with-dev.txtare installed in the instance of python you are using.python-mpytestOr run tests continuously (on save) during development usingpytest-watch.ptwDocumentationExample usages ofpyshgpcan be found:In theexamples/folder of the pyshgp Github repository.In the minimaldemo repository.The fullpyshgpAPI can be found onofficial website.Pysh Roadmap / ContributingPyshGP is nearly ready for its 1.0 release. The main outstanding items ares:Support for vector types. This is present in Clojush and required for many standard benchmarks.Extensive benchmarking to make sure pyshgp has the program-finding capabilities we expect from a contemporary PushGP system.More feedback on the API must be gathered before we commit to not making any breaking changes.For information about contributing, see theContributing Guide.