UNPKG

@zfunction/genetics-js

Version:

Genetic and evolutionary algorithms framework for the web

93 lines 4.04 kB
"use strict"; /* * @license * Copyright (c) 2019 Cristian Abrante. All rights reserved. * Licensed under the MIT License. See LICENSE in the project root for license information. */ Object.defineProperty(exports, "__esModule", { value: true }); var Population = /** @class */ (function () { function Population() { this.populationStatistics = { averageAge: 0, averageFitness: 0, fitnessSum: 0, fittestIndividualIndex: -1, }; this.items = []; } Population.prototype.generatePopulationWithOperations = function (populationSize, generator, generatorParams, fitnessFunction) { this.items = []; for (var i = 0; i < populationSize; i++) { var individual = generator.generateWith(generatorParams); var fitness = fitnessFunction(individual); this.pushIndividual(individual, fitness); } }; Population.prototype.getPopulationSize = function () { return this.items.length; }; Population.prototype.replacePopulation = function (populationItems) { this.items = populationItems; this.setStatistics(); }; Population.prototype.pushIndividual = function (individual, fitness, age) { var previousAgeSum = this.populationStatistics.averageAge * this.getPopulationSize(); this.items.push({ age: age ? age : 0, fitness: fitness ? fitness : Population.DEFAULT_FITNESS, individual: individual, }); var lastItem = this.items[this.items.length - 1]; this.populationStatistics.averageAge = (previousAgeSum + lastItem.age) / this.getPopulationSize(); this.populationStatistics.fitnessSum += lastItem.fitness; this.populationStatistics.averageFitness = this.populationStatistics.fitnessSum / this.getPopulationSize(); var fittest = this.getFittestIndividualItem(); if (fittest === undefined) { this.populationStatistics.fittestIndividualIndex = this.items.length - 1; } else { if (fittest.fitness < lastItem.fitness) { this.populationStatistics.fittestIndividualIndex = this.items.length - 1; } } }; Population.prototype.getFittestIndividualItem = function () { var index = this.populationStatistics.fittestIndividualIndex; return index === Population.DEFAULT_FITTEST_IND_INDEX ? undefined : this.getPopulationItem(index); }; Population.prototype.getPopulationItem = function (index) { return this.items[index]; }; Population.prototype.getPopulationItems = function () { return this.items; }; Population.prototype.setStatistics = function () { var _this = this; this.populationStatistics = { averageAge: 0, averageFitness: 0, fitnessSum: 0, fittestIndividualIndex: Population.DEFAULT_FITTEST_IND_INDEX, }; this.items.forEach(function (item, index) { _this.populationStatistics.averageAge += item.age; _this.populationStatistics.fitnessSum += item.fitness; var fittest = _this.getFittestIndividualItem(); if (fittest === undefined) { _this.populationStatistics.fittestIndividualIndex = index; } else { if (fittest.fitness < item.fitness) { _this.populationStatistics.fittestIndividualIndex = index; } } }); this.populationStatistics.averageAge /= this.getPopulationSize(); this.populationStatistics.averageFitness = this.populationStatistics.fitnessSum / this.getPopulationSize(); }; Population.DEFAULT_FITNESS = 0.0; Population.DEFAULT_FITTEST_IND_INDEX = -1; return Population; }()); exports.Population = Population; //# sourceMappingURL=Population.js.map