Giter Club home page Giter Club logo

mycoforge's Introduction

start with why HitCount GHA Build Status codecov

MycoForge

MycoForge is a Rust (another) library designed to run genetic programming experiments. (Hopefully) It will provide a flexible set of tools and utilities to help researchers and practitioners implement, run, and analyze genetic programming algorithms with a focus on ease of use and extensibility.

Overview

Genetic programming is a method of evolving computer programs to solve complex problems using principles inspired by biological evolution. MycoForge aims to streamline the process of setting up genetic programming experiments, allowing users to focus on their specific research questions rather than implementation details.

Current directory tree (for visualization purposes):

src/
├── common
├── graph
│   ├── core
│   ├── fitness
│   └── operators
├── linear
│   ├── core
│   ├── fitness
│   └── operators
├── population
├── tree
│   ├── core
│   ├── fitness
│   └── operators
└── utils

Nothing for the time being

Installation

NON EXISTENT

Quick Start Guide

Usage Examples

Features

Documentation

Contributing Guidelines

Contact Information

Todo:

  • README
    • Add outline
    • Add content
  • Documentation
  • Initialization
  • Optimizers
    • GA
      • Evolutionary Operators
    • EDA
      • Learning/Updating algorithms
  • Schemata (?)

mycoforge's People

Contributors

kpindur avatar

Watchers

 avatar

mycoforge's Issues

Flawed trait design

Issue

Tried to implement both non-linear and linear initialization methods, however, they are incompatible. Linear initialization needs to return Vec, so that Genotype can construct an instance of Self. Non-linear (Tree) genotype would need a Vec<Node> to do the same. Current trait based system, does not allow it.

Possible solution

Change trait-based system into an enum-based system:

enum Initialization {
  Linear(Linear),
  Non-linear(NonLinear)
}

with respective implementations, though need to consider grouping mechanism.

struct Linear<T> { field1 ... }
impl<T> Linear<T> { fn initialize(...) -> Vec<T> }

struct NonLinear<T>
impl<T> NonLinear<T> { fn initialize(...) -> Vec<Node<T>> }

Then methods would be used in Genotype via match:

match Initialization {
  Linear(init_scheme) => init_scheme.initialize(...),
  NonLinear(init_scheme) => init_scheme.initialize(...),
  _ => panic!(...) 
  }

Add logger

Adding logger may be useful in monitoring the execution/state of the process.

Genetic Operators

Mutation

All basic mutation operators should be implemented and handled via enum-based system.

  • Enum to handle execution (c.f. Issue #6).
  • Mutation ops to implement: sub-tree, size-fair, point, hoist, shrink, permutation, random, and systematic (c.f. Field Guide to GP page 42).

Crossover

All basic crossover operators should be implemented and handled via enum-based system.

  • Enum to handle execution (c.f. Issue #6)
  • Crossover ops to implement: one-point, uniform, context-preserving, size-fair, and other (c.f. Field Guide to GP page 45).

Tests

How to write tests

Tests for all modules:

  • How to test initialization methods?
    • Chi-square tests for distributions? -> Should be a valid method to check if everything is generated properly.
    • Validity tests for individuals? -> Should be a valid method to check if every generated individual is valid and nothing strange happens.
  • How to test mutation and crossover methods?
    • Chi-square tests? -> Not really sure if it makes sense, i.e., what distribution should we check for?
    • Validity tests for individuals? -> Should be a valid method to check if every generated individual is valid.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.