signalgp-lite
Science Score: 67.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
✓CITATION.cff file
Found CITATION.cff file -
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
✓DOI references
Found 1 DOI reference(s) in README -
✓Academic publication links
Links to: arxiv.org -
○Committers with academic emails
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (12.1%) to scientific vocabulary
Keywords
Repository
Basic Info
- Host: GitHub
- Owner: mmore500
- License: mit
- Language: C++
- Default Branch: master
- Homepage: https://osf.io/j8pge/
- Size: 26.8 MB
Statistics
- Stars: 3
- Watchers: 2
- Forks: 6
- Open Issues: 7
- Releases: 0
Topics
Metadata Files
README.md
signalgp-lite
- Free software: MIT license
- Documentation: https://signalgp-lite.readthedocs.io
- header-only, namespace-encapsulated software
A genetic programming implementation designed for large-scale artificial life applications. Organized as a header-only C++ library. Inspired by Alex Lalejini's SignalGP.
Quick Start
This "hello world" example throws together * a custom hardware peripheral to manage greeting information, * a custom operation to print a greeting, and * generation of a random program, * execution of that random program on a virtual multi-core CPU.
say-hello.cpp:
```cpp
include
include
include
include "Empirical/include/emp/math/Random.hpp"
include "sgpl/algorithm/execute_cpu.hpp"
include "sgpl/spec/Spec.hpp"
include "sgpl/hardware/Cpu.hpp"
include "sgpl/library/OpLibraryCoupler.hpp"
include "sgpl/library/prefab/ControlFlowOpLibrary.hpp"
include "sgpl/program/Program.hpp"
emp::Random rng;
// custom hardware peripheral, can be written to or read from during execution struct Peripheral { sizet greetcount{}; std::string name; };
// custom CPU operation struct SayHello {
template
static std::string name() { return "SayHello"; }
static size_t prevalence() { return 1; }
};
// extends prefab ControlFlowOpLibrary with SayHello operation
using library_t = sgpl::OpLibraryCoupler
// custom compile-time configurator type using spect = sgpl::Spec<libraryt, Peripheral>;
int main() {
sgpl::Cpu
sgpl::Program
cpu.InitializeAnchors( program ); // load program onto CPU
// generate random signals to launch available virtual cores while ( cpu.TryLaunchCore( emp::BitSet<64>(rng) ) ) ;
// execute up to one thousand instructions sgpl::executecpu<spect>( std::kilo::num, cpu, program, peripheral );
} ```
compile:
bash
g++ --std=c++17 -Iinclude/ -Ithird-party/ say-hello.cpp -o say-hello.out
run:
bash
./say-hello.out
Benchmarks
signalgp-lite provides several-times speedup over the current "vanilla" SignalGP implementation.
Speedup of mean instruction execution time provided by signalgp-lite compared to vanilla SignalGP.
Speedup is measured for random programs generated from different subsets of instructions ("libraries") over different-size populations of virtual CPUs ("num agents").
For randomly-generated programs composed of arbitrary instructions, signalgp-lite approaches a virtual instruction execution rate of around 10Mhz on a 3.5Ghz processor. Virtual nop instructions execute at rate of around 200Mhz.
Wall clock timings of twenty randomly-generated programs composed of instructions from different libraries.
Timings for nop and arithmetic libraries report the mean time to execute sixteen instructions on one core.
Timings for complete and sans_regulation libraries report timings for executing sixteen instructions, one each across sixteen virtual threads.
(sans_regulation refers to the complete library with tag-matching regulation disabled.)
These results are associated with commit c10ed70, measured at 1602292830 seconds since epoch. Details on the machine used to perform these benchmarks are available via Open Science Framework, e.g., https://osf.io/hu8m2/. mimalloc memory allocator.
Microbenchmarks are performed, graphed, and uploaded as part of the project's CI build, so check the project's OSF page for up-to-the-minute profiling information!
Citing
If signalgp-lite contributes to a scientific publication, please cite it as
Moreno, M. A., Rodriguez Papa, S., & Ofria, C. (2021). SignalGP-Lite: Event Driven Genetic Programming Library for Large-Scale Artificial Life Applications. arXiv preprint arXiv:2108.00382.
bibtex
@misc{moreno2021signalgp,
doi = {10.48550/ARXIV.2108.00382},
url = {https://arxiv.org/abs/2108.00382},
author = {Moreno, Matthew Andres and Rodriguez Papa, Santiago and Lalejini, Alexander and Ofria, Charles},
keywords = {Neural and Evolutionary Computing (cs.NE), FOS: Computer and information sciences, FOS: Computer and information sciences},
title = {SignalGP-Lite: Event Driven Genetic Programming Library for Large-Scale Artificial Life Applications},
publisher = {arXiv},
year = {2021},
copyright = {arXiv.org perpetual, non-exclusive license}
}
Consider also citing Empirical. And don't forget to leave a star on GitHub!
Credits
This library draws heavily on Alex Lalejini's work with SignalGP.
This package was created with Cookiecutter and the devosoft/cookiecutter-empirical-project project template.
This package uses Empirical, a library of tools for scientific software development, with emphasis on also being able to build web interfaces using Emscripten.
Owner
- Name: Matthew Andres Moreno
- Login: mmore500
- Kind: user
- Location: East Lansing, MI
- Company: @devosoft
- Website: mmore500.github.io
- Twitter: MorenoMathewA
- Repositories: 43
- Profile: https://github.com/mmore500
doctoral student, Computer Science and Engineering at Michigan State University
Citation (CITATION.cff)
abstract: >-
Event-driven genetic programming representations have been shown to outperform
traditional imperative representations on interaction-intensive problems.
These representations organize genome content into modules that are triggered
in response to environmental signals, simplifying simulation design and
implementation. Existing work developing event-driven genetic programming
methodology has largely used the SignalGP library, which caters to traditional
program synthesis applications. The SignalGP-Lite library enables larger-scale
artificial life experiments with streamlined agents by reducing control flow
overhead and trading run-time flexibility for better performance due to
compile-time configuration. Here, we report benchmarking experiments that show
an 8x to 30x speedup. We also report solution quality equivalent to SignalGP
on two benchmark problems originally developed to test the ability of evolved
programs to respond to a large number of signals and to modulate signal
response based on context.
date-released: 2021-07-28
doi: '10.48550/arXiv.2108.00382'
license: MIT
version: 0.2.0
authors:
- affiliation: University of Michigan
family-names: Moreno
given-names: Matthew Andres
orcid: 'https://orcid.org/0000-0003-4726-4479'
- affiliation: Michigan State University
family-names: Rodriguez Papa
given-names: Santiago
orcid: 'https://orcid.org/0000-0003-0994-2718'
- affiliation: Grand Valley State University
family-names: Lalejini
given-names: Alexander
orcid: 'https://orcid.org/0000-0002-6028-2105'
- affiliation: Michigan State University
family-names: Ofria
given-names: Charles
orcid: 'https://orcid.org/0000-0003-2924-1732'
cff-version: 1.1.0
message: 'Please consult docs/citing.md to cite this software.'
title: >-
SignalGP-Lite: Event Driven Genetic Programming Library for Large-Scale
Artificial Life Applications
GitHub Events
Total
- Delete event: 4
- Push event: 1
- Pull request event: 9
- Create event: 4
Last Year
- Delete event: 4
- Push event: 1
- Pull request event: 9
- Create event: 4
Committers
Last synced: 10 months ago
Top Committers
| Name | Commits | |
|---|---|---|
| Matthew Andres Moreno | m****t@g****m | 489 |
| Santiago Rodriguez Papa | r****0 | 87 |
| tolziplohu | s****r@g****m | 1 |
Issues and Pull Requests
Last synced: 9 months ago
All Time
- Total issues: 10
- Total pull requests: 28
- Average time to close issues: 28 days
- Average time to close pull requests: 4 days
- Total issue authors: 2
- Total pull request authors: 4
- Average comments per issue: 0.0
- Average comments per pull request: 0.32
- Merged pull requests: 22
- Bot issues: 0
- Bot pull requests: 0
Past Year
- Issues: 0
- Pull requests: 7
- Average time to close issues: N/A
- Average time to close pull requests: 3 minutes
- Issue authors: 0
- Pull request authors: 1
- Average comments per issue: 0
- Average comments per pull request: 0.0
- Merged pull requests: 3
- Bot issues: 0
- Bot pull requests: 0
Top Authors
Issue Authors
- mmore500 (5)
- rodsan0 (3)
Pull Request Authors
- mmore500 (21)
- rodsan0 (3)
- amlalejini (1)
- naalit (1)
Top Labels
Issue Labels
Pull Request Labels
Dependencies
- express 4.16.3 development
- puppeteer 1.9.0 development
- breathe ==4.19.2
- coverxygen ==1.5.0
- exdown ==0.7.1
- exhale ==0.2.3
- myst-parser ==0.12.9
- sphinx ==3.1.2
- sphinx-rtd-theme ==0.5.0
- sphinxemoji ==0.1.8
- alabaster ==0.7.12
- attrs ==20.3.0
- babel ==2.9.0
- beautifulsoup4 ==4.9.3
- breathe ==4.19.2
- bs4 ==0.0.1
- certifi ==2020.12.5
- chardet ==4.0.0
- coverxygen ==1.5.0
- docutils ==0.16
- exdown ==0.7.1
- exhale ==0.2.3
- idna ==2.10
- imagesize ==1.2.0
- jinja2 ==2.11.3
- lxml ==4.6.2
- markdown-it-py ==0.5.8
- markupsafe ==1.1.1
- myst-parser ==0.12.9
- packaging ==20.9
- pygments ==2.8.0
- pyparsing ==2.4.7
- pytz ==2021.1
- pyyaml ==5.4.1
- requests ==2.25.1
- six ==1.15.0
- snowballstemmer ==2.1.0
- soupsieve ==2.2
- sphinx ==3.1.2
- sphinx-rtd-theme ==0.5.0
- sphinxcontrib-applehelp ==1.0.2
- sphinxcontrib-devhelp ==1.0.2
- sphinxcontrib-htmlhelp ==1.0.3
- sphinxcontrib-jsmath ==1.0.1
- sphinxcontrib-qthelp ==1.0.3
- sphinxcontrib-serializinghtml ==1.1.4
- sphinxemoji ==0.1.8
- urllib3 ==1.26.3
- osfclient ==0.0.5
- certifi ==2021.10.8
- charset-normalizer ==2.0.10
- idna ==3.3
- osfclient ==0.0.5
- requests ==2.27.1
- six ==1.16.0
- tqdm ==4.62.3
- urllib3 ==1.26.8
- actions/checkout v2 composite
- docker-practice/actions-setup-docker v1 composite
- docker/build-push-action v1 composite
- styfle/cancel-workflow-action 0.6.0 composite
- mmore500/conduit@sha256 8fdf051fb36163216e85bd0f162070a2224b2736874eee48bdd6fa1ace5efc99 build