Refactoring Tasks

Open
#15 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
5/5
Estimated time
Over a week
Newbie friendliness
20/100
Issue type
Refactor
Clarity
Needs clarification
Activity status
Stale
Tech stack
python

Research direction

No files or test paths are named. Start by reviewing the develop branch and choosing one unchecked area, such as Reproducer, Hardware, Plotting, or Tone discriminator; trace its existing trivial and concrete implementations. Done means completing one narrowly defined task with the listed tests or verification, while the full issue requires coordinating many unfinished areas.

Written by the indexing model from the issue text.

Description

This issue outlines a list of tasks that must be finished to complete the refactor (in branch "develop") into a minimum viable state to be able to run simple experiments.

  • "Evolution" top-level class

Protocols:

  • GenDataFactory
    • GenDataIncrementer: serves both trivial implementation and concrete implementation
  • CircuitFactory
    • Trivial impl
    • Concrete impl - fully tested
  • Reproducer
    • Trivial impl
    • Concrete Implementations: Likely start with a generalized "select+mutate" and then implement following selection methods:
      • Single Elite
      • Fractional Elite
      • Classic Tournament
      • Fitness Proportional Selection - priority
      • Rank Proportional Selection
      • Map Elites - may require additional work (possibly a new type of Population), and need to be removed from selection methods
  • GenerateInitialPopulations
    • Trivial impl
    • Concrete impl - fully tested
    • Existing Population concrete implementation with tests
    • RandomizeUntil - blocked by hardware evaluation
  • EvaluatePopulationFitness
    • Trivial impl
    • Concrete implementations:
      • Var-max
      • Pulse count
      • Tests for all
  • GenerateMeasurements
    • Trivial impl
    • Concrete implementations:
      • Var-max
      • Pulse count
      • Tone discriminator
      • Tests for all 3
  • Hardware
    • Trivial impl
    • Concrete implementation + tests
      • Reading waveform
      • Counting pulses
      • Tests: Mock Serial interface
  • Plotting - verify that all plot data is still collected
    • Overall high-level evolution view
    • Pulse count generation view
    • Varmax heatmap
    • Pulse count heatmap
    • Waveform - whenever one is collected we should show it
    • Pulse count/varmax violin plots
    • Source population plot
    • Tone discriminator - state
    • Tone discriminator - waveform
    • Single epoch - fitness or pulses
  • Tone discriminator:
    • Evaluate Fitness
    • Reading data using hardware

Other/Misc:

  • FullySimCircuit - re-integrate into new system and test
  • File-Based simulated circuit - add a fitness evaluator for this

NOTE: Refactor broke up things into bitstreams and circuits. One current caveat is that crossover will act differently. Previously, crossover selected one point within a tile and performed crossover on every tile at that point. Now, it will select a point in the entire (modifiable) bitstream and perform crossover once. This may involve a change in outcomes - if needed, BitstreamIndividual can be modified or replaced to track the bits within each tile so that this crossover functionality can be restored (and can still externally output/input a single list of bits that is breaks up into tiles as needed).

Dominant language
Python
Stars
18
Forks
7
PR merge metrics
No merged PRs in 30d

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from evolvablehardware/BitstreamEvolution

All issues in evolvablehardware/BitstreamEvolution

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.