UNPKG

enome

Version:

A genome generation and evolution library.

104 lines 8.77 kB
"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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