enome
Version:
A genome generation and evolution library.
104 lines • 8.77 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var Chance = require("chance");
var _ = require("lodash");
var index_1 = require("../index");
var chance = new Chance();
var Genome = (function () {
function Genome(options, sequence, idLength) {
if (sequence === void 0) { sequence = index_1.pad(index_1.weights(options.genomeLength), options.geneLength); }
if (idLength === void 0) { idLength = Math.min(13, options.genomeLength); }
this.options = options;
this.sequence = sequence;
this.idLength = idLength;
this.extended = 0;
this.genes = this.freshGenes;
}
Object.defineProperty(Genome.prototype, "id", {
get: function () {
var genes = this.freshGenes;
var letters;
var numLetters = genes.length / this.idLength;
letters = _.chunk(genes, numLetters)
.slice(0, this.idLength)
.map(function (n) { return n.reduce(function (a, b) { return new index_1.Gene((a.value + b.value) / 2); }); })
.map(function (n) { return n.letter(); });
return letters.reduce(function (a, b) { return a + b; });
},
enumerable: true,
configurable: true
});
Object.defineProperty(Genome.prototype, "freshGenes", {
get: function () {
var genes = _.chunk(this.sequence, this.options.geneLength)
.map(function (n) { return _.reduce(n, function (memo, num) { return memo + num; }, 0) / n.length || 1; })
.map(function (n) { return new index_1.Gene(n); });
return genes;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Genome.prototype, "extendedGenes", {
get: function () {
var _this = this;
var fresh = this.freshGenes;
var c = new Chance(fresh[this.extended].value);
var ext = fresh.map(function (f) {
var g = new index_1.Gene(_.mean(_.range(_this.options.geneLength).map(function (i) {
return c.floating({
max: 1,
min: 0,
});
})));
return g;
});
if (this.extended + 1 < this.options.genomeLength) {
this.extended += 1;
}
else {
this.extended = 0;
}
return ext;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Genome.prototype, "g", {
get: function () {
if (this.genes.length === 0) {
switch (this.options.refill) {
case index_1.GenomeRefill.loop:
this.genes = this.freshGenes;
break;
case index_1.GenomeRefill.none:
throw new Error(this.id + " ran out of genes");
case index_1.GenomeRefill.extend:
default:
this.genes = this.extendedGenes;
}
}
return this.genes.shift();
},
enumerable: true,
configurable: true
});
Genome.prototype.gs = function (n) {
var _this = this;
if (this.genes.length < n) {
switch (this.options.refill) {
case index_1.GenomeRefill.loop:
this.genes = this.freshGenes;
break;
case index_1.GenomeRefill.none:
throw new Error(this.id + " ran out of genes");
case index_1.GenomeRefill.extend:
default:
this.genes = this.extendedGenes;
}
}
return _.range(n).map(function (i) { return _this.g; });
};
return Genome;
}());
exports.Genome = Genome;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2Vub21lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2dlbm90eXBlcy9nZW5vbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwrQkFBaUM7QUFDakMsMEJBQTRCO0FBQzVCLGtDQU9rQjtBQUVsQixJQUFNLE1BQU0sR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDO0FBRTVCO0lBTUUsZ0JBQ1MsT0FBVSxFQUNWLFFBR04sRUFDTSxRQUFxRDtRQUpyRCx5QkFBQSxFQUFBLFdBQXFCLFdBQUcsQ0FDN0IsZUFBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFDN0IsT0FBTyxDQUFDLFVBQVUsQ0FDbkI7UUFDTSx5QkFBQSxFQUFBLFdBQW1CLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxZQUFZLENBQUM7UUFMckQsWUFBTyxHQUFQLE9BQU8sQ0FBRztRQUNWLGFBQVEsR0FBUixRQUFRLENBR2Q7UUFDTSxhQUFRLEdBQVIsUUFBUSxDQUE2QztRQVJ0RCxhQUFRLEdBQVcsQ0FBQyxDQUFDO1FBVTNCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMvQixDQUFDO0lBR0Qsc0JBQUksc0JBQUU7YUFBTjtZQUNFLElBQU0sS0FBSyxHQUFXLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDdEMsSUFBSSxPQUFpQixDQUFDO1lBQ3RCLElBQU0sVUFBVSxHQUFXLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUN4RCxPQUFPLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDO2lCQUNqQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUM7aUJBQ3ZCLEdBQUcsQ0FDRixVQUFDLENBQVMsSUFBSyxPQUFBLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBQyxDQUFDLEVBQUUsQ0FBQyxJQUFLLE9BQUEsSUFB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