Code Monkey home page Code Monkey logo

natcom-soundmatching's Introduction

Automatic Programming of Synthesizer for Sound Matching Using Evolutionary Algorithms

Description

This repository contains the code of the project for the NWI-IMC042 Natural Computing course at Radboud University (2019-2020).

Structure

This project has the following file structure:

  • logs/: contains the .json-format log files that were generated in the experiments we ran.
  • plots: will be created by the src/plotting.py file to store all the generated plots.
  • src/: contains the source code for the project.
    • binary_ga.py: contains functions for executing the genetic algorithm with the binary representation of individuals
    • categorical_ga.py: contains functions for executing the genetic algorithm with the categorical representation of individuals
    • logger.py: contains code for generating the logs of the experiments that we performed in our project. The generated logs are saved to logs/.
    • plotting.py: contains functions for creating plots with the data in logs/ and saves them to plots/. In contrast to the other files, the functions in this file are not part of the pipeline. Therefore, this file needs to be ran by itself. Further details will be given in the section How to Run.
    • run_experiment.py: contains the main pipeline for this project. This file can be called from the command line which will be explained in the How to Run section.
    • synth.py: contains the Synth class necessary to generate sound signals.
    • target.py: contains the code for a generator that generates the target sound signals to be approximated during the experiments.
    • utils.py: contains random utility functions that did not fit elsewhere.

How to Run

The project was built for Python 3. The main pipeline of the project can be called from the command line with the run_experiment.py file. In our project we conducted two experiments: hyperparameter optimisation and comparison of representations (between binary and categorical).

Hyperparameter Optimisation

We conducted an experiment to optimal hyperparameters with a small grid search. For both representations, we tested all possible combinations of mating probabilities [0.3, 0.5, 0.7] and mutation probabilities [0.1, 0.2, 0.3]. This experiment can be recreated with the following commands (given that no changes were made to the default parameters):

cd src
python3 run_experiment.py -gene "binary" "categorical" -mp 0.1 0.2 0.3 -cp 0.3 0.5 0.7 

The complete command without relying on the default parameters is as follows:

cd src
python3 run_experiment.py -gene "binary" "categorical" -mp 0.1 0.2 0.3 -cp 0.3 0.5 0.7 -es 2 -ts 1337 -e 10 -p 50 -g 30 -t 3 -ntargets 20 -nruns 5

Note that this might take a long time to complete. Instead you might want to run configurations separately. This can be done by dividing the statement above in different parts. This will not matter for random number generation, since the seed is reset after one configuration has been executed.

Comparison of Representations

Using the optimal hyperparameters found with the commands in the previous subsection we compared the binary representation to the categorical representation. This experiment can be recreated with the following commands (given that no changes were made to the default parameters):

cd src
python3 run_experiment.py -gene "binary" -mp 0.3 -cp 0.7 -ntargets 100 -ts 2
python3 run_experiment.py -gene "categorical" -mp 0.3 -cp 0.5 -ntargets 100 -ts 2

The complete command without relying on the default parameters is as follows:

cd src
python3 run_experiment.py -gene "binary" -mp 0.3 -cp 0.7 -ntargets 100 -ts 2 -es 2 -e 10 -p 50 -g 30 -t 3 -nruns 5
python3 run_experiment.py -gene "categorical" -mp 0.3 -cp 0.5 -ntargets 100 -ts 2 -es 2 -e 10 -p 50 -g 30 -t 3 -nruns 5

Plotting

Automatically creating and saving plots was not added to the pipeline in run_experiment.py. To recreate the plots used in the report, simply execute the main of the file as follows:

cd src
python3 plotting.py

All plots will be saved to a generated directory plots/.

Example Screenshot of System Behaviour

This is an example screenshot of system behaviour for running the categorical representation with 100 targets, mate probability 0.5, and mutation probability 0.3 on the Spyder IDE.

Example screenshot of system behaviour

Contributors

Freek van den Bergh
Odysseas Krystalakos
Mădălina Neamţu

natcom-soundmatching's People

Contributors

fbergh avatar odysseaskr avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

fbergh

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.