Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NSGA-II Optimizer #338

Open
wants to merge 23 commits into
base: development
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added .DS_Store
Binary file not shown.
10 changes: 10 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,18 @@ modules.h
# Ignore xcode project file:
mabe.xcodeproj

# Ignore vs project files:
mabe.vcxproj
mabe.vcxproj.user

# Ingore intermediate objects:
objectFiles/

# Ignore python's cache:
__pycache__/

x64/
.vs/
Debug/
*.csv
*.out
72 changes: 72 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
{
"files.associations": {
"ostream": "cpp",
"algorithm": "cpp",
"array": "cpp",
"bitset": "cpp",
"cctype": "cpp",
"chrono": "cpp",
"cmath": "cpp",
"csignal": "cpp",
"cstddef": "cpp",
"cstdint": "cpp",
"cstdio": "cpp",
"cstdlib": "cpp",
"cstring": "cpp",
"ctime": "cpp",
"cwchar": "cpp",
"cwctype": "cpp",
"deque": "cpp",
"exception": "cpp",
"fstream": "cpp",
"functional": "cpp",
"initializer_list": "cpp",
"iomanip": "cpp",
"ios": "cpp",
"iosfwd": "cpp",
"iostream": "cpp",
"istream": "cpp",
"iterator": "cpp",
"limits": "cpp",
"list": "cpp",
"locale": "cpp",
"map": "cpp",
"memory": "cpp",
"new": "cpp",
"numeric": "cpp",
"random": "cpp",
"ratio": "cpp",
"regex": "cpp",
"set": "cpp",
"sstream": "cpp",
"stack": "cpp",
"stdexcept": "cpp",
"streambuf": "cpp",
"string": "cpp",
"system_error": "cpp",
"thread": "cpp",
"tuple": "cpp",
"type_traits": "cpp",
"typeinfo": "cpp",
"unordered_map": "cpp",
"unordered_set": "cpp",
"utility": "cpp",
"vector": "cpp",
"xfacet": "cpp",
"xhash": "cpp",
"xiosbase": "cpp",
"xlocale": "cpp",
"xlocbuf": "cpp",
"xlocinfo": "cpp",
"xlocmes": "cpp",
"xlocmon": "cpp",
"xlocnum": "cpp",
"xloctime": "cpp",
"xmemory": "cpp",
"xstddef": "cpp",
"xstring": "cpp",
"xtr1common": "cpp",
"xtree": "cpp",
"xutility": "cpp"
}
}
4 changes: 4 additions & 0 deletions DAG_settings.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
node_weights_filename=canon_nw
edge_weights_filename=canon_ew
bandwidth_filename=canon_bw
graph_size=10
1 change: 1 addition & 0 deletions Genome/AbstractGenome.h
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,7 @@ class AbstractGenome {
virtual void copyFrom(std::shared_ptr<AbstractGenome> from) = 0;

virtual void fillRandom() = 0;
virtual void fillConstant(int value) = 0;

//// gets data about genome which can be added to a data map
//// data is in pairs of strings (key, value)
Expand Down
18 changes: 10 additions & 8 deletions Genome/CircularGenome/CircularGenome.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,24 +17,24 @@
std::shared_ptr<ParameterLink<int>> CircularGenomeParameters::sizeInitialPL = Parameters::register_parameter("GENOME_CIRCULAR-sizeInitial", 5000, "starting size for genome");
std::shared_ptr<ParameterLink<double>> CircularGenomeParameters::mutationPointRatePL = Parameters::register_parameter("GENOME_CIRCULAR-mutationPointRate", 0.005, "per site point mutation rate");
std::shared_ptr<ParameterLink<double>> CircularGenomeParameters::mutationCopyRatePL = Parameters::register_parameter("GENOME_CIRCULAR-mutationCopyRate", 0.00002, "per site insertion rate");
std::shared_ptr<ParameterLink<int>> CircularGenomeParameters::mutationCopyMinSizePL = Parameters::register_parameter("GENOME_CIRCULAR-mutationCopyMinSize", 128, "minimum size of insertion mutation");
std::shared_ptr<ParameterLink<int>> CircularGenomeParameters::mutationCopyMaxSizePL = Parameters::register_parameter("GENOME_CIRCULAR-mutationCopyMaxSize", 512, "maximum size of insertion mutation");
std::shared_ptr<ParameterLink<int>> CircularGenomeParameters::mutationCopyMinSizePL = Parameters::register_parameter("GENOME_CIRCULAR-mutationCopyMinSize", 1, "minimum size of insertion mutation");
std::shared_ptr<ParameterLink<int>> CircularGenomeParameters::mutationCopyMaxSizePL = Parameters::register_parameter("GENOME_CIRCULAR-mutationCopyMaxSize", 10, "maximum size of insertion mutation");
std::shared_ptr<ParameterLink<double>> CircularGenomeParameters::mutationDeleteRatePL = Parameters::register_parameter("GENOME_CIRCULAR-mutationDeleteRate", 0.00002, "per site deletion rate");
std::shared_ptr<ParameterLink<int>> CircularGenomeParameters::mutationDeleteMinSizePL = Parameters::register_parameter("GENOME_CIRCULAR-mutationDeleteMinSize", 128, "minimum size of insertion mutation");
std::shared_ptr<ParameterLink<int>> CircularGenomeParameters::mutationDeleteMaxSizePL = Parameters::register_parameter("GENOME_CIRCULAR-mutationDeleteMaxSize", 512, "maximum size of insertion mutation");
std::shared_ptr<ParameterLink<int>> CircularGenomeParameters::mutationDeleteMinSizePL = Parameters::register_parameter("GENOME_CIRCULAR-mutationDeleteMinSize", 1, "minimum size of insertion mutation");
std::shared_ptr<ParameterLink<int>> CircularGenomeParameters::mutationDeleteMaxSizePL = Parameters::register_parameter("GENOME_CIRCULAR-mutationDeleteMaxSize", 10, "maximum size of insertion mutation");
std::shared_ptr<ParameterLink<double>> CircularGenomeParameters::mutationIndelRatePL = Parameters::register_parameter("GENOME_CIRCULAR-mutationIndelRate", 0.0, "per site insertion+deletion (indel) rate. This mutation copies a segment of the genome and deletes a segment of the same size so genome size remains fixed).");
std::shared_ptr<ParameterLink<int>> CircularGenomeParameters::mutationIndelMinSizePL = Parameters::register_parameter("GENOME_CIRCULAR-mutationIndelMinSize", 128, "minimum size of insertion-deletion mutation");
std::shared_ptr<ParameterLink<int>> CircularGenomeParameters::mutationIndelMaxSizePL = Parameters::register_parameter("GENOME_CIRCULAR-mutationIndelMaxSize", 512, "maximum size of insertion-deletion mutation");
std::shared_ptr<ParameterLink<int>> CircularGenomeParameters::mutationIndelMinSizePL = Parameters::register_parameter("GENOME_CIRCULAR-mutationIndelMinSize", 1, "minimum size of insertion-deletion mutation");
std::shared_ptr<ParameterLink<int>> CircularGenomeParameters::mutationIndelMaxSizePL = Parameters::register_parameter("GENOME_CIRCULAR-mutationIndelMaxSize", 10, "maximum size of insertion-deletion mutation");
std::shared_ptr<ParameterLink<int>> CircularGenomeParameters::mutationIndelInsertMethodPL = Parameters::register_parameter("GENOME_CIRCULAR-mutationIndelInsertMethod", 0, "where is copied material inserted?\n0 = place random, 1 = replace deleted sites, 2 = insert just before copied material");
std::shared_ptr<ParameterLink<bool>> CircularGenomeParameters::mutationIndelCopyFirstPL = Parameters::register_parameter("GENOME_CIRCULAR-mutationIndelCopyFirst", true, "whether copy or deletion happens first (0 = delete first, 1 = copy first)");
std::shared_ptr<ParameterLink<int>> CircularGenomeParameters::sizeMinPL = Parameters::register_parameter("GENOME_CIRCULAR-sizeMin", 2000, "if genome is smaller then this, mutations will only increase chromosome size");
std::shared_ptr<ParameterLink<int>> CircularGenomeParameters::sizeMaxPL = Parameters::register_parameter("GENOME_CIRCULAR-sizeMax", 20000, "if genome is larger then this, mutations will only decrease chromosome size");
std::shared_ptr<ParameterLink<int>> CircularGenomeParameters::mutationCrossCountPL = Parameters::register_parameter("GENOME_CIRCULAR-mutationCrossCount", 3, "number of crosses when performing crossover (including during recombination)");


std::shared_ptr<ParameterLink<double>> CircularGenomeParameters::mutationPointOffsetRatePL = Parameters::register_parameter("GENOME_CIRCULAR-mutationPointOffsetRate", 0.0, "per site point offset mutation rate (site changes in range (+/-)mutationPointOffsetRange)");
std::shared_ptr<ParameterLink<double>> CircularGenomeParameters::mutationPointOffsetRatePL = Parameters::register_parameter("GENOME_CIRCULAR-mutationPointOffsetRate", 0.0, "per site point offset mutation rate (site changes in range (+/-)mutationPointOffsetRange)");
std::shared_ptr<ParameterLink<double>> CircularGenomeParameters::mutationPointOffsetRangePL = Parameters::register_parameter("GENOME_CIRCULAR-mutationPointOffsetRange", 1.0, "range of PointOffset mutation");


// constructor
template<class T>
Expand Down Expand Up @@ -353,6 +353,8 @@ std::vector<std::vector<int>> CircularGenome<T>::Handler::readTable(std::pair<in
template<class T>
void CircularGenome<T>::setupCircularGenome(int _size, double _alphabetSize) {
sites.resize(_size);


alphabetSize = _alphabetSize;
// define columns to be written to genome files
genomeFileColumns.clear();
Expand Down
15 changes: 8 additions & 7 deletions Genome/CircularGenome/CircularGenome.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

#include <cstdlib>
#include <vector>
#include <limits>
#include <limits>

#include <fstream>
#include <iostream>
Expand Down Expand Up @@ -42,11 +42,11 @@ class CircularGenomeParameters {
static std::shared_ptr<ParameterLink<int>> sizeMinPL;
static std::shared_ptr<ParameterLink<int>> mutationCrossCountPL; // number of crosses to make when performing crossover

static std::shared_ptr<ParameterLink<double>> mutationIndelRatePL;
static std::shared_ptr<ParameterLink<int>> mutationIndelMinSizePL;
static std::shared_ptr<ParameterLink<int>> mutationIndelMaxSizePL;
static std::shared_ptr<ParameterLink<int>> mutationIndelInsertMethodPL;
static std::shared_ptr<ParameterLink<bool>> mutationIndelCopyFirstPL;
static std::shared_ptr<ParameterLink<double>> mutationIndelRatePL;
static std::shared_ptr<ParameterLink<int>> mutationIndelMinSizePL;
static std::shared_ptr<ParameterLink<int>> mutationIndelMaxSizePL;
static std::shared_ptr<ParameterLink<int>> mutationIndelInsertMethodPL;
static std::shared_ptr<ParameterLink<bool>> mutationIndelCopyFirstPL;

};

Expand Down Expand Up @@ -107,6 +107,7 @@ class CircularGenome : public AbstractGenome {
virtual std::vector<std::vector<int>> readTable(std::pair<int, int> tableSize, std::pair<int, int> tableMaxSize, std::pair<int, int> valueRange, int code = -1, int CodingRegionIndex = 0) override;

};


std::vector<T> sites;
double alphabetSize;
Expand Down Expand Up @@ -174,7 +175,7 @@ class CircularGenome : public AbstractGenome {
virtual int incrementPoint();
virtual int incrementPointOffset();
virtual int incrementDelete();
virtual int incrementIndel();
virtual int incrementIndel();

// apply mutations to this genome
virtual void mutate() override;
Expand Down
7 changes: 7 additions & 0 deletions Genome/MultiGenome/MultiGenome.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -361,6 +361,13 @@ void MultiGenome::fillRandom() {
}
}

void MultiGenome::fillConstant(int value)
{
for (auto chromosome : chromosomes) {
chromosome->fillConstant(value);
}
}

// fill all sites of this genome with ascending values
// This function is to make testing easy.
void MultiGenome::fillAcending() {
Expand Down
3 changes: 2 additions & 1 deletion Genome/MultiGenome/MultiGenome.h
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ class MultiGenome : public AbstractGenome {
double valueMax) override;

virtual std::shared_ptr<AbstractGenome::Handler> makeCopy() override;

// copy contents of this handler to "to"
virtual void copyTo(std::shared_ptr<AbstractGenome::Handler> to) override;
// true if handler is within length sites from end of a chromosome
Expand Down Expand Up @@ -156,6 +156,7 @@ class MultiGenome : public AbstractGenome {

// randomize this genomes contents
virtual void fillRandom() override;
virtual void fillConstant(int value) override;

// fill all sites of this genome with ascending values
// This function is to make testing easy.
Expand Down
Loading