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

artificial-life digital-evolution genetic-programming
Last synced: 6 months ago · JSON representation ·

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
artificial-life digital-evolution genetic-programming
Created over 5 years ago · Last pushed 11 months ago
Metadata Files
Readme Contributing License Code of conduct Citation Authors

README.md

signalgp-lite

version Codacy Badge continuous integration Documentation Status documentation coverage code coverage status dotos GitHub stars

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 void run( sgpl::Core&, const sgpl::Instruction&, const sgpl::Program&, typename Spec::peripheralt& peripheral ) { std::cout << "for the " << peripheral.greetcount++ << "th time... "; std::cout << "hello there " << peripheral.name << '\n'; }

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 cpu; Peripheral peripheral; peripheral.name = "Grace Hopper";

sgpl::Program program{ 100 }; // randomly generated, 100 instructions

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.

lite speedup, compared to vanilla 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.

raw timings of lite and vanilla 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

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

All Time
  • Total Commits: 577
  • Total Committers: 3
  • Avg Commits per committer: 192.333
  • Development Distribution Score (DDS): 0.153
Past Year
  • Commits: 10
  • Committers: 1
  • Avg Commits per committer: 10.0
  • Development Distribution Score (DDS): 0.0
Top Committers
Name Email 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
bug (1)
Pull Request Labels

Dependencies

package.json npm
  • express 4.16.3 development
  • puppeteer 1.9.0 development
docs/requirements.in pypi
  • 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
docs/requirements.txt pypi
  • 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
third-party/requirements.in pypi
  • osfclient ==0.0.5
third-party/requirements.txt pypi
  • 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
.github/workflows/CI.yml actions
  • 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
Dockerfile docker
  • mmore500/conduit@sha256 8fdf051fb36163216e85bd0f162070a2224b2736874eee48bdd6fa1ace5efc99 build