diff --git a/build/inveniemus.js b/build/inveniemus.js index 481deb8..bb9f576 100644 --- a/build/inveniemus.js +++ b/build/inveniemus.js @@ -382,8 +382,8 @@ var Problem = exports.Problem = declare({ var result = element.evaluate(); async = async || Future.__isFuture__(result); return result; - }); - return async ? Future.all(elements) : elements.toArray(); + }).toArray(); + return async ? Future.all(elements) : elements; }, /** Usually a numbers array is just too abstract to handle, and another representation of the diff --git a/build/inveniemus.js.map b/build/inveniemus.js.map index b914d0e..84edb9b 100644 --- a/build/inveniemus.js.map +++ b/build/inveniemus.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/__prologue__.js","../src/Element.js","../src/Problem.js","../src/Metaheuristic.js","../src/metaheuristics/HillClimbing.js","../src/metaheuristics/GeneticAlgorithm.js","../src/metaheuristics/BeamSearch.js","../src/metaheuristics/SimulatedAnnealing.js","../src/metaheuristics/ParticleSwarm.js","../src/metaheuristics/DifferentialEvolution.js","../src/metaheuristics/EvolutionStrategy.js","../src/metaheuristics/HarmonySearch.js","../src/metaheuristics/DistributionEstimation.js","../src/metaheuristics/GradientDescent.js","../src/problems/HelloWorld.js","../src/problems/testbeds.js","../src/problems/NQueensPuzzle.js","../src/problems/KnapsackProblem.js","../src/problems/associationRules.js","../src/__epilogue__.js"],"names":[],"mappings":"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","file":"inveniemus.js","sourcesContent":["/** Package wrapper and layout.\n*/\n(function (global, init) { \"use strict\"; // Universal Module Definition.\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(['creatartis-base'], init); // AMD module.\n\t} else if (typeof module === 'object' && module.exports) {\n\t\tmodule.exports = init(require('creatartis-base')); // CommonJS module.\n\t} else { // Browser or web worker (probably).\n\t\tglobal.inveniemus = init(global.base);\n\t}\n})(this, function __init__(base){ \"use strict\";\n// Import synonyms. ////////////////////////////////////////////////////////////////////////////////\n\tvar declare = base.declare,\n\t\tinitialize = base.initialize,\n\t\titerable = base.iterable,\n\t\traiseIf = base.raiseIf,\n\t\tEvents = base.Events,\n\t\tFuture = base.Future,\n\t\tIterable = base.Iterable,\n\t\tLogger = base.Logger,\n\t\tRandomness = base.Randomness,\n\t\tStatistics = base.Statistics;\n\t\n// Library layout. /////////////////////////////////////////////////////////////////////////////////\n\tvar exports = {\n\t\t__package__: 'inveniemus',\n\t\t__name__: 'inveniemus',\n\t\t__init__: __init__,\n\t\t__dependencies__: [base],\n\t\t__SERMAT__: { include: [] },\n\t/** `metaheuristics` is a bundle of available metaheuristics.\n\t*/\t\n\t\tmetaheuristics: {},\n\t/** `problems` is a bundle of classic and reference problems.\n\t*/\n\t\tproblems: {}\n\t};\n\tvar metaheuristics = exports.metaheuristics,\n\t\tproblems = exports.problems;\n\n// Utility functions. //////////////////////////////////////////////////////////////////////////////\n\nfunction clamp(value, min, max) {\n\treturn Math.max(min, Math.min(max, value));\n}","/**\t# Element\n\nElement is the term used in Inveniemus for representations of \n[candidate solutions](http://en.wikipedia.org/wiki/Feasible_region) in a search or optimization \n[problem](Problem.js.html). Implementations may declare their own subclass of `Element` to represent\ntheir candidate solutions.\n*/\nvar Element = exports.Element = declare({\n\t/** All elements are defined by a `problem`, an array of numbers (i.e. the element's `values`, \n\trandom numbers by default) and an `evaluation` (`NaN` by default). The element's values are \n\tcoerced to be in the range provided by the problem's element model.\n\t\n\tThe `values` store all data about the candidate solution this element represents. This may \n\tappear to abstract and stark, but it helps to separate the problem definition from the search\n\tor optimization strategy.\n\t\n\tThe element's `evaluation` is a numerical assessment of the represented candidate solution. \n\tUsually is a measure of how well the problem is solved, or how close the element is to a real \n\tsolution. It guides almost all of the metaheuristics.\n\t*/\n\tconstructor: function Element(problem, values, evaluation) {\n\t\tthis.problem = problem;\n\t\tvar model = problem.elementModel();\n\t\tif (!values) {\n\t\t\tthis.values = model.map(function (range) {\n\t\t\t\tif (range.discrete) {\n\t\t\t\t\treturn problem.random.randomInt(range.min, range.max + 1);\n\t\t\t\t} else {\n\t\t\t\t\treturn problem.random.random(range.min, range.max);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tthis.values = values.map(function (value, i) {\n\t\t\t\tvar range = model[i];\n\t\t\t\traiseIf(isNaN(value), \"Value #\", i, \" for element is NaN!\");\n\t\t\t\tvalue = clamp(+value, range.min, range.max);\n\t\t\t\treturn value;\n\t\t\t});\n\t\t}\n\t\tthis.evaluation = evaluation;\n\t},\n\t\n\t/** Whether this element is an actual solution or not is decided by `suffices()`. It holds the \n\timplementation of the goal test in search problems. More complex criteria may be implemented in \n\t`Problem.suffices`. By default it returns false.\n\t*/\n\tsuffices: function suffices() {\n\t\treturn this.problem.sufficientElement(this);\n\t},\n\n\t/** The `emblem` of an element is a string that represents it and can be displayed to the user. \n\tBy default returns the string conversion of the element.\n\t*/\n\temblem: function emblem() {\n\t\treturn this +'';\n\t},\n\n\t// ## Evaluations ##############################################################################\n\n\t/** The element's `evaluation` is calculated by `evaluate()`, which assigns and returns this \n\tnumber. It may return a promise if the evaluation has to be done asynchronously. This can be \n\tinterpreted as the solution's cost in a search problem or the target function of an optimization \n\tproblem. The default behaviour is adding up this element's values, useful only for testing.\n\t*/\n\tevaluate: function evaluate() {\n\t\tvar elem = this;\n\t\treturn Future.then(this.problem.evaluation(this), function (e) {\n\t\t\telem.evaluation = e;\n\t\t\treturn e;\n\t\t});\n\t},\n\t\n\t/** The [Hamming distance](http://en.wikipedia.org/wiki/Hamming_distance) between two arrays is \n\tthe number of positions at which corresponding components are different. Arrays are assumed to \n\tbe of the same length. If they are not, only the common parts are considered.\n\t*/\n\thammingDistance: function hammingDistance(array1, array2) {\n\t\treturn iterable(array1).zip(array2).filter(function (pair) {\n\t\t\treturn pair[0] != pair[1];\n\t\t}).count();\n\t},\n\n\t/** The [Manhattan distance](http://en.wikipedia.org/wiki/Manhattan_distance) between two arrays \n\tis the sum of the absolute differences of corresponding positions.\n\t*/\n\tmanhattanDistance: function manhattanDistance(array1, array2) {\n\t\treturn iterable(array1).zip(array2).map(function (pair) {\n\t\t\treturn Math.abs(pair[0] - pair[1]);\n\t\t}).sum();\n\t},\n\n\t/** The [euclidean distance](http://en.wikipedia.org/wiki/Euclidean_distance) between two arrays \n\tis another option for evaluation.\n\t*/\n\teuclideanDistance: function euclideanDistance(array1, array2) {\n\t\treturn Math.sqrt(iterable(array1).zip(array2).map(function (pair) {\n\t\t\treturn Math.pow(pair[0] - pair[1], 2);\n\t\t}).sum());\n\t},\n\n\t/** Another common evaluation is the [root mean squared error](http://en.wikipedia.org/wiki/Root_mean_squared_error).\n\tThe method `rootMeanSquaredError` takes a function `f` (usually a mapping of this element) and \n\tsome `data`. This `data` must be an iterable of arrays, in which the first element is the \n\texpected result and the rest are the arguments for the function.\n\t*/\n\trootMeanSquaredError: function rootMeanSquaredError(f, data) {\n\t\tvar length = 0,\n\t\t\terror = iterable(data).map(function (datum) {\n\t\t\t\tlength++;\n\t\t\t\treturn Math.pow(datum[0] - f.apply(this, datum.slice(1)), 2);\n\t\t\t}).sum();\n\t\treturn length === 0 ? 0 : Math.sqrt(error / length);\n\t},\n\n\t// ## Expansions ###############################################################################\n\t\n\t/** An element's `neighbourhood` is a set of new elements, with values belonging to the n \n\tdimensional ball around this element's values with the given `radius` (1% by default). \n\t*/\n\tneighbourhood: function neighbourhood(radius) {\n\t\tvar elem = this,\n\t\t\tneighbours = [],\n\t\t\tmodel = this.problem.elementModel();\n\t\tthis.values.forEach(function (value, i) {\n\t\t\tvar range = model[i],\n\t\t\t\td = Array.isArray(radius) ? radius[i] : !isNaN(radius) ? radius : range.discrete ? 1 : 0.1,\n\t\t\t\tv = value + d;\n\t\t\tif (v <= range.max) {\n\t\t\t\tneighbours.push(elem.modification(i, v));\n\t\t\t}\n\t\t\tv = value - d;\n\t\t\tif (v >= range.min) {\n\t\t\t\tneighbours.push(elem.modification(i, v));\n\t\t\t}\n\t\t});\n\t\treturn neighbours;\n\t},\n\t\n\t/** The method `modification(index, value, ...)` returns a new and unevaluated copy of this \n\telement, with its values modified as specified. Values are always coerced to the [0,1] range.\n\t*/\n\tmodification: function modification() {\n\t\tvar newValues = this.values.slice(),\n\t\t\tmodel = this.problem.elementModel(),\n\t\t\trange, i, v;\n\t\tfor (i = 0; i < arguments.length; i += 2) {\n\t\t\tv = +arguments[i + 1];\n\t\t\traiseIf(isNaN(v), \"Invalid value \", v, \" for element!\");\n\t\t\trange = model[i];\n\t\t\tv = clamp(v, range.min, range.max);\n\t\t\tnewValues[arguments[i] |0] = v;\n\t\t}\n\t\treturn new this.constructor(this.problem, newValues);\n\t},\n\t\n\t// ## Mappings #################################################################################\n\t\n\t/** Gives an alternate representation of this element. See `Problem.mapping()`.\n\t*/\n\tmapping: function mapping() {\n\t\treturn this.problem.mapping(this);\n\t},\n\t\n\t/** A range mapping builds an array of equal length of this element's `values`. Each value is \n\ttranslated from the element model's range to the given range.\n\t*/\n\trangeMapping: function rangeMapping() {\n\t\tvar args = arguments,\n\t\t\tmodel = this.problem.elementModel(),\n\t\t\tlastRange = args[args.length - 1];\n\t\traiseIf(args.length < 1, \"Element.rangeMapping() expects at least one argument!\");\n\t\treturn this.values.map(function (v, i) {\n\t\t\tvar rangeFrom = model[i],\n\t\t\t\trangeTo = args.length > i ? args[i] : lastRange;\n\t\t\tv = (v - rangeFrom.min) / (rangeFrom.max - rangeFrom.min) * (rangeTo[1] - rangeTo[0]) + rangeTo[0];\n\t\t\treturn clamp(v, rangeTo[0], rangeTo[1]);\n\t\t});\n\t},\n\t\n\t/** The `normalizedValues` of an element is a mapping to the range [0,1].\n\t*/\n\tnormalizedValues: function normalizedValues() {\n\t\treturn this.rangeMapping([0, 1]);\n\t},\n\t\n\t/** An array mapping builds an array of equal length of this element's `values`. Each value is \n\tused to index the corresponding items argument. If there are less arguments than the element's \n\t`length`, the last one is used for the rest of the values.\n\t*/\n\tarrayMapping: function arrayMapping() {\n\t\tvar args = arguments,\n\t\t\tlastItems = args[args.length - 1],\n\t\t\tmodel = this.problem.elementModel();\n\t\traiseIf(args.length < 1, \"Element.arrayMapping() expects at least one argument!\");\n\t\treturn this.values.map(function (v, i) {\n\t\t\tvar items = args.length > i ? args[i] : lastItems,\n\t\t\t\trange = model[i],\n\t\t\t\tindex = Math.floor((v - range.min) / (range.max - range.min) * items.length);\n\t\t\treturn items[index];\n\t\t});\n\t},\n\t\n\t/** A set mapping builds an array of equal length of this element's `values`. Each value is used \n\tto select one item. Items are not selected more than once.\n\t*/\n\tsetMapping: function setMapping(items, full) {\n\t\traiseIf(!Array.isArray(items), \"Element.setMapping() expects an array argument!\");\n\t\titems = items.slice(); // Shallow copy.\n\t\tvar result = this.normalizedValues().map(function (v, i) {\n\t\t\t\traiseIf(items.length < 1, \"Element.setMapping(): insufficient elements!\");\n\t\t\t\tvar index = clamp(Math.floor(v * items.length), 0, items.length - 1);\n\t\t\t\treturn items.splice(index, 1)[0];\n\t\t\t});\n\t\tif (full) {\n\t\t\traiseIf(items.length != 1, \"Element.setMapping(): wrong amount of elements!\");\n\t\t\tresult.push(items[0]);\n\t\t}\n\t\treturn result;\n\t},\n\t\n\t// ## Other utilities ##########################################################################\n\n\t/** A `clone` is a copy of this element.\n\t*/\n\tclone: function clone() {\n\t\treturn new this.constructor(this.problem, this.values, this.evaluation);\n\t},\n\t\n\t/** Two elements can be compared with `equals(other)`. It checks if the other element has the \n\tsame values and constructor than this one.\n\t*/\n\tequals: function equals(other) {\n\t\tif (this.constructor === other.constructor && this.values.length === other.values.length) {\n\t\t\tfor (var i = 0, len = this.values.length; i < len; i++) {\n\t\t\t\tif (this.values[i] !== other.values[i]) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},\n\t\n\t/** The default string representation of an Element instance has this shape: \n\t`\"Element(values, evaluation)\"`.\n\t*/\n\ttoString: function toString() {\n\t\treturn \"<\"+ (this.constructor.name || 'Element') +\" \"+ JSON.stringify(this.values) +\" \"+ this.evaluation +\">\";\n\t},\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Element',\n\t\tserializer: function serialize_Element(obj) {\n\t\t\treturn [obj.problem, obj.values, obj.evaluation];\n\t\t}\n\t}\n}); // declare Element.\n","/**\t# Problem\n\nThe Problem type represents a search or optimization problem in Inveniemus.\n*/\nvar Problem = exports.Problem = declare({\n\t/** The problem constructor takes the following parameters:\t\n\t*/\n\tconstructor: function Problem(params) {\n\t\tparams = params || {};\n\t\tinitialize(this, params)\n\t\t\t/** + A `title` to be displayed to the user.\n\t\t\t*/\n\t\t\t.string('title', { coerce: true, defaultValue: this.constructor.name || \"\" })\n\t\t\t/** + A `description` of the problem to be displayed to the user may also be appreciated.\n\t\t\t*/\n\t\t\t.string('description', { coerce: true, defaultValue: \"\" })\n\t\t\t/** + A `random` number generator, required by many operations. By default \n\t\t\t\t`base.Randomness.DEFAULT` is used.\n\t\t\t*/\n\t\t\t.object('random', { defaultValue: Randomness.DEFAULT });\n\t\t/** + One or more `objectives`, which defines the mode of optimization. It may be either a\n\t\t\tnumber or array of numbers, where `-Infinity` means minimization (the default),\n\t\t\t`+Infinity` means maximization and a number means approximation to that value.\n\t\t*/\n\t\tvar objectives = params.hasOwnProperty('objectives') ? params.objectives : -Infinity;\n\t\tif (typeof params.objectives === 'number' && !isNaN(params.objectives)) {\n\t\t\tthis.objectives = [params.objectives];\n\t\t} else if (Array.isArray(params.objectives)) {\n\t\t\tthis.objectives = params.objectives;\n\t\t} else {\n\t\t\tthis.objectives = [-Infinity]; // Minimization is the default.\n\t\t}\n\t},\n\n\t/** The `elementModel` is an array of ranges, each an array of two numbers defining the minimum\n\tan maximum possible value of each position of every element in this problem. All elements should\n\talso be of the same length as the model.\n\t\n\tBy default, the method returns the `__elementModel__` property. It is inefficiency to recompute \n\tthis result every time, since it is required in many places.\n\t*/\n\t__elementModel__: Iterable.repeat({ min: 0, max: 1, discrete: false }, 10).toArray(),\n\t\n\telementModel: function elementModel() {\n\t\treturn this.__elementModel__;\n\t},\n\t\n\t/** Problem uses `Element` instances to represent its candidate solutions.\n\t*/\n\tnewElement: function newElement(values, evaluation) {\n\t\treturn new Element(this, values, evaluation);\n\t},\n\t\n\t/** The problem's elements must be evaluated somehow. This can be interpreted as the solution's \n\tcost in a search problem or the target function of an optimization problem. The default \n\tbehaviour is adding up this element's values, useful only for testing. It can return a future \n\tif the evaluation has to be done asynchronously. \n\t*/\n\tevaluation: function evaluation(element) {\n\t\treturn iterable(element.values).sum();\n\t},\n\t\n\t/** The `evaluate` method is used to assign an evaluation to all the given `elements`. By \n\tdefault it iterates over all elements and gets their evaluation using the `evaluation` method. \n\tIf `reevaluate` is false (the default), already evaluated elements are ignored. This method may \n\tbe overriden to make a relative evaluation scheme (e.g. in coevolution).\n\t*/\n\tevaluate: function evaluate(elements, reevaluate) {\n\t\tvar async = false;\n\t\telements = iterable(elements).filter(\n\t\t\tfunction (element) {\n\t\t\t\treturn reevaluate || isNaN(element.evaluation);\n\t\t\t},\n\t\t\tfunction (element) { // ... evaluate them.\n\t\t\t\tvar result = element.evaluate();\n\t\t\t\tasync = async || Future.__isFuture__(result);\n\t\t\t\treturn result;\n\t\t\t});\n\t\treturn async ? Future.all(elements) : elements.toArray();\n\t},\n\t\n\t/** Usually a numbers array is just too abstract to handle, and\tanother representation of the \n\tcandidate solution must be build. For this `mapping()` must be overridden to returns an \n\talternate representation of an element that may be fitter for evaluation or showing it to the\n\tuser. By default it just returns the same `values` array.\n\t*/\n\tmapping: function mapping(element) {\n\t\treturn element.values;\n\t},\n\t\n\t/** An element is `sufficient` when it can be considered a solution of a search or a good enough\n\tsolution of an optimization. By default it returns false.\n\t*/\n\tsufficientElement: function sufficientElement(element) {\n\t\treturn false;\n\t},\n\t\n\t/** When a set of elements is sufficient, the search/optimization ends. The method \n\t`suffices(elements)` returns `true` if inside the elements array there are enough actual \n\tsolutions to this problem. It holds the implementation of the goal test in search problems. By \n\tdefault calls the `suffice` method of the first element (assumed to be the best one).\n\t*/\n\tsufficientElements: function sufficientElements(elements) {\n\t\treturn this.sufficientElement(elements[0]);\n\t},\n\t\n\t// ## Optimization modes #######################################################################\n\t\n\t/** How elements are compared with each other in the problem determines which kind of \n\toptimization is performed. The `compare` method implements the comparison between two elements. \n\tIt returns a positive number if `element2` is better than `element1`, a negative number if \n\t`element2` is worse then `element1`, or zero otherwise. Better and worse may mean less or \n\tgreater evaluation (`minimization`), viceversa (`maximization`) or another criteria altogether.\n\t*/\n\tcompare: function compare(element1, element2) {\n\t\tif (this.objectives.length === 1) {\n\t\t\treturn this.singleObjectiveComparison(this.objectives[0], element1.evaluation, element2.evaluation);\n\t\t} else {\n\t\t\treturn this.paretoComparison(this.objectives, element1.evaluation, element2.evaluation);\n\t\t}\n\t},\n\t\n\t/** A single objective optimization has three modes, given by the `objective` parameter: \n\t*/\n\tsingleObjectiveComparison: function singleObjectiveComparison(objective, value1, value2) {\n\t\tvar d;\n\t\tswitch (objective) {\n\t\t\t/** + `-Infinity` means minimization. */\n\t\t\tcase -Infinity: {\n\t\t\t\td = value2 - value1;\n\t\t\t\treturn isNaN(d) ? Infinity : d;\n\t\t\t}\n\t\t\t/** + `+Infinity` means maximization. */\n\t\t\tcase +Infinity: {\n\t\t\t\td = value1 - value2;\n\t\t\t\treturn isNaN(d) ? -Infinity : d;\n\t\t\t}\n\t\t\t/** + An actual number means approximation to said value. */ \n\t\t\tdefault: {\n\t\t\t\td = Math.abs(value2 - objective) - Math.abs(value1 - objective);\n\t\t\t\treturn isNaN(d) ? Infinity : d;\n\t\t\t}\n\t\t}\n\t},\n\t\n\t/** The [Pareto efficiency](https://en.wikipedia.org/wiki/Pareto_efficiency) is frequently used \n\tin multiobjective optimizations, yet it is not a complete order. The `paretoComparison` method \n\ttakes an array of `objectives`, and two arrays of numbers to be compared. The result is an array \n\tof comparisons (-1, 0 or 1) with a `domination` property. If `domination` is:\n\t\n\t+ `< 0`: `element2` dominates `element1`.\n\t\n\t+ `> 0`: `element1` dominates `element2`.\n\t\n\t+ `= 0`: both elements are equally evaluated.\n\t\n\t+ `NaN`: elements could not be compared (i.e. their evaluations are different, but they do not \n\t\tdominate each other).\n\t*/\n\tparetoComparison: function paretoComparison(objectives, values1, values2) {\n\t\tvar worse = 0, better = 0,\n\t\t\tproblem = this,\n\t\t\tresult;\n\t\traiseIf(objectives.length !== values1.length, \"Expected \", objectives.length, \" evaluations, but got \", values1.length, \"!\");\n\t\traiseIf(objectives.length !== values2.length, \"Expected \", objectives.length, \" evaluations, but got \", values2.length, \"!\");\n\t\tresult = Iterable.zip(objectives, values1, values2).mapApply(function (objective, value1, value2) {\n\t\t\tvar r = problem.singleObjectiveComparison(objective, value1, value2);\n\t\t\tif (r < 0) {\n\t\t\t\tworse++;\n\t\t\t} else if (r > 0) {\n\t\t\t\tbetter++;\n\t\t\t}\n\t\t\treturn r;\n\t\t}).toArray();\n\t\tresult.domination = worse === 0 ? better : better === 0 ? -worse : NaN;\n\t\treturn result;\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** The default string representation of a Problem instance has this shape: \n\t`\"Problem(params)\"`.\n\t*/\n\ttoString: function toString() {\n\t\treturn \"<\"+ (this.constructor.name || 'Problem') +\" \"+ JSON.stringify(this.title) +\">\";\n\t},\n\t\n\t/** Returns a reconstruction of the parameters used in the construction of this instance.\n\t*/\n\t__params__: function __params__() {\n\t\tvar params = {},\n\t\t\tself = this,\n\t\t\tids = ['title', 'description'].concat(Array.prototype.slice.call(arguments));\n\t\tids.forEach(function (id) {\n\t\t\tif (self.hasOwnProperty(id)) {\n\t\t\t\tparams[id] = self[id];\n\t\t\t}\n\t\t});\n\t\tif (this.random !== Randomness.DEFAULT) {\n\t\t\tparams.random = this.random;\n\t\t}\n\t\treturn params;\n\t},\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Problem',\n\t\tserializer: function serialize_Problem(obj) {\n\t\t\treturn [obj.__params__()];\n\t\t}\n\t}\n}); // declare Problem.\n","/**\t# Metaheuristic\n\nA [Metaheuristic](http://en.wikipedia.org/wiki/Metaheuristic) is an optimization algorithm (which \ncan also be used for searching). This is the base class of all metaheuristic algorithms, and hence \nof all metaheuristic runs.\n*/\nvar Metaheuristic = exports.Metaheuristic = declare({\n\t/** Each metaheuristic has its own `logger`, to track its process.\n\t*/\n\tlogger: new Logger('inveniemus', Logger.ROOT, 'INFO'),\n\t\n\t/** The constructor takes a `params` object with the metaheuristic parameters. Although the \n\tdifferent algorithms have particular parameters of their own, some apply to all.\n\t*/\n\tconstructor: function Metaheuristic(params) {\n\t\tinitialize(this, params)\n\t\t/** First, the definition of the `problem` this metaheuristic is meant to solve.\n\t\t*/\n\t\t\t.object('problem', { defaultValue: null })\n\t\t/** The optimization's `size` is the amount of candidate solutions the metaheuristic treats \n\t\tat each step. By default it is 100.\n\t\t*/\n\t\t\t.number('size', { defaultValue: 100, coerce: true })\n\t\t/** The `state` is the array that holds the elements this metaheuristic handles at each step.\n\t\t*/\n\t\t\t.array('state', { defaultValue: [] })\n\t\t/** All optimizations perform a certain number of iterations or `steps` (100 by default).\n\t\t*/\n\t\t\t.number('steps', { defaultValue: 100, coerce: true })\n\t\t/** The property `step` indicates the current iteration of this optimization, or a negative \n\t\tnumber if it has not started yet.\n\t\t*/\n\t\t\t.integer('step', { defaultValue: -1, coerce: true })\n\t\t/** Most metaheuristic are stochastic processes, hence the need for a pseudo-random number \n\t\tgenerator. By default `base.Randomness.DEFAULT` is used, yet it is strongly advised to \n\t\tprovide one.\n\t\t*/\n\t\t\t.object('random', { defaultValue: Randomness.DEFAULT })\n\t\t/** Metaheuristic's runs usually gather `statistics` about the process.\n\t\t*/\n\t\t\t.object('statistics', { defaultValue: new Statistics() })\n\t\t\t.object('logger', { ignore: true });\n\t\tthis.events = new Events({ \n\t\t\tevents: [\"initiated\", \"updated\", \"expanded\", \"evaluated\", \"sieved\", \"advanced\", \"analyzed\", \"finished\"]\n\t\t});\n\t},\n\t\n\t__log__: function __log__(level) {\n\t\tif (this.logger) {\n\t\t\tthis.logger[level].apply(this.logger, arguments);\n\t\t}\n\t},\n\t\n\t// ## Basic workflow ###########################################################################\n\t\n\t/**\t`initiate(size=this.size)` builds and initiates this metaheuristic state with size new \n\tcursors. The elements are build using the `initial()` function.\n\t*/\n\tinitiate: function initiate(size) {\n\t\tsize = isNaN(size) ? this.size : +size >> 0;\n\t\tthis.state = new Array(size);\n\t\tfor (var i = 0; i < size; i++) {\n\t\t\tthis.state[i] = this.problem.newElement(); // Element with random values.\n\t\t}\n\t\tthis.onInitiate();\n\t},\n\t\n\t/** `update()` updates this metaheuristic's state. It assumes the state has been initialized. \n\tThe process may be asynchronous, so it returns a future. The default implementation first \n\texpands the state by calling `expand()`, then evaluates the added elements by calling \n\t`evaluate()`, and finally removes the worst elements with `sieve()`.\n\t*/\n\tupdate: function update() {\n\t\tvar mh = this;\n\t\tthis.expand();\n\t\treturn Future.then(this.evaluate(), function () {\n\t\t\tmh.sieve();\n\t\t\tmh.onUpdate();\n\t\t\treturn mh;\n\t\t});\n\t},\n\t\n\t/** `expand(expansion=[])` adds to this metaheuristic's state the given expansion. If none is \n\tgiven, `expansion()` is called to get new expansion.\n\t*/\n\texpand: function expand(expansion) {\n\t\texpansion = expansion || this.expansion();\n\t\tif (expansion.length < 1) {\n\t\t\tthis.__log__('warn', \"Expansion is empty\");\n\t\t} else {\n\t\t\tthis.state = this.state.concat(expansion);\n\t\t}\n\t\tthis.onExpand();\n\t},\n\t\n\t/** `expansion(size)` returns an array of new elements to add to the current state. The default \n\timplementation generates new random elements.\t\t\n\t*/\n\texpansion: function expansion(size) {\n\t\tvar expansionRate = isNaN(this.expansionRate) ? 0.5 : +this.expansionRate;\n\t\tsize = isNaN(size) ? Math.floor(expansionRate * this.size) : +size;\n\t\tvar elems = new Array(size), i;\n\t\tfor (i = 0; i < size; i++){\n\t\t\telems[i] = this.problem.newElement();\n\t\t}\n\t\treturn elems;\n\t},\n\t\n\t/** `evaluate(elements)` evaluates all the elements in `state` with no evaluation, using its \n\tevaluation method. After that sorts the state with the `compare` method of the problem. May \n\treturn a future, if any evaluation is asynchronous.\n\t*/\n\tevaluate: function evaluate(elements) {\n\t\tvar mh = this,\n\t\t\tevalTime = this.statistics && this.statistics.stat({key:'evaluation_time'});\n\t\tif (evalTime) evalTime.startTime();\n\t\telements = elements || this.state;\n\t\treturn Future.then(this.problem.evaluate(elements), function (results) {\n\t\t\telements = mh.sort(elements);\n\t\t\tif (evalTime) evalTime.addTime();\n\t\t\tmh.onEvaluate(results);\n\t\t\treturn elements;\n\t\t});\n\t},\n\t\n\t/** `sort(elements)` TODO\n\t*/\t\n\tsort: function sort(elements) {\n\t\telements = elements || this.state;\n\t\tif (this.problem.objectives.length > 1) { // Multi-objective optimization.\n\t\t\telements = this.multiObjectiveSort(elements);\n\t\t} else { // Single-objective optimization.\n\t\t\telements.sort(this.problem.compare.bind(this.problem));\n\t\t\telements.reverse();\n\t\t}\n\t\treturn elements;\n\t},\n\t\n\t/** `sieve(size=this.size)` cuts the current state down to the given size (or this.size by \n\tdefault). This is usually used after expanding and evaluating the state.\n\t*/\n\tsieve: function sieve(size) {\n\t\tsize = isNaN(size) ? this.size : Math.floor(size);\n\t\tif (this.state.length > size) {\n\t\t\tthis.state = this.state.slice(0, this.size);\n\t\t}\n\t\tthis.onSieve();\n\t},\n\t\n\t/** `finished()` termination criteria for this metaheuristic. By default it checks if the number \n\tof passed iterations is not greater than `steps`.\n\t*/\n\tfinished: function finished() {\n\t\treturn this.step >= this.steps || this.problem.sufficientElements(this.state);\n\t},\n\n\t/** `analyze()` updates the process' statistics.\n\t*/\n\tanalyze: function analyze(statistics) {\n\t\tstatistics = statistics || this.statistics;\n\t\tvar step = this.step;\n\t\tif (statistics) {\n\t\t\tif (typeof this.state[0].evaluation === 'number') { // Single-objective optimization.\n\t\t\t\tvar stat_evaluation = statistics.stat({ key:'evaluation', step: step });\n\t\t\t\tthis.state.forEach(function (element) {\n\t\t\t\t\tstat_evaluation.add(element.evaluation, element);\n\t\t\t\t});\n\t\t\t} else if (Array.isArray(this.state[0].evaluation)) { // Multi-objective optimization.\n\t\t\t\tvar stats_evaluation = this.state[0].evaluation.map(function (_, i) {\n\t\t\t\t\t\treturn statistics.stat({ key:'evaluation', index: i, step: step });\n\t\t\t\t\t}),\n\t\t\t\t\tstat_dominators = statistics.stat({ key:'dominators', step: step }),\n\t\t\t\t\tstat_dominated = statistics.stat({ key:'dominated', step: step });\n\t\t\t\tthis.state.forEach(function (element) {\n\t\t\t\t\telement.evaluation.forEach(function (v, i) {\n\t\t\t\t\t\tstats_evaluation[i].add(v, element);\n\t\t\t\t\t});\n\t\t\t\t\tstat_dominators.add(element.pareto.dominators.length, element);\n\t\t\t\t\tstat_dominated.add(element.pareto.dominated.length, element);\n\t\t\t\t});\n\t\t\t}\n\t\t\tthis.onAnalyze();\n\t\t}\n\t\treturn statistics;\n\t},\n\t\n\t/** `advance()` performs one step of the optimization. If the process has not been initialized, \n\tit does so. Returns a future if any step is asynchronous.\n\t*/\n\tadvance: function advance() {\n\t\tvar mh = this, \n\t\t\tstepTime = this.statistics && this.statistics.stat({key: 'step_time'}),\n\t\t\tresult;\n\t\tif (isNaN(this.step) || +this.step < 0) {\n\t\t\tthis.reset();\n\t\t\tif (stepTime) stepTime.startTime();\n\t\t\tthis.initiate();\n\t\t\tresult = this.evaluate();\n\t\t} else {\n\t\t\tif (stepTime) stepTime.startTime();\n\t\t\tresult = this.update();\n\t\t}\n\t\treturn Future.then(result, function () {\n\t\t\tmh.step = isNaN(mh.step) || +mh.step < 0 ? 0 : +mh.step + 1;\n\t\t\tmh.analyze(); // Calculate the state's stats after updating it.\n\t\t\tif (stepTime) stepTime.addTime();\n\t\t\tmh.onAdvance();\n\t\t\treturn mh;\n\t\t});\n\t},\n\t\n\t/** `run()` returns a future that is resolved when the whole search process is finished. The \n\tvalue is the best cursor after the last step. It always returns a future.\n\t*/\n\trun: function run() {\n\t\tvar mh = this, \n\t\t\tadvance = this.advance.bind(this),\n\t\t\tcontinues = function continues() {\n\t\t\t\treturn !mh.finished();\n\t\t\t};\n\t\treturn Future.doWhile(advance, continues).then(function () {\n\t\t\tmh.onFinish();\n\t\t\treturn mh.state[0]; // Return the best cursor.\n\t\t});\n\t},\n\n\t/** `reset()` reset the process to start over again. Basically cleans the statistics and sets \n\tthe current `step` to -1.\n\t*/\n\treset: function reset() {\n\t\tthis.step = -1;\n\t\tif (this.statistics) this.statistics.reset();\n\t},\n\t\n\t// ## State control ############################################################################\n\t\n\t/** The `nub` method eliminates repeated elements inside the state. Use responsibly, since this \n\tis an expensive operation. Returns the size of the resulting state.\n\t*/\n\tnub: function nub(precision) {\n\t\tprecision = isNaN(precision) ? 1e-15 : +precision;\n\t\tthis.state = iterable(this.state).nub(function (e1, e2) {\n\t\t\tvar values1 = e1.values,\n\t\t\t\tvalues2 = e2.values,\n\t\t\t\tlen = values1.length;\n\t\t\tif (len !== e2.values.length) {\n\t\t\t\treturn false;\n\t\t\t} else for (var i = 0; i < len; ++i) {\n\t\t\t\tif (Math.abs(values1[i] - values2[i]) > precision) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}).toArray();\n\t\treturn this.state.length;\n\t},\n\t\n\t// ## Events ###################################################################################\n\t\n\t/** For better customization the `events` handler emits the following events: \n\t\t\n\t+ `initiated` when the state has been initialized.\n\t*/\n\tonInitiate: function onInitiate() {\n\t\tthis.events.emit('initiated', this);\n\t\tthis.__log__('debug', 'State has been initiated. Nos coepimus.');\n\t},\n\t\n\t/** + `updated` when the state has been expanded, evaluated and sieved.\n\t*/\n\tonUpdate: function onUpdate() {\n\t\tthis.events.emit('updated', this);\n\t\tthis.__log__('debug', 'State has been updated. Mutatis mutandis.');\n\t},\n\t\n\t/** + `expanded` after new elements are added to the state.\n\t*/\n\tonExpand: function onExpand() {\n\t\tthis.events.emit('expanded', this);\n\t\tthis.__log__('debug', 'State has been expanded. Nos exploramus.');\n\t},\n\t\n\t/** + `evaluated` after the elements in the state are evaluated.\n\t*/\n\tonEvaluate: function onEvaluate(elements) {\n\t\tthis.events.emit('evaluated', this, elements);\n\t\tthis.__log__('debug', 'Evaluated and sorted ', elements.length, ' elements. Appretiatus sunt.');\n\t},\n\t\n\t/** + `sieved` after elements are removed from the state.\n\t*/\n\tonSieve: function onSieve() {\n\t\tthis.events.emit('sieved', this);\n\t\tthis.__log__('debug', 'State has been sieved. Haec est viam.');\n\t},\n\t\n\t/** + `advanced` when one full iteration is completed.\n\t*/\n\tonAdvance: function onAdvance() {\n\t\tthis.events.emit('advanced', this);\n\t\tthis.__log__('debug', 'Step ', this.step, ' has been completed. Nos proficimus.');\n\t},\n\t\n\t/** + `analyzed` after the statistics are calculated.\n\t*/\n\tonAnalyze: function onAnalyze() {\n\t\tthis.events.emit('analyzed', this);\n\t\tthis.__log__('debug', 'Statistics have been gathered. Haec sunt numeri.');\n\t},\n\t\n\t/** + `finished` when the run finishes.\n\t*/\n\tonFinish: function onFinish() {\n\t\tthis.events.emit('finished', this);\n\t\tthis.__log__('debug', 'Finished. Nos invenerunt!');\n\t},\n\t\n\t// ## Multi-objective ##########################################################################\n\t\n\t/** A Pareto analysis of a set of elements compares all elements with each other, accounting the \n\tdomination relationship between the elements. Every element gets a new property `pareto`, an \n\tobject holding two arrays:\n\t\n\t+ `pareto.dominated` is a list of elements dominated by this element,\n\t\n\t+ `pareto.dominators` is a list of elements that dominate this element.\n\t*/\n\tparetoAnalysis: function paretoAnalysis(elements) {\n\t\telements = elements || this.state;\n\t\tvar len = elements.length,\n\t\t\ti1, i2, elem1, elem2, domination;\n\t\tfor (i1 = 0; i1 < len; i1++) {\n\t\t\telements[i1].pareto = { dominated: [], dominators: [] };\n\t\t}\n\t\tfor (i1 = 0; i1 < len; i1++) {\n\t\t\telem1 = elements[i1];\n\t\t\tfor (i2 = i1 + 1; i2 < len; i2++) {\n\t\t\t\telem2 = elements[i2];\n\t\t\t\tdomination = this.problem.compare(elem1, elem2).domination;\n\t\t\t\tif (domination > 0) {\n\t\t\t\t\telem1.pareto.dominated.push(elem2);\n\t\t\t\t\telem2.pareto.dominators.push(elem1);\n\t\t\t\t} else if (domination < 0) {\n\t\t\t\t\telem2.pareto.dominated.push(elem1);\n\t\t\t\t\telem1.pareto.dominators.push(elem2);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn elements;\n\t},\n\t\n\t/** Sorting function used for multiobjective problems. By default uses `nonDominatedSort` (based\n\ton NSGA).\n\t*/\n\tmultiObjectiveSort: function multiObjectiveSort(elements) {\n\t\treturn this.nonDominatedSort(elements);\n\t},\n\t\n\t/** The crowding distance is an estimation of the density of elements surrounding each element\n\tin the given list (or the state by default). Every element will be added a `crowdingDistance` \n\tnumber property.\n\t*/\n\tcrowdingDistance: function crowdingDistance(elements) {\n\t\telements = elements || this.state;\n\t\tvar es = elements.slice(), // shallow copy.\n\t\t\tcount = this.problem.objectives.length,\n\t\t\ti, j;\n\t\tfor (i = 0; i < es.length; i++) {\n\t\t\tes[i].crowdingDistance = 0;\n\t\t}\n\t\tfor (i = 0; i < count; i++) {\n\t\t\tes.sort(function (elem1, elem2) {\n\t\t\t\treturn elem1.evaluation[i] - elem2.evaluation[i];\n\t\t\t});\n\t\t\tes[0].crowdingDistance = Infinity;\n\t\t\tes[es.length - 1].crowdingDistance = Infinity;\n\t\t\tfor (j = 1; j < es.length - 1; j++) {\n\t\t\t\tes[j].crowdingDistance += es[j + 1].evaluation[i] - es[j - 1].evaluation[i]; \n\t\t\t}\n\t\t}\n\t\treturn elements;\n\t},\n\t\n\t/** The non-dominated sort is based on [_\"A Fast Elitist Non-Dominated Sorting Genetic Algorithm\n\tfor Multi-Objective Optimization: NSGA-II\"_ by Deb (2000)](http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.18.4257).\n\t*/\n\tnonDominatedSort: function nonDominatedSort(elements) {\n\t\telements = this.paretoAnalysis(elements);\n\t\telements = this.crowdingDistance(elements);\n\t\telements.sort(function (elem1, elem2) {\n\t\t\treturn (elem1.pareto.dominators.length - elem2.pareto.dominators.length) ||\n\t\t\t\t(elem2.crowdingDistance - elem1.crowdingDistance);\n\t\t});\n\t\treturn elements;\n\t},\n\t\n\t/** The Pareto strength of an element is defined as the sum of the amount of elements being \n\tdominated by all dominators of a given element. For more information see: [_\"SPEA2: Improving \n\tthe Strength Pareto Evolutionary Algorithm\"_ by Zitzler et al (2001)](http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.112.5073).\n\t*/\n\tstrengthParetoSort: function strengthParetoSort(elements) {\n\t\telements = this.paretoAnalysis(elements);\n\t\titerable(elements).forEach(function (elem) {\n\t\t\telem.pareto.strength = iterable(elem.pareto.dominators).map(function (dominator) {\n\t\t\t\treturn dominator.pareto.dominated.length;\n\t\t\t}).sum();\n\t\t});\n\t\treturn elements.sort(function (elem1, elem2) { // Pareto strength must be minimized.\n\t\t\treturn elem1.pareto.strength - elem2.pareto.strength;\n\t\t});\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** The default string representation of a Metaheuristic shows its constructor's name and its \n\tparameters.\n\t*/\n\ttoString: function toString() {\n\t\treturn \"<\"+ (this.constructor.name || 'Metaheuristic') +\" \"+ this.problem +\">\";\n\t},\n\t\n\t/** Returns a reconstruction of the parameters used in the construction of this instance.\n\t*/\n\t__params__: function __params__() {\n\t\tvar params = { problem: this.problem, size: this.size, steps: this.steps };\n\t\tif (this.random !== Randomness.DEFAULT) {\n\t\t\tparams.random = this.random;\n\t\t}\n\t\tif (this.step >= 0) {\n\t\t\tparams.step = this.step;\n\t\t\tparams.state = this.state;\n\t\t\tparams.statistics = this.statistics;\n\t\t} else if (this.state.length > 0) {\n\t\t\tparams.state = this.state;\n\t\t}\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar id = arguments[i];\n\t\t\tif (this.hasOwnProperty(id)) {\n\t\t\t\tparams[id] = this[id];\n\t\t\t}\n\t\t}\n\t\treturn params;\n\t},\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Metaheuristic',\n\t\tserializer: function serialize_Metaheuristic(obj) {\n\t\t\treturn [obj.__params__()];\n\t\t}\n\t}\n}); // declare Metaheuristic.","/** # Hill climbing\n\n[Hill Climbing](http://en.wikipedia.org/wiki/Hill_climbing) is a simple iterative local search \nmethod. The state has only one element, and in each iteration its best successor replaces it, after\na local optimum is reached.\n*/\nvar HillClimbing = metaheuristics.HillClimbing = declare(Metaheuristic, {\n\t/** The constructor The constructor takes the following parameters:\n\t*/\n\tconstructor: function HillClimbing(params) {\n\t\tMetaheuristic.call(this, params);\n\t\tinitialize(this, params)\n\t\t/** + `delta=1` is the radius of the elements surroundings in every dimension.\n\t\t*/\n\t\t\t.number('delta', { defaultValue: 1, coerce: true })\n\t\t/** + `size` is constrained to 1 by default. This may be increased, resulting in many \n\t\tparallel climbings.\n\t\t*/\n\t\t\t.integer('size', { defaultValue: 1,\tcoerce: true });\n\t},\n\t\n\t/** The hill climbings `update()` replaces each element in the state by the best element in its \n\tneighbourhood, if there is any. The surroundings have all possible elements resulting from \n\teither an increment or decrement (of the given `delta`) in each of the centre element's \n\tdimensions.\n\t*/\n\tupdate: function update() {\n\t\tvar mh = this, \n\t\t\tlocalOptima = 0;\n\t\treturn Future.all(this.state.map(function (elem) {\n\t\t\tvar range = elem.neighbourhood(mh.delta);\n\t\t\trange.push(elem);\n\t\t\treturn Future.then(mh.evaluate(range), function (range) {\n\t\t\t\tvar best = range[0];\n\t\t\t\tif (elem === best) {\n\t\t\t\t\tlocalOptima++;\n\t\t\t\t}\n\t\t\t\treturn best;\n\t\t\t});\t\t\t\n\t\t})).then(function (elems) {\n\t\t\telems = mh.sort(elems);\n\t\t\tmh.state = elems;\n\t\t\tmh.__localOptima__ = localOptima;\n\t\t\tmh.onUpdate();\n\t\t});\n\t},\n\t\t\n\t/** `atLocalOptima()` checks if the search is currently stuck at a local optima.\n\t*/\n\tatLocalOptima: function atLocalOptima() {\n\t\treturn this.__localOptima__ >= this.state.length;\n\t},\n\t\t\n\t/** A hill climbing search must finish when a local optimum is reached. This criteria is tested \n\ttogether with all others.\n\t*/\n\tfinished: function finished() {\n\t\treturn Metaheuristic.prototype.finished.call(this) || this.atLocalOptima();\n\t},\n\t\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'HillClimbing',\n\t\tserializer: function serialize_HillClimbing(obj) {\n\t\t\treturn [obj.__params__('delta')];\n\t\t}\n\t}\n}); // declare HillClimbing.\n","/** # Genetic algorithm\n\nClassic Holland's-style [genetic algorithms](http://en.wikipedia.org/wiki/Genetic_algorithm),\nwhich is the base for many evolutionary computing variants.\n*/\nvar GeneticAlgorithm = metaheuristics.GeneticAlgorithm = declare(Metaheuristic, {\n\t/** The constructor takes many parameters specific for this technique:\n\t*/\n\tconstructor: function GeneticAlgorithm(params) {\n\t\tMetaheuristic.call(this, params); // Superconstructor call.\n\t\tinitialize(this, params)\n\t\t/** + `expansionRate=0.5` is the amount of new elements generated by crossover, as a ratio\n\t\tof the population size.\n\t\t*/\n\t\t\t.number('expansionRate', { defaultValue: 0.5, minimum: 0, coerce: true })\n\t\t/** + `mutationRate=0.2` is the chance of a new element (resulting from crossover) mutating.\n\t\t*/\n\t\t\t.number('mutationRate', { defaultValue: 0.2, minimum: 0, maximum: 1, coerce: true })\n\t\t/** + `selection(count)` is a function that selects count elements from the current \n\t\tpopulation. These will be the parents of the new elements in the next generation. By default\n\t\trank selection is used, a.k.a. fitness proportional to position in the state.\n\t\t*/\n\t\t\t.func('selection', { defaultValue: GeneticAlgorithm.selections.rankSelection })\n\t\t/** + `crossover(parents)` is a function implementing the genetic operator that simulates \n\t\treproduction with inheritance. The parents argument must be an array of elements. The result\n\t\tis an array of elements. By default the single point crossover is used.\n\t\t*/\n\t\t\t.func('crossover', { defaultValue: GeneticAlgorithm.crossovers.singlepointCrossover })\n\t\t/** `mutation(element)` is a function implementing the genetic operator that simulates \n\t\tbiological mutation, making a random change in the chromosome. By default a single point \n\t\tuniform mutation is used.\n\t\t*/\n\t\t\t.func('mutation', { defaultValue: GeneticAlgorithm.mutations.singlepointUniformMutation });\n\t},\n\n\t/** The population's (state) `expansion()` is the possibly mutated crossovers of selected \n\telements. How many is determined by `expansionRate`.\n\t*/\n\texpansion: function expansion() {\n\t\tvar parents, childs, child,\n\t\t\tnewElements = [],\n\t\t\tlen = Math.floor(this.expansionRate * this.size);\n\t\tlen += len % 2; // Make len even.\n\t\tfor (var i = 0; i < len; i += 2) {\n\t\t\tparents = this.selection();\n\t\t\tchilds = this.crossover(parents);\n\t\t\tfor (var j = 0; j < childs.length; j++) {\n\t\t\t\tchild = this.random.randomBool(this.mutationRate) ? this.mutation(childs[j]) : childs[j];\n\t\t\t\tnewElements.push(child);\n\t\t\t}\n\t\t}\n\t\tthis.onExpand();\n\t\treturn newElements;\n\t},\n\t\n\t/** ## Selection methods #######################################################################\n\n\t`GeneticAlgorithm.selections` is a bundle of standard selection methods. A selection function \n\ttakes the amount of elements to be selected and returns an array of selected elements. The \n\timplemented methods are:\n\t*/\n\t'static selections': {\n\t\t/** + `rankSelection(count=2)` makes a selection where each element's probability of being \n\t\tselected is proportional to its position in the state.\n\t\t*/\n\t\trankSelection: function rankSelection(count) {\n\t\t\tcount = isNaN(count) ? 2 : +count;\n\t\t\tvar len = this.state.length,\n\t\t\t\trandoms = this.random.randoms(count, 0, len * (len + 1) / 2 - 1),\n\t\t\t\tselected = [];\n\t\t\trandoms.sort(function (x, y) { \n\t\t\t\treturn x - y; \n\t\t\t});\n\t\t\tthis.state.forEach(function (element) {\n\t\t\t\tfor (var i = 0; i < count; i++) {\n\t\t\t\t\trandoms[i] += i - len;\n\t\t\t\t}\n\t\t\t\tif (randoms[0] <= 0) {\n\t\t\t\t\tselected.push(element);\n\t\t\t\t\trandoms.shift();\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (selected.length < count) { // Should not happen.\n\t\t\t\tselected = selected.concat(this.state.slice(0, count - selected.length));\n\t\t\t}\n\t\t\treturn selected;\n\t\t},\n\t\t\n\t\t/** + `rouletteSelection(count=2)` makes a selection where each element's probability of being \n\t\tselected is proportional to its evaluation. Warning! This selection assumes the evaluation is \n\t\tbeing maximized.\n\t\t*/\n\t\trouletteSelection: function rouletteSelection(count) { //FIXME\n\t\t\tcount = isNaN(count) ? 2 : count |0;\n\t\t\tvar len = this.state.length,\n\t\t\t\tevaluationStat = this.statistics.stat({key: 'evaluation', step: this.step}),\n\t\t\t\tmin = evaluationStat.minimum(),\n\t\t\t\tsum = evaluationStat.sum(),\n\t\t\t\trandoms = this.random.randoms(count, 0, sum - len * min),\n\t\t\t\tselected = [];\n\t\t\trandoms.sort(function (x, y) { return x-y; });\n\t\t\tthis.state.forEach(function (element) {\n\t\t\t\tfor (var i = 0; i < count; i++) {\n\t\t\t\t\trandoms[i] += i - len;\n\t\t\t\t}\n\t\t\t\tif (randoms[0] <= 0) {\n\t\t\t\t\tselected.push(element);\n\t\t\t\t\trandoms.shift();\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (selected.length < count) { // Should not happen.\n\t\t\t\tselected = selected.concat(this.state.slice(0, count - selected.length));\n\t\t\t}\n\t\t\treturn selected;\n\t\t},\n\t\t\n\t\t/** + [`stochasticUniversalSamplingSelection(count)`](http://en.wikipedia.org/wiki/Stochastic_universal_sampling)\n\t\tis a less biased version of the roulette selection method.\n\t\t*/\n\t\tstochasticUniversalSamplingSelection: function stochasticUniversalSamplingSelection(count) {\n\t\t\tcount = isNaN(count) ? 2 : count |0;\n\t\t\tvar state = this.state,\n\t\t\t\ttotalFitness = iterable(state).select('evaluation').sum(),\n\t\t\t\tp = totalFitness / count;\n\t\t\treturn base.Iterable.iterate(function (x) { \n\t\t\t\treturn x + p; \n\t\t\t}, this.random.randomInt(p), count).map(function (pointer) {\n\t\t\t\tvar sum = 0;\n\t\t\t\tfor (var i = 0; i < state.length; ++i) {\n\t\t\t\t\tsum += state[i].evaluation;\n\t\t\t\t\tif (sum >= pointer) {\n\t\t\t\t\t\treturn state[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn state[state.length - 1]; // Very improbable.\n\t\t\t}).toArray();\n\t\t},\t\t\n\t}, // GeneticAlgorithm.selections\n\n\t/** ## Crossover methods #######################################################################\n\n\t`GeneticAlgorithm.crossovers` is a bundle of standard crossover methods. A crossover function \n\ttakes an array of parent elements and returns an array of sibling elements. The implemented\n\tmethods are:\n\t*/\n\t'static crossovers': {\n\t\t/** + `singlepointCrossover(parents)` given two parents returns an array of two new elements\n\t\tbuilt with one half of each parent. The cutpoint is chosen randomly.\n\t\t*/\n\t\tsinglepointCrossover: function singlepointCrossover(parents) {\n\t\t\traiseIf(!Array.isArray(parents) || parents.length < 2, \"A two parent array is required.\");\n\t\t\tvar cut = this.random.randomInt(this.length - 1) + 1,\n\t\t\t\tvalues0 = parents[0].values,\n\t\t\t\tvalues1 = parents[1].values;\n\t\t\treturn [ \n\t\t\t\tthis.problem.newElement(values0.slice(0, cut).concat(values1.slice(cut))),\n\t\t\t\tthis.problem.newElement(values1.slice(0, cut).concat(values0.slice(cut)))\n\t\t\t];\n\t\t},\n\t\t\n\t\t/** + `twopointCrossover(parents)` given two parents returns an array of two new elements:\n\t\tthe first one with two parts of the first parent and one part of the second parent, and the \n\t\tsecond one assembled viceversa. The two cutpoints are chosen randomly.\n\t\t*/\n\t\ttwopointCrossover: function twopointCrossover(parents) {\n\t\t\traiseIf(!Array.isArray(parents) || parents.length < 2, \"A two parent array is required.\");\n\t\t\tvar cut1 = this.random.randomInt(this.length - 1) + 1,\n\t\t\t\tcut2 = this.random.randomInt(this.length - 1) + 1,\n\t\t\t\tvalues0 = parents[0].values,\n\t\t\t\tvalues1 = parents[1].values;\n\t\t\treturn [ \n\t\t\t\tthis.problem.newElement(values0.slice(0, cut1).concat(values1.slice(cut1, cut2)).concat(values0.slice(cut2))),\n\t\t\t\tthis.problem.newElement(values1.slice(0, cut1).concat(values0.slice(cut1, cut2)).concat(values1.slice(cut2)))\n\t\t\t];\n\t\t},\n\t\t\n\t\t/** + `uniformCrossover(parents)` creates as many children as the given parents, with each\n\t\tvalue taken randomly from any of the parents.\n\t\t*/\n\t\tuniformCrossover: function uniformCrossover(parents, count) {\n\t\t\tcount = isNaN(count) ? parents.length : count|0;\n\t\t\tvar result = [],\n\t\t\t\tlength = this.problem.elementLength(),\n\t\t\t\trandom = this.random,\n\t\t\t\tvalues;\n\t\t\tfor (var i = 0; i < count; ++i) {\n\t\t\t\tvalues = [];\n\t\t\t\tfor (var j = 0; j < length; ++j) {\n\t\t\t\t\tvalues.push(random.choice(parents).values[j]);\n\t\t\t\t}\n\t\t\t\tresult.push(this.problem.newElement(values));\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}, // GeneticAlgorithm.crossovers\n\t\n\t/** ## Mutation methods ########################################################################\n\n\t`GeneticAlgorithm.mutations` is a bundle of standard mutation methods. A mutation function takes \n\tan element and returns a new element which is a variation of the former. The implemented methods\n\tare:\n\t*/\n\t'static mutations': {\n\t\t/** + `singlepointUniformMutation(element)` sets a randomly selected gene to a uniform\n\t\trandom value.\n\t\t*/\n\t\tsinglepointUniformMutation: function singlepointUniformMutation(element) {\n\t\t\tvar model = this.problem.elementModel(),\n\t\t\t\ti = this.random.randomInt(model.length);\n\t\t\treturn element.modification(i, this.random.random(model[i].min, model[i].max));\n\t\t},\n\t\t\t\n\t\t/** + `uniformMutation(maxPoints=Infinity)` builds a mutation function that makes at least \n\t\tone and up to `maxPoints` mutations, changing a randomly selected gene to a uniform random\n\t\tvalue.\n\t\t*/\n\t\tuniformMutation: function uniformMutation(maxPoints) {\n\t\t\tmax = isNaN(maxPoints) ? Infinity : +maxPoints;\n\t\t\tvar model = this.problem.elementModel();\n\t\t\treturn function mutation(element) {\n\t\t\t\tvar times = maxPoints, i, range;\n\t\t\t\telement = this.problem.newElement(element.values); // Copy element.\n\t\t\t\tdo {\n\t\t\t\t\ti = this.random.randomInt(model.length);\n\t\t\t\t\telement.values[i] = this.random.random(model[i].min, model[i].max);\n\t\t\t\t} while (this.random.randomBool(this.mutationRate) && --times > 0);\n\t\t\t\treturn element;\n\t\t\t};\n\t\t},\n\t\t\n\t\t/** + `singlepointBiasedMutation(element)` sets a randomly selected gene to random deviation\n\t\tof its value, with a triangular distribution.\n\t\t*/\n\t\tsinglepointBiasedMutation: function singlepointBiasedMutation(element) {\n\t\t\tvar random = this.random,\n\t\t\t\tmodel = this.problem.elementModel(),\n\t\t\t\ti = random.randomInt(element.length);\n\t\t\treturn element.modification(i, element.values[i] + \n\t\t\t\t(random.random() - random.random()) * (model[i].max - model[i].min));\n\t\t},\n\t\t\n\t\t/** + `recombinationMutation(element)` swaps two values of the element at random.\n\t\t*/\n\t\trecombinationMutation: function recombinationMutation(element) {\n\t\t\tvar values = element.values.slice(),\n\t\t\t\ti1 = this.random.randomInt(values.length),\n\t\t\t\tv1 = values[i1],\n\t\t\t\ti2 = this.random.randomInt(values.length), v2;\n\t\t\tif (i1 === i2) {\n\t\t\t\ti2 = (i2 + 1) % element.length;\n\t\t\t}\n\t\t\tvalues[i1] = values[i2];\n\t\t\tvalues[i2] = v1;\n\t\t\treturn this.problem.newElement(values);\n\t\t}\n\t}, // GeneticAlgorithm.mutations\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'GeneticAlgorithm',\n\t\tserializer: function serialize_GeneticAlgorithm(obj) {\n\t\t\tvar params = obj.__params__('expansionRate', 'mutationRate');\n\t\t\t//TODO serialize 'selection', 'crossover', 'mutation'\n\t\t\treturn [params];\n\t\t}\n\t}\n}); // declare GeneticAlgorithm.\n","/** # Beam search\n\n[Beam search](http://en.wikipedia.org/wiki/Beam_search) is a form of parallel best-first search with \nlimited memory.\n*/\nvar BeamSearch = metaheuristics.BeamSearch = declare(Metaheuristic, {\n\t/** The constructor m take any special parameters.\n\t*/\n\tconstructor: function BeamSearch(params) {\n\t\tMetaheuristic.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t/** A `delta` may be specified for the default `successors` for continuous variables.\n\t\t\t*/\n\t\t\t.number('delta', { ignore: true, coerce: true });\n\t},\n\t\n\t/** `successors(element)` returns the elements' successors. The problem's element must have its \n\t`successors` method implemented.\n\t*/\n\tsuccessors: function successors(element) {\n\t\treturn element.neighbourhood(this.delta);\n\t},\n\t\n\t/** The expansion in beam search adds all successors of all elements to the\tstate. After being \n\tevaluated and sieved only the best will remain.\n\t*/\n\texpansion: function expansion() {\n\t\tvar allSuccessors = [],\n\t\t\tsuccessors = this.successors.bind(this);\n\t\tthis.state.forEach(function (element) {\n\t\t\tallSuccessors = allSuccessors.concat(successors(element));\n\t\t});\n\t\tthis.onExpand();\n\t\treturn allSuccessors;\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'BeamSearch',\n\t\tserializer: function serialize_BeamSearch(obj) {\n\t\t\treturn [obj.__params__('delta')];\n\t\t}\n\t}\n}); // declare BeamSearch.\n","/** # Simulated annealing\n\n[Simulated annealing](http://en.wikipedia.org/wiki/Simulated_annealing) is a stochastic global \noptimization technique.\n*/\nvar SimulatedAnnealing = metaheuristics.SimulatedAnnealing = declare(Metaheuristic, {\n\t/** The constructor takes some specific parameters for this search:\n\t*/\n\tconstructor: function SimulatedAnnealing(params) {\n\t\tMetaheuristic.call(this, params);\n\t\tinitialize(this, params)\n\t\t/** + `maximumTemperature=1` is the temperature at the start of the run.\n\t\t*/\n\t\t\t.number('maximumTemperature', { defaultValue: 1, coerce: true })\n\t\t/** + `minimumTemperature=0` is the temperature at the end of the run.\n\t\t*/\n\t\t\t.number('minimumTemperature', { defaultValue: 0, coerce: true })\n\t\t/** + `delta=1` is the radius of the elements surroundings in every dimension, that is \n\t\tchecked by this algorithm.\n\t\t*/\n\t\t\t.number('delta', { defaultValue: 1, coerce: true })\n\t\t/** + `size=1` is 1 by default, but larger states are supported.\n\t\t*/\n\t\t\t.integer('size', { defaultValue: 1,\tcoerce: true })\n\t\t/** + `temperature=coolingSchedule.linear` is the temperature function.\n\t\t*/\n\t\t\t.func('temperature', { defaultValue: this.coolingSchedule.linear });\n\t},\n\t\n\t/** `randomNeighbour(element, radius=this.delta)` returns one neighbour of the given element \n\tchosen at random.\n\t*/\n\trandomNeighbour: function randomNeighbour(element, radius) {\n\t\tradius = isNaN(radius) ? this.delta : +radius;\n\t\tvar i = this.random.randomInt(element.values.length), \n\t\t\tv = element.values[i];\n\t\treturn element.modification(i, this.random.randomBool() ? v + radius : v - radius);\n\t},\n\t\n\t/** The `acceptance(current, neighbour, temp=this.temperature())` is the probability of \n\taccepting the new element. Uses the original definitions from \n\t[Kirkpatrick's paper](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.123.7607).\n\t*/\n\tacceptance: function acceptance(current, neighbour, temp) {\n\t\ttemp = isNaN(temp) ? this.temperature() : +temp;\n\t\tif (this.problem.compare(current, neighbour) > 0) {\n\t\t\treturn 1; // Should always accept a better neighbour.\n\t\t} else {\n\t\t\tvar d = -Math.abs(neighbour.evaluation - current.evaluation);\n\t\t\treturn clamp(Math.exp(d / temp), 0, 1);\n\t\t}\n\t},\n\t\n\t/** The annealings temperature is a metaphore for the amount of randomness the process applies. \n\tThe cooling schedule is a function that calculates the temperature for any given step in the\n\toptimization.\n\t*/\n\tcoolingSchedule: {\n\t\tlinear: function temperature() {\n\t\t\treturn (1 - Math.max(0, this.step) / this.steps) * \n\t\t\t\t(this.maximumTemperature - this.minimumTemperature) + this.minimumTemperature;\n\t\t}\n\t},\n\t\n\t/** At every iteration, for each element in the state one of its neighbours is chosen randomly. \n\tIf the neighbour is better, it replaces the corresponding element. Else it may still do so, but \n\twith a probability calculated by `acceptance()`.\n\t*/\n\tupdate: function update() {\n\t\tvar mh = this,\n\t\t\ttemp = this.temperature(),\n\t\t\tacceptanceStat = this.statistics.stat({key: 'acceptance'}),\n\t\t\ttemperatureStat = this.statistics.stat({key: 'temperature'});\n\t\ttemperatureStat.add(temp, this.step);\n\t\treturn Future.all(this.state.map(function (elem) {\n\t\t\tvar neighbour = mh.randomNeighbour(elem);\n\t\t\treturn Future.then(neighbour.evaluate(), function () {\n\t\t\t\tvar p = mh.acceptance(elem, neighbour, temp);\n\t\t\t\tacceptanceStat.add(p, neighbour);\n\t\t\t\treturn mh.random.randomBool(p) ? neighbour : elem;\n\t\t\t});\n\t\t})).then(function (elems) {\n\t\t\telems = mh.sort(elems);\n\t\t\tmh.state = elems;\n\t\t\tmh.onUpdate();\n\t\t\treturn mh;\n\t\t});\n\t},\n\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'SimulatedAnnealing',\n\t\tserializer: function serialize_SimulatedAnnealing(obj) {\n\t\t\t//TODO Serialize 'temperature'\n\t\t\treturn [obj.__params__('maximumTemperature', 'minimumTemperature', 'delta')];\n\t\t}\n\t}\n}); // declare SimulatedAnnealing.\n","/** # Particle swarm\n\n[Particle Swarm](http://en.wikipedia.org/wiki/Particle_swarm_optimization) is an stochastic \noptimization technique. Every candidate solution is treated as a particle with a position and a \nvelocity. On each iteration the positions and velocities of every particle are updated considering\nthe best positions so far.\n*/\nvar ParticleSwarm = metaheuristics.ParticleSwarm = declare(Metaheuristic, {\n\t/** The constructor takes some specific parameters for this search:\n\t*/\n\tconstructor: function ParticleSwarm(params) {\n\t\tMetaheuristic.call(this, params);\n\t\tinitialize(this, params)\n\t\t/** + `inertia=1` is the weight of the particle's current velocity in the velocity update.\n\t\t*/\n\t\t\t.number('inertia', { defaultValue: 1, coerce: true })\n\t\t/** + `localAcceleration=0.5` is the weight of the particle's current best position in the \n\t\t\t\tvelocity update.\n\t\t*/\n\t\t\t.number('localAcceleration', { defaultValue: 0.5, coerce: true })\n\t\t/** + `globalAcceleration=0.3` is the weight of the whole swarm's current best position in \n\t\t\t\tthe velocity update.\n\t\t*/\n\t\t\t.number('globalAcceleration', { defaultValue: 0.3, coerce: true });\n\t},\n\t\n\t/** The elements in a particle swarm have two added properties which have to be initialized:\n\t\n\t+ `__velocity__` is the vector that defines the movement of the particle. Initially it is a \n\t\trandom vector.\n\t+ `__localBest__` is the best position of the particle in the run. The first position has \n\t\titself as the best so far.\n\t*/\n\tinitiate: function initiate(size) {\n\t\tMetaheuristic.prototype.initiate.call(this, size);\n\t\tvar mh = this,\n\t\t\tmodel = this.problem.elementModel(),\n\t\t\tresult = this.state.forEach(function (element) {\n\t\t\t\telement.__velocity__ = mh.random.randoms(element.values.length, -1, +1).map(function (v, i) {\n\t\t\t\t\treturn v * (model[i].max - model[i].min);\n\t\t\t\t});\n\t\t\t\telement.__localBest__ = element;\n\t\t\t});\n\t\tthis.onInitiate();\n\t\treturn result;\n\t},\n\t\n\t/** The method `nextVelocity` calculates the velocity of the particle for the next iteration.\n\t*/\n\tnextVelocity: function nextVelocity(element, globalBest) {\n\t\tvar mh = this,\n\t\t\tvelocity = element.__velocity__,\n\t\t\tlocalBest = element.__localBest__,\n\t\t\tlocalCoef = this.random.random(this.localAcceleration),\n\t\t\tglobalCoef = this.random.random(this.globalAcceleration),\n\t\t\tresult = element.values.map(function (v, i) {\n\t\t\t\treturn velocity[i] * mh.inertia +\n\t\t\t\t\tlocalCoef * (localBest.values[i] - v) +\n\t\t\t\t\tglobalCoef * (globalBest.values[i] - v);\n\t\t\t});\n\t\treturn result;\n\t},\n\t\n\t/** The method `nextElement` creates a new element which represents the position of a particle \n\tin the next iteration.\n\t*/\n\tnextElement: function nextElement(element, globalBest) {\n\t\tvar mh = this,\n\t\t\tnextVelocity = this.nextVelocity(element, globalBest),\n\t\t\tnextValues = element.values.map(function (v, i) {\n\t\t\t\treturn v + nextVelocity[i];\n\t\t\t}),\n\t\t\tresult = this.problem.newElement(nextValues);\n\t\treturn Future.then(result.evaluate(), function () {\n\t\t\tresult.__velocity__ = nextVelocity;\n\t\t\tresult.__localBest__ = mh.problem.compare(element.__localBest__, result) > 0 ? result : element.__localBest__;\n\t\t\treturn result;\n\t\t});\t\t\n\t},\n\t\n\t/** Updating the optimization state means updating each particle velocity and recalculating \n\ttheir positions. The best position of the whole run is stored in the `__globalBest__` property,\n\tand updated every time a new best position is achieved. If nothing fails, in the end the \n\tparticles should converge at this position.\n\t*/\n\tupdate: function update() {\n\t\tvar mh = this,\n\t\t\tglobalBest = this.__globalBest__;\n\t\tif (!globalBest) {\n\t\t\tglobalBest = this.__globalBest__ = this.state[0];\n\t\t}\n\t\treturn Future.all(this.state.map(function (element) {\n\t\t\treturn mh.nextElement(element, globalBest);\n\t\t})).then(function (elements) {\n\t\t\telements = mh.sort(elements);\n\t\t\tmh.state = elements;\n\t\t\tif (mh.problem.compare(mh.__globalBest__, elements[0]) > 0) {\n\t\t\t\tmh.__globalBest__ = elements[0];\n\t\t\t}\n\t\t\tmh.onUpdate();\n\t\t\treturn mh;\n\t\t});\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'ParticleSwarm',\n\t\tserializer: function serialize_ParticleSwarm(obj) {\n\t\t\treturn [obj.__params__('inertia', 'localAcceleration', 'globalAcceleration')];\n\t\t}\n\t}\n}); // declare ParticleSwarm.\n","/** # Differential evolution\n\n[Differential evolution](http://en.wikipedia.org/wiki/Differential_evolution) is an evolutionary\nmetaheuristic based on a particular form of crossover. This operator acts on individual values of\neach state, replacing the value with a combination of the corresponding value in three other \nrandomly chosen elements.\n*/\nvar DifferentialEvolution = metaheuristics.DifferentialEvolution = declare(Metaheuristic, {\n\t/** The constructor takes the following parameters:\n\t*/\n\tconstructor: function DifferentialEvolution(params) {\n\t\tMetaheuristic.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t/** + `differentialWeight=1` is the coefficient (usually named `F`) in the crossover \n\t\t\tformula.\n\t\t\t*/\n\t\t\t.number('differentialWeight', { coerce: true, defaultValue: 1, minimum: 0, maximum: 2 })\n\t\t\t/** + `crossoverProbability=30%` is the probability of getting a value from a crossover. \n\t\t\t*/\n\t\t\t.number('crossoverProbability', { coerce: true, defaultValue: 0.3, minimum: 0, maximum: 1 })\n\t\t\t/** Also, the state's size is constrained to a minimum of 4, because of how the \n\t\t\tcrossover works.\n\t\t\t*/\n\t\t\t.integer('size', { coerce: true, defaultValue: 100, minimum: 4 });\n\t},\n\t\n\t/** The expansion is quite simple. For each element `x` in the state a new one is generated. \n\tThree other elements are randomly selected from the state, named `a`, `b` and `c`. With a \n\tprobability of `crossoverProbability`, the ith value of the new element results from \n\t`a[i] + F(b[i] - c[i])`, where `F` is the `differentialWeight`. The other values are copied from \n\t`x`, although it is assured that at least one of the new element's is calculated as shown \n\tbefore. \n\t*/\n\texpansion: function expansion() {\n\t\tvar mh = this,\n\t\t\tresult = this.state.map(function (element, elementIndex) {\n\t\t\t\tvar stateCopy = mh.state.slice();\n\t\t\t\tstateCopy.splice(elementIndex, 1);\n\t\t\t\tvar crossover = mh.random.choices(3, stateCopy),\n\t\t\t\t\ta = crossover[0].values,\n\t\t\t\t\tb = crossover[1].values,\n\t\t\t\t\tc = crossover[2].values,\n\t\t\t\t\tlen = element.values.length,\n\t\t\t\t\trandomIndex = mh.random.randomInt(len),\n\t\t\t\t\tnewValues = element.values.map(function (value, i) {\n\t\t\t\t\t\tif (i === randomIndex || mh.random.randomBool(mh.crossoverProbability)) {\n\t\t\t\t\t\t\treturn a[i] + mh.differentialWeight * (b[i] - c[i]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\treturn mh.problem.newElement(newValues);\n\t\t\t});\n\t\tthis.onExpand();\n\t\treturn result;\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'DifferentialEvolution',\n\t\tserializer: function serialize_DifferentialEvolution(obj) {\n\t\t\treturn [obj.__params__('differentialWeight', 'crossoverProbability')];\n\t\t}\n\t}\n}); // declare DifferentialEvolution.\n","/** # Evolution strategy.\n\n[Evolution strategy](https://en.wikipedia.org/wiki/Evolution_strategy) is maybe the simplest \nevolutionary optimization method. At each step, one or more random deviations of each element are\ngenerated, replacing their parent if they prove to be better.\n*/\nvar EvolutionStrategy = metaheuristics.EvolutionStrategy = declare(Metaheuristic, {\n\t/** The constructor takes the following parameters:\n\t*/\n\tconstructor: function EvolutionStrategy(params) {\n\t\tMetaheuristic.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t/** + `mutantCount=1` is the number of mutants generated per element at each step.\n\t\t\t*/\n\t\t\t.number('mutantCount', { coerce: true, defaultValue: 1, minimum: 1 })\n\t\t\t/** + `size=1`: state's size is 1 by default in this metaheuristic.\n\t\t\t*/\n\t\t\t.integer('size', { coerce: true, defaultValue: 1, minimum: 1 });\n\t},\n\t\n\t/** A `mutant` is a new random variation of the given `element`. Although using a normal \n\tdistribution is more common, here a more efficient tringular distribution is used.\n\t*/\n\tmutant: function mutant(element) {\n\t\tvar random = this.random,\n\t\t\tmodel = this.problem.elementModel(),\n\t\t\tnewValues = element.values.map(function (v, i) {\n\t\t\t\tvar range = model[i];\n\t\t\t\treturn v + (random.random() - random.random()) * (range.max - range.min);\n\t\t\t});\n\t\treturn this.problem.newElement(newValues);\n\t},\n\t\n\t/** `mutants` calculates an array of `count` mutants, or `this.mutantCount` by default. \n\t*/\n\tmutants: function mutants(element, count) {\n\t\tcount = isNaN(count) ? this.mutantCount : +count;\n\t\tvar result = [];\n\t\tfor (var i = 0; i < count; ++i) {\n\t\t\tresult.push(this.mutant(element));\n\t\t}\n\t\treturn result;\n\t},\n\t\n\t/** The expansion simply returns a set of `this.mutantCount` mutants for each element in the\n\tcurrent state.\n\t*/\n\texpansion: function expansion() {\n\t\tvar mh = this,\n\t\t\tnewElements = [];\n\t\tthis.state.forEach(function (element) {\n\t\t\tnewElements = newElements.concat(mh.mutants(element));\n\t\t});\n\t\tthis.onExpand();\n\t\treturn newElements;\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'DistributionEstimation',\n\t\tserializer: function serialize_DistributionEstimation(obj) {\n\t\t\treturn [obj.__params__('mutantCount')];\n\t\t}\n\t}\n}); // declare EvolutionStrategy.\n","/** # Harmony search.\n\n[Harmony search](https://en.wikipedia.org/wiki/Harmony_search) is an optimization technique inspired\nby the improvisation process of musicians proposed by Zong Woo Geem in 2001.\n*/\nvar HarmonySearch = metaheuristics.HarmonySearch = declare(Metaheuristic, {\n\t/** The constructor takes the following parameters:\n\t*/\n\tconstructor: function HarmonySearch(params) {\n\t\tMetaheuristic.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t/** + `harmonyProbability=90%` or _hmcr_ is the chance of a value of the next element \n\t\t\tbeing taken from one existing element in the state (or _\"harmony memory\"_).\n\t\t\t*/\n\t\t\t.number('harmonyProbability', { coerce: true, defaultValue: 0.9, minimum: 0, maximum: 1 })\n\t\t\t/** + `adjustProbability=30%` or _par_ is the chance of adjusting a value of the next\n\t\t\telement.\n\t\t\t*/\n\t\t\t.number('adjustProbability', { coerce: true, defaultValue: 0.5, minimum: 0, maximum: 1 })\n\t\t\t/** + `delta=1` is the distance between neighbouring states for discrete adjustments.\n\t\t\t*/\n\t\t\t.number('delta', { coerce: true, defaultValue: 1 })\n\t\t\t/** + `fretWidth=0.01` is the maximum adjustment for continuous variables, expressed as \n\t\t\ta ratio of the range.\n\t\t\t*/\n\t\t\t.number('fretWidth', { coerce: true, defaultValue: 0.01 })\n\t\t\t;\n\t},\n\t\n\t/** At each step only one new element is generated. Each of its values is taken from another\n\telement in the state with a chance equal to `harmonyProbability`, else it is defined at random.\n\tIf the value comes from another element, it is slightly modified by `delta` with a chance equal\n\tto `adjustProbability`.\n\t*/\n\texpansion: function expansion() {\n\t\tvar mh = this,\n\t\t\trandom = this.random,\n\t\t\tmodel = this.problem.elementModel(),\n\t\t\tvalues = model.map(function (range, i) {\n\t\t\t\tif (random.randomBool(mh.harmonyProbability)) {\n\t\t\t\t\tvar value = random.choice(mh.state).values[i];\n\t\t\t\t\tif (random.randomBool(mh.adjustProbability)) {\n\t\t\t\t\t\tif (range.discrete) {\n\t\t\t\t\t\t\tvalue += random.choice([-mh.delta, mh.delta]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar span = range.max - range.min;\n\t\t\t\t\t\t\tvalue += random.random(-span, +span) * mh.fretWidth;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t} else {\n\t\t\t\t\treturn random.random(range.min, range.max);\n\t\t\t\t}\n\t\t\t});\n\t\tthis.onExpand();\n\t\treturn [this.problem.newElement(values)];\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'HarmonySearch',\n\t\tserializer: function serialize_HarmonySearch(obj) {\n\t\t\treturn [obj.__params__('harmonyProbability', 'adjustProbability', 'delta', 'fretWidth')];\n\t\t}\n\t}\n}); // declare HarmonySearch.","/** # Distribution estimation\n\nThis is a simple implementation of a [estimation of distributionalgorithm]\n(http://en.wikipedia.org/wiki/Estimation_of_distribution_algorithm). This stochastic optimization \nmethods try to estimate a probabilistic model for the characteristics of the better candidate \nsolutions. At each step many individual are randomly generated based on the current model. After all\nhave been evaluated, the model is adjusted.\n\nThe statistical model in this implementation is an histogram for each dimension (i.e. value of the\nelement representing the candidate solution). Dimensions are assumed to be independent of each \nother.\n*/\nvar DistributionEstimation = metaheuristics.DistributionEstimation = declare(Metaheuristic, {\n\t/** The constructor takes the following parameters:\n\t*/\n\tconstructor: function DistributionEstimation(params) {\n\t\tMetaheuristic.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t/** + `histogramWidth=10` is the amounts of ranges the value domain is split in order\n\t\t\tto calculate the histograms.\n\t\t\t*/\n\t\t\t.integer('histogramWidth', { coerce: true, defaultValue: 10, minimum: 2 });\n\t},\n\t\n\t/** New elements to add to the state in the `expansion` are build from the `histograms`\n\tcalculated from said state.\n\t*/\n\texpansion: function expansion(size) {\n\t\tvar mh = this,\n\t\t\texpansionRate = isNaN(this.expansionRate) ? 0.5 : +this.expansionRate,\n\t\t\thistograms = this.histograms(); // Get the current histogram of the state.\n\t\tsize = isNaN(size) ? Math.floor(expansionRate * this.size) : size |0;\n\t\treturn base.Iterable.repeat(null, size).map(function () {\n\t\t\treturn mh.elementFromHistograms(histograms);\n\t\t}).toArray();\n\t},\n\t\n\t/** The `histograms` have the frequencies of value ranges in the current state.\n\t*/\n\thistograms: function histograms() {\n\t\treturn DistributionEstimation.histograms(this.state, this.histogramWidth, \n\t\t\tthis.problem.elementModel().length);\n\t},\n\t\n\t'static histograms': function histograms(state, histogramWidth, histogramCount) {\n\t\tvar size = state.length,\n\t\t\tcounts = Iterable.iterate(function (v) { // Builds a matrix of zeroes.\n\t\t\t\treturn v.slice();\n\t\t\t}, Iterable.repeat(0, histogramWidth).toArray(), histogramCount).toArray();\n\t\tstate.forEach(function (element) {\n\t\t\telement.values.forEach(function (value, i) {\n\t\t\t\tvar bar = Math.min(histogramWidth - 1, Math.floor(element.values[i] * histogramWidth)); //FIXME Normalize.\n\t\t\t\tcounts[i][bar]++;\n\t\t\t});\n\t\t});\n\t\treturn counts.map(function (v) { // Turn counts into frequencies.\n\t\t\treturn v.map(function (v) {\n\t\t\t\treturn v / size;\n\t\t\t}); \n\t\t});\n\t},\n\t\n\t/** The method `elementFromHistogram` is used to make these new random elements.\n\t*/\n\telementFromHistograms: function elementFromHistogram(histograms) {\n\t\treturn DistributionEstimation.elementFromHistograms(histograms, this.problem, this.random);\n\t},\n\t\n\t'static elementFromHistograms': function elementFromHistogram(histograms, problem, random) {\n\t\tvar length = histograms.length,\n\t\t\tvalues = new Array(length),\n\t\t\thistogram, r;\n\t\tfor (var i = 0; i < length; ++i) {\n\t\t\thistogram = histograms[i];\n\t\t\tr = random.random();\n\t\t\tfor (var j = 0; j <= histogram.length; ++j) {\n\t\t\t\tif (j === histogram.length || (r -= histogram[j]) <= 0) {\n\t\t\t\t\tvalues[i] = Math.min(1, Math.max(0, (j + random.random()) / histogram.length));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn problem.newElement(values);\n\t},\n\t\n\t// ## Estimation of distribution as a problem. #################################################\n\t\n\t/** A `histogramProblem` is the problem of finding histograms that would generate good candidate\n\tsolutions for a given `problem`.\n\t*/\n\t'static histogramProblem': function histogramProblem(problem, size, histogramWidth) {\n\t\tsize = isNaN(size) ? 30 : Math.max(1, size |0);\n\t\thistogramWidth = isNaN(histogramWidth) ? 10 : Math.max(2, histogramWidth |0);\n\t\tvar elementLength = problem.elementLength(),\n\t\t\telementFromHistograms = this.elementFromHistograms;\n\t\t\tHistogramProblem = declare(Problem, {\n\t\t\t\t/** Each element of this problem represents an histogram for elements of the given\n\t\t\t\t`problem`. The argument `histogramWidth` defines how many ranges each histogram has.\n\t\t\t\t*/\n\t\t\t\telementLength: function elementLength() {\n\t\t\t\t\treturn elementLength * histogramWidth;\n\t\t\t\t},\n\t\t\t\t\n\t\t\t\t/** The evaluation of the elements is the average evaluation of `size` elements \n\t\t\t\tgenerated from the histogram that this element represents.\n\t\t\t\t*/\n\t\t\t\tevaluation: function evaluation(element) {\n\t\t\t\t\tvar histograms = this.mapping(element),\n\t\t\t\t\t\telements = base.Iterable.repeat(null, size).map(function () {\n\t\t\t\t\t\t\treturn elementFromHistograms(histograms, problem, problem.random);\n\t\t\t\t\t\t});\n\t\t\t\t\treturn Future.all(iterable(elements).map(function (e) {\n\t\t\t\t\t\treturn Future.when(e.evaluate());\n\t\t\t\t\t})).then(function (evaluations) {\n\t\t\t\t\t\treturn iterable(evaluations).sum() / evaluations.length;\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\t\n\t\t\t\t/** The `mapping` simply assembles the histograms and normalizes its frequencies.\n\t\t\t\t*/\n\t\t\t\tmapping: function mapping(element) {\n\t\t\t\t\tvar histograms = [],\n\t\t\t\t\t\thistogram, sum;\n\t\t\t\t\tfor (var i = 0; i < element.length; ++i) {\n\t\t\t\t\t\thistogram = element.values.slice(i * histogramWidth, (i+1) * histogramWidth);\n\t\t\t\t\t\tsum = iterable(histogram).sum();\n\t\t\t\t\t\thistograms[i] = histogram.map(function (f) { // Normalization\n\t\t\t\t\t\t\treturn f / sum;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\treturn histograms;\n\t\t\t\t},\n\t\t\t\t\n\t\t\t\t/** The comparison function is the same as the original problem's.\n\t\t\t\t*/\n\t\t\t\tcompare: problem.compare\n\t\t\t});\n\t\treturn new HistogramProblem({ random: problem.random });\n\t},\n\t\n\t// ## Other ####################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'DistributionEstimation',\n\t\tserializer: function serialize_DistributionEstimation(obj) {\n\t\t\treturn [obj.__params__('histogramWidth')];\n\t\t}\n\t}\n}); // declare DistributionEstimation.\n","/** # Gradient descent\n\n[Gradient descent](http://en.wikipedia.org/wiki/Gradient_descent) is an iterative optimization \nmethod, similar to Hill Climbing. The candidate solution is treated as a point in a multidimensional\nsearch space, and the gradient that the function being optimized defines in said domain is used to\nmove the current solution in the steepest direction.\n*/\nvar GradientDescent = metaheuristics.GradientDescent = declare(Metaheuristic, {\n\t/** The constructor takes the following parameters:\n\t*/\n\tconstructor: function HillClimbing(params) {\n\t\tMetaheuristic.call(this, params);\n\t\tinitialize(this, params)\n\t\t/** + `delta=1`: the maximum distance considered by gradient estimators.\n\t\t*/\n\t\t\t.number('delta', { coerce: true, defaultValue: 1 })\n\t\t/** + `size=1`: the state's size is 1 by default. This may be increased, resulting in many \n\t\tparallel descents.\n\t\t*/\n\t\t\t.integer('size', { coerce: true, defaultValue: 1, minimum: 1 });\n\t},\n\t\n\t/** A `gradient` is the vector for the direction of steepest descent (or ascent) of the function \n\tto be optimized at the given `element`. If the function is not differentiable an approximation\n\tcan be used. Since estimators may require element evaluation, which can be asynchronous, it must\n\tbe considered that this function may return a future.\n\t\n\tThe default implementation is based on the finite difference method proposed by [Kiefer and \n\tWolfowitz](http://projecteuclid.org/euclid.aoms/1177729392).\n\t*/\n\tgradient: function gradient(element) {\n\t\treturn this.gradientFiniteDifferences(element);\n\t},\n\t\n\t/** The `rate` is a number by which the gradient is multiplied before adding it to the current \n\tpoint to advance to the next step. The default implementation returns `1/step`, as [Kiefer and \n\tWolfowitz suggest](http://projecteuclid.org/euclid.aoms/1177729392).\n\t*/\n\trate: function rate(step) {\n\t\tstep = isNaN(step) ? this.step : step |0;\n\t\treturn 1 / Math.max(1, step);\n\t},\n\t\n\t/** The `estimatorWidth` is a number used by some gradient estimators. By default it returns \n\t`step^(-1/3) * delta`, similar to what [Kiefer and Wolfowitz suggest](http://projecteuclid.org/euclid.aoms/1177729392).\n\t*/\n\testimatorWidth: function estimatorWidth(step, delta) {\n\t\tstep = isNaN(step) ? this.step : step |0;\n\t\tdelta = isNaN(delta) ? this.delta : +delta;\n\t\treturn Math.pow(Math.max(1, step), -1/3) * delta;\n\t},\n\t\n\t/** In the `update`, each element in the state is moved in the search domain. The movement is \n\tset by its gradient in the direction of the optimization. The distance is defined by the `rate`\n\tfor the current step.\n\t*/\n\tupdate: function update() {\n\t\tvar mh = this,\n\t\t\trate = this.rate(this.step);\n\t\treturn Future.all(this.state.map(function (elem) {\n\t\t\treturn Future.then(mh.gradient(elem), function (gradient) {\n\t\t\t\tvar newValues = gradient.map(function (gradientValue, i) {\n\t\t\t\t\treturn elem.values[i] - gradientValue * rate;\n\t\t\t\t});\n\t\t\t\treturn mh.problem.newElement(newValues);\n\t\t\t});\n\t\t})).then(function (elems) {\n\t\t\treturn mh.evaluate(elems);\n\t\t}).then(function (elems) {\n\t\t\tmh.state = elems;\n\t\t\tmh.onUpdate();\n\t\t\treturn mh;\n\t\t});\n\t},\n\t\n\t// ## Gradient estimators ######################################################################\n\t\n\t/** A gradient estimator at the given `element` by finite differences.\n\t*/\n\tgradientFiniteDifferences: function gradientFiniteDifferences(element, width) {\n\t\twidth = isNaN(width) ? this.estimatorWidth() : +width;\n\t\tvar mh = this;\n\t\treturn Future.all(element.values.map(function (value, i) {\n\t\t\tvar left = element.modification(i, value - width),\n\t\t\t\tright = element.modification(i, value + width);\n\t\t\treturn Future.then(left.evaluate(), function (leftEvaluation) {\n\t\t\t\treturn Future.then(right.evaluate(), function (rightEvaluation) {\n\t\t\t\t\tvar comp = mh.problem.compare(left, right);\n\t\t\t\t\tcomp = comp === 0 ? comp : comp > 0 ? 1 : -1;\n\t\t\t\t\treturn (leftEvaluation - rightEvaluation) * comp / 2 / width;\n\t\t\t\t});\n\t\t\t});\n\t\t}));\n\t},\n\t\n\t/** A gradient estimator at the given `element` for [Simultaneous Perturbation Stochastic \n\tApproximation](http://www.jhuapl.edu/SPSA/).\n\t*/\n\tgradientSimultaneousPerturbation: function gradientSimultaneousPerturbation(width, element) {\n\t\tthrow new Error('GradientDescent.gradientSimultaneousPerturbation() is not implemented!');//TODO\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'GradientDescent',\n\t\tserializer: function serialize_GradientDescent(obj) {\n\t\t\treturn [obj.__params__('delta')];\n\t\t}\n\t}\n}); // declare GradientDescent.","/** # _\"Hello World\"_ problem\n\nAs it sounds, `HelloWorld` is a simple problem class, probably only useful for testing purposes.\n*/\nproblems.HelloWorld = declare(Problem, { \n\ttitle: \"Hello world\",\n\tdescription: \"Simple problem where each element is a string, and the \"+\n\t\t\"optimization goes towards the target string.\",\n\t\n\t/** In this simple problem each element is a string, and the optimization goes towards the \n\ttarget string. The string to match is specified by the `target` parameter (`\"Hello world!\"` by \n\tdefault).\n\t*/\t\n\tconstructor: function HelloWorld(params){\n\t\tProblem.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t.string('target', { coerce: true, defaultValue: 'Hello world!' });\n\t\t\n\t\tthis.__target__ = iterable(this.target).map(function (c) {\n\t\t\treturn c.charCodeAt(0);\n\t\t}).toArray();\n\t\t/** The elements' length is equal to the length of the target string. Every value is between \n\t\t32 (inclusive) and 127 (exclusive), which is the range of visible characters in ASCII.\n\t\t*/\n\t\tthis.__elementModel__ = Iterable.repeat({ min: 32, max: 127, discrete: true }, this.target.length).toArray();\n\t},\n\t\n\t/** An element's values are always numbers. These are converted to a string by converting each \n\tnumber to its corresponding Unicode character.\n\t*/\n\tmapping: function mapping(element) {\n\t\treturn element.values.map(function (v) {\n\t\t\treturn String.fromCharCode(Math.floor(v));\n\t\t}).join('');\n\t},\n\t\t\t\n\t/** An element evaluation is equal to its distance from target string.\n\t*/\n\tevaluation: function evaluation(element) {\n\t\treturn element.manhattanDistance(this.__target__, element.values);\n\t},\t\t\n\t\n\t/** Since elements' evaluation is a distance, this value must be minimized to guide the search \n\ttowards the target string.\n\t*/\n\tcompare: Problem.prototype.minimization,\n\t\n\t/** An element is sufficient when its equal to the target string.\n\t*/\n\tsufficientElement: function sufficientElement(element) {\n\t\treturn this.mapping(element) === this.target;\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'HelloWorld',\n\t\tserializer: function serialize_HelloWorld(obj) {\n\t\t\treturn [obj.__params__('target')];\n\t\t}\n\t}\n}); // declare HelloWorld.\n","/** # Test beds\n\nProblem builder for test beds of algorithms in this library.\n*/\n\n/** The function `testbed` is a shortcut used to define the test problems.\n*/\nvar TestBed = problems.TestBed = declare(Problem, {\n\tconstructor: function TestBed(spec) {\n\t\tProblem.call(this, spec);\n\t\tthis.title = spec.title;\n\t\t\n\t\tvar minimumValue = isNaN(spec.minimumValue) ? -1e6 : +spec.minimumValue,\n\t\t\tmaximumValue = isNaN(spec.maximumValue) ? +1e6 : +spec.maximumValue,\n\t\t\tlength = isNaN(spec.length) ? 2 : +spec.length;\n\t\tthis.__elementModel__ = Iterable.repeat({ min: minimumValue, max: maximumValue, discrete: !!spec.discreteDomain }, length).toArray();\n\t\t\n\t\tthis.evaluation = function evaluation(element) {\n\t\t\treturn spec.evaluation(element.values);\n\t\t};\n\t\t\n\t\t/** If an optimum value is provided (`spec.optimumValue`) it is added to the termination\n\t\tcriteria.\n\t\t*/\n\t\tif (spec.hasOwnProperty('optimumValue')) {\n\t\t\tthis.sufficientElement = function sufficientElement(element) {\n\t\t\t\treturn Math.abs(element.evaluation - spec.optimumValue) < element.resolution;\n\t\t\t};\n\t\t}\n\t}\n});\n\t\n/** Testbed problems taken from the web (e.g. \n[1](http://en.wikipedia.org/wiki/Test_functions_for_optimization),\n[2](http://www.sfu.ca/~ssurjano/optimization.html), \n[3](http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/TestGO.htm)\n).\n*/\nproblems.testbeds = {\n\t/** The [Ackley's function](http://www.sfu.ca/~ssurjano/ackley.html) (in 2 dimensions) has an\n\tglobal optimum surrounded by an outer region that is rather flat, yet with many local optima. \n\t*/\n\tAckley: function Ackley(length, a, b, c) {\n\t\ta = isNaN(a) ? 20 : +a;\n\t\tb = isNaN(b) ? 0.2 : +b;\n\t\tc = isNaN(c) ? 2 * Math.PI : +c;\n\t\treturn new TestBed({\n\t\t\ttitle: \"Ackley testbed\",\n\t\t\tlength: length,\n\t\t\tobjectives: -Infinity,\n\t\t\tminimumValue: -32.768, \n\t\t\tmaximumValue: +32.768,\t\t\t\n\t\t\toptimumValue: 0,\t\t\t\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar term1 = 0, term2 = 0, d = vs.length, v;\n\t\t\t\tfor (var i = 0; i < d; ++i) {\n\t\t\t\t\tv = vs[i];\n\t\t\t\t\tterm1 += v * v;\n\t\t\t\t\tterm2 += Math.cos(c * v);\n\t\t\t\t}\n\t\t\t\treturn -a * Math.exp(-b * Math.sqrt(term1 / d)) - Math.exp(term2 / d) + a + Math.exp(1);\n\t\t\t}\n\t\t});\n\t},\n\n\t/** The cross-in-tray is a function with many local optima, both minima and maxima. If minimized\n\tit has 4 global minima.\n\t*/\n\tcrossInTray: function crossInTray(target) {\n\t\ttarget = isNaN(target) ? -Infinity : +target;\n\t\treturn new TestBed({\n\t\t\ttitle: \"cross-in-tray testbed\",\n\t\t\tlength: 2,\n\t\t\tobjectives: target,\n\t\t\tminimumValue: -10,\n\t\t\tmaximumValue: +10,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar x = vs[0], y = vs[1];\n\t\t\t\treturn -0.0001 * Math.pow(\n\t\t\t\t\tMath.abs(Math.sin(x) * Math.sin(y) * Math.exp(Math.abs(100 - Math.sqrt(x*x + y*y) / Math.PI))) + 1,\n\t\t\t\t\t0.1);\n\t\t\t}\t\t\t\n\t\t});\n\t},\n\t\n\t/** The [Griewank function](http://www.sfu.ca/~ssurjano/griewank.html) has many local optima\n\tregularly distributed.\n\t*/\n\tGriewank: function Griewank(length) {\n\t\treturn new TestBed({\n\t\t\ttitle: \"Griewank testbed\",\n\t\t\tlength: length,\n\t\t\tminimumValue: -600,\n\t\t\tmaximumValue: +600,\n\t\t\toptimumValue: 0,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar sum = 0, prod = 1, len = vs.length, v;\n\t\t\t\tfor (var i = 0; i < len; ++i) {\n\t\t\t\t\tv = vs[i];\n\t\t\t\t\tsum += v * v / 4000;\n\t\t\t\t\tprod *= Math.cos(v / Math.sqrt(i+1));\n\t\t\t\t}\n\t\t\t\treturn sum - prod + 1;\n\t\t\t}\t\t\t\n\t\t});\n\t},\n\t\n\t/** The [Levy function](http://www.sfu.ca/~ssurjano/levy.html) is multimodal, with some \n\tdifficult local minima regions.\n\t*/\n\tLevy: function Levy(length) {\n\t\treturn new TestBed({\n\t\t\ttitle: \"Levy testbed\",\n\t\t\tlength: length,\n\t\t\tobjectives: -Infinity,\n\t\t\tminimumValue: -10,\n\t\t\tmaximumValue: +10,\n\t\t\toptimumValue: 0,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar sum = 0, d = vs.length, \n\t\t\t\t\tw1 = 1 + (vs[0] - 1) / 4, wd = 1 + (vs[d-1] - 1) / 4, w;\n\t\t\t\tfor (var i = 1; i < d - 1; ++i) {\n\t\t\t\t\tw = 1 + (vs[i] - 1) / 4;\n\t\t\t\t\tsum += Math.pow(w - 1, 2) * (1 + 10 * Math.pow(Math.sin(Math.PI * w + 1), 2));\n\t\t\t\t}\n\t\t\t\treturn Math.pow(Math.sin(Math.PI * w1), 2) + sum +\n\t\t\t\t\tMath.pow(wd - 1, 2) * (1 + Math.pow(Math.sin(2 * Math.PI * wd), 2));\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/** The [Michalewicz function](http://www.sfu.ca/~ssurjano/michal.html) is a multimodal function\n\twith a number local minima equal to the factorial of the number of dimensions; and it has steep \n\tvalleys and ridges.\n\t*/\n\tMichalewicz: function Michalewicz(length, m) {\n\t\tm = isNaN(m) ? 10 : +m;\n\t\treturn new TestBed({\n\t\t\ttitle: \"Michalewicz testbed\",\n\t\t\tlength: length,\n\t\t\tobjectives: -Infinity,\n\t\t\tminimumValue: 0,\n\t\t\tmaximumValue: Math.PI,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar sum = 0, d = vs.length, v;\n\t\t\t\tfor (var i = 0; i < d; ++i) {\n\t\t\t\t\tv = vs[i];\n\t\t\t\t\tsum += Math.sin(v) * Math.pow(Math.sin((i+1) * v * v / Math.PI), 2 * m);\n\t\t\t\t}\n\t\t\t\treturn -sum;\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/** [Perm(0,d,beta) function](http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/TestGO_files/Page2545.htm).\n\t*/\n\tperm0: function perm0(d, beta) {\n\t\td = isNaN(d) ? 2 : Math.min(1, d|0);\n\t\tbeta = isNaN(beta) ? 0 : +beta;\n\t\treturn new TestBed({\n\t\t\ttitle: \"Perm(0,\"+ d +\",\"+ beta +\") testbed\",\n\t\t\tlength: d,\n\t\t\tobjectives: -Infinity,\n\t\t\tminimumValue: -d,\n\t\t\tmaximumValue: +d,\n\t\t\toptimumValue: 0,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar sum1 = 0, sum2, v;\n\t\t\t\tfor (var i = 0; i < d; ++i) {\n\t\t\t\t\tsum2 = 0;\n\t\t\t\t\tfor (var j = 0; j < d; ++j) {\n\t\t\t\t\t\tsum2 += (j+1 + beta) * (Math.pow(vs[j], i+1) - Math.pow(1 / (j+1), i+1));\n\t\t\t\t\t}\n\t\t\t\t\tsum1 += sum2 * sum2;\n\t\t\t\t}\n\t\t\t\treturn sum1;\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/** The [Rastrigin function](http://www.sfu.ca/~ssurjano/rastr.html) is highly multimodal yet\n\tlocal minima are regularly distributed.\n\t*/\n\tRastrigin: function Rastrigin(length) {\n\t\treturn new TestBed({\n\t\t\ttitle: \"Rastrigin testbed\",\n\t\t\tlength: length,\n\t\t\tobjectives: -Infinity,\n\t\t\tminimumValue: -5.12,\n\t\t\tmaximumValue: +5.12,\n\t\t\toptimumValue: 0,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar result = 0, d = vs.length, v;\n\t\t\t\tfor (var i = 0; i < d; ++i) {\n\t\t\t\t\tv = vs[i];\n\t\t\t\t\tresult += v * v - 10 * Math.cos(2 * Math.PI * v);\n\t\t\t\t}\n\t\t\t\treturn 10 * d + result;\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/*** The [Rosenbrock function](http://en.wikipedia.org/wiki/Rosenbrock_function) is a function \n\tused as a performance test problem for optimization algorithms introduced by Howard H. \n\tRosenbrock in 1960. The global minimum is inside a long, narrow, parabolic shaped flat valley. \n\tTo find the valley is trivial, yet to converge to the global minimum (zero) is difficult.\n\t*/\n\tRosenbrock: function Rosenbrock(length, a, b) {\n\t\ta = isNaN(a) ? 1 : +a;\n\t\tb = isNaN(b) ? 100 : +b;\n\t\treturn new TestBed({\n\t\t\ttitle: \"Rosenbrock testbed\",\n\t\t\tlength: length,\n\t\t\tobjectives: -Infinity,\n\t\t\toptimumValue: 0,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar result = 0;\n\t\t\t\tfor (var i = 1; i < vs.length; ++i) {\n\t\t\t\t\tresult += b * Math.pow(vs[i-1] * vs[i-1] - vs[i], 2) + Math.pow(vs[i-1] - a, 2);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/** The [Schwefel function](http://www.sfu.ca/~ssurjano/schwef.html) is a complex test with many\n\tlocal optima.\n\t*/\n\tSchwefel: function Schwefel(length) {\n\t\treturn new TestBed({\n\t\t\ttitle: \"Schwefel testbed\",\n\t\t\tlength: length,\n\t\t\tobjectives: -Infinity,\n\t\t\tminimumValue: -500,\n\t\t\tmaximumValue: +500,\n\t\t\toptimumValue: 0,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar result = 0, d = vs.length, v;\n\t\t\t\tfor (var i = 0; i < d; ++i) {\n\t\t\t\t\tv = vs[i];\n\t\t\t\t\tresult += v * Math.sin(Math.sqrt(Math.abs(v)));\n\t\t\t\t}\n\t\t\t\treturn 418.9829 * d - result;\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/** The [sphere function](http://www.sfu.ca/~ssurjano/spheref.html) minimizes the sum of the\n\tsquares for every value in the input vector. It has as many local minima as dimensions the\n\tsearch space has, but still only one global minimum (zero). \n\t*/\n\tsphere: function sphere(length) {\n\t\treturn new TestBed({\n\t\t\ttitle: \"sphere testbed\",\n\t\t\tlength: length,\n\t\t\tobjectives: -Infinity,\n\t\t\toptimumValue: 0,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar result = 0;\n\t\t\t\tfor (var i = 0; i < vs.length; ++i) {\n\t\t\t\t\tresult += vs[i] * vs[i];\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/** A very simple class of problems that deal with optimizing the sum of the elements' values. \n\tProbably the simplest optimization problem that can be defined. It has no local optima, and it\n\tdraws a simple and gentle slope towards to global optimum.\n\t*/\n\tsumOptimization: function sumOptimization(length, target) {\n\t\tlength = isNaN(length) ? 2 : Math.max(1, length|0);\n\t\ttarget = isNaN(target) ? -Infinity : +target;\n\t\treturn new TestBed({\n\t\t\ttitle: \"sum optimization testbed\",\t\t\t\n\t\t\tlength: length,\n\t\t\tobjectives: target,\n\t\t\tminimumValue: 0,\n\t\t\tmaximumValue: +1,\n\t\t\toptimumValue: target === -Infinity ? 0 : target === +Infinity ? length : target,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar result = 0, len = vs.length;\n\t\t\t\tfor (var i = 0; i < len; ++i) {\n\t\t\t\t\tresult += vs[i];\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t},\n\t\n\t// ## Multi-objective ##########################################################################\n\t\n\t/** Multiobjective optimization problems taken from [_\"Comparison of Multiobjective Evolutionary\n\tAlgorithms: Empirical Results\"_ by Zitzler, Deb and Thiele (2000)](http://www.tik.ee.ethz.ch/sop/publicationListFiles/zdt2000a.pdf).\n\t*/\n\tZDT1: function ZDT1(length) {\n\t\tlength = isNaN(length) ? 30 : Math.max(1, length|0);\n\t\treturn new TestBed({\n\t\t\ttitle: \"Zitzler-Deb-Thiele function 1\",\t\t\t\n\t\t\tlength: length,\n\t\t\tobjectives: [-Infinity, -Infinity],\n\t\t\tminimumValue: 0,\n\t\t\tmaximumValue: +1,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar f1 = vs[0],\n\t\t\t\t\tg = iterable(vs).tail().sum() / (vs.length - 1) * 9,\n\t\t\t\t\th = 1 - Math.sqrt(f1 / g);\n\t\t\t\treturn [f1, g * h];\n\t\t\t}\n\t\t});\n\t},\n\t\n\tZDT2: function ZDT2(length) {\n\t\tlength = isNaN(length) ? 30 : Math.max(1, length|0);\n\t\treturn new TestBed({\n\t\t\ttitle: \"Zitzler-Deb-Thiele function 2\",\t\t\t\n\t\t\tlength: length,\n\t\t\tobjectives: [-Infinity, -Infinity],\n\t\t\tminimumValue: 0,\n\t\t\tmaximumValue: +1,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar f1 = vs[0],\n\t\t\t\t\tg = iterable(vs).tail().sum() / (vs.length - 1) * 9,\n\t\t\t\t\th = 1 - Math.pow(f1 / g, 2);\n\t\t\t\treturn [f1, g * h];\n\t\t\t}\n\t\t});\n\t},\n\t\n\tZDT3: function ZDT3(length) {\n\t\tlength = isNaN(length) ? 30 : Math.max(1, length|0);\n\t\treturn new TestBed({\n\t\t\ttitle: \"Zitzler-Deb-Thiele function 3\",\t\t\t\n\t\t\tlength: length,\n\t\t\tobjectives: [-Infinity, -Infinity],\n\t\t\tminimumValue: 0,\n\t\t\tmaximumValue: +1,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar f1 = vs[0],\n\t\t\t\t\tg = iterable(vs).tail().sum() / (vs.length - 1) * 9,\n\t\t\t\t\th = 1 - Math.sqrt(f1 / g) - (f1 / g) * Math.sin(10 * Math.PI * f1);\n\t\t\t\treturn [f1, g * h];\n\t\t\t}\n\t\t});\n\t}\n}; // problems.testbeds","/** # N queens puzzle problem\n\nA generalized version of the classic [8 queens puzzle](http://en.wikipedia.org/wiki/Eight_queens_puzzle),\na problem of placing 8 chess queens on an 8x8 chessboard so that no two queens may attack each \nother.\n*/\nproblems.NQueensPuzzle = declare(Problem, {\n\ttitle: \"N-queens puzzle\",\n\tdescription: \"Generalized version of the classic problem of placing \"+\n\t\t\"8 chess queens on an 8x8 chessboard so that no two queens attack each other.\",\n\t\n\t/** The constructor takes only one particular parameter:\n\t*/\t\n\tconstructor: function NQueensPuzzle(params){\n\t\tProblem.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t/** + `N=8`: the number of queens and both dimensions of the board.\n\t\t\t*/\n\t\t\t.integer('N', { coerce: true, defaultValue: 8 });\n\t\t\n\t\tthis.__rowRange__ = Iterable.range(this.N).toArray();\n\t\t/** The representation is an array of `N` positions, indicating the row of the queen for \n\t\teach column.\n\t\t*/\n\t\tthis.__elementModel__ = Iterable.repeat({ min: 0, max: this.N - 1, discrete: true }, this.N - 1).toArray();\n\t},\n\t\t\n\tmapping: function mapping(element) {\n\t\treturn element.setMapping(this.__rowRange__);\n\t},\n\t\n\t/** The elements' evaluation is the count of diagonals shared by queens pairwise.\n\t*/\n\tevaluation: function evaluation(element) {\n\t\tvar rows = this.mapping(element),\n\t\t\tcount = 0;\n\t\trows.forEach(function (row, i) {\n\t\t\tfor (var j = 1; i + j < rows.length; j++) {\n\t\t\t\tif (rows[j] == row + j || rows[j] == row - j) {\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn count;\n\t},\n\t\n\t/** Of course, the number of shared diagonals must be minimized.\n\t*/\n\tcompare: Problem.prototype.minimization,\n\t\n\t/** It is sufficient when no pair of queens share diagonals.\n\t*/\n\tsufficientElement: function sufficientElement(element) {\n\t\treturn element.evaluation === 0;\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'NQueensPuzzle',\n\t\tserializer: function serialize_NQueensPuzzle(obj) {\n\t\t\treturn [obj.__params__('N')];\n\t\t}\n\t}\n}); // declare NQueensPuzzle\n","/** # Knapsack problem\n\nThe [Knapsack problem](http://en.wikipedia.org/wiki/Knapsack_problem) is a classic combinatorial \noptimization problem. Given a set of items, each with cost and worth, a selection must be obtained \n(to go into the knapsack) so that the total cost does not exceed a certain limit, while maximizing \nthe total worth.\n*/\nproblems.KnapsackProblem = declare(Problem, {\n\ttitle: \"Knapsack problem\",\n\tdescription: \"Given a set of items with a cost and a worth, select a subset \"+\n\t\t\" maximizing the worth sum but not exceeding a cost limit.\",\n\t\n\t/** `items` is the superset of all candidate solutions. Must be an object with each item by \n\tname. Each item must have a cost and a worth, and may have an amount (1 by default).\n\t*/\n\titems: {\n\t\titemA: { cost: 12, worth: 4 }, \n\t\titemB: { cost: 2, worth: 2 }, \n\t\titemC: { cost: 1, worth: 2 }, \n\t\titemD: { cost: 1, worth: 1 },\n\t\titemE: { cost: 4, worth: 10 }\n\t},\n\t\n\t/** The problem is based on a given a set of items, each with a cost and a worth. The solution \n\tis a subset of items with maximum worth sum that does not exceed a cost limit.\n\t\n\tThe parameters specific for this problem are:\n\t*/\t\n\tconstructor: function KnapsackProblem(params){\n\t\tProblem.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t/** + `limit=15` is the cost limit that candidate solution should not exceed.\n\t\t\t*/\n\t\t\t.number('limit', { coerce: true, defaultValue: 15 })\n\t\t\t/** + `defaultAmount=1` is the amount available for each item by default.\n\t\t\t*/\n\t\t\t.integer('amount', { coerce: true, defaultValue: 1, minimum: 1 })\n\t\t\t/** + `items` is the set of items.\n\t\t\t*/\n\t\t\t.object('items', { ignore: true });\n\t\t/** The problem's representation is an array with a number for each item, in alphabetical \n\t\torder. Each number holds the selected amount for each item (from 0 up to the item's amount).\n\t\t*/\n\t\tvar items = this.items;\n\t\tthis.__elementItems__ = Object.keys(items);\n\t\tthis.__elementItems__.sort();\n\t\tthis.__elementModel__ = this.__elementItems__.map(function (name) {\n\t\t\treturn { min: 0, max: +items[name].amount || 1, discrete: true };\n\t\t});\n\t},\n\t\n\t/** All elements are mapped to an object with the selected amount associated to each item.\n\t*/\n\tmapping: function mapping(element) {\n\t\treturn iterable(this.__elementItems__).zip(Math.floor(element.values)).toObject();\n\t},\n\t\n\t/** All elements are evaluated by calculating the worth of all included items. If their cost is \n\tgreater than the problem's limit, the worth becomes negative.\n\t*/\n\tevaluation: function evaluation(element) {\n\t\tvar selection = this.mapping(element),\n\t\t\titems = this.items,\n\t\t\tworth = 0,\n\t\t\tcost = 0;\n\t\titerable(selection).forEachApply(function (name, amount) {\n\t\t\tvar item = items[name];\n\t\t\tworth += item.worth * amount;\n\t\t\tcost += item.cost * amount;\n\t\t});\n\t\treturn cost > problem.limit ? -worth : worth; //FIXME Too punishing for going over the limit.\n\t},\n\t\n\t/** The best selection of items is the one that maximizes worth, without exceeding the cost \n\tlimit.\n\t*/\n\tcompare: Problem.prototype.maximization,\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'KnapsackProblem',\n\t\tserializer: function serialize_KnapsackProblem(obj) {\n\t\t\treturn [obj.__params__('limit', 'amount', 'items')];\n\t\t}\n\t}\n}); // declare KnapsackProblem","/** # Association rules learning.\n\nAssociation rules are relations between variables found in databases. Many methods have been \nresearched to automatically search for interesting rules in large data sets.\n\nFor further information, see:\n\n+ Agrawal, R.; ImieliƄski, T.; Swami, A. [_\"Mining association rules between sets of items in large \n\tdatabases\"_](http://dl.acm.org/citation.cfm?doid=170035.170072). Proceedings of the 1993 ACM \n\tSIGMOD international conference on Management of data.\n\t\n+ Sergey Brin, Rajeev Motwani, Jeffrey D. Ullman, and Shalom Tsur. [_\"Dynamic itemset counting and \n\timplication rules for market basket data\"_](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.25.3707).\n\tSIGMOD 1997, Proceedings ACM SIGMOD International Conference on Management of Data.\n*/\nvar AssociationRuleLearning = problems.AssociationRuleLearning = declare(Problem, {\n\t/** The constructors take the following parameters:\n\t*/\n\tconstructor: function AssociationRuleLearning(params) {\n\t\tProblem.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t/** + A `dataset` with which to test the association rules. It must be a sequence of\n\t\t\trecords (each an object).\n\t\t\t*/\n\t\t\t.object('dataset', { defaultValue: [] })\n\t\t\t/** + A set of `keys` for the fields in the dataset.\n\t\t\t*/\n\t\t\t.array('keys');\n\t\t/** The elements represent classic association rules, which treat each record as a set of \n\t\t`keys`. Each position in the element's values tells if the corresponding key belongs to the \n\t\trule's antecedent or consequent; or neither. Empty antecedents and consequents always \n\t\tevaluate to false.\n\t\t*/\n\t\tthis.__elementModel__ = Iterable.repeat({ min: 0, max: 2, discrete: true }, this.keys.length).toArray();\n\t},\n\t\n\t// ## Evaluation ###############################################################################\n\t\n\t/** Turns the element into an association rule, i.e. an object with two disjunct sets of keys:\n\tone for the antecedent and the other for the consequent.\n\t*/\n\tmapping: function mapping(element) {\n\t\tvar problem = this,\n\t\t\tantecedent = [], \n\t\t\tconsequent = [];\n\t\telement.values.forEach(function (v, i) {\n\t\t\tswitch (v) {\n\t\t\t\tcase 1: antecedent.push(problem.keys[i]); break;\n\t\t\t\tcase 2: consequent.push(problem.keys[i]); break;\n\t\t\t}\n\t\t});\n\t\treturn { antecedent: antecedent, consequent: consequent };\n\t},\n\t\n\tkeysComply: function keysComply(keys, record) {\n\t\tvar it = iterable(keys);\n\t\treturn !it.isEmpty() && it.all(function (key) {\n\t\t\treturn !!record[key];\n\t\t});\n\t},\n\t\n\t/** This method checks if the given `record` complies with the given `rule`'s `antecedent`.\n\t*/\n\tantecedentComplies: function antecedentComplies(rule, record) {\n\t\treturn this.keysComply(rule.antecedent, record);\n\t},\n\t\n\t/** This method checks if the given `record` complies with the given `rule`'s `consequent`.\n\t*/\n\tconsequentComplies: function consequentComplies(rule, record) {\n\t\treturn this.keysComply(rule.consequent, record);\n\t},\n\t\n\t/** The `measures` of an `element` (representing an association rule) include the usual \n\tstatistics:\n\t\n\t+ `antecedentCount`, `consequentCount`, `ruleCount` are the numbers of records that comply with\n\t\tthis rules's antecedent, consequent and both.\n\t+ `antecedentSupport`, `consequentSupport`, `ruleSupport` are the same numbers as before but \n\t\tdivided by the total number of records.\n\t+ `confidence` can be interpreted as an estimation of _P(C|A)_ for rules _A -> C_.\n\t+ `lift` is the ratio of the observed support to that expected if A and C were independent.\n\t+ `conviction` is the ratio of the expected frequency that A occurs without C.\n\t+ `leverage` measures the difference of A and C appearing together in the data set and what \n\t\twould be expected if X and Y where statistically dependent.\n\t*/\n\tmeasures: function measures(element) {\n\t\tvar problem = this,\n\t\t\tresult = {},\n\t\t\ttotalCount = 0, \n\t\t\tantecedentCount = 0, \n\t\t\tconsequentCount = 0, \n\t\t\truleCount = 0,\n\t\t\trule = this.mapping(element);\n\t\titerable(this.dataset).forEach(function (record) {\n\t\t\tif (problem.antecedentComplies(rule, record)) {\n\t\t\t\t++antecedentCount;\n\t\t\t\tif (problem.consequentComplies(rule, record)) {\n\t\t\t\t\t++consequentCount;\n\t\t\t\t\t++ruleCount;\n\t\t\t\t}\n\t\t\t} else if (problem.consequentComplies(rule, record)) {\n\t\t\t\t++consequentCount;\n\t\t\t}\n\t\t\t++totalCount;\n\t\t});\n\t\tresult.antecedentCount = antecedentCount;\n\t\tresult.consequentCount = consequentCount;\n\t\tresult.ruleCount = ruleCount;\n\t\tresult.antecedentSupport = totalCount > 0 ? antecedentCount / totalCount : 0;\n\t\tresult.consequentSupport = totalCount > 0 ? consequentCount / totalCount : 0;\n\t\tresult.ruleSupport = totalCount > 0 ? ruleCount / totalCount : 0;\n\t\tresult.confidence = antecedentCount > 0 ? ruleCount / antecedentCount : 0;\n\t\tresult.lift = result.consequentSupport > 0 ? result.confidence / result.consequentSupport : 0;\n\t\tresult.conviction = result.consequentSupport > 0 && result.confidence < 1 ? (1 - result.consequentSupport) / (1 - result.confidence) : 0;\n\t\tresult.leverage = result.ruleSupport - result.antecedentSupport * result.consequentSupport;\n\t\treturn result;\n\t}, \n\t\n\t/** By default, the evaluation uses the rule's confidence. It assumes the elements has a \n\t`dataset` member. Measures are cached in a `__measures__` property in the element.\n\t*/\n\tevaluation: function evaluation(element) {\n\t\tif (!element.__measures__) {\n\t\t\telement.__measures__ = this.measures(element);\n\t\t}\n\t\treturn element.__measures__.confidence;\n\t}\t\n}); // declare AssociationRule.","// See __prologue__.js\n\tbase.Iterable.chain(exports, metaheuristics, problems).forEachApply(function (id, def) {\n\t\tif (typeof def === 'function' && def.__SERMAT__ && def.__SERMAT__.identifier) {\n\t\t\tdef.__SERMAT__.identifier = exports.__package__ +'.'+ def.__SERMAT__.identifier;\n\t\t\texports.__SERMAT__.include.push(def);\n\t\t}\n\t});\n\treturn exports;\n});"]} \ No newline at end of file +{"version":3,"sources":["../src/__prologue__.js","../src/Element.js","../src/Problem.js","../src/Metaheuristic.js","../src/metaheuristics/HillClimbing.js","../src/metaheuristics/GeneticAlgorithm.js","../src/metaheuristics/BeamSearch.js","../src/metaheuristics/SimulatedAnnealing.js","../src/metaheuristics/ParticleSwarm.js","../src/metaheuristics/DifferentialEvolution.js","../src/metaheuristics/EvolutionStrategy.js","../src/metaheuristics/HarmonySearch.js","../src/metaheuristics/DistributionEstimation.js","../src/metaheuristics/GradientDescent.js","../src/problems/HelloWorld.js","../src/problems/testbeds.js","../src/problems/NQueensPuzzle.js","../src/problems/KnapsackProblem.js","../src/problems/associationRules.js","../src/__epilogue__.js"],"names":[],"mappings":"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","file":"inveniemus.js","sourcesContent":["/** Package wrapper and layout.\n*/\n(function (global, init) { \"use strict\"; // Universal Module Definition.\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(['creatartis-base'], init); // AMD module.\n\t} else if (typeof module === 'object' && module.exports) {\n\t\tmodule.exports = init(require('creatartis-base')); // CommonJS module.\n\t} else { // Browser or web worker (probably).\n\t\tglobal.inveniemus = init(global.base);\n\t}\n})(this, function __init__(base){ \"use strict\";\n// Import synonyms. ////////////////////////////////////////////////////////////////////////////////\n\tvar declare = base.declare,\n\t\tinitialize = base.initialize,\n\t\titerable = base.iterable,\n\t\traiseIf = base.raiseIf,\n\t\tEvents = base.Events,\n\t\tFuture = base.Future,\n\t\tIterable = base.Iterable,\n\t\tLogger = base.Logger,\n\t\tRandomness = base.Randomness,\n\t\tStatistics = base.Statistics;\n\t\n// Library layout. /////////////////////////////////////////////////////////////////////////////////\n\tvar exports = {\n\t\t__package__: 'inveniemus',\n\t\t__name__: 'inveniemus',\n\t\t__init__: __init__,\n\t\t__dependencies__: [base],\n\t\t__SERMAT__: { include: [] },\n\t/** `metaheuristics` is a bundle of available metaheuristics.\n\t*/\t\n\t\tmetaheuristics: {},\n\t/** `problems` is a bundle of classic and reference problems.\n\t*/\n\t\tproblems: {}\n\t};\n\tvar metaheuristics = exports.metaheuristics,\n\t\tproblems = exports.problems;\n\n// Utility functions. //////////////////////////////////////////////////////////////////////////////\n\nfunction clamp(value, min, max) {\n\treturn Math.max(min, Math.min(max, value));\n}","/**\t# Element\n\nElement is the term used in Inveniemus for representations of \n[candidate solutions](http://en.wikipedia.org/wiki/Feasible_region) in a search or optimization \n[problem](Problem.js.html). Implementations may declare their own subclass of `Element` to represent\ntheir candidate solutions.\n*/\nvar Element = exports.Element = declare({\n\t/** All elements are defined by a `problem`, an array of numbers (i.e. the element's `values`, \n\trandom numbers by default) and an `evaluation` (`NaN` by default). The element's values are \n\tcoerced to be in the range provided by the problem's element model.\n\t\n\tThe `values` store all data about the candidate solution this element represents. This may \n\tappear to abstract and stark, but it helps to separate the problem definition from the search\n\tor optimization strategy.\n\t\n\tThe element's `evaluation` is a numerical assessment of the represented candidate solution. \n\tUsually is a measure of how well the problem is solved, or how close the element is to a real \n\tsolution. It guides almost all of the metaheuristics.\n\t*/\n\tconstructor: function Element(problem, values, evaluation) {\n\t\tthis.problem = problem;\n\t\tvar model = problem.elementModel();\n\t\tif (!values) {\n\t\t\tthis.values = model.map(function (range) {\n\t\t\t\tif (range.discrete) {\n\t\t\t\t\treturn problem.random.randomInt(range.min, range.max + 1);\n\t\t\t\t} else {\n\t\t\t\t\treturn problem.random.random(range.min, range.max);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tthis.values = values.map(function (value, i) {\n\t\t\t\tvar range = model[i];\n\t\t\t\traiseIf(isNaN(value), \"Value #\", i, \" for element is NaN!\");\n\t\t\t\tvalue = clamp(+value, range.min, range.max);\n\t\t\t\treturn value;\n\t\t\t});\n\t\t}\n\t\tthis.evaluation = evaluation;\n\t},\n\t\n\t/** Whether this element is an actual solution or not is decided by `suffices()`. It holds the \n\timplementation of the goal test in search problems. More complex criteria may be implemented in \n\t`Problem.suffices`. By default it returns false.\n\t*/\n\tsuffices: function suffices() {\n\t\treturn this.problem.sufficientElement(this);\n\t},\n\n\t/** The `emblem` of an element is a string that represents it and can be displayed to the user. \n\tBy default returns the string conversion of the element.\n\t*/\n\temblem: function emblem() {\n\t\treturn this +'';\n\t},\n\n\t// ## Evaluations ##############################################################################\n\n\t/** The element's `evaluation` is calculated by `evaluate()`, which assigns and returns this \n\tnumber. It may return a promise if the evaluation has to be done asynchronously. This can be \n\tinterpreted as the solution's cost in a search problem or the target function of an optimization \n\tproblem. The default behaviour is adding up this element's values, useful only for testing.\n\t*/\n\tevaluate: function evaluate() {\n\t\tvar elem = this;\n\t\treturn Future.then(this.problem.evaluation(this), function (e) {\n\t\t\telem.evaluation = e;\n\t\t\treturn e;\n\t\t});\n\t},\n\t\n\t/** The [Hamming distance](http://en.wikipedia.org/wiki/Hamming_distance) between two arrays is \n\tthe number of positions at which corresponding components are different. Arrays are assumed to \n\tbe of the same length. If they are not, only the common parts are considered.\n\t*/\n\thammingDistance: function hammingDistance(array1, array2) {\n\t\treturn iterable(array1).zip(array2).filter(function (pair) {\n\t\t\treturn pair[0] != pair[1];\n\t\t}).count();\n\t},\n\n\t/** The [Manhattan distance](http://en.wikipedia.org/wiki/Manhattan_distance) between two arrays \n\tis the sum of the absolute differences of corresponding positions.\n\t*/\n\tmanhattanDistance: function manhattanDistance(array1, array2) {\n\t\treturn iterable(array1).zip(array2).map(function (pair) {\n\t\t\treturn Math.abs(pair[0] - pair[1]);\n\t\t}).sum();\n\t},\n\n\t/** The [euclidean distance](http://en.wikipedia.org/wiki/Euclidean_distance) between two arrays \n\tis another option for evaluation.\n\t*/\n\teuclideanDistance: function euclideanDistance(array1, array2) {\n\t\treturn Math.sqrt(iterable(array1).zip(array2).map(function (pair) {\n\t\t\treturn Math.pow(pair[0] - pair[1], 2);\n\t\t}).sum());\n\t},\n\n\t/** Another common evaluation is the [root mean squared error](http://en.wikipedia.org/wiki/Root_mean_squared_error).\n\tThe method `rootMeanSquaredError` takes a function `f` (usually a mapping of this element) and \n\tsome `data`. This `data` must be an iterable of arrays, in which the first element is the \n\texpected result and the rest are the arguments for the function.\n\t*/\n\trootMeanSquaredError: function rootMeanSquaredError(f, data) {\n\t\tvar length = 0,\n\t\t\terror = iterable(data).map(function (datum) {\n\t\t\t\tlength++;\n\t\t\t\treturn Math.pow(datum[0] - f.apply(this, datum.slice(1)), 2);\n\t\t\t}).sum();\n\t\treturn length === 0 ? 0 : Math.sqrt(error / length);\n\t},\n\n\t// ## Expansions ###############################################################################\n\t\n\t/** An element's `neighbourhood` is a set of new elements, with values belonging to the n \n\tdimensional ball around this element's values with the given `radius` (1% by default). \n\t*/\n\tneighbourhood: function neighbourhood(radius) {\n\t\tvar elem = this,\n\t\t\tneighbours = [],\n\t\t\tmodel = this.problem.elementModel();\n\t\tthis.values.forEach(function (value, i) {\n\t\t\tvar range = model[i],\n\t\t\t\td = Array.isArray(radius) ? radius[i] : !isNaN(radius) ? radius : range.discrete ? 1 : 0.1,\n\t\t\t\tv = value + d;\n\t\t\tif (v <= range.max) {\n\t\t\t\tneighbours.push(elem.modification(i, v));\n\t\t\t}\n\t\t\tv = value - d;\n\t\t\tif (v >= range.min) {\n\t\t\t\tneighbours.push(elem.modification(i, v));\n\t\t\t}\n\t\t});\n\t\treturn neighbours;\n\t},\n\t\n\t/** The method `modification(index, value, ...)` returns a new and unevaluated copy of this \n\telement, with its values modified as specified. Values are always coerced to the [0,1] range.\n\t*/\n\tmodification: function modification() {\n\t\tvar newValues = this.values.slice(),\n\t\t\tmodel = this.problem.elementModel(),\n\t\t\trange, i, v;\n\t\tfor (i = 0; i < arguments.length; i += 2) {\n\t\t\tv = +arguments[i + 1];\n\t\t\traiseIf(isNaN(v), \"Invalid value \", v, \" for element!\");\n\t\t\trange = model[i];\n\t\t\tv = clamp(v, range.min, range.max);\n\t\t\tnewValues[arguments[i] |0] = v;\n\t\t}\n\t\treturn new this.constructor(this.problem, newValues);\n\t},\n\t\n\t// ## Mappings #################################################################################\n\t\n\t/** Gives an alternate representation of this element. See `Problem.mapping()`.\n\t*/\n\tmapping: function mapping() {\n\t\treturn this.problem.mapping(this);\n\t},\n\t\n\t/** A range mapping builds an array of equal length of this element's `values`. Each value is \n\ttranslated from the element model's range to the given range.\n\t*/\n\trangeMapping: function rangeMapping() {\n\t\tvar args = arguments,\n\t\t\tmodel = this.problem.elementModel(),\n\t\t\tlastRange = args[args.length - 1];\n\t\traiseIf(args.length < 1, \"Element.rangeMapping() expects at least one argument!\");\n\t\treturn this.values.map(function (v, i) {\n\t\t\tvar rangeFrom = model[i],\n\t\t\t\trangeTo = args.length > i ? args[i] : lastRange;\n\t\t\tv = (v - rangeFrom.min) / (rangeFrom.max - rangeFrom.min) * (rangeTo[1] - rangeTo[0]) + rangeTo[0];\n\t\t\treturn clamp(v, rangeTo[0], rangeTo[1]);\n\t\t});\n\t},\n\t\n\t/** The `normalizedValues` of an element is a mapping to the range [0,1].\n\t*/\n\tnormalizedValues: function normalizedValues() {\n\t\treturn this.rangeMapping([0, 1]);\n\t},\n\t\n\t/** An array mapping builds an array of equal length of this element's `values`. Each value is \n\tused to index the corresponding items argument. If there are less arguments than the element's \n\t`length`, the last one is used for the rest of the values.\n\t*/\n\tarrayMapping: function arrayMapping() {\n\t\tvar args = arguments,\n\t\t\tlastItems = args[args.length - 1],\n\t\t\tmodel = this.problem.elementModel();\n\t\traiseIf(args.length < 1, \"Element.arrayMapping() expects at least one argument!\");\n\t\treturn this.values.map(function (v, i) {\n\t\t\tvar items = args.length > i ? args[i] : lastItems,\n\t\t\t\trange = model[i],\n\t\t\t\tindex = Math.floor((v - range.min) / (range.max - range.min) * items.length);\n\t\t\treturn items[index];\n\t\t});\n\t},\n\t\n\t/** A set mapping builds an array of equal length of this element's `values`. Each value is used \n\tto select one item. Items are not selected more than once.\n\t*/\n\tsetMapping: function setMapping(items, full) {\n\t\traiseIf(!Array.isArray(items), \"Element.setMapping() expects an array argument!\");\n\t\titems = items.slice(); // Shallow copy.\n\t\tvar result = this.normalizedValues().map(function (v, i) {\n\t\t\t\traiseIf(items.length < 1, \"Element.setMapping(): insufficient elements!\");\n\t\t\t\tvar index = clamp(Math.floor(v * items.length), 0, items.length - 1);\n\t\t\t\treturn items.splice(index, 1)[0];\n\t\t\t});\n\t\tif (full) {\n\t\t\traiseIf(items.length != 1, \"Element.setMapping(): wrong amount of elements!\");\n\t\t\tresult.push(items[0]);\n\t\t}\n\t\treturn result;\n\t},\n\t\n\t// ## Other utilities ##########################################################################\n\n\t/** A `clone` is a copy of this element.\n\t*/\n\tclone: function clone() {\n\t\treturn new this.constructor(this.problem, this.values, this.evaluation);\n\t},\n\t\n\t/** Two elements can be compared with `equals(other)`. It checks if the other element has the \n\tsame values and constructor than this one.\n\t*/\n\tequals: function equals(other) {\n\t\tif (this.constructor === other.constructor && this.values.length === other.values.length) {\n\t\t\tfor (var i = 0, len = this.values.length; i < len; i++) {\n\t\t\t\tif (this.values[i] !== other.values[i]) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},\n\t\n\t/** The default string representation of an Element instance has this shape: \n\t`\"Element(values, evaluation)\"`.\n\t*/\n\ttoString: function toString() {\n\t\treturn \"<\"+ (this.constructor.name || 'Element') +\" \"+ JSON.stringify(this.values) +\" \"+ this.evaluation +\">\";\n\t},\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Element',\n\t\tserializer: function serialize_Element(obj) {\n\t\t\treturn [obj.problem, obj.values, obj.evaluation];\n\t\t}\n\t}\n}); // declare Element.\n","/**\t# Problem\n\nThe Problem type represents a search or optimization problem in Inveniemus.\n*/\nvar Problem = exports.Problem = declare({\n\t/** The problem constructor takes the following parameters:\t\n\t*/\n\tconstructor: function Problem(params) {\n\t\tparams = params || {};\n\t\tinitialize(this, params)\n\t\t\t/** + A `title` to be displayed to the user.\n\t\t\t*/\n\t\t\t.string('title', { coerce: true, defaultValue: this.constructor.name || \"\" })\n\t\t\t/** + A `description` of the problem to be displayed to the user may also be appreciated.\n\t\t\t*/\n\t\t\t.string('description', { coerce: true, defaultValue: \"\" })\n\t\t\t/** + A `random` number generator, required by many operations. By default \n\t\t\t\t`base.Randomness.DEFAULT` is used.\n\t\t\t*/\n\t\t\t.object('random', { defaultValue: Randomness.DEFAULT });\n\t\t/** + One or more `objectives`, which defines the mode of optimization. It may be either a\n\t\t\tnumber or array of numbers, where `-Infinity` means minimization (the default),\n\t\t\t`+Infinity` means maximization and a number means approximation to that value.\n\t\t*/\n\t\tvar objectives = params.hasOwnProperty('objectives') ? params.objectives : -Infinity;\n\t\tif (typeof params.objectives === 'number' && !isNaN(params.objectives)) {\n\t\t\tthis.objectives = [params.objectives];\n\t\t} else if (Array.isArray(params.objectives)) {\n\t\t\tthis.objectives = params.objectives;\n\t\t} else {\n\t\t\tthis.objectives = [-Infinity]; // Minimization is the default.\n\t\t}\n\t},\n\n\t/** The `elementModel` is an array of ranges, each an array of two numbers defining the minimum\n\tan maximum possible value of each position of every element in this problem. All elements should\n\talso be of the same length as the model.\n\t\n\tBy default, the method returns the `__elementModel__` property. It is inefficiency to recompute \n\tthis result every time, since it is required in many places.\n\t*/\n\t__elementModel__: Iterable.repeat({ min: 0, max: 1, discrete: false }, 10).toArray(),\n\t\n\telementModel: function elementModel() {\n\t\treturn this.__elementModel__;\n\t},\n\t\n\t/** Problem uses `Element` instances to represent its candidate solutions.\n\t*/\n\tnewElement: function newElement(values, evaluation) {\n\t\treturn new Element(this, values, evaluation);\n\t},\n\t\n\t/** The problem's elements must be evaluated somehow. This can be interpreted as the solution's \n\tcost in a search problem or the target function of an optimization problem. The default \n\tbehaviour is adding up this element's values, useful only for testing. It can return a future \n\tif the evaluation has to be done asynchronously. \n\t*/\n\tevaluation: function evaluation(element) {\n\t\treturn iterable(element.values).sum();\n\t},\n\t\n\t/** The `evaluate` method is used to assign an evaluation to all the given `elements`. By \n\tdefault it iterates over all elements and gets their evaluation using the `evaluation` method. \n\tIf `reevaluate` is false (the default), already evaluated elements are ignored. This method may \n\tbe overriden to make a relative evaluation scheme (e.g. in coevolution).\n\t*/\n\tevaluate: function evaluate(elements, reevaluate) {\n\t\tvar async = false;\n\t\telements = iterable(elements).filter(\n\t\t\tfunction (element) {\n\t\t\t\treturn reevaluate || isNaN(element.evaluation);\n\t\t\t},\n\t\t\tfunction (element) { // ... evaluate them.\n\t\t\t\tvar result = element.evaluate();\n\t\t\t\tasync = async || Future.__isFuture__(result);\n\t\t\t\treturn result;\n\t\t\t}).toArray();\n\t\treturn async ? Future.all(elements) : elements;\n\t},\n\t\n\t/** Usually a numbers array is just too abstract to handle, and\tanother representation of the \n\tcandidate solution must be build. For this `mapping()` must be overridden to returns an \n\talternate representation of an element that may be fitter for evaluation or showing it to the\n\tuser. By default it just returns the same `values` array.\n\t*/\n\tmapping: function mapping(element) {\n\t\treturn element.values;\n\t},\n\t\n\t/** An element is `sufficient` when it can be considered a solution of a search or a good enough\n\tsolution of an optimization. By default it returns false.\n\t*/\n\tsufficientElement: function sufficientElement(element) {\n\t\treturn false;\n\t},\n\t\n\t/** When a set of elements is sufficient, the search/optimization ends. The method \n\t`suffices(elements)` returns `true` if inside the elements array there are enough actual \n\tsolutions to this problem. It holds the implementation of the goal test in search problems. By \n\tdefault calls the `suffice` method of the first element (assumed to be the best one).\n\t*/\n\tsufficientElements: function sufficientElements(elements) {\n\t\treturn this.sufficientElement(elements[0]);\n\t},\n\t\n\t// ## Optimization modes #######################################################################\n\t\n\t/** How elements are compared with each other in the problem determines which kind of \n\toptimization is performed. The `compare` method implements the comparison between two elements. \n\tIt returns a positive number if `element2` is better than `element1`, a negative number if \n\t`element2` is worse then `element1`, or zero otherwise. Better and worse may mean less or \n\tgreater evaluation (`minimization`), viceversa (`maximization`) or another criteria altogether.\n\t*/\n\tcompare: function compare(element1, element2) {\n\t\tif (this.objectives.length === 1) {\n\t\t\treturn this.singleObjectiveComparison(this.objectives[0], element1.evaluation, element2.evaluation);\n\t\t} else {\n\t\t\treturn this.paretoComparison(this.objectives, element1.evaluation, element2.evaluation);\n\t\t}\n\t},\n\t\n\t/** A single objective optimization has three modes, given by the `objective` parameter: \n\t*/\n\tsingleObjectiveComparison: function singleObjectiveComparison(objective, value1, value2) {\n\t\tvar d;\n\t\tswitch (objective) {\n\t\t\t/** + `-Infinity` means minimization. */\n\t\t\tcase -Infinity: {\n\t\t\t\td = value2 - value1;\n\t\t\t\treturn isNaN(d) ? Infinity : d;\n\t\t\t}\n\t\t\t/** + `+Infinity` means maximization. */\n\t\t\tcase +Infinity: {\n\t\t\t\td = value1 - value2;\n\t\t\t\treturn isNaN(d) ? -Infinity : d;\n\t\t\t}\n\t\t\t/** + An actual number means approximation to said value. */ \n\t\t\tdefault: {\n\t\t\t\td = Math.abs(value2 - objective) - Math.abs(value1 - objective);\n\t\t\t\treturn isNaN(d) ? Infinity : d;\n\t\t\t}\n\t\t}\n\t},\n\t\n\t/** The [Pareto efficiency](https://en.wikipedia.org/wiki/Pareto_efficiency) is frequently used \n\tin multiobjective optimizations, yet it is not a complete order. The `paretoComparison` method \n\ttakes an array of `objectives`, and two arrays of numbers to be compared. The result is an array \n\tof comparisons (-1, 0 or 1) with a `domination` property. If `domination` is:\n\t\n\t+ `< 0`: `element2` dominates `element1`.\n\t\n\t+ `> 0`: `element1` dominates `element2`.\n\t\n\t+ `= 0`: both elements are equally evaluated.\n\t\n\t+ `NaN`: elements could not be compared (i.e. their evaluations are different, but they do not \n\t\tdominate each other).\n\t*/\n\tparetoComparison: function paretoComparison(objectives, values1, values2) {\n\t\tvar worse = 0, better = 0,\n\t\t\tproblem = this,\n\t\t\tresult;\n\t\traiseIf(objectives.length !== values1.length, \"Expected \", objectives.length, \" evaluations, but got \", values1.length, \"!\");\n\t\traiseIf(objectives.length !== values2.length, \"Expected \", objectives.length, \" evaluations, but got \", values2.length, \"!\");\n\t\tresult = Iterable.zip(objectives, values1, values2).mapApply(function (objective, value1, value2) {\n\t\t\tvar r = problem.singleObjectiveComparison(objective, value1, value2);\n\t\t\tif (r < 0) {\n\t\t\t\tworse++;\n\t\t\t} else if (r > 0) {\n\t\t\t\tbetter++;\n\t\t\t}\n\t\t\treturn r;\n\t\t}).toArray();\n\t\tresult.domination = worse === 0 ? better : better === 0 ? -worse : NaN;\n\t\treturn result;\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** The default string representation of a Problem instance has this shape: \n\t`\"Problem(params)\"`.\n\t*/\n\ttoString: function toString() {\n\t\treturn \"<\"+ (this.constructor.name || 'Problem') +\" \"+ JSON.stringify(this.title) +\">\";\n\t},\n\t\n\t/** Returns a reconstruction of the parameters used in the construction of this instance.\n\t*/\n\t__params__: function __params__() {\n\t\tvar params = {},\n\t\t\tself = this,\n\t\t\tids = ['title', 'description'].concat(Array.prototype.slice.call(arguments));\n\t\tids.forEach(function (id) {\n\t\t\tif (self.hasOwnProperty(id)) {\n\t\t\t\tparams[id] = self[id];\n\t\t\t}\n\t\t});\n\t\tif (this.random !== Randomness.DEFAULT) {\n\t\t\tparams.random = this.random;\n\t\t}\n\t\treturn params;\n\t},\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Problem',\n\t\tserializer: function serialize_Problem(obj) {\n\t\t\treturn [obj.__params__()];\n\t\t}\n\t}\n}); // declare Problem.\n","/**\t# Metaheuristic\n\nA [Metaheuristic](http://en.wikipedia.org/wiki/Metaheuristic) is an optimization algorithm (which \ncan also be used for searching). This is the base class of all metaheuristic algorithms, and hence \nof all metaheuristic runs.\n*/\nvar Metaheuristic = exports.Metaheuristic = declare({\n\t/** Each metaheuristic has its own `logger`, to track its process.\n\t*/\n\tlogger: new Logger('inveniemus', Logger.ROOT, 'INFO'),\n\t\n\t/** The constructor takes a `params` object with the metaheuristic parameters. Although the \n\tdifferent algorithms have particular parameters of their own, some apply to all.\n\t*/\n\tconstructor: function Metaheuristic(params) {\n\t\tinitialize(this, params)\n\t\t/** First, the definition of the `problem` this metaheuristic is meant to solve.\n\t\t*/\n\t\t\t.object('problem', { defaultValue: null })\n\t\t/** The optimization's `size` is the amount of candidate solutions the metaheuristic treats \n\t\tat each step. By default it is 100.\n\t\t*/\n\t\t\t.number('size', { defaultValue: 100, coerce: true })\n\t\t/** The `state` is the array that holds the elements this metaheuristic handles at each step.\n\t\t*/\n\t\t\t.array('state', { defaultValue: [] })\n\t\t/** All optimizations perform a certain number of iterations or `steps` (100 by default).\n\t\t*/\n\t\t\t.number('steps', { defaultValue: 100, coerce: true })\n\t\t/** The property `step` indicates the current iteration of this optimization, or a negative \n\t\tnumber if it has not started yet.\n\t\t*/\n\t\t\t.integer('step', { defaultValue: -1, coerce: true })\n\t\t/** Most metaheuristic are stochastic processes, hence the need for a pseudo-random number \n\t\tgenerator. By default `base.Randomness.DEFAULT` is used, yet it is strongly advised to \n\t\tprovide one.\n\t\t*/\n\t\t\t.object('random', { defaultValue: Randomness.DEFAULT })\n\t\t/** Metaheuristic's runs usually gather `statistics` about the process.\n\t\t*/\n\t\t\t.object('statistics', { defaultValue: new Statistics() })\n\t\t\t.object('logger', { ignore: true });\n\t\tthis.events = new Events({ \n\t\t\tevents: [\"initiated\", \"updated\", \"expanded\", \"evaluated\", \"sieved\", \"advanced\", \"analyzed\", \"finished\"]\n\t\t});\n\t},\n\t\n\t__log__: function __log__(level) {\n\t\tif (this.logger) {\n\t\t\tthis.logger[level].apply(this.logger, arguments);\n\t\t}\n\t},\n\t\n\t// ## Basic workflow ###########################################################################\n\t\n\t/**\t`initiate(size=this.size)` builds and initiates this metaheuristic state with size new \n\tcursors. The elements are build using the `initial()` function.\n\t*/\n\tinitiate: function initiate(size) {\n\t\tsize = isNaN(size) ? this.size : +size >> 0;\n\t\tthis.state = new Array(size);\n\t\tfor (var i = 0; i < size; i++) {\n\t\t\tthis.state[i] = this.problem.newElement(); // Element with random values.\n\t\t}\n\t\tthis.onInitiate();\n\t},\n\t\n\t/** `update()` updates this metaheuristic's state. It assumes the state has been initialized. \n\tThe process may be asynchronous, so it returns a future. The default implementation first \n\texpands the state by calling `expand()`, then evaluates the added elements by calling \n\t`evaluate()`, and finally removes the worst elements with `sieve()`.\n\t*/\n\tupdate: function update() {\n\t\tvar mh = this;\n\t\tthis.expand();\n\t\treturn Future.then(this.evaluate(), function () {\n\t\t\tmh.sieve();\n\t\t\tmh.onUpdate();\n\t\t\treturn mh;\n\t\t});\n\t},\n\t\n\t/** `expand(expansion=[])` adds to this metaheuristic's state the given expansion. If none is \n\tgiven, `expansion()` is called to get new expansion.\n\t*/\n\texpand: function expand(expansion) {\n\t\texpansion = expansion || this.expansion();\n\t\tif (expansion.length < 1) {\n\t\t\tthis.__log__('warn', \"Expansion is empty\");\n\t\t} else {\n\t\t\tthis.state = this.state.concat(expansion);\n\t\t}\n\t\tthis.onExpand();\n\t},\n\t\n\t/** `expansion(size)` returns an array of new elements to add to the current state. The default \n\timplementation generates new random elements.\t\t\n\t*/\n\texpansion: function expansion(size) {\n\t\tvar expansionRate = isNaN(this.expansionRate) ? 0.5 : +this.expansionRate;\n\t\tsize = isNaN(size) ? Math.floor(expansionRate * this.size) : +size;\n\t\tvar elems = new Array(size), i;\n\t\tfor (i = 0; i < size; i++){\n\t\t\telems[i] = this.problem.newElement();\n\t\t}\n\t\treturn elems;\n\t},\n\t\n\t/** `evaluate(elements)` evaluates all the elements in `state` with no evaluation, using its \n\tevaluation method. After that sorts the state with the `compare` method of the problem. May \n\treturn a future, if any evaluation is asynchronous.\n\t*/\n\tevaluate: function evaluate(elements) {\n\t\tvar mh = this,\n\t\t\tevalTime = this.statistics && this.statistics.stat({key:'evaluation_time'});\n\t\tif (evalTime) evalTime.startTime();\n\t\telements = elements || this.state;\n\t\treturn Future.then(this.problem.evaluate(elements), function (results) {\n\t\t\telements = mh.sort(elements);\n\t\t\tif (evalTime) evalTime.addTime();\n\t\t\tmh.onEvaluate(results);\n\t\t\treturn elements;\n\t\t});\n\t},\n\t\n\t/** `sort(elements)` TODO\n\t*/\t\n\tsort: function sort(elements) {\n\t\telements = elements || this.state;\n\t\tif (this.problem.objectives.length > 1) { // Multi-objective optimization.\n\t\t\telements = this.multiObjectiveSort(elements);\n\t\t} else { // Single-objective optimization.\n\t\t\telements.sort(this.problem.compare.bind(this.problem));\n\t\t\telements.reverse();\n\t\t}\n\t\treturn elements;\n\t},\n\t\n\t/** `sieve(size=this.size)` cuts the current state down to the given size (or this.size by \n\tdefault). This is usually used after expanding and evaluating the state.\n\t*/\n\tsieve: function sieve(size) {\n\t\tsize = isNaN(size) ? this.size : Math.floor(size);\n\t\tif (this.state.length > size) {\n\t\t\tthis.state = this.state.slice(0, this.size);\n\t\t}\n\t\tthis.onSieve();\n\t},\n\t\n\t/** `finished()` termination criteria for this metaheuristic. By default it checks if the number \n\tof passed iterations is not greater than `steps`.\n\t*/\n\tfinished: function finished() {\n\t\treturn this.step >= this.steps || this.problem.sufficientElements(this.state);\n\t},\n\n\t/** `analyze()` updates the process' statistics.\n\t*/\n\tanalyze: function analyze(statistics) {\n\t\tstatistics = statistics || this.statistics;\n\t\tvar step = this.step;\n\t\tif (statistics) {\n\t\t\tif (typeof this.state[0].evaluation === 'number') { // Single-objective optimization.\n\t\t\t\tvar stat_evaluation = statistics.stat({ key:'evaluation', step: step });\n\t\t\t\tthis.state.forEach(function (element) {\n\t\t\t\t\tstat_evaluation.add(element.evaluation, element);\n\t\t\t\t});\n\t\t\t} else if (Array.isArray(this.state[0].evaluation)) { // Multi-objective optimization.\n\t\t\t\tvar stats_evaluation = this.state[0].evaluation.map(function (_, i) {\n\t\t\t\t\t\treturn statistics.stat({ key:'evaluation', index: i, step: step });\n\t\t\t\t\t}),\n\t\t\t\t\tstat_dominators = statistics.stat({ key:'dominators', step: step }),\n\t\t\t\t\tstat_dominated = statistics.stat({ key:'dominated', step: step });\n\t\t\t\tthis.state.forEach(function (element) {\n\t\t\t\t\telement.evaluation.forEach(function (v, i) {\n\t\t\t\t\t\tstats_evaluation[i].add(v, element);\n\t\t\t\t\t});\n\t\t\t\t\tstat_dominators.add(element.pareto.dominators.length, element);\n\t\t\t\t\tstat_dominated.add(element.pareto.dominated.length, element);\n\t\t\t\t});\n\t\t\t}\n\t\t\tthis.onAnalyze();\n\t\t}\n\t\treturn statistics;\n\t},\n\t\n\t/** `advance()` performs one step of the optimization. If the process has not been initialized, \n\tit does so. Returns a future if any step is asynchronous.\n\t*/\n\tadvance: function advance() {\n\t\tvar mh = this, \n\t\t\tstepTime = this.statistics && this.statistics.stat({key: 'step_time'}),\n\t\t\tresult;\n\t\tif (isNaN(this.step) || +this.step < 0) {\n\t\t\tthis.reset();\n\t\t\tif (stepTime) stepTime.startTime();\n\t\t\tthis.initiate();\n\t\t\tresult = this.evaluate();\n\t\t} else {\n\t\t\tif (stepTime) stepTime.startTime();\n\t\t\tresult = this.update();\n\t\t}\n\t\treturn Future.then(result, function () {\n\t\t\tmh.step = isNaN(mh.step) || +mh.step < 0 ? 0 : +mh.step + 1;\n\t\t\tmh.analyze(); // Calculate the state's stats after updating it.\n\t\t\tif (stepTime) stepTime.addTime();\n\t\t\tmh.onAdvance();\n\t\t\treturn mh;\n\t\t});\n\t},\n\t\n\t/** `run()` returns a future that is resolved when the whole search process is finished. The \n\tvalue is the best cursor after the last step. It always returns a future.\n\t*/\n\trun: function run() {\n\t\tvar mh = this, \n\t\t\tadvance = this.advance.bind(this),\n\t\t\tcontinues = function continues() {\n\t\t\t\treturn !mh.finished();\n\t\t\t};\n\t\treturn Future.doWhile(advance, continues).then(function () {\n\t\t\tmh.onFinish();\n\t\t\treturn mh.state[0]; // Return the best cursor.\n\t\t});\n\t},\n\n\t/** `reset()` reset the process to start over again. Basically cleans the statistics and sets \n\tthe current `step` to -1.\n\t*/\n\treset: function reset() {\n\t\tthis.step = -1;\n\t\tif (this.statistics) this.statistics.reset();\n\t},\n\t\n\t// ## State control ############################################################################\n\t\n\t/** The `nub` method eliminates repeated elements inside the state. Use responsibly, since this \n\tis an expensive operation. Returns the size of the resulting state.\n\t*/\n\tnub: function nub(precision) {\n\t\tprecision = isNaN(precision) ? 1e-15 : +precision;\n\t\tthis.state = iterable(this.state).nub(function (e1, e2) {\n\t\t\tvar values1 = e1.values,\n\t\t\t\tvalues2 = e2.values,\n\t\t\t\tlen = values1.length;\n\t\t\tif (len !== e2.values.length) {\n\t\t\t\treturn false;\n\t\t\t} else for (var i = 0; i < len; ++i) {\n\t\t\t\tif (Math.abs(values1[i] - values2[i]) > precision) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}).toArray();\n\t\treturn this.state.length;\n\t},\n\t\n\t// ## Events ###################################################################################\n\t\n\t/** For better customization the `events` handler emits the following events: \n\t\t\n\t+ `initiated` when the state has been initialized.\n\t*/\n\tonInitiate: function onInitiate() {\n\t\tthis.events.emit('initiated', this);\n\t\tthis.__log__('debug', 'State has been initiated. Nos coepimus.');\n\t},\n\t\n\t/** + `updated` when the state has been expanded, evaluated and sieved.\n\t*/\n\tonUpdate: function onUpdate() {\n\t\tthis.events.emit('updated', this);\n\t\tthis.__log__('debug', 'State has been updated. Mutatis mutandis.');\n\t},\n\t\n\t/** + `expanded` after new elements are added to the state.\n\t*/\n\tonExpand: function onExpand() {\n\t\tthis.events.emit('expanded', this);\n\t\tthis.__log__('debug', 'State has been expanded. Nos exploramus.');\n\t},\n\t\n\t/** + `evaluated` after the elements in the state are evaluated.\n\t*/\n\tonEvaluate: function onEvaluate(elements) {\n\t\tthis.events.emit('evaluated', this, elements);\n\t\tthis.__log__('debug', 'Evaluated and sorted ', elements.length, ' elements. Appretiatus sunt.');\n\t},\n\t\n\t/** + `sieved` after elements are removed from the state.\n\t*/\n\tonSieve: function onSieve() {\n\t\tthis.events.emit('sieved', this);\n\t\tthis.__log__('debug', 'State has been sieved. Haec est viam.');\n\t},\n\t\n\t/** + `advanced` when one full iteration is completed.\n\t*/\n\tonAdvance: function onAdvance() {\n\t\tthis.events.emit('advanced', this);\n\t\tthis.__log__('debug', 'Step ', this.step, ' has been completed. Nos proficimus.');\n\t},\n\t\n\t/** + `analyzed` after the statistics are calculated.\n\t*/\n\tonAnalyze: function onAnalyze() {\n\t\tthis.events.emit('analyzed', this);\n\t\tthis.__log__('debug', 'Statistics have been gathered. Haec sunt numeri.');\n\t},\n\t\n\t/** + `finished` when the run finishes.\n\t*/\n\tonFinish: function onFinish() {\n\t\tthis.events.emit('finished', this);\n\t\tthis.__log__('debug', 'Finished. Nos invenerunt!');\n\t},\n\t\n\t// ## Multi-objective ##########################################################################\n\t\n\t/** A Pareto analysis of a set of elements compares all elements with each other, accounting the \n\tdomination relationship between the elements. Every element gets a new property `pareto`, an \n\tobject holding two arrays:\n\t\n\t+ `pareto.dominated` is a list of elements dominated by this element,\n\t\n\t+ `pareto.dominators` is a list of elements that dominate this element.\n\t*/\n\tparetoAnalysis: function paretoAnalysis(elements) {\n\t\telements = elements || this.state;\n\t\tvar len = elements.length,\n\t\t\ti1, i2, elem1, elem2, domination;\n\t\tfor (i1 = 0; i1 < len; i1++) {\n\t\t\telements[i1].pareto = { dominated: [], dominators: [] };\n\t\t}\n\t\tfor (i1 = 0; i1 < len; i1++) {\n\t\t\telem1 = elements[i1];\n\t\t\tfor (i2 = i1 + 1; i2 < len; i2++) {\n\t\t\t\telem2 = elements[i2];\n\t\t\t\tdomination = this.problem.compare(elem1, elem2).domination;\n\t\t\t\tif (domination > 0) {\n\t\t\t\t\telem1.pareto.dominated.push(elem2);\n\t\t\t\t\telem2.pareto.dominators.push(elem1);\n\t\t\t\t} else if (domination < 0) {\n\t\t\t\t\telem2.pareto.dominated.push(elem1);\n\t\t\t\t\telem1.pareto.dominators.push(elem2);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn elements;\n\t},\n\t\n\t/** Sorting function used for multiobjective problems. By default uses `nonDominatedSort` (based\n\ton NSGA).\n\t*/\n\tmultiObjectiveSort: function multiObjectiveSort(elements) {\n\t\treturn this.nonDominatedSort(elements);\n\t},\n\t\n\t/** The crowding distance is an estimation of the density of elements surrounding each element\n\tin the given list (or the state by default). Every element will be added a `crowdingDistance` \n\tnumber property.\n\t*/\n\tcrowdingDistance: function crowdingDistance(elements) {\n\t\telements = elements || this.state;\n\t\tvar es = elements.slice(), // shallow copy.\n\t\t\tcount = this.problem.objectives.length,\n\t\t\ti, j;\n\t\tfor (i = 0; i < es.length; i++) {\n\t\t\tes[i].crowdingDistance = 0;\n\t\t}\n\t\tfor (i = 0; i < count; i++) {\n\t\t\tes.sort(function (elem1, elem2) {\n\t\t\t\treturn elem1.evaluation[i] - elem2.evaluation[i];\n\t\t\t});\n\t\t\tes[0].crowdingDistance = Infinity;\n\t\t\tes[es.length - 1].crowdingDistance = Infinity;\n\t\t\tfor (j = 1; j < es.length - 1; j++) {\n\t\t\t\tes[j].crowdingDistance += es[j + 1].evaluation[i] - es[j - 1].evaluation[i]; \n\t\t\t}\n\t\t}\n\t\treturn elements;\n\t},\n\t\n\t/** The non-dominated sort is based on [_\"A Fast Elitist Non-Dominated Sorting Genetic Algorithm\n\tfor Multi-Objective Optimization: NSGA-II\"_ by Deb (2000)](http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.18.4257).\n\t*/\n\tnonDominatedSort: function nonDominatedSort(elements) {\n\t\telements = this.paretoAnalysis(elements);\n\t\telements = this.crowdingDistance(elements);\n\t\telements.sort(function (elem1, elem2) {\n\t\t\treturn (elem1.pareto.dominators.length - elem2.pareto.dominators.length) ||\n\t\t\t\t(elem2.crowdingDistance - elem1.crowdingDistance);\n\t\t});\n\t\treturn elements;\n\t},\n\t\n\t/** The Pareto strength of an element is defined as the sum of the amount of elements being \n\tdominated by all dominators of a given element. For more information see: [_\"SPEA2: Improving \n\tthe Strength Pareto Evolutionary Algorithm\"_ by Zitzler et al (2001)](http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.112.5073).\n\t*/\n\tstrengthParetoSort: function strengthParetoSort(elements) {\n\t\telements = this.paretoAnalysis(elements);\n\t\titerable(elements).forEach(function (elem) {\n\t\t\telem.pareto.strength = iterable(elem.pareto.dominators).map(function (dominator) {\n\t\t\t\treturn dominator.pareto.dominated.length;\n\t\t\t}).sum();\n\t\t});\n\t\treturn elements.sort(function (elem1, elem2) { // Pareto strength must be minimized.\n\t\t\treturn elem1.pareto.strength - elem2.pareto.strength;\n\t\t});\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** The default string representation of a Metaheuristic shows its constructor's name and its \n\tparameters.\n\t*/\n\ttoString: function toString() {\n\t\treturn \"<\"+ (this.constructor.name || 'Metaheuristic') +\" \"+ this.problem +\">\";\n\t},\n\t\n\t/** Returns a reconstruction of the parameters used in the construction of this instance.\n\t*/\n\t__params__: function __params__() {\n\t\tvar params = { problem: this.problem, size: this.size, steps: this.steps };\n\t\tif (this.random !== Randomness.DEFAULT) {\n\t\t\tparams.random = this.random;\n\t\t}\n\t\tif (this.step >= 0) {\n\t\t\tparams.step = this.step;\n\t\t\tparams.state = this.state;\n\t\t\tparams.statistics = this.statistics;\n\t\t} else if (this.state.length > 0) {\n\t\t\tparams.state = this.state;\n\t\t}\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar id = arguments[i];\n\t\t\tif (this.hasOwnProperty(id)) {\n\t\t\t\tparams[id] = this[id];\n\t\t\t}\n\t\t}\n\t\treturn params;\n\t},\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Metaheuristic',\n\t\tserializer: function serialize_Metaheuristic(obj) {\n\t\t\treturn [obj.__params__()];\n\t\t}\n\t}\n}); // declare Metaheuristic.","/** # Hill climbing\n\n[Hill Climbing](http://en.wikipedia.org/wiki/Hill_climbing) is a simple iterative local search \nmethod. The state has only one element, and in each iteration its best successor replaces it, after\na local optimum is reached.\n*/\nvar HillClimbing = metaheuristics.HillClimbing = declare(Metaheuristic, {\n\t/** The constructor The constructor takes the following parameters:\n\t*/\n\tconstructor: function HillClimbing(params) {\n\t\tMetaheuristic.call(this, params);\n\t\tinitialize(this, params)\n\t\t/** + `delta=1` is the radius of the elements surroundings in every dimension.\n\t\t*/\n\t\t\t.number('delta', { defaultValue: 1, coerce: true })\n\t\t/** + `size` is constrained to 1 by default. This may be increased, resulting in many \n\t\tparallel climbings.\n\t\t*/\n\t\t\t.integer('size', { defaultValue: 1,\tcoerce: true });\n\t},\n\t\n\t/** The hill climbings `update()` replaces each element in the state by the best element in its \n\tneighbourhood, if there is any. The surroundings have all possible elements resulting from \n\teither an increment or decrement (of the given `delta`) in each of the centre element's \n\tdimensions.\n\t*/\n\tupdate: function update() {\n\t\tvar mh = this, \n\t\t\tlocalOptima = 0;\n\t\treturn Future.all(this.state.map(function (elem) {\n\t\t\tvar range = elem.neighbourhood(mh.delta);\n\t\t\trange.push(elem);\n\t\t\treturn Future.then(mh.evaluate(range), function (range) {\n\t\t\t\tvar best = range[0];\n\t\t\t\tif (elem === best) {\n\t\t\t\t\tlocalOptima++;\n\t\t\t\t}\n\t\t\t\treturn best;\n\t\t\t});\t\t\t\n\t\t})).then(function (elems) {\n\t\t\telems = mh.sort(elems);\n\t\t\tmh.state = elems;\n\t\t\tmh.__localOptima__ = localOptima;\n\t\t\tmh.onUpdate();\n\t\t});\n\t},\n\t\t\n\t/** `atLocalOptima()` checks if the search is currently stuck at a local optima.\n\t*/\n\tatLocalOptima: function atLocalOptima() {\n\t\treturn this.__localOptima__ >= this.state.length;\n\t},\n\t\t\n\t/** A hill climbing search must finish when a local optimum is reached. This criteria is tested \n\ttogether with all others.\n\t*/\n\tfinished: function finished() {\n\t\treturn Metaheuristic.prototype.finished.call(this) || this.atLocalOptima();\n\t},\n\t\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'HillClimbing',\n\t\tserializer: function serialize_HillClimbing(obj) {\n\t\t\treturn [obj.__params__('delta')];\n\t\t}\n\t}\n}); // declare HillClimbing.\n","/** # Genetic algorithm\n\nClassic Holland's-style [genetic algorithms](http://en.wikipedia.org/wiki/Genetic_algorithm),\nwhich is the base for many evolutionary computing variants.\n*/\nvar GeneticAlgorithm = metaheuristics.GeneticAlgorithm = declare(Metaheuristic, {\n\t/** The constructor takes many parameters specific for this technique:\n\t*/\n\tconstructor: function GeneticAlgorithm(params) {\n\t\tMetaheuristic.call(this, params); // Superconstructor call.\n\t\tinitialize(this, params)\n\t\t/** + `expansionRate=0.5` is the amount of new elements generated by crossover, as a ratio\n\t\tof the population size.\n\t\t*/\n\t\t\t.number('expansionRate', { defaultValue: 0.5, minimum: 0, coerce: true })\n\t\t/** + `mutationRate=0.2` is the chance of a new element (resulting from crossover) mutating.\n\t\t*/\n\t\t\t.number('mutationRate', { defaultValue: 0.2, minimum: 0, maximum: 1, coerce: true })\n\t\t/** + `selection(count)` is a function that selects count elements from the current \n\t\tpopulation. These will be the parents of the new elements in the next generation. By default\n\t\trank selection is used, a.k.a. fitness proportional to position in the state.\n\t\t*/\n\t\t\t.func('selection', { defaultValue: GeneticAlgorithm.selections.rankSelection })\n\t\t/** + `crossover(parents)` is a function implementing the genetic operator that simulates \n\t\treproduction with inheritance. The parents argument must be an array of elements. The result\n\t\tis an array of elements. By default the single point crossover is used.\n\t\t*/\n\t\t\t.func('crossover', { defaultValue: GeneticAlgorithm.crossovers.singlepointCrossover })\n\t\t/** `mutation(element)` is a function implementing the genetic operator that simulates \n\t\tbiological mutation, making a random change in the chromosome. By default a single point \n\t\tuniform mutation is used.\n\t\t*/\n\t\t\t.func('mutation', { defaultValue: GeneticAlgorithm.mutations.singlepointUniformMutation });\n\t},\n\n\t/** The population's (state) `expansion()` is the possibly mutated crossovers of selected \n\telements. How many is determined by `expansionRate`.\n\t*/\n\texpansion: function expansion() {\n\t\tvar parents, childs, child,\n\t\t\tnewElements = [],\n\t\t\tlen = Math.floor(this.expansionRate * this.size);\n\t\tlen += len % 2; // Make len even.\n\t\tfor (var i = 0; i < len; i += 2) {\n\t\t\tparents = this.selection();\n\t\t\tchilds = this.crossover(parents);\n\t\t\tfor (var j = 0; j < childs.length; j++) {\n\t\t\t\tchild = this.random.randomBool(this.mutationRate) ? this.mutation(childs[j]) : childs[j];\n\t\t\t\tnewElements.push(child);\n\t\t\t}\n\t\t}\n\t\tthis.onExpand();\n\t\treturn newElements;\n\t},\n\t\n\t/** ## Selection methods #######################################################################\n\n\t`GeneticAlgorithm.selections` is a bundle of standard selection methods. A selection function \n\ttakes the amount of elements to be selected and returns an array of selected elements. The \n\timplemented methods are:\n\t*/\n\t'static selections': {\n\t\t/** + `rankSelection(count=2)` makes a selection where each element's probability of being \n\t\tselected is proportional to its position in the state.\n\t\t*/\n\t\trankSelection: function rankSelection(count) {\n\t\t\tcount = isNaN(count) ? 2 : +count;\n\t\t\tvar len = this.state.length,\n\t\t\t\trandoms = this.random.randoms(count, 0, len * (len + 1) / 2 - 1),\n\t\t\t\tselected = [];\n\t\t\trandoms.sort(function (x, y) { \n\t\t\t\treturn x - y; \n\t\t\t});\n\t\t\tthis.state.forEach(function (element) {\n\t\t\t\tfor (var i = 0; i < count; i++) {\n\t\t\t\t\trandoms[i] += i - len;\n\t\t\t\t}\n\t\t\t\tif (randoms[0] <= 0) {\n\t\t\t\t\tselected.push(element);\n\t\t\t\t\trandoms.shift();\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (selected.length < count) { // Should not happen.\n\t\t\t\tselected = selected.concat(this.state.slice(0, count - selected.length));\n\t\t\t}\n\t\t\treturn selected;\n\t\t},\n\t\t\n\t\t/** + `rouletteSelection(count=2)` makes a selection where each element's probability of being \n\t\tselected is proportional to its evaluation. Warning! This selection assumes the evaluation is \n\t\tbeing maximized.\n\t\t*/\n\t\trouletteSelection: function rouletteSelection(count) { //FIXME\n\t\t\tcount = isNaN(count) ? 2 : count |0;\n\t\t\tvar len = this.state.length,\n\t\t\t\tevaluationStat = this.statistics.stat({key: 'evaluation', step: this.step}),\n\t\t\t\tmin = evaluationStat.minimum(),\n\t\t\t\tsum = evaluationStat.sum(),\n\t\t\t\trandoms = this.random.randoms(count, 0, sum - len * min),\n\t\t\t\tselected = [];\n\t\t\trandoms.sort(function (x, y) { return x-y; });\n\t\t\tthis.state.forEach(function (element) {\n\t\t\t\tfor (var i = 0; i < count; i++) {\n\t\t\t\t\trandoms[i] += i - len;\n\t\t\t\t}\n\t\t\t\tif (randoms[0] <= 0) {\n\t\t\t\t\tselected.push(element);\n\t\t\t\t\trandoms.shift();\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (selected.length < count) { // Should not happen.\n\t\t\t\tselected = selected.concat(this.state.slice(0, count - selected.length));\n\t\t\t}\n\t\t\treturn selected;\n\t\t},\n\t\t\n\t\t/** + [`stochasticUniversalSamplingSelection(count)`](http://en.wikipedia.org/wiki/Stochastic_universal_sampling)\n\t\tis a less biased version of the roulette selection method.\n\t\t*/\n\t\tstochasticUniversalSamplingSelection: function stochasticUniversalSamplingSelection(count) {\n\t\t\tcount = isNaN(count) ? 2 : count |0;\n\t\t\tvar state = this.state,\n\t\t\t\ttotalFitness = iterable(state).select('evaluation').sum(),\n\t\t\t\tp = totalFitness / count;\n\t\t\treturn base.Iterable.iterate(function (x) { \n\t\t\t\treturn x + p; \n\t\t\t}, this.random.randomInt(p), count).map(function (pointer) {\n\t\t\t\tvar sum = 0;\n\t\t\t\tfor (var i = 0; i < state.length; ++i) {\n\t\t\t\t\tsum += state[i].evaluation;\n\t\t\t\t\tif (sum >= pointer) {\n\t\t\t\t\t\treturn state[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn state[state.length - 1]; // Very improbable.\n\t\t\t}).toArray();\n\t\t},\t\t\n\t}, // GeneticAlgorithm.selections\n\n\t/** ## Crossover methods #######################################################################\n\n\t`GeneticAlgorithm.crossovers` is a bundle of standard crossover methods. A crossover function \n\ttakes an array of parent elements and returns an array of sibling elements. The implemented\n\tmethods are:\n\t*/\n\t'static crossovers': {\n\t\t/** + `singlepointCrossover(parents)` given two parents returns an array of two new elements\n\t\tbuilt with one half of each parent. The cutpoint is chosen randomly.\n\t\t*/\n\t\tsinglepointCrossover: function singlepointCrossover(parents) {\n\t\t\traiseIf(!Array.isArray(parents) || parents.length < 2, \"A two parent array is required.\");\n\t\t\tvar cut = this.random.randomInt(this.length - 1) + 1,\n\t\t\t\tvalues0 = parents[0].values,\n\t\t\t\tvalues1 = parents[1].values;\n\t\t\treturn [ \n\t\t\t\tthis.problem.newElement(values0.slice(0, cut).concat(values1.slice(cut))),\n\t\t\t\tthis.problem.newElement(values1.slice(0, cut).concat(values0.slice(cut)))\n\t\t\t];\n\t\t},\n\t\t\n\t\t/** + `twopointCrossover(parents)` given two parents returns an array of two new elements:\n\t\tthe first one with two parts of the first parent and one part of the second parent, and the \n\t\tsecond one assembled viceversa. The two cutpoints are chosen randomly.\n\t\t*/\n\t\ttwopointCrossover: function twopointCrossover(parents) {\n\t\t\traiseIf(!Array.isArray(parents) || parents.length < 2, \"A two parent array is required.\");\n\t\t\tvar cut1 = this.random.randomInt(this.length - 1) + 1,\n\t\t\t\tcut2 = this.random.randomInt(this.length - 1) + 1,\n\t\t\t\tvalues0 = parents[0].values,\n\t\t\t\tvalues1 = parents[1].values;\n\t\t\treturn [ \n\t\t\t\tthis.problem.newElement(values0.slice(0, cut1).concat(values1.slice(cut1, cut2)).concat(values0.slice(cut2))),\n\t\t\t\tthis.problem.newElement(values1.slice(0, cut1).concat(values0.slice(cut1, cut2)).concat(values1.slice(cut2)))\n\t\t\t];\n\t\t},\n\t\t\n\t\t/** + `uniformCrossover(parents)` creates as many children as the given parents, with each\n\t\tvalue taken randomly from any of the parents.\n\t\t*/\n\t\tuniformCrossover: function uniformCrossover(parents, count) {\n\t\t\tcount = isNaN(count) ? parents.length : count|0;\n\t\t\tvar result = [],\n\t\t\t\tlength = this.problem.elementLength(),\n\t\t\t\trandom = this.random,\n\t\t\t\tvalues;\n\t\t\tfor (var i = 0; i < count; ++i) {\n\t\t\t\tvalues = [];\n\t\t\t\tfor (var j = 0; j < length; ++j) {\n\t\t\t\t\tvalues.push(random.choice(parents).values[j]);\n\t\t\t\t}\n\t\t\t\tresult.push(this.problem.newElement(values));\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}, // GeneticAlgorithm.crossovers\n\t\n\t/** ## Mutation methods ########################################################################\n\n\t`GeneticAlgorithm.mutations` is a bundle of standard mutation methods. A mutation function takes \n\tan element and returns a new element which is a variation of the former. The implemented methods\n\tare:\n\t*/\n\t'static mutations': {\n\t\t/** + `singlepointUniformMutation(element)` sets a randomly selected gene to a uniform\n\t\trandom value.\n\t\t*/\n\t\tsinglepointUniformMutation: function singlepointUniformMutation(element) {\n\t\t\tvar model = this.problem.elementModel(),\n\t\t\t\ti = this.random.randomInt(model.length);\n\t\t\treturn element.modification(i, this.random.random(model[i].min, model[i].max));\n\t\t},\n\t\t\t\n\t\t/** + `uniformMutation(maxPoints=Infinity)` builds a mutation function that makes at least \n\t\tone and up to `maxPoints` mutations, changing a randomly selected gene to a uniform random\n\t\tvalue.\n\t\t*/\n\t\tuniformMutation: function uniformMutation(maxPoints) {\n\t\t\tmax = isNaN(maxPoints) ? Infinity : +maxPoints;\n\t\t\tvar model = this.problem.elementModel();\n\t\t\treturn function mutation(element) {\n\t\t\t\tvar times = maxPoints, i, range;\n\t\t\t\telement = this.problem.newElement(element.values); // Copy element.\n\t\t\t\tdo {\n\t\t\t\t\ti = this.random.randomInt(model.length);\n\t\t\t\t\telement.values[i] = this.random.random(model[i].min, model[i].max);\n\t\t\t\t} while (this.random.randomBool(this.mutationRate) && --times > 0);\n\t\t\t\treturn element;\n\t\t\t};\n\t\t},\n\t\t\n\t\t/** + `singlepointBiasedMutation(element)` sets a randomly selected gene to random deviation\n\t\tof its value, with a triangular distribution.\n\t\t*/\n\t\tsinglepointBiasedMutation: function singlepointBiasedMutation(element) {\n\t\t\tvar random = this.random,\n\t\t\t\tmodel = this.problem.elementModel(),\n\t\t\t\ti = random.randomInt(element.length);\n\t\t\treturn element.modification(i, element.values[i] + \n\t\t\t\t(random.random() - random.random()) * (model[i].max - model[i].min));\n\t\t},\n\t\t\n\t\t/** + `recombinationMutation(element)` swaps two values of the element at random.\n\t\t*/\n\t\trecombinationMutation: function recombinationMutation(element) {\n\t\t\tvar values = element.values.slice(),\n\t\t\t\ti1 = this.random.randomInt(values.length),\n\t\t\t\tv1 = values[i1],\n\t\t\t\ti2 = this.random.randomInt(values.length), v2;\n\t\t\tif (i1 === i2) {\n\t\t\t\ti2 = (i2 + 1) % element.length;\n\t\t\t}\n\t\t\tvalues[i1] = values[i2];\n\t\t\tvalues[i2] = v1;\n\t\t\treturn this.problem.newElement(values);\n\t\t}\n\t}, // GeneticAlgorithm.mutations\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'GeneticAlgorithm',\n\t\tserializer: function serialize_GeneticAlgorithm(obj) {\n\t\t\tvar params = obj.__params__('expansionRate', 'mutationRate');\n\t\t\t//TODO serialize 'selection', 'crossover', 'mutation'\n\t\t\treturn [params];\n\t\t}\n\t}\n}); // declare GeneticAlgorithm.\n","/** # Beam search\n\n[Beam search](http://en.wikipedia.org/wiki/Beam_search) is a form of parallel best-first search with \nlimited memory.\n*/\nvar BeamSearch = metaheuristics.BeamSearch = declare(Metaheuristic, {\n\t/** The constructor m take any special parameters.\n\t*/\n\tconstructor: function BeamSearch(params) {\n\t\tMetaheuristic.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t/** A `delta` may be specified for the default `successors` for continuous variables.\n\t\t\t*/\n\t\t\t.number('delta', { ignore: true, coerce: true });\n\t},\n\t\n\t/** `successors(element)` returns the elements' successors. The problem's element must have its \n\t`successors` method implemented.\n\t*/\n\tsuccessors: function successors(element) {\n\t\treturn element.neighbourhood(this.delta);\n\t},\n\t\n\t/** The expansion in beam search adds all successors of all elements to the\tstate. After being \n\tevaluated and sieved only the best will remain.\n\t*/\n\texpansion: function expansion() {\n\t\tvar allSuccessors = [],\n\t\t\tsuccessors = this.successors.bind(this);\n\t\tthis.state.forEach(function (element) {\n\t\t\tallSuccessors = allSuccessors.concat(successors(element));\n\t\t});\n\t\tthis.onExpand();\n\t\treturn allSuccessors;\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'BeamSearch',\n\t\tserializer: function serialize_BeamSearch(obj) {\n\t\t\treturn [obj.__params__('delta')];\n\t\t}\n\t}\n}); // declare BeamSearch.\n","/** # Simulated annealing\n\n[Simulated annealing](http://en.wikipedia.org/wiki/Simulated_annealing) is a stochastic global \noptimization technique.\n*/\nvar SimulatedAnnealing = metaheuristics.SimulatedAnnealing = declare(Metaheuristic, {\n\t/** The constructor takes some specific parameters for this search:\n\t*/\n\tconstructor: function SimulatedAnnealing(params) {\n\t\tMetaheuristic.call(this, params);\n\t\tinitialize(this, params)\n\t\t/** + `maximumTemperature=1` is the temperature at the start of the run.\n\t\t*/\n\t\t\t.number('maximumTemperature', { defaultValue: 1, coerce: true })\n\t\t/** + `minimumTemperature=0` is the temperature at the end of the run.\n\t\t*/\n\t\t\t.number('minimumTemperature', { defaultValue: 0, coerce: true })\n\t\t/** + `delta=1` is the radius of the elements surroundings in every dimension, that is \n\t\tchecked by this algorithm.\n\t\t*/\n\t\t\t.number('delta', { defaultValue: 1, coerce: true })\n\t\t/** + `size=1` is 1 by default, but larger states are supported.\n\t\t*/\n\t\t\t.integer('size', { defaultValue: 1,\tcoerce: true })\n\t\t/** + `temperature=coolingSchedule.linear` is the temperature function.\n\t\t*/\n\t\t\t.func('temperature', { defaultValue: this.coolingSchedule.linear });\n\t},\n\t\n\t/** `randomNeighbour(element, radius=this.delta)` returns one neighbour of the given element \n\tchosen at random.\n\t*/\n\trandomNeighbour: function randomNeighbour(element, radius) {\n\t\tradius = isNaN(radius) ? this.delta : +radius;\n\t\tvar i = this.random.randomInt(element.values.length), \n\t\t\tv = element.values[i];\n\t\treturn element.modification(i, this.random.randomBool() ? v + radius : v - radius);\n\t},\n\t\n\t/** The `acceptance(current, neighbour, temp=this.temperature())` is the probability of \n\taccepting the new element. Uses the original definitions from \n\t[Kirkpatrick's paper](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.123.7607).\n\t*/\n\tacceptance: function acceptance(current, neighbour, temp) {\n\t\ttemp = isNaN(temp) ? this.temperature() : +temp;\n\t\tif (this.problem.compare(current, neighbour) > 0) {\n\t\t\treturn 1; // Should always accept a better neighbour.\n\t\t} else {\n\t\t\tvar d = -Math.abs(neighbour.evaluation - current.evaluation);\n\t\t\treturn clamp(Math.exp(d / temp), 0, 1);\n\t\t}\n\t},\n\t\n\t/** The annealings temperature is a metaphore for the amount of randomness the process applies. \n\tThe cooling schedule is a function that calculates the temperature for any given step in the\n\toptimization.\n\t*/\n\tcoolingSchedule: {\n\t\tlinear: function temperature() {\n\t\t\treturn (1 - Math.max(0, this.step) / this.steps) * \n\t\t\t\t(this.maximumTemperature - this.minimumTemperature) + this.minimumTemperature;\n\t\t}\n\t},\n\t\n\t/** At every iteration, for each element in the state one of its neighbours is chosen randomly. \n\tIf the neighbour is better, it replaces the corresponding element. Else it may still do so, but \n\twith a probability calculated by `acceptance()`.\n\t*/\n\tupdate: function update() {\n\t\tvar mh = this,\n\t\t\ttemp = this.temperature(),\n\t\t\tacceptanceStat = this.statistics.stat({key: 'acceptance'}),\n\t\t\ttemperatureStat = this.statistics.stat({key: 'temperature'});\n\t\ttemperatureStat.add(temp, this.step);\n\t\treturn Future.all(this.state.map(function (elem) {\n\t\t\tvar neighbour = mh.randomNeighbour(elem);\n\t\t\treturn Future.then(neighbour.evaluate(), function () {\n\t\t\t\tvar p = mh.acceptance(elem, neighbour, temp);\n\t\t\t\tacceptanceStat.add(p, neighbour);\n\t\t\t\treturn mh.random.randomBool(p) ? neighbour : elem;\n\t\t\t});\n\t\t})).then(function (elems) {\n\t\t\telems = mh.sort(elems);\n\t\t\tmh.state = elems;\n\t\t\tmh.onUpdate();\n\t\t\treturn mh;\n\t\t});\n\t},\n\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'SimulatedAnnealing',\n\t\tserializer: function serialize_SimulatedAnnealing(obj) {\n\t\t\t//TODO Serialize 'temperature'\n\t\t\treturn [obj.__params__('maximumTemperature', 'minimumTemperature', 'delta')];\n\t\t}\n\t}\n}); // declare SimulatedAnnealing.\n","/** # Particle swarm\n\n[Particle Swarm](http://en.wikipedia.org/wiki/Particle_swarm_optimization) is an stochastic \noptimization technique. Every candidate solution is treated as a particle with a position and a \nvelocity. On each iteration the positions and velocities of every particle are updated considering\nthe best positions so far.\n*/\nvar ParticleSwarm = metaheuristics.ParticleSwarm = declare(Metaheuristic, {\n\t/** The constructor takes some specific parameters for this search:\n\t*/\n\tconstructor: function ParticleSwarm(params) {\n\t\tMetaheuristic.call(this, params);\n\t\tinitialize(this, params)\n\t\t/** + `inertia=1` is the weight of the particle's current velocity in the velocity update.\n\t\t*/\n\t\t\t.number('inertia', { defaultValue: 1, coerce: true })\n\t\t/** + `localAcceleration=0.5` is the weight of the particle's current best position in the \n\t\t\t\tvelocity update.\n\t\t*/\n\t\t\t.number('localAcceleration', { defaultValue: 0.5, coerce: true })\n\t\t/** + `globalAcceleration=0.3` is the weight of the whole swarm's current best position in \n\t\t\t\tthe velocity update.\n\t\t*/\n\t\t\t.number('globalAcceleration', { defaultValue: 0.3, coerce: true });\n\t},\n\t\n\t/** The elements in a particle swarm have two added properties which have to be initialized:\n\t\n\t+ `__velocity__` is the vector that defines the movement of the particle. Initially it is a \n\t\trandom vector.\n\t+ `__localBest__` is the best position of the particle in the run. The first position has \n\t\titself as the best so far.\n\t*/\n\tinitiate: function initiate(size) {\n\t\tMetaheuristic.prototype.initiate.call(this, size);\n\t\tvar mh = this,\n\t\t\tmodel = this.problem.elementModel(),\n\t\t\tresult = this.state.forEach(function (element) {\n\t\t\t\telement.__velocity__ = mh.random.randoms(element.values.length, -1, +1).map(function (v, i) {\n\t\t\t\t\treturn v * (model[i].max - model[i].min);\n\t\t\t\t});\n\t\t\t\telement.__localBest__ = element;\n\t\t\t});\n\t\tthis.onInitiate();\n\t\treturn result;\n\t},\n\t\n\t/** The method `nextVelocity` calculates the velocity of the particle for the next iteration.\n\t*/\n\tnextVelocity: function nextVelocity(element, globalBest) {\n\t\tvar mh = this,\n\t\t\tvelocity = element.__velocity__,\n\t\t\tlocalBest = element.__localBest__,\n\t\t\tlocalCoef = this.random.random(this.localAcceleration),\n\t\t\tglobalCoef = this.random.random(this.globalAcceleration),\n\t\t\tresult = element.values.map(function (v, i) {\n\t\t\t\treturn velocity[i] * mh.inertia +\n\t\t\t\t\tlocalCoef * (localBest.values[i] - v) +\n\t\t\t\t\tglobalCoef * (globalBest.values[i] - v);\n\t\t\t});\n\t\treturn result;\n\t},\n\t\n\t/** The method `nextElement` creates a new element which represents the position of a particle \n\tin the next iteration.\n\t*/\n\tnextElement: function nextElement(element, globalBest) {\n\t\tvar mh = this,\n\t\t\tnextVelocity = this.nextVelocity(element, globalBest),\n\t\t\tnextValues = element.values.map(function (v, i) {\n\t\t\t\treturn v + nextVelocity[i];\n\t\t\t}),\n\t\t\tresult = this.problem.newElement(nextValues);\n\t\treturn Future.then(result.evaluate(), function () {\n\t\t\tresult.__velocity__ = nextVelocity;\n\t\t\tresult.__localBest__ = mh.problem.compare(element.__localBest__, result) > 0 ? result : element.__localBest__;\n\t\t\treturn result;\n\t\t});\t\t\n\t},\n\t\n\t/** Updating the optimization state means updating each particle velocity and recalculating \n\ttheir positions. The best position of the whole run is stored in the `__globalBest__` property,\n\tand updated every time a new best position is achieved. If nothing fails, in the end the \n\tparticles should converge at this position.\n\t*/\n\tupdate: function update() {\n\t\tvar mh = this,\n\t\t\tglobalBest = this.__globalBest__;\n\t\tif (!globalBest) {\n\t\t\tglobalBest = this.__globalBest__ = this.state[0];\n\t\t}\n\t\treturn Future.all(this.state.map(function (element) {\n\t\t\treturn mh.nextElement(element, globalBest);\n\t\t})).then(function (elements) {\n\t\t\telements = mh.sort(elements);\n\t\t\tmh.state = elements;\n\t\t\tif (mh.problem.compare(mh.__globalBest__, elements[0]) > 0) {\n\t\t\t\tmh.__globalBest__ = elements[0];\n\t\t\t}\n\t\t\tmh.onUpdate();\n\t\t\treturn mh;\n\t\t});\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'ParticleSwarm',\n\t\tserializer: function serialize_ParticleSwarm(obj) {\n\t\t\treturn [obj.__params__('inertia', 'localAcceleration', 'globalAcceleration')];\n\t\t}\n\t}\n}); // declare ParticleSwarm.\n","/** # Differential evolution\n\n[Differential evolution](http://en.wikipedia.org/wiki/Differential_evolution) is an evolutionary\nmetaheuristic based on a particular form of crossover. This operator acts on individual values of\neach state, replacing the value with a combination of the corresponding value in three other \nrandomly chosen elements.\n*/\nvar DifferentialEvolution = metaheuristics.DifferentialEvolution = declare(Metaheuristic, {\n\t/** The constructor takes the following parameters:\n\t*/\n\tconstructor: function DifferentialEvolution(params) {\n\t\tMetaheuristic.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t/** + `differentialWeight=1` is the coefficient (usually named `F`) in the crossover \n\t\t\tformula.\n\t\t\t*/\n\t\t\t.number('differentialWeight', { coerce: true, defaultValue: 1, minimum: 0, maximum: 2 })\n\t\t\t/** + `crossoverProbability=30%` is the probability of getting a value from a crossover. \n\t\t\t*/\n\t\t\t.number('crossoverProbability', { coerce: true, defaultValue: 0.3, minimum: 0, maximum: 1 })\n\t\t\t/** Also, the state's size is constrained to a minimum of 4, because of how the \n\t\t\tcrossover works.\n\t\t\t*/\n\t\t\t.integer('size', { coerce: true, defaultValue: 100, minimum: 4 });\n\t},\n\t\n\t/** The expansion is quite simple. For each element `x` in the state a new one is generated. \n\tThree other elements are randomly selected from the state, named `a`, `b` and `c`. With a \n\tprobability of `crossoverProbability`, the ith value of the new element results from \n\t`a[i] + F(b[i] - c[i])`, where `F` is the `differentialWeight`. The other values are copied from \n\t`x`, although it is assured that at least one of the new element's is calculated as shown \n\tbefore. \n\t*/\n\texpansion: function expansion() {\n\t\tvar mh = this,\n\t\t\tresult = this.state.map(function (element, elementIndex) {\n\t\t\t\tvar stateCopy = mh.state.slice();\n\t\t\t\tstateCopy.splice(elementIndex, 1);\n\t\t\t\tvar crossover = mh.random.choices(3, stateCopy),\n\t\t\t\t\ta = crossover[0].values,\n\t\t\t\t\tb = crossover[1].values,\n\t\t\t\t\tc = crossover[2].values,\n\t\t\t\t\tlen = element.values.length,\n\t\t\t\t\trandomIndex = mh.random.randomInt(len),\n\t\t\t\t\tnewValues = element.values.map(function (value, i) {\n\t\t\t\t\t\tif (i === randomIndex || mh.random.randomBool(mh.crossoverProbability)) {\n\t\t\t\t\t\t\treturn a[i] + mh.differentialWeight * (b[i] - c[i]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\treturn mh.problem.newElement(newValues);\n\t\t\t});\n\t\tthis.onExpand();\n\t\treturn result;\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'DifferentialEvolution',\n\t\tserializer: function serialize_DifferentialEvolution(obj) {\n\t\t\treturn [obj.__params__('differentialWeight', 'crossoverProbability')];\n\t\t}\n\t}\n}); // declare DifferentialEvolution.\n","/** # Evolution strategy.\n\n[Evolution strategy](https://en.wikipedia.org/wiki/Evolution_strategy) is maybe the simplest \nevolutionary optimization method. At each step, one or more random deviations of each element are\ngenerated, replacing their parent if they prove to be better.\n*/\nvar EvolutionStrategy = metaheuristics.EvolutionStrategy = declare(Metaheuristic, {\n\t/** The constructor takes the following parameters:\n\t*/\n\tconstructor: function EvolutionStrategy(params) {\n\t\tMetaheuristic.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t/** + `mutantCount=1` is the number of mutants generated per element at each step.\n\t\t\t*/\n\t\t\t.number('mutantCount', { coerce: true, defaultValue: 1, minimum: 1 })\n\t\t\t/** + `size=1`: state's size is 1 by default in this metaheuristic.\n\t\t\t*/\n\t\t\t.integer('size', { coerce: true, defaultValue: 1, minimum: 1 });\n\t},\n\t\n\t/** A `mutant` is a new random variation of the given `element`. Although using a normal \n\tdistribution is more common, here a more efficient tringular distribution is used.\n\t*/\n\tmutant: function mutant(element) {\n\t\tvar random = this.random,\n\t\t\tmodel = this.problem.elementModel(),\n\t\t\tnewValues = element.values.map(function (v, i) {\n\t\t\t\tvar range = model[i];\n\t\t\t\treturn v + (random.random() - random.random()) * (range.max - range.min);\n\t\t\t});\n\t\treturn this.problem.newElement(newValues);\n\t},\n\t\n\t/** `mutants` calculates an array of `count` mutants, or `this.mutantCount` by default. \n\t*/\n\tmutants: function mutants(element, count) {\n\t\tcount = isNaN(count) ? this.mutantCount : +count;\n\t\tvar result = [];\n\t\tfor (var i = 0; i < count; ++i) {\n\t\t\tresult.push(this.mutant(element));\n\t\t}\n\t\treturn result;\n\t},\n\t\n\t/** The expansion simply returns a set of `this.mutantCount` mutants for each element in the\n\tcurrent state.\n\t*/\n\texpansion: function expansion() {\n\t\tvar mh = this,\n\t\t\tnewElements = [];\n\t\tthis.state.forEach(function (element) {\n\t\t\tnewElements = newElements.concat(mh.mutants(element));\n\t\t});\n\t\tthis.onExpand();\n\t\treturn newElements;\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'DistributionEstimation',\n\t\tserializer: function serialize_DistributionEstimation(obj) {\n\t\t\treturn [obj.__params__('mutantCount')];\n\t\t}\n\t}\n}); // declare EvolutionStrategy.\n","/** # Harmony search.\n\n[Harmony search](https://en.wikipedia.org/wiki/Harmony_search) is an optimization technique inspired\nby the improvisation process of musicians proposed by Zong Woo Geem in 2001.\n*/\nvar HarmonySearch = metaheuristics.HarmonySearch = declare(Metaheuristic, {\n\t/** The constructor takes the following parameters:\n\t*/\n\tconstructor: function HarmonySearch(params) {\n\t\tMetaheuristic.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t/** + `harmonyProbability=90%` or _hmcr_ is the chance of a value of the next element \n\t\t\tbeing taken from one existing element in the state (or _\"harmony memory\"_).\n\t\t\t*/\n\t\t\t.number('harmonyProbability', { coerce: true, defaultValue: 0.9, minimum: 0, maximum: 1 })\n\t\t\t/** + `adjustProbability=30%` or _par_ is the chance of adjusting a value of the next\n\t\t\telement.\n\t\t\t*/\n\t\t\t.number('adjustProbability', { coerce: true, defaultValue: 0.5, minimum: 0, maximum: 1 })\n\t\t\t/** + `delta=1` is the distance between neighbouring states for discrete adjustments.\n\t\t\t*/\n\t\t\t.number('delta', { coerce: true, defaultValue: 1 })\n\t\t\t/** + `fretWidth=0.01` is the maximum adjustment for continuous variables, expressed as \n\t\t\ta ratio of the range.\n\t\t\t*/\n\t\t\t.number('fretWidth', { coerce: true, defaultValue: 0.01 })\n\t\t\t;\n\t},\n\t\n\t/** At each step only one new element is generated. Each of its values is taken from another\n\telement in the state with a chance equal to `harmonyProbability`, else it is defined at random.\n\tIf the value comes from another element, it is slightly modified by `delta` with a chance equal\n\tto `adjustProbability`.\n\t*/\n\texpansion: function expansion() {\n\t\tvar mh = this,\n\t\t\trandom = this.random,\n\t\t\tmodel = this.problem.elementModel(),\n\t\t\tvalues = model.map(function (range, i) {\n\t\t\t\tif (random.randomBool(mh.harmonyProbability)) {\n\t\t\t\t\tvar value = random.choice(mh.state).values[i];\n\t\t\t\t\tif (random.randomBool(mh.adjustProbability)) {\n\t\t\t\t\t\tif (range.discrete) {\n\t\t\t\t\t\t\tvalue += random.choice([-mh.delta, mh.delta]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar span = range.max - range.min;\n\t\t\t\t\t\t\tvalue += random.random(-span, +span) * mh.fretWidth;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t} else {\n\t\t\t\t\treturn random.random(range.min, range.max);\n\t\t\t\t}\n\t\t\t});\n\t\tthis.onExpand();\n\t\treturn [this.problem.newElement(values)];\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'HarmonySearch',\n\t\tserializer: function serialize_HarmonySearch(obj) {\n\t\t\treturn [obj.__params__('harmonyProbability', 'adjustProbability', 'delta', 'fretWidth')];\n\t\t}\n\t}\n}); // declare HarmonySearch.","/** # Distribution estimation\n\nThis is a simple implementation of a [estimation of distributionalgorithm]\n(http://en.wikipedia.org/wiki/Estimation_of_distribution_algorithm). This stochastic optimization \nmethods try to estimate a probabilistic model for the characteristics of the better candidate \nsolutions. At each step many individual are randomly generated based on the current model. After all\nhave been evaluated, the model is adjusted.\n\nThe statistical model in this implementation is an histogram for each dimension (i.e. value of the\nelement representing the candidate solution). Dimensions are assumed to be independent of each \nother.\n*/\nvar DistributionEstimation = metaheuristics.DistributionEstimation = declare(Metaheuristic, {\n\t/** The constructor takes the following parameters:\n\t*/\n\tconstructor: function DistributionEstimation(params) {\n\t\tMetaheuristic.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t/** + `histogramWidth=10` is the amounts of ranges the value domain is split in order\n\t\t\tto calculate the histograms.\n\t\t\t*/\n\t\t\t.integer('histogramWidth', { coerce: true, defaultValue: 10, minimum: 2 });\n\t},\n\t\n\t/** New elements to add to the state in the `expansion` are build from the `histograms`\n\tcalculated from said state.\n\t*/\n\texpansion: function expansion(size) {\n\t\tvar mh = this,\n\t\t\texpansionRate = isNaN(this.expansionRate) ? 0.5 : +this.expansionRate,\n\t\t\thistograms = this.histograms(); // Get the current histogram of the state.\n\t\tsize = isNaN(size) ? Math.floor(expansionRate * this.size) : size |0;\n\t\treturn base.Iterable.repeat(null, size).map(function () {\n\t\t\treturn mh.elementFromHistograms(histograms);\n\t\t}).toArray();\n\t},\n\t\n\t/** The `histograms` have the frequencies of value ranges in the current state.\n\t*/\n\thistograms: function histograms() {\n\t\treturn DistributionEstimation.histograms(this.state, this.histogramWidth, \n\t\t\tthis.problem.elementModel().length);\n\t},\n\t\n\t'static histograms': function histograms(state, histogramWidth, histogramCount) {\n\t\tvar size = state.length,\n\t\t\tcounts = Iterable.iterate(function (v) { // Builds a matrix of zeroes.\n\t\t\t\treturn v.slice();\n\t\t\t}, Iterable.repeat(0, histogramWidth).toArray(), histogramCount).toArray();\n\t\tstate.forEach(function (element) {\n\t\t\telement.values.forEach(function (value, i) {\n\t\t\t\tvar bar = Math.min(histogramWidth - 1, Math.floor(element.values[i] * histogramWidth)); //FIXME Normalize.\n\t\t\t\tcounts[i][bar]++;\n\t\t\t});\n\t\t});\n\t\treturn counts.map(function (v) { // Turn counts into frequencies.\n\t\t\treturn v.map(function (v) {\n\t\t\t\treturn v / size;\n\t\t\t}); \n\t\t});\n\t},\n\t\n\t/** The method `elementFromHistogram` is used to make these new random elements.\n\t*/\n\telementFromHistograms: function elementFromHistogram(histograms) {\n\t\treturn DistributionEstimation.elementFromHistograms(histograms, this.problem, this.random);\n\t},\n\t\n\t'static elementFromHistograms': function elementFromHistogram(histograms, problem, random) {\n\t\tvar length = histograms.length,\n\t\t\tvalues = new Array(length),\n\t\t\thistogram, r;\n\t\tfor (var i = 0; i < length; ++i) {\n\t\t\thistogram = histograms[i];\n\t\t\tr = random.random();\n\t\t\tfor (var j = 0; j <= histogram.length; ++j) {\n\t\t\t\tif (j === histogram.length || (r -= histogram[j]) <= 0) {\n\t\t\t\t\tvalues[i] = Math.min(1, Math.max(0, (j + random.random()) / histogram.length));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn problem.newElement(values);\n\t},\n\t\n\t// ## Estimation of distribution as a problem. #################################################\n\t\n\t/** A `histogramProblem` is the problem of finding histograms that would generate good candidate\n\tsolutions for a given `problem`.\n\t*/\n\t'static histogramProblem': function histogramProblem(problem, size, histogramWidth) {\n\t\tsize = isNaN(size) ? 30 : Math.max(1, size |0);\n\t\thistogramWidth = isNaN(histogramWidth) ? 10 : Math.max(2, histogramWidth |0);\n\t\tvar elementLength = problem.elementLength(),\n\t\t\telementFromHistograms = this.elementFromHistograms;\n\t\t\tHistogramProblem = declare(Problem, {\n\t\t\t\t/** Each element of this problem represents an histogram for elements of the given\n\t\t\t\t`problem`. The argument `histogramWidth` defines how many ranges each histogram has.\n\t\t\t\t*/\n\t\t\t\telementLength: function elementLength() {\n\t\t\t\t\treturn elementLength * histogramWidth;\n\t\t\t\t},\n\t\t\t\t\n\t\t\t\t/** The evaluation of the elements is the average evaluation of `size` elements \n\t\t\t\tgenerated from the histogram that this element represents.\n\t\t\t\t*/\n\t\t\t\tevaluation: function evaluation(element) {\n\t\t\t\t\tvar histograms = this.mapping(element),\n\t\t\t\t\t\telements = base.Iterable.repeat(null, size).map(function () {\n\t\t\t\t\t\t\treturn elementFromHistograms(histograms, problem, problem.random);\n\t\t\t\t\t\t});\n\t\t\t\t\treturn Future.all(iterable(elements).map(function (e) {\n\t\t\t\t\t\treturn Future.when(e.evaluate());\n\t\t\t\t\t})).then(function (evaluations) {\n\t\t\t\t\t\treturn iterable(evaluations).sum() / evaluations.length;\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\t\n\t\t\t\t/** The `mapping` simply assembles the histograms and normalizes its frequencies.\n\t\t\t\t*/\n\t\t\t\tmapping: function mapping(element) {\n\t\t\t\t\tvar histograms = [],\n\t\t\t\t\t\thistogram, sum;\n\t\t\t\t\tfor (var i = 0; i < element.length; ++i) {\n\t\t\t\t\t\thistogram = element.values.slice(i * histogramWidth, (i+1) * histogramWidth);\n\t\t\t\t\t\tsum = iterable(histogram).sum();\n\t\t\t\t\t\thistograms[i] = histogram.map(function (f) { // Normalization\n\t\t\t\t\t\t\treturn f / sum;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\treturn histograms;\n\t\t\t\t},\n\t\t\t\t\n\t\t\t\t/** The comparison function is the same as the original problem's.\n\t\t\t\t*/\n\t\t\t\tcompare: problem.compare\n\t\t\t});\n\t\treturn new HistogramProblem({ random: problem.random });\n\t},\n\t\n\t// ## Other ####################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'DistributionEstimation',\n\t\tserializer: function serialize_DistributionEstimation(obj) {\n\t\t\treturn [obj.__params__('histogramWidth')];\n\t\t}\n\t}\n}); // declare DistributionEstimation.\n","/** # Gradient descent\n\n[Gradient descent](http://en.wikipedia.org/wiki/Gradient_descent) is an iterative optimization \nmethod, similar to Hill Climbing. The candidate solution is treated as a point in a multidimensional\nsearch space, and the gradient that the function being optimized defines in said domain is used to\nmove the current solution in the steepest direction.\n*/\nvar GradientDescent = metaheuristics.GradientDescent = declare(Metaheuristic, {\n\t/** The constructor takes the following parameters:\n\t*/\n\tconstructor: function HillClimbing(params) {\n\t\tMetaheuristic.call(this, params);\n\t\tinitialize(this, params)\n\t\t/** + `delta=1`: the maximum distance considered by gradient estimators.\n\t\t*/\n\t\t\t.number('delta', { coerce: true, defaultValue: 1 })\n\t\t/** + `size=1`: the state's size is 1 by default. This may be increased, resulting in many \n\t\tparallel descents.\n\t\t*/\n\t\t\t.integer('size', { coerce: true, defaultValue: 1, minimum: 1 });\n\t},\n\t\n\t/** A `gradient` is the vector for the direction of steepest descent (or ascent) of the function \n\tto be optimized at the given `element`. If the function is not differentiable an approximation\n\tcan be used. Since estimators may require element evaluation, which can be asynchronous, it must\n\tbe considered that this function may return a future.\n\t\n\tThe default implementation is based on the finite difference method proposed by [Kiefer and \n\tWolfowitz](http://projecteuclid.org/euclid.aoms/1177729392).\n\t*/\n\tgradient: function gradient(element) {\n\t\treturn this.gradientFiniteDifferences(element);\n\t},\n\t\n\t/** The `rate` is a number by which the gradient is multiplied before adding it to the current \n\tpoint to advance to the next step. The default implementation returns `1/step`, as [Kiefer and \n\tWolfowitz suggest](http://projecteuclid.org/euclid.aoms/1177729392).\n\t*/\n\trate: function rate(step) {\n\t\tstep = isNaN(step) ? this.step : step |0;\n\t\treturn 1 / Math.max(1, step);\n\t},\n\t\n\t/** The `estimatorWidth` is a number used by some gradient estimators. By default it returns \n\t`step^(-1/3) * delta`, similar to what [Kiefer and Wolfowitz suggest](http://projecteuclid.org/euclid.aoms/1177729392).\n\t*/\n\testimatorWidth: function estimatorWidth(step, delta) {\n\t\tstep = isNaN(step) ? this.step : step |0;\n\t\tdelta = isNaN(delta) ? this.delta : +delta;\n\t\treturn Math.pow(Math.max(1, step), -1/3) * delta;\n\t},\n\t\n\t/** In the `update`, each element in the state is moved in the search domain. The movement is \n\tset by its gradient in the direction of the optimization. The distance is defined by the `rate`\n\tfor the current step.\n\t*/\n\tupdate: function update() {\n\t\tvar mh = this,\n\t\t\trate = this.rate(this.step);\n\t\treturn Future.all(this.state.map(function (elem) {\n\t\t\treturn Future.then(mh.gradient(elem), function (gradient) {\n\t\t\t\tvar newValues = gradient.map(function (gradientValue, i) {\n\t\t\t\t\treturn elem.values[i] - gradientValue * rate;\n\t\t\t\t});\n\t\t\t\treturn mh.problem.newElement(newValues);\n\t\t\t});\n\t\t})).then(function (elems) {\n\t\t\treturn mh.evaluate(elems);\n\t\t}).then(function (elems) {\n\t\t\tmh.state = elems;\n\t\t\tmh.onUpdate();\n\t\t\treturn mh;\n\t\t});\n\t},\n\t\n\t// ## Gradient estimators ######################################################################\n\t\n\t/** A gradient estimator at the given `element` by finite differences.\n\t*/\n\tgradientFiniteDifferences: function gradientFiniteDifferences(element, width) {\n\t\twidth = isNaN(width) ? this.estimatorWidth() : +width;\n\t\tvar mh = this;\n\t\treturn Future.all(element.values.map(function (value, i) {\n\t\t\tvar left = element.modification(i, value - width),\n\t\t\t\tright = element.modification(i, value + width);\n\t\t\treturn Future.then(left.evaluate(), function (leftEvaluation) {\n\t\t\t\treturn Future.then(right.evaluate(), function (rightEvaluation) {\n\t\t\t\t\tvar comp = mh.problem.compare(left, right);\n\t\t\t\t\tcomp = comp === 0 ? comp : comp > 0 ? 1 : -1;\n\t\t\t\t\treturn (leftEvaluation - rightEvaluation) * comp / 2 / width;\n\t\t\t\t});\n\t\t\t});\n\t\t}));\n\t},\n\t\n\t/** A gradient estimator at the given `element` for [Simultaneous Perturbation Stochastic \n\tApproximation](http://www.jhuapl.edu/SPSA/).\n\t*/\n\tgradientSimultaneousPerturbation: function gradientSimultaneousPerturbation(width, element) {\n\t\tthrow new Error('GradientDescent.gradientSimultaneousPerturbation() is not implemented!');//TODO\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'GradientDescent',\n\t\tserializer: function serialize_GradientDescent(obj) {\n\t\t\treturn [obj.__params__('delta')];\n\t\t}\n\t}\n}); // declare GradientDescent.","/** # _\"Hello World\"_ problem\n\nAs it sounds, `HelloWorld` is a simple problem class, probably only useful for testing purposes.\n*/\nproblems.HelloWorld = declare(Problem, { \n\ttitle: \"Hello world\",\n\tdescription: \"Simple problem where each element is a string, and the \"+\n\t\t\"optimization goes towards the target string.\",\n\t\n\t/** In this simple problem each element is a string, and the optimization goes towards the \n\ttarget string. The string to match is specified by the `target` parameter (`\"Hello world!\"` by \n\tdefault).\n\t*/\t\n\tconstructor: function HelloWorld(params){\n\t\tProblem.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t.string('target', { coerce: true, defaultValue: 'Hello world!' });\n\t\t\n\t\tthis.__target__ = iterable(this.target).map(function (c) {\n\t\t\treturn c.charCodeAt(0);\n\t\t}).toArray();\n\t\t/** The elements' length is equal to the length of the target string. Every value is between \n\t\t32 (inclusive) and 127 (exclusive), which is the range of visible characters in ASCII.\n\t\t*/\n\t\tthis.__elementModel__ = Iterable.repeat({ min: 32, max: 127, discrete: true }, this.target.length).toArray();\n\t},\n\t\n\t/** An element's values are always numbers. These are converted to a string by converting each \n\tnumber to its corresponding Unicode character.\n\t*/\n\tmapping: function mapping(element) {\n\t\treturn element.values.map(function (v) {\n\t\t\treturn String.fromCharCode(Math.floor(v));\n\t\t}).join('');\n\t},\n\t\t\t\n\t/** An element evaluation is equal to its distance from target string.\n\t*/\n\tevaluation: function evaluation(element) {\n\t\treturn element.manhattanDistance(this.__target__, element.values);\n\t},\t\t\n\t\n\t/** Since elements' evaluation is a distance, this value must be minimized to guide the search \n\ttowards the target string.\n\t*/\n\tcompare: Problem.prototype.minimization,\n\t\n\t/** An element is sufficient when its equal to the target string.\n\t*/\n\tsufficientElement: function sufficientElement(element) {\n\t\treturn this.mapping(element) === this.target;\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'HelloWorld',\n\t\tserializer: function serialize_HelloWorld(obj) {\n\t\t\treturn [obj.__params__('target')];\n\t\t}\n\t}\n}); // declare HelloWorld.\n","/** # Test beds\n\nProblem builder for test beds of algorithms in this library.\n*/\n\n/** The function `testbed` is a shortcut used to define the test problems.\n*/\nvar TestBed = problems.TestBed = declare(Problem, {\n\tconstructor: function TestBed(spec) {\n\t\tProblem.call(this, spec);\n\t\tthis.title = spec.title;\n\t\t\n\t\tvar minimumValue = isNaN(spec.minimumValue) ? -1e6 : +spec.minimumValue,\n\t\t\tmaximumValue = isNaN(spec.maximumValue) ? +1e6 : +spec.maximumValue,\n\t\t\tlength = isNaN(spec.length) ? 2 : +spec.length;\n\t\tthis.__elementModel__ = Iterable.repeat({ min: minimumValue, max: maximumValue, discrete: !!spec.discreteDomain }, length).toArray();\n\t\t\n\t\tthis.evaluation = function evaluation(element) {\n\t\t\treturn spec.evaluation(element.values);\n\t\t};\n\t\t\n\t\t/** If an optimum value is provided (`spec.optimumValue`) it is added to the termination\n\t\tcriteria.\n\t\t*/\n\t\tif (spec.hasOwnProperty('optimumValue')) {\n\t\t\tthis.sufficientElement = function sufficientElement(element) {\n\t\t\t\treturn Math.abs(element.evaluation - spec.optimumValue) < element.resolution;\n\t\t\t};\n\t\t}\n\t}\n});\n\t\n/** Testbed problems taken from the web (e.g. \n[1](http://en.wikipedia.org/wiki/Test_functions_for_optimization),\n[2](http://www.sfu.ca/~ssurjano/optimization.html), \n[3](http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/TestGO.htm)\n).\n*/\nproblems.testbeds = {\n\t/** The [Ackley's function](http://www.sfu.ca/~ssurjano/ackley.html) (in 2 dimensions) has an\n\tglobal optimum surrounded by an outer region that is rather flat, yet with many local optima. \n\t*/\n\tAckley: function Ackley(length, a, b, c) {\n\t\ta = isNaN(a) ? 20 : +a;\n\t\tb = isNaN(b) ? 0.2 : +b;\n\t\tc = isNaN(c) ? 2 * Math.PI : +c;\n\t\treturn new TestBed({\n\t\t\ttitle: \"Ackley testbed\",\n\t\t\tlength: length,\n\t\t\tobjectives: -Infinity,\n\t\t\tminimumValue: -32.768, \n\t\t\tmaximumValue: +32.768,\t\t\t\n\t\t\toptimumValue: 0,\t\t\t\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar term1 = 0, term2 = 0, d = vs.length, v;\n\t\t\t\tfor (var i = 0; i < d; ++i) {\n\t\t\t\t\tv = vs[i];\n\t\t\t\t\tterm1 += v * v;\n\t\t\t\t\tterm2 += Math.cos(c * v);\n\t\t\t\t}\n\t\t\t\treturn -a * Math.exp(-b * Math.sqrt(term1 / d)) - Math.exp(term2 / d) + a + Math.exp(1);\n\t\t\t}\n\t\t});\n\t},\n\n\t/** The cross-in-tray is a function with many local optima, both minima and maxima. If minimized\n\tit has 4 global minima.\n\t*/\n\tcrossInTray: function crossInTray(target) {\n\t\ttarget = isNaN(target) ? -Infinity : +target;\n\t\treturn new TestBed({\n\t\t\ttitle: \"cross-in-tray testbed\",\n\t\t\tlength: 2,\n\t\t\tobjectives: target,\n\t\t\tminimumValue: -10,\n\t\t\tmaximumValue: +10,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar x = vs[0], y = vs[1];\n\t\t\t\treturn -0.0001 * Math.pow(\n\t\t\t\t\tMath.abs(Math.sin(x) * Math.sin(y) * Math.exp(Math.abs(100 - Math.sqrt(x*x + y*y) / Math.PI))) + 1,\n\t\t\t\t\t0.1);\n\t\t\t}\t\t\t\n\t\t});\n\t},\n\t\n\t/** The [Griewank function](http://www.sfu.ca/~ssurjano/griewank.html) has many local optima\n\tregularly distributed.\n\t*/\n\tGriewank: function Griewank(length) {\n\t\treturn new TestBed({\n\t\t\ttitle: \"Griewank testbed\",\n\t\t\tlength: length,\n\t\t\tminimumValue: -600,\n\t\t\tmaximumValue: +600,\n\t\t\toptimumValue: 0,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar sum = 0, prod = 1, len = vs.length, v;\n\t\t\t\tfor (var i = 0; i < len; ++i) {\n\t\t\t\t\tv = vs[i];\n\t\t\t\t\tsum += v * v / 4000;\n\t\t\t\t\tprod *= Math.cos(v / Math.sqrt(i+1));\n\t\t\t\t}\n\t\t\t\treturn sum - prod + 1;\n\t\t\t}\t\t\t\n\t\t});\n\t},\n\t\n\t/** The [Levy function](http://www.sfu.ca/~ssurjano/levy.html) is multimodal, with some \n\tdifficult local minima regions.\n\t*/\n\tLevy: function Levy(length) {\n\t\treturn new TestBed({\n\t\t\ttitle: \"Levy testbed\",\n\t\t\tlength: length,\n\t\t\tobjectives: -Infinity,\n\t\t\tminimumValue: -10,\n\t\t\tmaximumValue: +10,\n\t\t\toptimumValue: 0,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar sum = 0, d = vs.length, \n\t\t\t\t\tw1 = 1 + (vs[0] - 1) / 4, wd = 1 + (vs[d-1] - 1) / 4, w;\n\t\t\t\tfor (var i = 1; i < d - 1; ++i) {\n\t\t\t\t\tw = 1 + (vs[i] - 1) / 4;\n\t\t\t\t\tsum += Math.pow(w - 1, 2) * (1 + 10 * Math.pow(Math.sin(Math.PI * w + 1), 2));\n\t\t\t\t}\n\t\t\t\treturn Math.pow(Math.sin(Math.PI * w1), 2) + sum +\n\t\t\t\t\tMath.pow(wd - 1, 2) * (1 + Math.pow(Math.sin(2 * Math.PI * wd), 2));\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/** The [Michalewicz function](http://www.sfu.ca/~ssurjano/michal.html) is a multimodal function\n\twith a number local minima equal to the factorial of the number of dimensions; and it has steep \n\tvalleys and ridges.\n\t*/\n\tMichalewicz: function Michalewicz(length, m) {\n\t\tm = isNaN(m) ? 10 : +m;\n\t\treturn new TestBed({\n\t\t\ttitle: \"Michalewicz testbed\",\n\t\t\tlength: length,\n\t\t\tobjectives: -Infinity,\n\t\t\tminimumValue: 0,\n\t\t\tmaximumValue: Math.PI,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar sum = 0, d = vs.length, v;\n\t\t\t\tfor (var i = 0; i < d; ++i) {\n\t\t\t\t\tv = vs[i];\n\t\t\t\t\tsum += Math.sin(v) * Math.pow(Math.sin((i+1) * v * v / Math.PI), 2 * m);\n\t\t\t\t}\n\t\t\t\treturn -sum;\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/** [Perm(0,d,beta) function](http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/TestGO_files/Page2545.htm).\n\t*/\n\tperm0: function perm0(d, beta) {\n\t\td = isNaN(d) ? 2 : Math.min(1, d|0);\n\t\tbeta = isNaN(beta) ? 0 : +beta;\n\t\treturn new TestBed({\n\t\t\ttitle: \"Perm(0,\"+ d +\",\"+ beta +\") testbed\",\n\t\t\tlength: d,\n\t\t\tobjectives: -Infinity,\n\t\t\tminimumValue: -d,\n\t\t\tmaximumValue: +d,\n\t\t\toptimumValue: 0,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar sum1 = 0, sum2, v;\n\t\t\t\tfor (var i = 0; i < d; ++i) {\n\t\t\t\t\tsum2 = 0;\n\t\t\t\t\tfor (var j = 0; j < d; ++j) {\n\t\t\t\t\t\tsum2 += (j+1 + beta) * (Math.pow(vs[j], i+1) - Math.pow(1 / (j+1), i+1));\n\t\t\t\t\t}\n\t\t\t\t\tsum1 += sum2 * sum2;\n\t\t\t\t}\n\t\t\t\treturn sum1;\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/** The [Rastrigin function](http://www.sfu.ca/~ssurjano/rastr.html) is highly multimodal yet\n\tlocal minima are regularly distributed.\n\t*/\n\tRastrigin: function Rastrigin(length) {\n\t\treturn new TestBed({\n\t\t\ttitle: \"Rastrigin testbed\",\n\t\t\tlength: length,\n\t\t\tobjectives: -Infinity,\n\t\t\tminimumValue: -5.12,\n\t\t\tmaximumValue: +5.12,\n\t\t\toptimumValue: 0,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar result = 0, d = vs.length, v;\n\t\t\t\tfor (var i = 0; i < d; ++i) {\n\t\t\t\t\tv = vs[i];\n\t\t\t\t\tresult += v * v - 10 * Math.cos(2 * Math.PI * v);\n\t\t\t\t}\n\t\t\t\treturn 10 * d + result;\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/*** The [Rosenbrock function](http://en.wikipedia.org/wiki/Rosenbrock_function) is a function \n\tused as a performance test problem for optimization algorithms introduced by Howard H. \n\tRosenbrock in 1960. The global minimum is inside a long, narrow, parabolic shaped flat valley. \n\tTo find the valley is trivial, yet to converge to the global minimum (zero) is difficult.\n\t*/\n\tRosenbrock: function Rosenbrock(length, a, b) {\n\t\ta = isNaN(a) ? 1 : +a;\n\t\tb = isNaN(b) ? 100 : +b;\n\t\treturn new TestBed({\n\t\t\ttitle: \"Rosenbrock testbed\",\n\t\t\tlength: length,\n\t\t\tobjectives: -Infinity,\n\t\t\toptimumValue: 0,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar result = 0;\n\t\t\t\tfor (var i = 1; i < vs.length; ++i) {\n\t\t\t\t\tresult += b * Math.pow(vs[i-1] * vs[i-1] - vs[i], 2) + Math.pow(vs[i-1] - a, 2);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/** The [Schwefel function](http://www.sfu.ca/~ssurjano/schwef.html) is a complex test with many\n\tlocal optima.\n\t*/\n\tSchwefel: function Schwefel(length) {\n\t\treturn new TestBed({\n\t\t\ttitle: \"Schwefel testbed\",\n\t\t\tlength: length,\n\t\t\tobjectives: -Infinity,\n\t\t\tminimumValue: -500,\n\t\t\tmaximumValue: +500,\n\t\t\toptimumValue: 0,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar result = 0, d = vs.length, v;\n\t\t\t\tfor (var i = 0; i < d; ++i) {\n\t\t\t\t\tv = vs[i];\n\t\t\t\t\tresult += v * Math.sin(Math.sqrt(Math.abs(v)));\n\t\t\t\t}\n\t\t\t\treturn 418.9829 * d - result;\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/** The [sphere function](http://www.sfu.ca/~ssurjano/spheref.html) minimizes the sum of the\n\tsquares for every value in the input vector. It has as many local minima as dimensions the\n\tsearch space has, but still only one global minimum (zero). \n\t*/\n\tsphere: function sphere(length) {\n\t\treturn new TestBed({\n\t\t\ttitle: \"sphere testbed\",\n\t\t\tlength: length,\n\t\t\tobjectives: -Infinity,\n\t\t\toptimumValue: 0,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar result = 0;\n\t\t\t\tfor (var i = 0; i < vs.length; ++i) {\n\t\t\t\t\tresult += vs[i] * vs[i];\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/** A very simple class of problems that deal with optimizing the sum of the elements' values. \n\tProbably the simplest optimization problem that can be defined. It has no local optima, and it\n\tdraws a simple and gentle slope towards to global optimum.\n\t*/\n\tsumOptimization: function sumOptimization(length, target) {\n\t\tlength = isNaN(length) ? 2 : Math.max(1, length|0);\n\t\ttarget = isNaN(target) ? -Infinity : +target;\n\t\treturn new TestBed({\n\t\t\ttitle: \"sum optimization testbed\",\t\t\t\n\t\t\tlength: length,\n\t\t\tobjectives: target,\n\t\t\tminimumValue: 0,\n\t\t\tmaximumValue: +1,\n\t\t\toptimumValue: target === -Infinity ? 0 : target === +Infinity ? length : target,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar result = 0, len = vs.length;\n\t\t\t\tfor (var i = 0; i < len; ++i) {\n\t\t\t\t\tresult += vs[i];\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t},\n\t\n\t// ## Multi-objective ##########################################################################\n\t\n\t/** Multiobjective optimization problems taken from [_\"Comparison of Multiobjective Evolutionary\n\tAlgorithms: Empirical Results\"_ by Zitzler, Deb and Thiele (2000)](http://www.tik.ee.ethz.ch/sop/publicationListFiles/zdt2000a.pdf).\n\t*/\n\tZDT1: function ZDT1(length) {\n\t\tlength = isNaN(length) ? 30 : Math.max(1, length|0);\n\t\treturn new TestBed({\n\t\t\ttitle: \"Zitzler-Deb-Thiele function 1\",\t\t\t\n\t\t\tlength: length,\n\t\t\tobjectives: [-Infinity, -Infinity],\n\t\t\tminimumValue: 0,\n\t\t\tmaximumValue: +1,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar f1 = vs[0],\n\t\t\t\t\tg = iterable(vs).tail().sum() / (vs.length - 1) * 9,\n\t\t\t\t\th = 1 - Math.sqrt(f1 / g);\n\t\t\t\treturn [f1, g * h];\n\t\t\t}\n\t\t});\n\t},\n\t\n\tZDT2: function ZDT2(length) {\n\t\tlength = isNaN(length) ? 30 : Math.max(1, length|0);\n\t\treturn new TestBed({\n\t\t\ttitle: \"Zitzler-Deb-Thiele function 2\",\t\t\t\n\t\t\tlength: length,\n\t\t\tobjectives: [-Infinity, -Infinity],\n\t\t\tminimumValue: 0,\n\t\t\tmaximumValue: +1,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar f1 = vs[0],\n\t\t\t\t\tg = iterable(vs).tail().sum() / (vs.length - 1) * 9,\n\t\t\t\t\th = 1 - Math.pow(f1 / g, 2);\n\t\t\t\treturn [f1, g * h];\n\t\t\t}\n\t\t});\n\t},\n\t\n\tZDT3: function ZDT3(length) {\n\t\tlength = isNaN(length) ? 30 : Math.max(1, length|0);\n\t\treturn new TestBed({\n\t\t\ttitle: \"Zitzler-Deb-Thiele function 3\",\t\t\t\n\t\t\tlength: length,\n\t\t\tobjectives: [-Infinity, -Infinity],\n\t\t\tminimumValue: 0,\n\t\t\tmaximumValue: +1,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar f1 = vs[0],\n\t\t\t\t\tg = iterable(vs).tail().sum() / (vs.length - 1) * 9,\n\t\t\t\t\th = 1 - Math.sqrt(f1 / g) - (f1 / g) * Math.sin(10 * Math.PI * f1);\n\t\t\t\treturn [f1, g * h];\n\t\t\t}\n\t\t});\n\t}\n}; // problems.testbeds","/** # N queens puzzle problem\n\nA generalized version of the classic [8 queens puzzle](http://en.wikipedia.org/wiki/Eight_queens_puzzle),\na problem of placing 8 chess queens on an 8x8 chessboard so that no two queens may attack each \nother.\n*/\nproblems.NQueensPuzzle = declare(Problem, {\n\ttitle: \"N-queens puzzle\",\n\tdescription: \"Generalized version of the classic problem of placing \"+\n\t\t\"8 chess queens on an 8x8 chessboard so that no two queens attack each other.\",\n\t\n\t/** The constructor takes only one particular parameter:\n\t*/\t\n\tconstructor: function NQueensPuzzle(params){\n\t\tProblem.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t/** + `N=8`: the number of queens and both dimensions of the board.\n\t\t\t*/\n\t\t\t.integer('N', { coerce: true, defaultValue: 8 });\n\t\t\n\t\tthis.__rowRange__ = Iterable.range(this.N).toArray();\n\t\t/** The representation is an array of `N` positions, indicating the row of the queen for \n\t\teach column.\n\t\t*/\n\t\tthis.__elementModel__ = Iterable.repeat({ min: 0, max: this.N - 1, discrete: true }, this.N - 1).toArray();\n\t},\n\t\t\n\tmapping: function mapping(element) {\n\t\treturn element.setMapping(this.__rowRange__);\n\t},\n\t\n\t/** The elements' evaluation is the count of diagonals shared by queens pairwise.\n\t*/\n\tevaluation: function evaluation(element) {\n\t\tvar rows = this.mapping(element),\n\t\t\tcount = 0;\n\t\trows.forEach(function (row, i) {\n\t\t\tfor (var j = 1; i + j < rows.length; j++) {\n\t\t\t\tif (rows[j] == row + j || rows[j] == row - j) {\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn count;\n\t},\n\t\n\t/** Of course, the number of shared diagonals must be minimized.\n\t*/\n\tcompare: Problem.prototype.minimization,\n\t\n\t/** It is sufficient when no pair of queens share diagonals.\n\t*/\n\tsufficientElement: function sufficientElement(element) {\n\t\treturn element.evaluation === 0;\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'NQueensPuzzle',\n\t\tserializer: function serialize_NQueensPuzzle(obj) {\n\t\t\treturn [obj.__params__('N')];\n\t\t}\n\t}\n}); // declare NQueensPuzzle\n","/** # Knapsack problem\n\nThe [Knapsack problem](http://en.wikipedia.org/wiki/Knapsack_problem) is a classic combinatorial \noptimization problem. Given a set of items, each with cost and worth, a selection must be obtained \n(to go into the knapsack) so that the total cost does not exceed a certain limit, while maximizing \nthe total worth.\n*/\nproblems.KnapsackProblem = declare(Problem, {\n\ttitle: \"Knapsack problem\",\n\tdescription: \"Given a set of items with a cost and a worth, select a subset \"+\n\t\t\" maximizing the worth sum but not exceeding a cost limit.\",\n\t\n\t/** `items` is the superset of all candidate solutions. Must be an object with each item by \n\tname. Each item must have a cost and a worth, and may have an amount (1 by default).\n\t*/\n\titems: {\n\t\titemA: { cost: 12, worth: 4 }, \n\t\titemB: { cost: 2, worth: 2 }, \n\t\titemC: { cost: 1, worth: 2 }, \n\t\titemD: { cost: 1, worth: 1 },\n\t\titemE: { cost: 4, worth: 10 }\n\t},\n\t\n\t/** The problem is based on a given a set of items, each with a cost and a worth. The solution \n\tis a subset of items with maximum worth sum that does not exceed a cost limit.\n\t\n\tThe parameters specific for this problem are:\n\t*/\t\n\tconstructor: function KnapsackProblem(params){\n\t\tProblem.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t/** + `limit=15` is the cost limit that candidate solution should not exceed.\n\t\t\t*/\n\t\t\t.number('limit', { coerce: true, defaultValue: 15 })\n\t\t\t/** + `defaultAmount=1` is the amount available for each item by default.\n\t\t\t*/\n\t\t\t.integer('amount', { coerce: true, defaultValue: 1, minimum: 1 })\n\t\t\t/** + `items` is the set of items.\n\t\t\t*/\n\t\t\t.object('items', { ignore: true });\n\t\t/** The problem's representation is an array with a number for each item, in alphabetical \n\t\torder. Each number holds the selected amount for each item (from 0 up to the item's amount).\n\t\t*/\n\t\tvar items = this.items;\n\t\tthis.__elementItems__ = Object.keys(items);\n\t\tthis.__elementItems__.sort();\n\t\tthis.__elementModel__ = this.__elementItems__.map(function (name) {\n\t\t\treturn { min: 0, max: +items[name].amount || 1, discrete: true };\n\t\t});\n\t},\n\t\n\t/** All elements are mapped to an object with the selected amount associated to each item.\n\t*/\n\tmapping: function mapping(element) {\n\t\treturn iterable(this.__elementItems__).zip(Math.floor(element.values)).toObject();\n\t},\n\t\n\t/** All elements are evaluated by calculating the worth of all included items. If their cost is \n\tgreater than the problem's limit, the worth becomes negative.\n\t*/\n\tevaluation: function evaluation(element) {\n\t\tvar selection = this.mapping(element),\n\t\t\titems = this.items,\n\t\t\tworth = 0,\n\t\t\tcost = 0;\n\t\titerable(selection).forEachApply(function (name, amount) {\n\t\t\tvar item = items[name];\n\t\t\tworth += item.worth * amount;\n\t\t\tcost += item.cost * amount;\n\t\t});\n\t\treturn cost > problem.limit ? -worth : worth; //FIXME Too punishing for going over the limit.\n\t},\n\t\n\t/** The best selection of items is the one that maximizes worth, without exceeding the cost \n\tlimit.\n\t*/\n\tcompare: Problem.prototype.maximization,\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'KnapsackProblem',\n\t\tserializer: function serialize_KnapsackProblem(obj) {\n\t\t\treturn [obj.__params__('limit', 'amount', 'items')];\n\t\t}\n\t}\n}); // declare KnapsackProblem","/** # Association rules learning.\n\nAssociation rules are relations between variables found in databases. Many methods have been \nresearched to automatically search for interesting rules in large data sets.\n\nFor further information, see:\n\n+ Agrawal, R.; ImieliƄski, T.; Swami, A. [_\"Mining association rules between sets of items in large \n\tdatabases\"_](http://dl.acm.org/citation.cfm?doid=170035.170072). Proceedings of the 1993 ACM \n\tSIGMOD international conference on Management of data.\n\t\n+ Sergey Brin, Rajeev Motwani, Jeffrey D. Ullman, and Shalom Tsur. [_\"Dynamic itemset counting and \n\timplication rules for market basket data\"_](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.25.3707).\n\tSIGMOD 1997, Proceedings ACM SIGMOD International Conference on Management of Data.\n*/\nvar AssociationRuleLearning = problems.AssociationRuleLearning = declare(Problem, {\n\t/** The constructors take the following parameters:\n\t*/\n\tconstructor: function AssociationRuleLearning(params) {\n\t\tProblem.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t/** + A `dataset` with which to test the association rules. It must be a sequence of\n\t\t\trecords (each an object).\n\t\t\t*/\n\t\t\t.object('dataset', { defaultValue: [] })\n\t\t\t/** + A set of `keys` for the fields in the dataset.\n\t\t\t*/\n\t\t\t.array('keys');\n\t\t/** The elements represent classic association rules, which treat each record as a set of \n\t\t`keys`. Each position in the element's values tells if the corresponding key belongs to the \n\t\trule's antecedent or consequent; or neither. Empty antecedents and consequents always \n\t\tevaluate to false.\n\t\t*/\n\t\tthis.__elementModel__ = Iterable.repeat({ min: 0, max: 2, discrete: true }, this.keys.length).toArray();\n\t},\n\t\n\t// ## Evaluation ###############################################################################\n\t\n\t/** Turns the element into an association rule, i.e. an object with two disjunct sets of keys:\n\tone for the antecedent and the other for the consequent.\n\t*/\n\tmapping: function mapping(element) {\n\t\tvar problem = this,\n\t\t\tantecedent = [], \n\t\t\tconsequent = [];\n\t\telement.values.forEach(function (v, i) {\n\t\t\tswitch (v) {\n\t\t\t\tcase 1: antecedent.push(problem.keys[i]); break;\n\t\t\t\tcase 2: consequent.push(problem.keys[i]); break;\n\t\t\t}\n\t\t});\n\t\treturn { antecedent: antecedent, consequent: consequent };\n\t},\n\t\n\tkeysComply: function keysComply(keys, record) {\n\t\tvar it = iterable(keys);\n\t\treturn !it.isEmpty() && it.all(function (key) {\n\t\t\treturn !!record[key];\n\t\t});\n\t},\n\t\n\t/** This method checks if the given `record` complies with the given `rule`'s `antecedent`.\n\t*/\n\tantecedentComplies: function antecedentComplies(rule, record) {\n\t\treturn this.keysComply(rule.antecedent, record);\n\t},\n\t\n\t/** This method checks if the given `record` complies with the given `rule`'s `consequent`.\n\t*/\n\tconsequentComplies: function consequentComplies(rule, record) {\n\t\treturn this.keysComply(rule.consequent, record);\n\t},\n\t\n\t/** The `measures` of an `element` (representing an association rule) include the usual \n\tstatistics:\n\t\n\t+ `antecedentCount`, `consequentCount`, `ruleCount` are the numbers of records that comply with\n\t\tthis rules's antecedent, consequent and both.\n\t+ `antecedentSupport`, `consequentSupport`, `ruleSupport` are the same numbers as before but \n\t\tdivided by the total number of records.\n\t+ `confidence` can be interpreted as an estimation of _P(C|A)_ for rules _A -> C_.\n\t+ `lift` is the ratio of the observed support to that expected if A and C were independent.\n\t+ `conviction` is the ratio of the expected frequency that A occurs without C.\n\t+ `leverage` measures the difference of A and C appearing together in the data set and what \n\t\twould be expected if X and Y where statistically dependent.\n\t*/\n\tmeasures: function measures(element) {\n\t\tvar problem = this,\n\t\t\tresult = {},\n\t\t\ttotalCount = 0, \n\t\t\tantecedentCount = 0, \n\t\t\tconsequentCount = 0, \n\t\t\truleCount = 0,\n\t\t\trule = this.mapping(element);\n\t\titerable(this.dataset).forEach(function (record) {\n\t\t\tif (problem.antecedentComplies(rule, record)) {\n\t\t\t\t++antecedentCount;\n\t\t\t\tif (problem.consequentComplies(rule, record)) {\n\t\t\t\t\t++consequentCount;\n\t\t\t\t\t++ruleCount;\n\t\t\t\t}\n\t\t\t} else if (problem.consequentComplies(rule, record)) {\n\t\t\t\t++consequentCount;\n\t\t\t}\n\t\t\t++totalCount;\n\t\t});\n\t\tresult.antecedentCount = antecedentCount;\n\t\tresult.consequentCount = consequentCount;\n\t\tresult.ruleCount = ruleCount;\n\t\tresult.antecedentSupport = totalCount > 0 ? antecedentCount / totalCount : 0;\n\t\tresult.consequentSupport = totalCount > 0 ? consequentCount / totalCount : 0;\n\t\tresult.ruleSupport = totalCount > 0 ? ruleCount / totalCount : 0;\n\t\tresult.confidence = antecedentCount > 0 ? ruleCount / antecedentCount : 0;\n\t\tresult.lift = result.consequentSupport > 0 ? result.confidence / result.consequentSupport : 0;\n\t\tresult.conviction = result.consequentSupport > 0 && result.confidence < 1 ? (1 - result.consequentSupport) / (1 - result.confidence) : 0;\n\t\tresult.leverage = result.ruleSupport - result.antecedentSupport * result.consequentSupport;\n\t\treturn result;\n\t}, \n\t\n\t/** By default, the evaluation uses the rule's confidence. It assumes the elements has a \n\t`dataset` member. Measures are cached in a `__measures__` property in the element.\n\t*/\n\tevaluation: function evaluation(element) {\n\t\tif (!element.__measures__) {\n\t\t\telement.__measures__ = this.measures(element);\n\t\t}\n\t\treturn element.__measures__.confidence;\n\t}\t\n}); // declare AssociationRule.","// See __prologue__.js\n\tbase.Iterable.chain(exports, metaheuristics, problems).forEachApply(function (id, def) {\n\t\tif (typeof def === 'function' && def.__SERMAT__ && def.__SERMAT__.identifier) {\n\t\t\tdef.__SERMAT__.identifier = exports.__package__ +'.'+ def.__SERMAT__.identifier;\n\t\t\texports.__SERMAT__.include.push(def);\n\t\t}\n\t});\n\treturn exports;\n});"]} \ No newline at end of file diff --git a/build/inveniemus.min.js b/build/inveniemus.min.js index e83b8a5..660127c 100644 --- a/build/inveniemus.min.js +++ b/build/inveniemus.min.js @@ -1,5 +1,5 @@ -//! inveniemus 0.1.4 +//! inveniemus 0.1.5 -!function(a,b){"use strict";"function"==typeof define&&define.amd?define(["creatartis-base"],b):"object"==typeof module&&module.exports?module.exports=b(require("creatartis-base")):a.inveniemus=b(a.base)}(this,function a(b){"use strict";function c(a,b,c){return Math.max(b,Math.min(c,a))}var d=b.declare,e=b.initialize,f=b.iterable,g=b.raiseIf,h=b.Events,i=b.Future,j=b.Iterable,k=b.Logger,l=b.Randomness,m=b.Statistics,n={__package__:"inveniemus",__name__:"inveniemus",__init__:a,__dependencies__:[b],__SERMAT__:{include:[]},metaheuristics:{},problems:{}},o=n.metaheuristics,p=n.problems,q=n.Element=d({constructor:function(a,b,d){this.problem=a;var e=a.elementModel();b?this.values=b.map(function(a,b){var d=e[b];return g(isNaN(a),"Value #",b," for element is NaN!"),a=c(+a,d.min,d.max)}):this.values=e.map(function(b){return b.discrete?a.random.randomInt(b.min,b.max+1):a.random.random(b.min,b.max)}),this.evaluation=d},suffices:function(){return this.problem.sufficientElement(this)},emblem:function(){return this+""},evaluate:function(){var a=this;return i.then(this.problem.evaluation(this),function(b){return a.evaluation=b,b})},hammingDistance:function(a,b){return f(a).zip(b).filter(function(a){return a[0]!=a[1]}).count()},manhattanDistance:function(a,b){return f(a).zip(b).map(function(a){return Math.abs(a[0]-a[1])}).sum()},euclideanDistance:function(a,b){return Math.sqrt(f(a).zip(b).map(function(a){return Math.pow(a[0]-a[1],2)}).sum())},rootMeanSquaredError:function(a,b){var c=0,d=f(b).map(function(b){return c++,Math.pow(b[0]-a.apply(this,b.slice(1)),2)}).sum();return 0===c?0:Math.sqrt(d/c)},neighbourhood:function(a){var b=this,c=[],d=this.problem.elementModel();return this.values.forEach(function(e,f){var g=d[f],h=Array.isArray(a)?a[f]:isNaN(a)?g.discrete?1:.1:a,i=e+h;i<=g.max&&c.push(b.modification(f,i)),i=e-h,i>=g.min&&c.push(b.modification(f,i))}),c},modification:function(){var a,b,d,e=this.values.slice(),f=this.problem.elementModel();for(b=0;bf?a[f]:d;return e=(e-g.min)/(g.max-g.min)*(h[1]-h[0])+h[0],c(e,h[0],h[1])})},normalizedValues:function(){return this.rangeMapping([0,1])},arrayMapping:function(){var a=arguments,b=a[a.length-1],c=this.problem.elementModel();return g(a.length<1,"Element.arrayMapping() expects at least one argument!"),this.values.map(function(d,e){var f=a.length>e?a[e]:b,g=c[e],h=Math.floor((d-g.min)/(g.max-g.min)*f.length);return f[h]})},setMapping:function(a,b){g(!Array.isArray(a),"Element.setMapping() expects an array argument!"),a=a.slice();var d=this.normalizedValues().map(function(b,d){g(a.length<1,"Element.setMapping(): insufficient elements!");var e=c(Math.floor(b*a.length),0,a.length-1);return a.splice(e,1)[0]});return b&&(g(1!=a.length,"Element.setMapping(): wrong amount of elements!"),d.push(a[0])),d},clone:function(){return new this.constructor(this.problem,this.values,this.evaluation)},equals:function(a){if(this.constructor===a.constructor&&this.values.length===a.values.length){for(var b=0,c=this.values.length;c>b;b++)if(this.values[b]!==a.values[b])return!1;return!0}return!1},toString:function(){return"<"+(this.constructor.name||"Element")+" "+JSON.stringify(this.values)+" "+this.evaluation+">"},"static __SERMAT__":{identifier:"Element",serializer:function(a){return[a.problem,a.values,a.evaluation]}}}),r=n.Problem=d({constructor:function(a){a=a||{},e(this,a).string("title",{coerce:!0,defaultValue:this.constructor.name||""}).string("description",{coerce:!0,defaultValue:""}).object("random",{defaultValue:l.DEFAULT});a.hasOwnProperty("objectives")?a.objectives:-(1/0);"number"!=typeof a.objectives||isNaN(a.objectives)?Array.isArray(a.objectives)?this.objectives=a.objectives:this.objectives=[-(1/0)]:this.objectives=[a.objectives]},__elementModel__:j.repeat({min:0,max:1,discrete:!1},10).toArray(),elementModel:function(){return this.__elementModel__},newElement:function(a,b){return new q(this,a,b)},evaluation:function(a){return f(a.values).sum()},evaluate:function(a,b){var c=!1;return a=f(a).filter(function(a){return b||isNaN(a.evaluation)},function(a){var b=a.evaluate();return c=c||i.__isFuture__(b),b}),c?i.all(a):a.toArray()},mapping:function(a){return a.values},sufficientElement:function(a){return!1},sufficientElements:function(a){return this.sufficientElement(a[0])},compare:function(a,b){return 1===this.objectives.length?this.singleObjectiveComparison(this.objectives[0],a.evaluation,b.evaluation):this.paretoComparison(this.objectives,a.evaluation,b.evaluation)},singleObjectiveComparison:function(a,b,c){var d;switch(a){case-(1/0):return d=c-b,isNaN(d)?1/0:d;case+(1/0):return d=b-c,isNaN(d)?-(1/0):d;default:return d=Math.abs(c-a)-Math.abs(b-a),isNaN(d)?1/0:d}},paretoComparison:function(a,b,c){var d,e=0,f=0,h=this;return g(a.length!==b.length,"Expected ",a.length," evaluations, but got ",b.length,"!"),g(a.length!==c.length,"Expected ",a.length," evaluations, but got ",c.length,"!"),d=j.zip(a,b,c).mapApply(function(a,b,c){var d=h.singleObjectiveComparison(a,b,c);return 0>d?e++:d>0&&f++,d}).toArray(),d.domination=0===e?f:0===f?-e:NaN,d},toString:function(){return"<"+(this.constructor.name||"Problem")+" "+JSON.stringify(this.title)+">"},__params__:function(){var a={},b=this,c=["title","description"].concat(Array.prototype.slice.call(arguments));return c.forEach(function(c){b.hasOwnProperty(c)&&(a[c]=b[c])}),this.random!==l.DEFAULT&&(a.random=this.random),a},"static __SERMAT__":{identifier:"Problem",serializer:function(a){return[a.__params__()]}}}),s=n.Metaheuristic=d({logger:new k("inveniemus",k.ROOT,"INFO"),constructor:function(a){e(this,a).object("problem",{defaultValue:null}).number("size",{defaultValue:100,coerce:!0}).array("state",{defaultValue:[]}).number("steps",{defaultValue:100,coerce:!0}).integer("step",{defaultValue:-1,coerce:!0}).object("random",{defaultValue:l.DEFAULT}).object("statistics",{defaultValue:new m}).object("logger",{ignore:!0}),this.events=new h({events:["initiated","updated","expanded","evaluated","sieved","advanced","analyzed","finished"]})},__log__:function(a){this.logger&&this.logger[a].apply(this.logger,arguments)},initiate:function(a){a=isNaN(a)?this.size:+a>>0,this.state=new Array(a);for(var b=0;a>b;b++)this.state[b]=this.problem.newElement();this.onInitiate()},update:function(){var a=this;return this.expand(),i.then(this.evaluate(),function(){return a.sieve(),a.onUpdate(),a})},expand:function(a){a=a||this.expansion(),a.length<1?this.__log__("warn","Expansion is empty"):this.state=this.state.concat(a),this.onExpand()},expansion:function(a){var b=isNaN(this.expansionRate)?.5:+this.expansionRate;a=isNaN(a)?Math.floor(b*this.size):+a;var c,d=new Array(a);for(c=0;a>c;c++)d[c]=this.problem.newElement();return d},evaluate:function(a){var b=this,c=this.statistics&&this.statistics.stat({key:"evaluation_time"});return c&&c.startTime(),a=a||this.state,i.then(this.problem.evaluate(a),function(d){return a=b.sort(a),c&&c.addTime(),b.onEvaluate(d),a})},sort:function(a){return a=a||this.state,this.problem.objectives.length>1?a=this.multiObjectiveSort(a):(a.sort(this.problem.compare.bind(this.problem)),a.reverse()),a},sieve:function(a){a=isNaN(a)?this.size:Math.floor(a),this.state.length>a&&(this.state=this.state.slice(0,this.size)),this.onSieve()},finished:function(){return this.step>=this.steps||this.problem.sufficientElements(this.state)},analyze:function(a){a=a||this.statistics;var b=this.step;if(a){if("number"==typeof this.state[0].evaluation){var c=a.stat({key:"evaluation",step:b});this.state.forEach(function(a){c.add(a.evaluation,a)})}else if(Array.isArray(this.state[0].evaluation)){var d=this.state[0].evaluation.map(function(c,d){return a.stat({key:"evaluation",index:d,step:b})}),e=a.stat({key:"dominators",step:b}),f=a.stat({key:"dominated",step:b});this.state.forEach(function(a){a.evaluation.forEach(function(b,c){d[c].add(b,a)}),e.add(a.pareto.dominators.length,a),f.add(a.pareto.dominated.length,a)})}this.onAnalyze()}return a},advance:function(){var a,b=this,c=this.statistics&&this.statistics.stat({key:"step_time"});return isNaN(this.step)||+this.step<0?(this.reset(),c&&c.startTime(),this.initiate(),a=this.evaluate()):(c&&c.startTime(),a=this.update()),i.then(a,function(){return b.step=isNaN(b.step)||+b.step<0?0:+b.step+1,b.analyze(),c&&c.addTime(),b.onAdvance(),b})},run:function(){var a=this,b=this.advance.bind(this),c=function(){return!a.finished()};return i.doWhile(b,c).then(function(){return a.onFinish(),a.state[0]})},reset:function(){this.step=-1,this.statistics&&this.statistics.reset()},nub:function(a){return a=isNaN(a)?1e-15:+a,this.state=f(this.state).nub(function(b,c){var d=b.values,e=c.values,f=d.length;if(f!==c.values.length)return!1;for(var g=0;f>g;++g)if(Math.abs(d[g]-e[g])>a)return!1;return!0}).toArray(),this.state.length},onInitiate:function(){this.events.emit("initiated",this),this.__log__("debug","State has been initiated. Nos coepimus.")},onUpdate:function(){this.events.emit("updated",this),this.__log__("debug","State has been updated. Mutatis mutandis.")},onExpand:function(){this.events.emit("expanded",this),this.__log__("debug","State has been expanded. Nos exploramus.")},onEvaluate:function(a){this.events.emit("evaluated",this,a),this.__log__("debug","Evaluated and sorted ",a.length," elements. Appretiatus sunt.")},onSieve:function(){this.events.emit("sieved",this),this.__log__("debug","State has been sieved. Haec est viam.")},onAdvance:function(){this.events.emit("advanced",this),this.__log__("debug","Step ",this.step," has been completed. Nos proficimus.")},onAnalyze:function(){this.events.emit("analyzed",this),this.__log__("debug","Statistics have been gathered. Haec sunt numeri.")},onFinish:function(){this.events.emit("finished",this),this.__log__("debug","Finished. Nos invenerunt!")},paretoAnalysis:function(a){a=a||this.state;var b,c,d,e,f,g=a.length;for(b=0;g>b;b++)a[b].pareto={dominated:[],dominators:[]};for(b=0;g>b;b++)for(d=a[b],c=b+1;g>c;c++)e=a[c],f=this.problem.compare(d,e).domination,f>0?(d.pareto.dominated.push(e),e.pareto.dominators.push(d)):0>f&&(e.pareto.dominated.push(d),d.pareto.dominators.push(e));return a},multiObjectiveSort:function(a){return this.nonDominatedSort(a)},crowdingDistance:function(a){a=a||this.state;var b,c,d=a.slice(),e=this.problem.objectives.length;for(b=0;bb;b++)for(d.sort(function(a,c){return a.evaluation[b]-c.evaluation[b]}),d[0].crowdingDistance=1/0,d[d.length-1].crowdingDistance=1/0,c=1;c"},__params__:function(){var a={problem:this.problem,size:this.size,steps:this.steps};this.random!==l.DEFAULT&&(a.random=this.random),this.step>=0?(a.step=this.step,a.state=this.state,a.statistics=this.statistics):this.state.length>0&&(a.state=this.state);for(var b=0;b=this.state.length},finished:function(){return s.prototype.finished.call(this)||this.atLocalOptima()},"static __SERMAT__":{identifier:"HillClimbing",serializer:function(a){return[a.__params__("delta")]}}}),o.GeneticAlgorithm=d(s,{constructor:function v(a){s.call(this,a),e(this,a).number("expansionRate",{defaultValue:.5,minimum:0,coerce:!0}).number("mutationRate",{defaultValue:.2,minimum:0,maximum:1,coerce:!0}).func("selection",{defaultValue:v.selections.rankSelection}).func("crossover",{defaultValue:v.crossovers.singlepointCrossover}).func("mutation",{defaultValue:v.mutations.singlepointUniformMutation})},expansion:function(){var a,b,c,d=[],e=Math.floor(this.expansionRate*this.size);e+=e%2;for(var f=0;e>f;f+=2){a=this.selection(),b=this.crossover(a);for(var g=0;gf;f++)c[f]+=f-b;c[0]<=0&&(d.push(e),c.shift())}),d.lengthd;d++)f[d]+=d-b;f[0]<=0&&(g.push(c),f.shift())}),g.length=a)return c[d];return c[c.length-1]}).toArray()}},"static crossovers":{singlepointCrossover:function(a){g(!Array.isArray(a)||a.length<2,"A two parent array is required.");var b=this.random.randomInt(this.length-1)+1,c=a[0].values,d=a[1].values;return[this.problem.newElement(c.slice(0,b).concat(d.slice(b))),this.problem.newElement(d.slice(0,b).concat(c.slice(b)))]},twopointCrossover:function(a){g(!Array.isArray(a)||a.length<2,"A two parent array is required.");var b=this.random.randomInt(this.length-1)+1,c=this.random.randomInt(this.length-1)+1,d=a[0].values,e=a[1].values;return[this.problem.newElement(d.slice(0,b).concat(e.slice(b,c)).concat(d.slice(c))),this.problem.newElement(e.slice(0,b).concat(d.slice(b,c)).concat(e.slice(c)))]},uniformCrossover:function(a,b){b=isNaN(b)?a.length:0|b;for(var c,d=[],e=this.problem.elementLength(),f=this.random,g=0;b>g;++g){c=[];for(var h=0;e>h;++h)c.push(f.choice(a).values[h]);d.push(this.problem.newElement(c))}return d}},"static mutations":{singlepointUniformMutation:function(a){var b=this.problem.elementModel(),c=this.random.randomInt(b.length);return a.modification(c,this.random.random(b[c].min,b[c].max))},uniformMutation:function(a){max=isNaN(a)?1/0:+a;var b=this.problem.elementModel();return function(c){var d,e=a;c=this.problem.newElement(c.values);do d=this.random.randomInt(b.length),c.values[d]=this.random.random(b[d].min,b[d].max);while(this.random.randomBool(this.mutationRate)&&--e>0);return c}},singlepointBiasedMutation:function(a){var b=this.random,c=this.problem.elementModel(),d=b.randomInt(a.length);return a.modification(d,a.values[d]+(b.random()-b.random())*(c[d].max-c[d].min))},recombinationMutation:function(a){var b=a.values.slice(),c=this.random.randomInt(b.length),d=b[c],e=this.random.randomInt(b.length);return c===e&&(e=(e+1)%a.length),b[c]=b[e],b[e]=d,this.problem.newElement(b)}},"static __SERMAT__":{identifier:"GeneticAlgorithm",serializer:function(a){var b=a.__params__("expansionRate","mutationRate");return[b]}}}),o.BeamSearch=d(s,{constructor:function(a){s.call(this,a),e(this,a).number("delta",{ignore:!0,coerce:!0})},successors:function(a){return a.neighbourhood(this.delta)},expansion:function(){var a=[],b=this.successors.bind(this);return this.state.forEach(function(c){a=a.concat(b(c))}),this.onExpand(),a},"static __SERMAT__":{identifier:"BeamSearch",serializer:function(a){return[a.__params__("delta")]}}}),o.SimulatedAnnealing=d(s,{constructor:function(a){s.call(this,a),e(this,a).number("maximumTemperature",{defaultValue:1,coerce:!0}).number("minimumTemperature",{defaultValue:0,coerce:!0}).number("delta",{defaultValue:1,coerce:!0}).integer("size",{defaultValue:1,coerce:!0}).func("temperature",{defaultValue:this.coolingSchedule.linear})},randomNeighbour:function(a,b){b=isNaN(b)?this.delta:+b;var c=this.random.randomInt(a.values.length),d=a.values[c];return a.modification(c,this.random.randomBool()?d+b:d-b)},acceptance:function(a,b,d){if(d=isNaN(d)?this.temperature():+d,this.problem.compare(a,b)>0)return 1;var e=-Math.abs(b.evaluation-a.evaluation);return c(Math.exp(e/d),0,1)},coolingSchedule:{linear:function(){return(1-Math.max(0,this.step)/this.steps)*(this.maximumTemperature-this.minimumTemperature)+this.minimumTemperature}},update:function(){var a=this,b=this.temperature(),c=this.statistics.stat({key:"acceptance"}),d=this.statistics.stat({key:"temperature"});return d.add(b,this.step),i.all(this.state.map(function(d){var e=a.randomNeighbour(d);return i.then(e.evaluate(),function(){var f=a.acceptance(d,e,b);return c.add(f,e),a.random.randomBool(f)?e:d})})).then(function(b){return b=a.sort(b),a.state=b,a.onUpdate(),a})},"static __SERMAT__":{identifier:"SimulatedAnnealing",serializer:function(a){return[a.__params__("maximumTemperature","minimumTemperature","delta")]}}}),o.ParticleSwarm=d(s,{constructor:function(a){s.call(this,a),e(this,a).number("inertia",{defaultValue:1,coerce:!0}).number("localAcceleration",{defaultValue:.5,coerce:!0}).number("globalAcceleration",{defaultValue:.3,coerce:!0})},initiate:function(a){s.prototype.initiate.call(this,a);var b=this,c=this.problem.elementModel(),d=this.state.forEach(function(a){a.__velocity__=b.random.randoms(a.values.length,-1,1).map(function(a,b){return a*(c[b].max-c[b].min)}),a.__localBest__=a});return this.onInitiate(),d},nextVelocity:function(a,b){var c=this,d=a.__velocity__,e=a.__localBest__,f=this.random.random(this.localAcceleration),g=this.random.random(this.globalAcceleration),h=a.values.map(function(a,h){return d[h]*c.inertia+f*(e.values[h]-a)+g*(b.values[h]-a)});return h},nextElement:function(a,b){var c=this,d=this.nextVelocity(a,b),e=a.values.map(function(a,b){return a+d[b]}),f=this.problem.newElement(e);return i.then(f.evaluate(),function(){return f.__velocity__=d,f.__localBest__=c.problem.compare(a.__localBest__,f)>0?f:a.__localBest__,f})},update:function(){var a=this,b=this.__globalBest__;return b||(b=this.__globalBest__=this.state[0]),i.all(this.state.map(function(c){return a.nextElement(c,b)})).then(function(b){return b=a.sort(b),a.state=b,a.problem.compare(a.__globalBest__,b[0])>0&&(a.__globalBest__=b[0]),a.onUpdate(),a})},"static __SERMAT__":{identifier:"ParticleSwarm",serializer:function(a){return[a.__params__("inertia","localAcceleration","globalAcceleration")]}}}),o.DifferentialEvolution=d(s,{constructor:function(a){s.call(this,a),e(this,a).number("differentialWeight",{coerce:!0,defaultValue:1,minimum:0,maximum:2}).number("crossoverProbability",{coerce:!0,defaultValue:.3,minimum:0,maximum:1}).integer("size",{coerce:!0,defaultValue:100,minimum:4})},expansion:function(){var a=this,b=this.state.map(function(b,c){var d=a.state.slice();d.splice(c,1);var e=a.random.choices(3,d),f=e[0].values,g=e[1].values,h=e[2].values,i=b.values.length,j=a.random.randomInt(i),k=b.values.map(function(b,c){return c===j||a.random.randomBool(a.crossoverProbability)?f[c]+a.differentialWeight*(g[c]-h[c]):b});return a.problem.newElement(k)});return this.onExpand(),b},"static __SERMAT__":{identifier:"DifferentialEvolution",serializer:function(a){return[a.__params__("differentialWeight","crossoverProbability")]}}}),o.EvolutionStrategy=d(s,{constructor:function(a){s.call(this,a),e(this,a).number("mutantCount",{coerce:!0,defaultValue:1,minimum:1}).integer("size",{coerce:!0,defaultValue:1,minimum:1})},mutant:function(a){var b=this.random,c=this.problem.elementModel(),d=a.values.map(function(a,d){var e=c[d];return a+(b.random()-b.random())*(e.max-e.min)});return this.problem.newElement(d)},mutants:function(a,b){b=isNaN(b)?this.mutantCount:+b;for(var c=[],d=0;b>d;++d)c.push(this.mutant(a));return c},expansion:function(){var a=this,b=[];return this.state.forEach(function(c){b=b.concat(a.mutants(c))}),this.onExpand(),b},"static __SERMAT__":{identifier:"DistributionEstimation",serializer:function(a){return[a.__params__("mutantCount")]}}}),o.HarmonySearch=d(s,{constructor:function(a){s.call(this,a),e(this,a).number("harmonyProbability",{coerce:!0,defaultValue:.9,minimum:0,maximum:1}).number("adjustProbability",{coerce:!0,defaultValue:.5,minimum:0,maximum:1}).number("delta",{coerce:!0,defaultValue:1}).number("fretWidth",{coerce:!0,defaultValue:.01})},expansion:function(){var a=this,b=this.random,c=this.problem.elementModel(),d=c.map(function(c,d){if(b.randomBool(a.harmonyProbability)){var e=b.choice(a.state).values[d];if(b.randomBool(a.adjustProbability))if(c.discrete)e+=b.choice([-a.delta,a.delta]);else{var f=c.max-c.min;e+=b.random(-f,+f)*a.fretWidth}return e}return b.random(c.min,c.max)});return this.onExpand(),[this.problem.newElement(d)]},"static __SERMAT__":{identifier:"HarmonySearch",serializer:function(a){return[a.__params__("harmonyProbability","adjustProbability","delta","fretWidth")]}}}),o.DistributionEstimation=d(s,{constructor:function(a){s.call(this,a),e(this,a).integer("histogramWidth",{coerce:!0,defaultValue:10,minimum:2})},expansion:function(a){var c=this,d=isNaN(this.expansionRate)?.5:+this.expansionRate,e=this.histograms();return a=isNaN(a)?Math.floor(d*this.size):0|a,b.Iterable.repeat(null,a).map(function(){return c.elementFromHistograms(e)}).toArray()},histograms:function(){return t.histograms(this.state,this.histogramWidth,this.problem.elementModel().length)},"static histograms":function(a,b,c){var d=a.length,e=j.iterate(function(a){return a.slice()},j.repeat(0,b).toArray(),c).toArray();return a.forEach(function(a){a.values.forEach(function(c,d){var f=Math.min(b-1,Math.floor(a.values[d]*b));e[d][f]++})}),e.map(function(a){return a.map(function(a){return a/d})})},elementFromHistograms:function(a){return t.elementFromHistograms(a,this.problem,this.random)},"static elementFromHistograms":function(a,b,c){for(var d,e,f=a.length,g=new Array(f),h=0;f>h;++h){d=a[h],e=c.random();for(var i=0;i<=d.length;++i)if(i===d.length||(e-=d[i])<=0){g[h]=Math.min(1,Math.max(0,(i+c.random())/d.length));break}}return b.newElement(g)},"static histogramProblem":function(a,c,e){c=isNaN(c)?30:Math.max(1,0|c),e=isNaN(e)?10:Math.max(2,0|e);var g=(a.elementLength(),this.elementFromHistograms);return HistogramProblem=d(r,{elementLength:function h(){return h*e},evaluation:function(d){var e=this.mapping(d),h=b.Iterable.repeat(null,c).map(function(){return g(e,a,a.random)});return i.all(f(h).map(function(a){return i.when(a.evaluate())})).then(function(a){return f(a).sum()/a.length})},mapping:function(a){for(var b,c,d=[],g=0;g0?1:-1,(a-d)*e/2/b})})}))},gradientSimultaneousPerturbation:function(a,b){throw new Error("GradientDescent.gradientSimultaneousPerturbation() is not implemented!")},"static __SERMAT__":{identifier:"GradientDescent",serializer:function(a){return[a.__params__("delta")]}}});p.HelloWorld=d(r,{title:"Hello world",description:"Simple problem where each element is a string, and the optimization goes towards the target string.",constructor:function(a){r.call(this,a),e(this,a).string("target",{coerce:!0,defaultValue:"Hello world!"}),this.__target__=f(this.target).map(function(a){return a.charCodeAt(0)}).toArray(),this.__elementModel__=j.repeat({min:32,max:127,discrete:!0},this.target.length).toArray()},mapping:function(a){return a.values.map(function(a){return String.fromCharCode(Math.floor(a))}).join("")},evaluation:function(a){return a.manhattanDistance(this.__target__,a.values)},compare:r.prototype.minimization,sufficientElement:function(a){return this.mapping(a)===this.target},"static __SERMAT__":{identifier:"HelloWorld",serializer:function(a){return[a.__params__("target")]}}});var u=p.TestBed=d(r,{constructor:function(a){r.call(this,a),this.title=a.title;var b=isNaN(a.minimumValue)?-1e6:+a.minimumValue,c=isNaN(a.maximumValue)?1e6:+a.maximumValue,d=isNaN(a.length)?2:+a.length;this.__elementModel__=j.repeat({min:b,max:c,discrete:!!a.discreteDomain},d).toArray(),this.evaluation=function(b){return a.evaluation(b.values)},a.hasOwnProperty("optimumValue")&&(this.sufficientElement=function(b){return Math.abs(b.evaluation-a.optimumValue)i;++i)e=a[i],f+=e*e,g+=Math.cos(d*e);return-b*Math.exp(-c*Math.sqrt(f/h))-Math.exp(g/h)+b+Math.exp(1)}})},crossInTray:function(a){return a=isNaN(a)?-(1/0):+a,new u({title:"cross-in-tray testbed",length:2,objectives:a,minimumValue:-10,maximumValue:10,evaluation:function(a){var b=a[0],c=a[1];return-1e-4*Math.pow(Math.abs(Math.sin(b)*Math.sin(c)*Math.exp(Math.abs(100-Math.sqrt(b*b+c*c)/Math.PI)))+1,.1)}})},Griewank:function(a){return new u({title:"Griewank testbed",length:a,minimumValue:-600,maximumValue:600,optimumValue:0,evaluation:function(a){for(var b,c=0,d=1,e=a.length,f=0;e>f;++f)b=a[f],c+=b*b/4e3,d*=Math.cos(b/Math.sqrt(f+1));return c-d+1}})},Levy:function(a){return new u({title:"Levy testbed",length:a,objectives:-(1/0),minimumValue:-10,maximumValue:10,optimumValue:0,evaluation:function(a){for(var b,c=0,d=a.length,e=1+(a[0]-1)/4,f=1+(a[d-1]-1)/4,g=1;d-1>g;++g)b=1+(a[g]-1)/4,c+=Math.pow(b-1,2)*(1+10*Math.pow(Math.sin(Math.PI*b+1),2));return Math.pow(Math.sin(Math.PI*e),2)+c+Math.pow(f-1,2)*(1+Math.pow(Math.sin(2*Math.PI*f),2))}})},Michalewicz:function(a,b){return b=isNaN(b)?10:+b,new u({title:"Michalewicz testbed",length:a,objectives:-(1/0),minimumValue:0,maximumValue:Math.PI,evaluation:function(a){for(var c,d=0,e=a.length,f=0;e>f;++f)c=a[f],d+=Math.sin(c)*Math.pow(Math.sin((f+1)*c*c/Math.PI),2*b);return-d}})},perm0:function(a,b){return a=isNaN(a)?2:Math.min(1,0|a),b=isNaN(b)?0:+b,new u({title:"Perm(0,"+a+","+b+") testbed",length:a,objectives:-(1/0),minimumValue:-a,maximumValue:+a,optimumValue:0,evaluation:function(c){for(var d,e=0,f=0;a>f;++f){d=0;for(var g=0;a>g;++g)d+=(g+1+b)*(Math.pow(c[g],f+1)-Math.pow(1/(g+1),f+1));e+=d*d}return e}})},Rastrigin:function(a){return new u({title:"Rastrigin testbed",length:a,objectives:-(1/0),minimumValue:-5.12,maximumValue:5.12,optimumValue:0,evaluation:function(a){for(var b,c=0,d=a.length,e=0;d>e;++e)b=a[e],c+=b*b-10*Math.cos(2*Math.PI*b);return 10*d+c}})},Rosenbrock:function(a,b,c){return b=isNaN(b)?1:+b,c=isNaN(c)?100:+c,new u({title:"Rosenbrock testbed",length:a,objectives:-(1/0),optimumValue:0,evaluation:function(a){for(var d=0,e=1;ee;++e)b=a[e],c+=b*Math.sin(Math.sqrt(Math.abs(b)));return 418.9829*d-c}})},sphere:function(a){return new u({title:"sphere testbed",length:a,objectives:-(1/0),optimumValue:0,evaluation:function(a){for(var b=0,c=0;cd;++d)b+=a[d];return b}})},ZDT1:function(a){return a=isNaN(a)?30:Math.max(1,0|a),new u({title:"Zitzler-Deb-Thiele function 1",length:a,objectives:[-(1/0),-(1/0)],minimumValue:0,maximumValue:1,evaluation:function(a){var b=a[0],c=f(a).tail().sum()/(a.length-1)*9,d=1-Math.sqrt(b/c);return[b,c*d]}})},ZDT2:function(a){return a=isNaN(a)?30:Math.max(1,0|a),new u({title:"Zitzler-Deb-Thiele function 2",length:a,objectives:[-(1/0),-(1/0)],minimumValue:0,maximumValue:1,evaluation:function(a){var b=a[0],c=f(a).tail().sum()/(a.length-1)*9,d=1-Math.pow(b/c,2);return[b,c*d]}})},ZDT3:function(a){return a=isNaN(a)?30:Math.max(1,0|a),new u({title:"Zitzler-Deb-Thiele function 3",length:a,objectives:[-(1/0),-(1/0)],minimumValue:0,maximumValue:1,evaluation:function(a){var b=a[0],c=f(a).tail().sum()/(a.length-1)*9,d=1-Math.sqrt(b/c)-b/c*Math.sin(10*Math.PI*b);return[b,c*d]}})}},p.NQueensPuzzle=d(r,{title:"N-queens puzzle",description:"Generalized version of the classic problem of placing 8 chess queens on an 8x8 chessboard so that no two queens attack each other.",constructor:function(a){r.call(this,a),e(this,a).integer("N",{coerce:!0,defaultValue:8}),this.__rowRange__=j.range(this.N).toArray(),this.__elementModel__=j.repeat({min:0,max:this.N-1,discrete:!0},this.N-1).toArray()},mapping:function(a){return a.setMapping(this.__rowRange__)},evaluation:function(a){var b=this.mapping(a),c=0;return b.forEach(function(a,d){for(var e=1;d+e=g.min&&c.push(b.modification(f,i))}),c},modification:function(){var a,b,d,e=this.values.slice(),f=this.problem.elementModel();for(b=0;bf?a[f]:d;return e=(e-g.min)/(g.max-g.min)*(h[1]-h[0])+h[0],c(e,h[0],h[1])})},normalizedValues:function(){return this.rangeMapping([0,1])},arrayMapping:function(){var a=arguments,b=a[a.length-1],c=this.problem.elementModel();return g(a.length<1,"Element.arrayMapping() expects at least one argument!"),this.values.map(function(d,e){var f=a.length>e?a[e]:b,g=c[e],h=Math.floor((d-g.min)/(g.max-g.min)*f.length);return f[h]})},setMapping:function(a,b){g(!Array.isArray(a),"Element.setMapping() expects an array argument!"),a=a.slice();var d=this.normalizedValues().map(function(b,d){g(a.length<1,"Element.setMapping(): insufficient elements!");var e=c(Math.floor(b*a.length),0,a.length-1);return a.splice(e,1)[0]});return b&&(g(1!=a.length,"Element.setMapping(): wrong amount of elements!"),d.push(a[0])),d},clone:function(){return new this.constructor(this.problem,this.values,this.evaluation)},equals:function(a){if(this.constructor===a.constructor&&this.values.length===a.values.length){for(var b=0,c=this.values.length;c>b;b++)if(this.values[b]!==a.values[b])return!1;return!0}return!1},toString:function(){return"<"+(this.constructor.name||"Element")+" "+JSON.stringify(this.values)+" "+this.evaluation+">"},"static __SERMAT__":{identifier:"Element",serializer:function(a){return[a.problem,a.values,a.evaluation]}}}),r=n.Problem=d({constructor:function(a){a=a||{},e(this,a).string("title",{coerce:!0,defaultValue:this.constructor.name||""}).string("description",{coerce:!0,defaultValue:""}).object("random",{defaultValue:l.DEFAULT});a.hasOwnProperty("objectives")?a.objectives:-(1/0);"number"!=typeof a.objectives||isNaN(a.objectives)?Array.isArray(a.objectives)?this.objectives=a.objectives:this.objectives=[-(1/0)]:this.objectives=[a.objectives]},__elementModel__:j.repeat({min:0,max:1,discrete:!1},10).toArray(),elementModel:function(){return this.__elementModel__},newElement:function(a,b){return new q(this,a,b)},evaluation:function(a){return f(a.values).sum()},evaluate:function(a,b){var c=!1;return a=f(a).filter(function(a){return b||isNaN(a.evaluation)},function(a){var b=a.evaluate();return c=c||i.__isFuture__(b),b}).toArray(),c?i.all(a):a},mapping:function(a){return a.values},sufficientElement:function(a){return!1},sufficientElements:function(a){return this.sufficientElement(a[0])},compare:function(a,b){return 1===this.objectives.length?this.singleObjectiveComparison(this.objectives[0],a.evaluation,b.evaluation):this.paretoComparison(this.objectives,a.evaluation,b.evaluation)},singleObjectiveComparison:function(a,b,c){var d;switch(a){case-(1/0):return d=c-b,isNaN(d)?1/0:d;case+(1/0):return d=b-c,isNaN(d)?-(1/0):d;default:return d=Math.abs(c-a)-Math.abs(b-a),isNaN(d)?1/0:d}},paretoComparison:function(a,b,c){var d,e=0,f=0,h=this;return g(a.length!==b.length,"Expected ",a.length," evaluations, but got ",b.length,"!"),g(a.length!==c.length,"Expected ",a.length," evaluations, but got ",c.length,"!"),d=j.zip(a,b,c).mapApply(function(a,b,c){var d=h.singleObjectiveComparison(a,b,c);return 0>d?e++:d>0&&f++,d}).toArray(),d.domination=0===e?f:0===f?-e:NaN,d},toString:function(){return"<"+(this.constructor.name||"Problem")+" "+JSON.stringify(this.title)+">"},__params__:function(){var a={},b=this,c=["title","description"].concat(Array.prototype.slice.call(arguments));return c.forEach(function(c){b.hasOwnProperty(c)&&(a[c]=b[c])}),this.random!==l.DEFAULT&&(a.random=this.random),a},"static __SERMAT__":{identifier:"Problem",serializer:function(a){return[a.__params__()]}}}),s=n.Metaheuristic=d({logger:new k("inveniemus",k.ROOT,"INFO"),constructor:function(a){e(this,a).object("problem",{defaultValue:null}).number("size",{defaultValue:100,coerce:!0}).array("state",{defaultValue:[]}).number("steps",{defaultValue:100,coerce:!0}).integer("step",{defaultValue:-1,coerce:!0}).object("random",{defaultValue:l.DEFAULT}).object("statistics",{defaultValue:new m}).object("logger",{ignore:!0}),this.events=new h({events:["initiated","updated","expanded","evaluated","sieved","advanced","analyzed","finished"]})},__log__:function(a){this.logger&&this.logger[a].apply(this.logger,arguments)},initiate:function(a){a=isNaN(a)?this.size:+a>>0,this.state=new Array(a);for(var b=0;a>b;b++)this.state[b]=this.problem.newElement();this.onInitiate()},update:function(){var a=this;return this.expand(),i.then(this.evaluate(),function(){return a.sieve(),a.onUpdate(),a})},expand:function(a){a=a||this.expansion(),a.length<1?this.__log__("warn","Expansion is empty"):this.state=this.state.concat(a),this.onExpand()},expansion:function(a){var b=isNaN(this.expansionRate)?.5:+this.expansionRate;a=isNaN(a)?Math.floor(b*this.size):+a;var c,d=new Array(a);for(c=0;a>c;c++)d[c]=this.problem.newElement();return d},evaluate:function(a){var b=this,c=this.statistics&&this.statistics.stat({key:"evaluation_time"});return c&&c.startTime(),a=a||this.state,i.then(this.problem.evaluate(a),function(d){return a=b.sort(a),c&&c.addTime(),b.onEvaluate(d),a})},sort:function(a){return a=a||this.state,this.problem.objectives.length>1?a=this.multiObjectiveSort(a):(a.sort(this.problem.compare.bind(this.problem)),a.reverse()),a},sieve:function(a){a=isNaN(a)?this.size:Math.floor(a),this.state.length>a&&(this.state=this.state.slice(0,this.size)),this.onSieve()},finished:function(){return this.step>=this.steps||this.problem.sufficientElements(this.state)},analyze:function(a){a=a||this.statistics;var b=this.step;if(a){if("number"==typeof this.state[0].evaluation){var c=a.stat({key:"evaluation",step:b});this.state.forEach(function(a){c.add(a.evaluation,a)})}else if(Array.isArray(this.state[0].evaluation)){var d=this.state[0].evaluation.map(function(c,d){return a.stat({key:"evaluation",index:d,step:b})}),e=a.stat({key:"dominators",step:b}),f=a.stat({key:"dominated",step:b});this.state.forEach(function(a){a.evaluation.forEach(function(b,c){d[c].add(b,a)}),e.add(a.pareto.dominators.length,a),f.add(a.pareto.dominated.length,a)})}this.onAnalyze()}return a},advance:function(){var a,b=this,c=this.statistics&&this.statistics.stat({key:"step_time"});return isNaN(this.step)||+this.step<0?(this.reset(),c&&c.startTime(),this.initiate(),a=this.evaluate()):(c&&c.startTime(),a=this.update()),i.then(a,function(){return b.step=isNaN(b.step)||+b.step<0?0:+b.step+1,b.analyze(),c&&c.addTime(),b.onAdvance(),b})},run:function(){var a=this,b=this.advance.bind(this),c=function(){return!a.finished()};return i.doWhile(b,c).then(function(){return a.onFinish(),a.state[0]})},reset:function(){this.step=-1,this.statistics&&this.statistics.reset()},nub:function(a){return a=isNaN(a)?1e-15:+a,this.state=f(this.state).nub(function(b,c){var d=b.values,e=c.values,f=d.length;if(f!==c.values.length)return!1;for(var g=0;f>g;++g)if(Math.abs(d[g]-e[g])>a)return!1;return!0}).toArray(),this.state.length},onInitiate:function(){this.events.emit("initiated",this),this.__log__("debug","State has been initiated. Nos coepimus.")},onUpdate:function(){this.events.emit("updated",this),this.__log__("debug","State has been updated. Mutatis mutandis.")},onExpand:function(){this.events.emit("expanded",this),this.__log__("debug","State has been expanded. Nos exploramus.")},onEvaluate:function(a){this.events.emit("evaluated",this,a),this.__log__("debug","Evaluated and sorted ",a.length," elements. Appretiatus sunt.")},onSieve:function(){this.events.emit("sieved",this),this.__log__("debug","State has been sieved. Haec est viam.")},onAdvance:function(){this.events.emit("advanced",this),this.__log__("debug","Step ",this.step," has been completed. Nos proficimus.")},onAnalyze:function(){this.events.emit("analyzed",this),this.__log__("debug","Statistics have been gathered. Haec sunt numeri.")},onFinish:function(){this.events.emit("finished",this),this.__log__("debug","Finished. Nos invenerunt!")},paretoAnalysis:function(a){a=a||this.state;var b,c,d,e,f,g=a.length;for(b=0;g>b;b++)a[b].pareto={dominated:[],dominators:[]};for(b=0;g>b;b++)for(d=a[b],c=b+1;g>c;c++)e=a[c],f=this.problem.compare(d,e).domination,f>0?(d.pareto.dominated.push(e),e.pareto.dominators.push(d)):0>f&&(e.pareto.dominated.push(d),d.pareto.dominators.push(e));return a},multiObjectiveSort:function(a){return this.nonDominatedSort(a)},crowdingDistance:function(a){a=a||this.state;var b,c,d=a.slice(),e=this.problem.objectives.length;for(b=0;bb;b++)for(d.sort(function(a,c){return a.evaluation[b]-c.evaluation[b]}),d[0].crowdingDistance=1/0,d[d.length-1].crowdingDistance=1/0,c=1;c"},__params__:function(){var a={problem:this.problem,size:this.size,steps:this.steps};this.random!==l.DEFAULT&&(a.random=this.random),this.step>=0?(a.step=this.step,a.state=this.state,a.statistics=this.statistics):this.state.length>0&&(a.state=this.state);for(var b=0;b=this.state.length},finished:function(){return s.prototype.finished.call(this)||this.atLocalOptima()},"static __SERMAT__":{identifier:"HillClimbing",serializer:function(a){return[a.__params__("delta")]}}}),o.GeneticAlgorithm=d(s,{constructor:function v(a){s.call(this,a),e(this,a).number("expansionRate",{defaultValue:.5,minimum:0,coerce:!0}).number("mutationRate",{defaultValue:.2,minimum:0,maximum:1,coerce:!0}).func("selection",{defaultValue:v.selections.rankSelection}).func("crossover",{defaultValue:v.crossovers.singlepointCrossover}).func("mutation",{defaultValue:v.mutations.singlepointUniformMutation})},expansion:function(){var a,b,c,d=[],e=Math.floor(this.expansionRate*this.size);e+=e%2;for(var f=0;e>f;f+=2){a=this.selection(),b=this.crossover(a);for(var g=0;gf;f++)c[f]+=f-b;c[0]<=0&&(d.push(e),c.shift())}),d.lengthd;d++)f[d]+=d-b;f[0]<=0&&(g.push(c),f.shift())}),g.length=a)return c[d];return c[c.length-1]}).toArray()}},"static crossovers":{singlepointCrossover:function(a){g(!Array.isArray(a)||a.length<2,"A two parent array is required.");var b=this.random.randomInt(this.length-1)+1,c=a[0].values,d=a[1].values;return[this.problem.newElement(c.slice(0,b).concat(d.slice(b))),this.problem.newElement(d.slice(0,b).concat(c.slice(b)))]},twopointCrossover:function(a){g(!Array.isArray(a)||a.length<2,"A two parent array is required.");var b=this.random.randomInt(this.length-1)+1,c=this.random.randomInt(this.length-1)+1,d=a[0].values,e=a[1].values;return[this.problem.newElement(d.slice(0,b).concat(e.slice(b,c)).concat(d.slice(c))),this.problem.newElement(e.slice(0,b).concat(d.slice(b,c)).concat(e.slice(c)))]},uniformCrossover:function(a,b){b=isNaN(b)?a.length:0|b;for(var c,d=[],e=this.problem.elementLength(),f=this.random,g=0;b>g;++g){c=[];for(var h=0;e>h;++h)c.push(f.choice(a).values[h]);d.push(this.problem.newElement(c))}return d}},"static mutations":{singlepointUniformMutation:function(a){var b=this.problem.elementModel(),c=this.random.randomInt(b.length);return a.modification(c,this.random.random(b[c].min,b[c].max))},uniformMutation:function(a){max=isNaN(a)?1/0:+a;var b=this.problem.elementModel();return function(c){var d,e=a;c=this.problem.newElement(c.values);do d=this.random.randomInt(b.length),c.values[d]=this.random.random(b[d].min,b[d].max);while(this.random.randomBool(this.mutationRate)&&--e>0);return c}},singlepointBiasedMutation:function(a){var b=this.random,c=this.problem.elementModel(),d=b.randomInt(a.length);return a.modification(d,a.values[d]+(b.random()-b.random())*(c[d].max-c[d].min))},recombinationMutation:function(a){var b=a.values.slice(),c=this.random.randomInt(b.length),d=b[c],e=this.random.randomInt(b.length);return c===e&&(e=(e+1)%a.length),b[c]=b[e],b[e]=d,this.problem.newElement(b)}},"static __SERMAT__":{identifier:"GeneticAlgorithm",serializer:function(a){var b=a.__params__("expansionRate","mutationRate");return[b]}}}),o.BeamSearch=d(s,{constructor:function(a){s.call(this,a),e(this,a).number("delta",{ignore:!0,coerce:!0})},successors:function(a){return a.neighbourhood(this.delta)},expansion:function(){var a=[],b=this.successors.bind(this);return this.state.forEach(function(c){a=a.concat(b(c))}),this.onExpand(),a},"static __SERMAT__":{identifier:"BeamSearch",serializer:function(a){return[a.__params__("delta")]}}}),o.SimulatedAnnealing=d(s,{constructor:function(a){s.call(this,a),e(this,a).number("maximumTemperature",{defaultValue:1,coerce:!0}).number("minimumTemperature",{defaultValue:0,coerce:!0}).number("delta",{defaultValue:1,coerce:!0}).integer("size",{defaultValue:1,coerce:!0}).func("temperature",{defaultValue:this.coolingSchedule.linear})},randomNeighbour:function(a,b){b=isNaN(b)?this.delta:+b;var c=this.random.randomInt(a.values.length),d=a.values[c];return a.modification(c,this.random.randomBool()?d+b:d-b)},acceptance:function(a,b,d){if(d=isNaN(d)?this.temperature():+d,this.problem.compare(a,b)>0)return 1;var e=-Math.abs(b.evaluation-a.evaluation);return c(Math.exp(e/d),0,1)},coolingSchedule:{linear:function(){return(1-Math.max(0,this.step)/this.steps)*(this.maximumTemperature-this.minimumTemperature)+this.minimumTemperature}},update:function(){var a=this,b=this.temperature(),c=this.statistics.stat({key:"acceptance"}),d=this.statistics.stat({key:"temperature"});return d.add(b,this.step),i.all(this.state.map(function(d){var e=a.randomNeighbour(d);return i.then(e.evaluate(),function(){var f=a.acceptance(d,e,b);return c.add(f,e),a.random.randomBool(f)?e:d})})).then(function(b){return b=a.sort(b),a.state=b,a.onUpdate(),a})},"static __SERMAT__":{identifier:"SimulatedAnnealing",serializer:function(a){return[a.__params__("maximumTemperature","minimumTemperature","delta")]}}}),o.ParticleSwarm=d(s,{constructor:function(a){s.call(this,a),e(this,a).number("inertia",{defaultValue:1,coerce:!0}).number("localAcceleration",{defaultValue:.5,coerce:!0}).number("globalAcceleration",{defaultValue:.3,coerce:!0})},initiate:function(a){s.prototype.initiate.call(this,a);var b=this,c=this.problem.elementModel(),d=this.state.forEach(function(a){a.__velocity__=b.random.randoms(a.values.length,-1,1).map(function(a,b){return a*(c[b].max-c[b].min)}),a.__localBest__=a});return this.onInitiate(),d},nextVelocity:function(a,b){var c=this,d=a.__velocity__,e=a.__localBest__,f=this.random.random(this.localAcceleration),g=this.random.random(this.globalAcceleration),h=a.values.map(function(a,h){return d[h]*c.inertia+f*(e.values[h]-a)+g*(b.values[h]-a)});return h},nextElement:function(a,b){var c=this,d=this.nextVelocity(a,b),e=a.values.map(function(a,b){return a+d[b]}),f=this.problem.newElement(e);return i.then(f.evaluate(),function(){return f.__velocity__=d,f.__localBest__=c.problem.compare(a.__localBest__,f)>0?f:a.__localBest__,f})},update:function(){var a=this,b=this.__globalBest__;return b||(b=this.__globalBest__=this.state[0]),i.all(this.state.map(function(c){return a.nextElement(c,b)})).then(function(b){return b=a.sort(b),a.state=b,a.problem.compare(a.__globalBest__,b[0])>0&&(a.__globalBest__=b[0]),a.onUpdate(),a})},"static __SERMAT__":{identifier:"ParticleSwarm",serializer:function(a){return[a.__params__("inertia","localAcceleration","globalAcceleration")]}}}),o.DifferentialEvolution=d(s,{constructor:function(a){s.call(this,a),e(this,a).number("differentialWeight",{coerce:!0,defaultValue:1,minimum:0,maximum:2}).number("crossoverProbability",{coerce:!0,defaultValue:.3,minimum:0,maximum:1}).integer("size",{coerce:!0,defaultValue:100,minimum:4})},expansion:function(){var a=this,b=this.state.map(function(b,c){var d=a.state.slice();d.splice(c,1);var e=a.random.choices(3,d),f=e[0].values,g=e[1].values,h=e[2].values,i=b.values.length,j=a.random.randomInt(i),k=b.values.map(function(b,c){return c===j||a.random.randomBool(a.crossoverProbability)?f[c]+a.differentialWeight*(g[c]-h[c]):b});return a.problem.newElement(k)});return this.onExpand(),b},"static __SERMAT__":{identifier:"DifferentialEvolution",serializer:function(a){return[a.__params__("differentialWeight","crossoverProbability")]}}}),o.EvolutionStrategy=d(s,{constructor:function(a){s.call(this,a),e(this,a).number("mutantCount",{coerce:!0,defaultValue:1,minimum:1}).integer("size",{coerce:!0,defaultValue:1,minimum:1})},mutant:function(a){var b=this.random,c=this.problem.elementModel(),d=a.values.map(function(a,d){var e=c[d];return a+(b.random()-b.random())*(e.max-e.min)});return this.problem.newElement(d)},mutants:function(a,b){b=isNaN(b)?this.mutantCount:+b;for(var c=[],d=0;b>d;++d)c.push(this.mutant(a));return c},expansion:function(){var a=this,b=[];return this.state.forEach(function(c){b=b.concat(a.mutants(c))}),this.onExpand(),b},"static __SERMAT__":{identifier:"DistributionEstimation",serializer:function(a){return[a.__params__("mutantCount")]}}}),o.HarmonySearch=d(s,{constructor:function(a){s.call(this,a),e(this,a).number("harmonyProbability",{coerce:!0,defaultValue:.9,minimum:0,maximum:1}).number("adjustProbability",{coerce:!0,defaultValue:.5,minimum:0,maximum:1}).number("delta",{coerce:!0,defaultValue:1}).number("fretWidth",{coerce:!0,defaultValue:.01})},expansion:function(){var a=this,b=this.random,c=this.problem.elementModel(),d=c.map(function(c,d){if(b.randomBool(a.harmonyProbability)){var e=b.choice(a.state).values[d];if(b.randomBool(a.adjustProbability))if(c.discrete)e+=b.choice([-a.delta,a.delta]);else{var f=c.max-c.min;e+=b.random(-f,+f)*a.fretWidth}return e}return b.random(c.min,c.max)});return this.onExpand(),[this.problem.newElement(d)]},"static __SERMAT__":{identifier:"HarmonySearch",serializer:function(a){return[a.__params__("harmonyProbability","adjustProbability","delta","fretWidth")]}}}),o.DistributionEstimation=d(s,{constructor:function(a){s.call(this,a),e(this,a).integer("histogramWidth",{coerce:!0,defaultValue:10,minimum:2})},expansion:function(a){var c=this,d=isNaN(this.expansionRate)?.5:+this.expansionRate,e=this.histograms();return a=isNaN(a)?Math.floor(d*this.size):0|a,b.Iterable.repeat(null,a).map(function(){return c.elementFromHistograms(e)}).toArray()},histograms:function(){return t.histograms(this.state,this.histogramWidth,this.problem.elementModel().length)},"static histograms":function(a,b,c){var d=a.length,e=j.iterate(function(a){return a.slice()},j.repeat(0,b).toArray(),c).toArray();return a.forEach(function(a){a.values.forEach(function(c,d){var f=Math.min(b-1,Math.floor(a.values[d]*b));e[d][f]++})}),e.map(function(a){return a.map(function(a){return a/d})})},elementFromHistograms:function(a){return t.elementFromHistograms(a,this.problem,this.random)},"static elementFromHistograms":function(a,b,c){for(var d,e,f=a.length,g=new Array(f),h=0;f>h;++h){d=a[h],e=c.random();for(var i=0;i<=d.length;++i)if(i===d.length||(e-=d[i])<=0){g[h]=Math.min(1,Math.max(0,(i+c.random())/d.length));break}}return b.newElement(g)},"static histogramProblem":function(a,c,e){c=isNaN(c)?30:Math.max(1,0|c),e=isNaN(e)?10:Math.max(2,0|e);var g=(a.elementLength(),this.elementFromHistograms);return HistogramProblem=d(r,{elementLength:function h(){return h*e},evaluation:function(d){var e=this.mapping(d),h=b.Iterable.repeat(null,c).map(function(){return g(e,a,a.random)});return i.all(f(h).map(function(a){return i.when(a.evaluate())})).then(function(a){return f(a).sum()/a.length})},mapping:function(a){for(var b,c,d=[],g=0;g0?1:-1,(a-d)*e/2/b})})}))},gradientSimultaneousPerturbation:function(a,b){throw new Error("GradientDescent.gradientSimultaneousPerturbation() is not implemented!")},"static __SERMAT__":{identifier:"GradientDescent",serializer:function(a){return[a.__params__("delta")]}}});p.HelloWorld=d(r,{title:"Hello world",description:"Simple problem where each element is a string, and the optimization goes towards the target string.",constructor:function(a){r.call(this,a),e(this,a).string("target",{coerce:!0,defaultValue:"Hello world!"}),this.__target__=f(this.target).map(function(a){return a.charCodeAt(0)}).toArray(),this.__elementModel__=j.repeat({min:32,max:127,discrete:!0},this.target.length).toArray()},mapping:function(a){return a.values.map(function(a){return String.fromCharCode(Math.floor(a))}).join("")},evaluation:function(a){return a.manhattanDistance(this.__target__,a.values)},compare:r.prototype.minimization,sufficientElement:function(a){return this.mapping(a)===this.target},"static __SERMAT__":{identifier:"HelloWorld",serializer:function(a){return[a.__params__("target")]}}});var u=p.TestBed=d(r,{constructor:function(a){r.call(this,a),this.title=a.title;var b=isNaN(a.minimumValue)?-1e6:+a.minimumValue,c=isNaN(a.maximumValue)?1e6:+a.maximumValue,d=isNaN(a.length)?2:+a.length;this.__elementModel__=j.repeat({min:b,max:c,discrete:!!a.discreteDomain},d).toArray(),this.evaluation=function(b){return a.evaluation(b.values)},a.hasOwnProperty("optimumValue")&&(this.sufficientElement=function(b){return Math.abs(b.evaluation-a.optimumValue)i;++i)e=a[i],f+=e*e,g+=Math.cos(d*e);return-b*Math.exp(-c*Math.sqrt(f/h))-Math.exp(g/h)+b+Math.exp(1)}})},crossInTray:function(a){return a=isNaN(a)?-(1/0):+a,new u({title:"cross-in-tray testbed",length:2,objectives:a,minimumValue:-10,maximumValue:10,evaluation:function(a){var b=a[0],c=a[1];return-1e-4*Math.pow(Math.abs(Math.sin(b)*Math.sin(c)*Math.exp(Math.abs(100-Math.sqrt(b*b+c*c)/Math.PI)))+1,.1)}})},Griewank:function(a){return new u({title:"Griewank testbed",length:a,minimumValue:-600,maximumValue:600,optimumValue:0,evaluation:function(a){for(var b,c=0,d=1,e=a.length,f=0;e>f;++f)b=a[f],c+=b*b/4e3,d*=Math.cos(b/Math.sqrt(f+1));return c-d+1}})},Levy:function(a){return new u({title:"Levy testbed",length:a,objectives:-(1/0),minimumValue:-10,maximumValue:10,optimumValue:0,evaluation:function(a){for(var b,c=0,d=a.length,e=1+(a[0]-1)/4,f=1+(a[d-1]-1)/4,g=1;d-1>g;++g)b=1+(a[g]-1)/4,c+=Math.pow(b-1,2)*(1+10*Math.pow(Math.sin(Math.PI*b+1),2));return Math.pow(Math.sin(Math.PI*e),2)+c+Math.pow(f-1,2)*(1+Math.pow(Math.sin(2*Math.PI*f),2))}})},Michalewicz:function(a,b){return b=isNaN(b)?10:+b,new u({title:"Michalewicz testbed",length:a,objectives:-(1/0),minimumValue:0,maximumValue:Math.PI,evaluation:function(a){for(var c,d=0,e=a.length,f=0;e>f;++f)c=a[f],d+=Math.sin(c)*Math.pow(Math.sin((f+1)*c*c/Math.PI),2*b);return-d}})},perm0:function(a,b){return a=isNaN(a)?2:Math.min(1,0|a),b=isNaN(b)?0:+b,new u({title:"Perm(0,"+a+","+b+") testbed",length:a,objectives:-(1/0),minimumValue:-a,maximumValue:+a,optimumValue:0,evaluation:function(c){for(var d,e=0,f=0;a>f;++f){d=0;for(var g=0;a>g;++g)d+=(g+1+b)*(Math.pow(c[g],f+1)-Math.pow(1/(g+1),f+1));e+=d*d}return e}})},Rastrigin:function(a){return new u({title:"Rastrigin testbed",length:a,objectives:-(1/0),minimumValue:-5.12,maximumValue:5.12,optimumValue:0,evaluation:function(a){for(var b,c=0,d=a.length,e=0;d>e;++e)b=a[e],c+=b*b-10*Math.cos(2*Math.PI*b);return 10*d+c}})},Rosenbrock:function(a,b,c){return b=isNaN(b)?1:+b,c=isNaN(c)?100:+c,new u({title:"Rosenbrock testbed",length:a,objectives:-(1/0),optimumValue:0,evaluation:function(a){for(var d=0,e=1;ee;++e)b=a[e],c+=b*Math.sin(Math.sqrt(Math.abs(b)));return 418.9829*d-c}})},sphere:function(a){return new u({title:"sphere testbed",length:a,objectives:-(1/0),optimumValue:0,evaluation:function(a){for(var b=0,c=0;cd;++d)b+=a[d];return b}})},ZDT1:function(a){return a=isNaN(a)?30:Math.max(1,0|a),new u({title:"Zitzler-Deb-Thiele function 1",length:a,objectives:[-(1/0),-(1/0)],minimumValue:0,maximumValue:1,evaluation:function(a){var b=a[0],c=f(a).tail().sum()/(a.length-1)*9,d=1-Math.sqrt(b/c);return[b,c*d]}})},ZDT2:function(a){return a=isNaN(a)?30:Math.max(1,0|a),new u({title:"Zitzler-Deb-Thiele function 2",length:a,objectives:[-(1/0),-(1/0)],minimumValue:0,maximumValue:1,evaluation:function(a){var b=a[0],c=f(a).tail().sum()/(a.length-1)*9,d=1-Math.pow(b/c,2);return[b,c*d]}})},ZDT3:function(a){return a=isNaN(a)?30:Math.max(1,0|a),new u({title:"Zitzler-Deb-Thiele function 3",length:a,objectives:[-(1/0),-(1/0)],minimumValue:0,maximumValue:1,evaluation:function(a){var b=a[0],c=f(a).tail().sum()/(a.length-1)*9,d=1-Math.sqrt(b/c)-b/c*Math.sin(10*Math.PI*b);return[b,c*d]}})}},p.NQueensPuzzle=d(r,{title:"N-queens puzzle",description:"Generalized version of the classic problem of placing 8 chess queens on an 8x8 chessboard so that no two queens attack each other.",constructor:function(a){r.call(this,a),e(this,a).integer("N",{coerce:!0,defaultValue:8}),this.__rowRange__=j.range(this.N).toArray(),this.__elementModel__=j.repeat({min:0,max:this.N-1,discrete:!0},this.N-1).toArray()},mapping:function(a){return a.setMapping(this.__rowRange__)},evaluation:function(a){var b=this.mapping(a),c=0;return b.forEach(function(a,d){for(var e=1;d+eproblem.limit?-d:d},compare:r.prototype.maximization,"static __SERMAT__":{identifier:"KnapsackProblem",serializer:function(a){return[a.__params__("limit","amount","items")]}}});p.AssociationRuleLearning=d(r,{constructor:function(a){r.call(this,a),e(this,a).object("dataset",{defaultValue:[]}).array("keys"),this.__elementModel__=j.repeat({min:0,max:2,discrete:!0},this.keys.length).toArray()},mapping:function(a){var b=this,c=[],d=[];return a.values.forEach(function(a,e){switch(a){case 1:c.push(b.keys[e]);break;case 2:d.push(b.keys[e])}}),{antecedent:c,consequent:d}},keysComply:function(a,b){var c=f(a);return!c.isEmpty()&&c.all(function(a){return!!b[a]})},antecedentComplies:function(a,b){return this.keysComply(a.antecedent,b)},consequentComplies:function(a,b){return this.keysComply(a.consequent,b)},measures:function(a){var b=this,c={},d=0,e=0,g=0,h=0,i=this.mapping(a);return f(this.dataset).forEach(function(a){b.antecedentComplies(i,a)?(++e,b.consequentComplies(i,a)&&(++g,++h)):b.consequentComplies(i,a)&&++g,++d}),c.antecedentCount=e,c.consequentCount=g,c.ruleCount=h,c.antecedentSupport=d>0?e/d:0,c.consequentSupport=d>0?g/d:0,c.ruleSupport=d>0?h/d:0,c.confidence=e>0?h/e:0,c.lift=c.consequentSupport>0?c.confidence/c.consequentSupport:0,c.conviction=c.consequentSupport>0&&c.confidence<1?(1-c.consequentSupport)/(1-c.confidence):0,c.leverage=c.ruleSupport-c.antecedentSupport*c.consequentSupport,c},evaluation:function(a){return a.__measures__||(a.__measures__=this.measures(a)),a.__measures__.confidence}});return b.Iterable.chain(n,o,p).forEachApply(function(a,b){"function"==typeof b&&b.__SERMAT__&&b.__SERMAT__.identifier&&(b.__SERMAT__.identifier=n.__package__+"."+b.__SERMAT__.identifier,n.__SERMAT__.include.push(b))}),n}); //# sourceMappingURL=inveniemus.min.js.map \ No newline at end of file diff --git a/build/inveniemus.min.js.map b/build/inveniemus.min.js.map index 564f803..565320b 100644 --- a/build/inveniemus.min.js.map +++ b/build/inveniemus.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/__prologue__.js","../src/Element.js","../src/Problem.js","../src/Metaheuristic.js","../src/metaheuristics/DistributionEstimation.js","../src/metaheuristics/HillClimbing.js","../src/metaheuristics/GeneticAlgorithm.js","../src/metaheuristics/BeamSearch.js","../src/metaheuristics/SimulatedAnnealing.js","../src/metaheuristics/ParticleSwarm.js","../src/metaheuristics/DifferentialEvolution.js","../src/metaheuristics/EvolutionStrategy.js","../src/metaheuristics/HarmonySearch.js","../src/metaheuristics/GradientDescent.js","../src/problems/HelloWorld.js","../src/problems/testbeds.js","../src/problems/NQueensPuzzle.js","../src/problems/KnapsackProblem.js","../src/problems/associationRules.js","../src/__epilogue__.js"],"names":["global","init","define","amd","module","exports","require","inveniemus","base","this","__init__","clamp","value","min","max","Math","declare","initialize","iterable","raiseIf","Events","Future","Iterable","Logger","Randomness","Statistics","__package__","__name__","__dependencies__","__SERMAT__","include","metaheuristics","problems","Element","constructor","problem","values","evaluation","model","elementModel","map","i","range","isNaN","discrete","random","randomInt","suffices","sufficientElement","emblem","evaluate","elem","then","e","hammingDistance","array1","array2","zip","filter","pair","count","manhattanDistance","abs","sum","euclideanDistance","sqrt","pow","rootMeanSquaredError","f","data","length","error","datum","apply","slice","neighbourhood","radius","neighbours","forEach","d","Array","isArray","v","push","modification","newValues","arguments","mapping","rangeMapping","args","lastRange","rangeFrom","rangeTo","normalizedValues","arrayMapping","lastItems","items","index","floor","setMapping","full","result","splice","clone","equals","other","len","toString","name","JSON","stringify","static __SERMAT__","identifier","serializer","obj","Problem","params","string","coerce","defaultValue","object","DEFAULT","hasOwnProperty","objectives","Infinity","__elementModel__","repeat","toArray","newElement","element","elements","reevaluate","async","__isFuture__","all","sufficientElements","compare","element1","element2","singleObjectiveComparison","paretoComparison","objective","value1","value2","values1","values2","worse","better","mapApply","r","domination","NaN","title","__params__","self","ids","concat","prototype","call","id","Metaheuristic","logger","ROOT","number","array","integer","ignore","events","__log__","level","initiate","size","state","onInitiate","update","mh","expand","sieve","onUpdate","expansion","onExpand","expansionRate","elems","evalTime","statistics","stat","key","startTime","results","sort","addTime","onEvaluate","multiObjectiveSort","bind","reverse","onSieve","finished","step","steps","analyze","stat_evaluation","add","stats_evaluation","_","stat_dominators","stat_dominated","pareto","dominators","dominated","onAnalyze","advance","stepTime","reset","onAdvance","run","continues","doWhile","onFinish","nub","precision","e1","e2","emit","paretoAnalysis","i1","i2","elem1","elem2","nonDominatedSort","crowdingDistance","j","es","strengthParetoSort","strength","dominator","DistributionEstimation","HillClimbing","localOptima","delta","best","__localOptima__","atLocalOptima","GeneticAlgorithm","minimum","maximum","func","selections","rankSelection","crossovers","singlepointCrossover","mutations","singlepointUniformMutation","parents","childs","child","newElements","selection","crossover","randomBool","mutationRate","mutation","static selections","randoms","selected","x","y","shift","rouletteSelection","evaluationStat","stochasticUniversalSamplingSelection","totalFitness","select","p","iterate","pointer","static crossovers","cut","values0","twopointCrossover","cut1","cut2","uniformCrossover","elementLength","choice","static mutations","uniformMutation","maxPoints","times","singlepointBiasedMutation","recombinationMutation","v1","BeamSearch","successors","allSuccessors","SimulatedAnnealing","coolingSchedule","linear","randomNeighbour","acceptance","current","neighbour","temp","temperature","exp","maximumTemperature","minimumTemperature","acceptanceStat","temperatureStat","ParticleSwarm","__velocity__","__localBest__","nextVelocity","globalBest","velocity","localBest","localCoef","localAcceleration","globalCoef","globalAcceleration","inertia","nextElement","nextValues","__globalBest__","DifferentialEvolution","elementIndex","stateCopy","choices","a","b","c","randomIndex","crossoverProbability","differentialWeight","EvolutionStrategy","mutant","mutants","mutantCount","HarmonySearch","harmonyProbability","adjustProbability","span","fretWidth","histograms","elementFromHistograms","histogramWidth","static histograms","histogramCount","counts","bar","static elementFromHistograms","histogram","static histogramProblem","HistogramProblem","when","evaluations","GradientDescent","gradient","gradientFiniteDifferences","rate","estimatorWidth","gradientValue","width","left","right","leftEvaluation","rightEvaluation","comp","gradientSimultaneousPerturbation","Error","HelloWorld","description","__target__","target","charCodeAt","String","fromCharCode","join","minimization","TestBed","spec","minimumValue","maximumValue","discreteDomain","optimumValue","resolution","testbeds","Ackley","PI","vs","term1","term2","cos","crossInTray","sin","Griewank","prod","Levy","w","w1","wd","Michalewicz","m","perm0","beta","sum2","sum1","Rastrigin","Rosenbrock","Schwefel","sphere","sumOptimization","ZDT1","f1","g","tail","h","ZDT2","ZDT3","NQueensPuzzle","__rowRange__","N","rows","row","KnapsackProblem","itemA","cost","worth","itemB","itemC","itemD","itemE","__elementItems__","Object","keys","amount","toObject","forEachApply","item","limit","maximization","AssociationRuleLearning","antecedent","consequent","keysComply","record","it","isEmpty","antecedentComplies","rule","consequentComplies","measures","totalCount","antecedentCount","consequentCount","ruleCount","dataset","antecedentSupport","consequentSupport","ruleSupport","confidence","lift","conviction","leverage","__measures__","chain","def"],"mappings":"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","file":"inveniemus.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/__prologue__.js","../src/Element.js","../src/Problem.js","../src/Metaheuristic.js","../src/metaheuristics/DistributionEstimation.js","../src/metaheuristics/HillClimbing.js","../src/metaheuristics/GeneticAlgorithm.js","../src/metaheuristics/BeamSearch.js","../src/metaheuristics/SimulatedAnnealing.js","../src/metaheuristics/ParticleSwarm.js","../src/metaheuristics/DifferentialEvolution.js","../src/metaheuristics/EvolutionStrategy.js","../src/metaheuristics/HarmonySearch.js","../src/metaheuristics/GradientDescent.js","../src/problems/HelloWorld.js","../src/problems/testbeds.js","../src/problems/NQueensPuzzle.js","../src/problems/KnapsackProblem.js","../src/problems/associationRules.js","../src/__epilogue__.js"],"names":["global","init","define","amd","module","exports","require","inveniemus","base","this","__init__","clamp","value","min","max","Math","declare","initialize","iterable","raiseIf","Events","Future","Iterable","Logger","Randomness","Statistics","__package__","__name__","__dependencies__","__SERMAT__","include","metaheuristics","problems","Element","constructor","problem","values","evaluation","model","elementModel","map","i","range","isNaN","discrete","random","randomInt","suffices","sufficientElement","emblem","evaluate","elem","then","e","hammingDistance","array1","array2","zip","filter","pair","count","manhattanDistance","abs","sum","euclideanDistance","sqrt","pow","rootMeanSquaredError","f","data","length","error","datum","apply","slice","neighbourhood","radius","neighbours","forEach","d","Array","isArray","v","push","modification","newValues","arguments","mapping","rangeMapping","args","lastRange","rangeFrom","rangeTo","normalizedValues","arrayMapping","lastItems","items","index","floor","setMapping","full","result","splice","clone","equals","other","len","toString","name","JSON","stringify","static __SERMAT__","identifier","serializer","obj","Problem","params","string","coerce","defaultValue","object","DEFAULT","hasOwnProperty","objectives","Infinity","__elementModel__","repeat","toArray","newElement","element","elements","reevaluate","async","__isFuture__","all","sufficientElements","compare","element1","element2","singleObjectiveComparison","paretoComparison","objective","value1","value2","values1","values2","worse","better","mapApply","r","domination","NaN","title","__params__","self","ids","concat","prototype","call","id","Metaheuristic","logger","ROOT","number","array","integer","ignore","events","__log__","level","initiate","size","state","onInitiate","update","mh","expand","sieve","onUpdate","expansion","onExpand","expansionRate","elems","evalTime","statistics","stat","key","startTime","results","sort","addTime","onEvaluate","multiObjectiveSort","bind","reverse","onSieve","finished","step","steps","analyze","stat_evaluation","add","stats_evaluation","_","stat_dominators","stat_dominated","pareto","dominators","dominated","onAnalyze","advance","stepTime","reset","onAdvance","run","continues","doWhile","onFinish","nub","precision","e1","e2","emit","paretoAnalysis","i1","i2","elem1","elem2","nonDominatedSort","crowdingDistance","j","es","strengthParetoSort","strength","dominator","DistributionEstimation","HillClimbing","localOptima","delta","best","__localOptima__","atLocalOptima","GeneticAlgorithm","minimum","maximum","func","selections","rankSelection","crossovers","singlepointCrossover","mutations","singlepointUniformMutation","parents","childs","child","newElements","selection","crossover","randomBool","mutationRate","mutation","static selections","randoms","selected","x","y","shift","rouletteSelection","evaluationStat","stochasticUniversalSamplingSelection","totalFitness","select","p","iterate","pointer","static crossovers","cut","values0","twopointCrossover","cut1","cut2","uniformCrossover","elementLength","choice","static mutations","uniformMutation","maxPoints","times","singlepointBiasedMutation","recombinationMutation","v1","BeamSearch","successors","allSuccessors","SimulatedAnnealing","coolingSchedule","linear","randomNeighbour","acceptance","current","neighbour","temp","temperature","exp","maximumTemperature","minimumTemperature","acceptanceStat","temperatureStat","ParticleSwarm","__velocity__","__localBest__","nextVelocity","globalBest","velocity","localBest","localCoef","localAcceleration","globalCoef","globalAcceleration","inertia","nextElement","nextValues","__globalBest__","DifferentialEvolution","elementIndex","stateCopy","choices","a","b","c","randomIndex","crossoverProbability","differentialWeight","EvolutionStrategy","mutant","mutants","mutantCount","HarmonySearch","harmonyProbability","adjustProbability","span","fretWidth","histograms","elementFromHistograms","histogramWidth","static histograms","histogramCount","counts","bar","static elementFromHistograms","histogram","static histogramProblem","HistogramProblem","when","evaluations","GradientDescent","gradient","gradientFiniteDifferences","rate","estimatorWidth","gradientValue","width","left","right","leftEvaluation","rightEvaluation","comp","gradientSimultaneousPerturbation","Error","HelloWorld","description","__target__","target","charCodeAt","String","fromCharCode","join","minimization","TestBed","spec","minimumValue","maximumValue","discreteDomain","optimumValue","resolution","testbeds","Ackley","PI","vs","term1","term2","cos","crossInTray","sin","Griewank","prod","Levy","w","w1","wd","Michalewicz","m","perm0","beta","sum2","sum1","Rastrigin","Rosenbrock","Schwefel","sphere","sumOptimization","ZDT1","f1","g","tail","h","ZDT2","ZDT3","NQueensPuzzle","__rowRange__","N","rows","row","KnapsackProblem","itemA","cost","worth","itemB","itemC","itemD","itemE","__elementItems__","Object","keys","amount","toObject","forEachApply","item","limit","maximization","AssociationRuleLearning","antecedent","consequent","keysComply","record","it","isEmpty","antecedentComplies","rule","consequentComplies","measures","totalCount","antecedentCount","consequentCount","ruleCount","dataset","antecedentSupport","consequentSupport","ruleSupport","confidence","lift","conviction","leverage","__measures__","chain","def"],"mappings":"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","file":"inveniemus.min.js"} \ No newline at end of file diff --git a/package.json b/package.json index 38631b2..7e06679 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "search", "optimization", "metaheuristic", "hill climbing", "evolutionary computing", "genetic algorithm" ], - "version": "0.1.4", + "version": "0.1.5", "author": { "name": "Leonardo Val", "email": "leonardo.val@creatartis.com>" @@ -45,6 +45,7 @@ "grunt-karma": "~1.0.0", "karma": "~0.13.0", "karma-jasmine": "~1.0.0", + "jasmine-core": "~2.4.0", "karma-requirejs": "~1.0.0", "karma-chrome-launcher": "~1.0.0", "karma-firefox-launcher": "~1.0.0", diff --git a/tests/lib/inveniemus.js b/tests/lib/inveniemus.js index 481deb8..bb9f576 100644 --- a/tests/lib/inveniemus.js +++ b/tests/lib/inveniemus.js @@ -382,8 +382,8 @@ var Problem = exports.Problem = declare({ var result = element.evaluate(); async = async || Future.__isFuture__(result); return result; - }); - return async ? Future.all(elements) : elements.toArray(); + }).toArray(); + return async ? Future.all(elements) : elements; }, /** Usually a numbers array is just too abstract to handle, and another representation of the diff --git a/tests/lib/inveniemus.js.map b/tests/lib/inveniemus.js.map index b914d0e..84edb9b 100644 --- a/tests/lib/inveniemus.js.map +++ b/tests/lib/inveniemus.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/__prologue__.js","../src/Element.js","../src/Problem.js","../src/Metaheuristic.js","../src/metaheuristics/HillClimbing.js","../src/metaheuristics/GeneticAlgorithm.js","../src/metaheuristics/BeamSearch.js","../src/metaheuristics/SimulatedAnnealing.js","../src/metaheuristics/ParticleSwarm.js","../src/metaheuristics/DifferentialEvolution.js","../src/metaheuristics/EvolutionStrategy.js","../src/metaheuristics/HarmonySearch.js","../src/metaheuristics/DistributionEstimation.js","../src/metaheuristics/GradientDescent.js","../src/problems/HelloWorld.js","../src/problems/testbeds.js","../src/problems/NQueensPuzzle.js","../src/problems/KnapsackProblem.js","../src/problems/associationRules.js","../src/__epilogue__.js"],"names":[],"mappings":"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","file":"inveniemus.js","sourcesContent":["/** Package wrapper and layout.\n*/\n(function (global, init) { \"use strict\"; // Universal Module Definition.\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(['creatartis-base'], init); // AMD module.\n\t} else if (typeof module === 'object' && module.exports) {\n\t\tmodule.exports = init(require('creatartis-base')); // CommonJS module.\n\t} else { // Browser or web worker (probably).\n\t\tglobal.inveniemus = init(global.base);\n\t}\n})(this, function __init__(base){ \"use strict\";\n// Import synonyms. ////////////////////////////////////////////////////////////////////////////////\n\tvar declare = base.declare,\n\t\tinitialize = base.initialize,\n\t\titerable = base.iterable,\n\t\traiseIf = base.raiseIf,\n\t\tEvents = base.Events,\n\t\tFuture = base.Future,\n\t\tIterable = base.Iterable,\n\t\tLogger = base.Logger,\n\t\tRandomness = base.Randomness,\n\t\tStatistics = base.Statistics;\n\t\n// Library layout. /////////////////////////////////////////////////////////////////////////////////\n\tvar exports = {\n\t\t__package__: 'inveniemus',\n\t\t__name__: 'inveniemus',\n\t\t__init__: __init__,\n\t\t__dependencies__: [base],\n\t\t__SERMAT__: { include: [] },\n\t/** `metaheuristics` is a bundle of available metaheuristics.\n\t*/\t\n\t\tmetaheuristics: {},\n\t/** `problems` is a bundle of classic and reference problems.\n\t*/\n\t\tproblems: {}\n\t};\n\tvar metaheuristics = exports.metaheuristics,\n\t\tproblems = exports.problems;\n\n// Utility functions. //////////////////////////////////////////////////////////////////////////////\n\nfunction clamp(value, min, max) {\n\treturn Math.max(min, Math.min(max, value));\n}","/**\t# Element\n\nElement is the term used in Inveniemus for representations of \n[candidate solutions](http://en.wikipedia.org/wiki/Feasible_region) in a search or optimization \n[problem](Problem.js.html). Implementations may declare their own subclass of `Element` to represent\ntheir candidate solutions.\n*/\nvar Element = exports.Element = declare({\n\t/** All elements are defined by a `problem`, an array of numbers (i.e. the element's `values`, \n\trandom numbers by default) and an `evaluation` (`NaN` by default). The element's values are \n\tcoerced to be in the range provided by the problem's element model.\n\t\n\tThe `values` store all data about the candidate solution this element represents. This may \n\tappear to abstract and stark, but it helps to separate the problem definition from the search\n\tor optimization strategy.\n\t\n\tThe element's `evaluation` is a numerical assessment of the represented candidate solution. \n\tUsually is a measure of how well the problem is solved, or how close the element is to a real \n\tsolution. It guides almost all of the metaheuristics.\n\t*/\n\tconstructor: function Element(problem, values, evaluation) {\n\t\tthis.problem = problem;\n\t\tvar model = problem.elementModel();\n\t\tif (!values) {\n\t\t\tthis.values = model.map(function (range) {\n\t\t\t\tif (range.discrete) {\n\t\t\t\t\treturn problem.random.randomInt(range.min, range.max + 1);\n\t\t\t\t} else {\n\t\t\t\t\treturn problem.random.random(range.min, range.max);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tthis.values = values.map(function (value, i) {\n\t\t\t\tvar range = model[i];\n\t\t\t\traiseIf(isNaN(value), \"Value #\", i, \" for element is NaN!\");\n\t\t\t\tvalue = clamp(+value, range.min, range.max);\n\t\t\t\treturn value;\n\t\t\t});\n\t\t}\n\t\tthis.evaluation = evaluation;\n\t},\n\t\n\t/** Whether this element is an actual solution or not is decided by `suffices()`. It holds the \n\timplementation of the goal test in search problems. More complex criteria may be implemented in \n\t`Problem.suffices`. By default it returns false.\n\t*/\n\tsuffices: function suffices() {\n\t\treturn this.problem.sufficientElement(this);\n\t},\n\n\t/** The `emblem` of an element is a string that represents it and can be displayed to the user. \n\tBy default returns the string conversion of the element.\n\t*/\n\temblem: function emblem() {\n\t\treturn this +'';\n\t},\n\n\t// ## Evaluations ##############################################################################\n\n\t/** The element's `evaluation` is calculated by `evaluate()`, which assigns and returns this \n\tnumber. It may return a promise if the evaluation has to be done asynchronously. This can be \n\tinterpreted as the solution's cost in a search problem or the target function of an optimization \n\tproblem. The default behaviour is adding up this element's values, useful only for testing.\n\t*/\n\tevaluate: function evaluate() {\n\t\tvar elem = this;\n\t\treturn Future.then(this.problem.evaluation(this), function (e) {\n\t\t\telem.evaluation = e;\n\t\t\treturn e;\n\t\t});\n\t},\n\t\n\t/** The [Hamming distance](http://en.wikipedia.org/wiki/Hamming_distance) between two arrays is \n\tthe number of positions at which corresponding components are different. Arrays are assumed to \n\tbe of the same length. If they are not, only the common parts are considered.\n\t*/\n\thammingDistance: function hammingDistance(array1, array2) {\n\t\treturn iterable(array1).zip(array2).filter(function (pair) {\n\t\t\treturn pair[0] != pair[1];\n\t\t}).count();\n\t},\n\n\t/** The [Manhattan distance](http://en.wikipedia.org/wiki/Manhattan_distance) between two arrays \n\tis the sum of the absolute differences of corresponding positions.\n\t*/\n\tmanhattanDistance: function manhattanDistance(array1, array2) {\n\t\treturn iterable(array1).zip(array2).map(function (pair) {\n\t\t\treturn Math.abs(pair[0] - pair[1]);\n\t\t}).sum();\n\t},\n\n\t/** The [euclidean distance](http://en.wikipedia.org/wiki/Euclidean_distance) between two arrays \n\tis another option for evaluation.\n\t*/\n\teuclideanDistance: function euclideanDistance(array1, array2) {\n\t\treturn Math.sqrt(iterable(array1).zip(array2).map(function (pair) {\n\t\t\treturn Math.pow(pair[0] - pair[1], 2);\n\t\t}).sum());\n\t},\n\n\t/** Another common evaluation is the [root mean squared error](http://en.wikipedia.org/wiki/Root_mean_squared_error).\n\tThe method `rootMeanSquaredError` takes a function `f` (usually a mapping of this element) and \n\tsome `data`. This `data` must be an iterable of arrays, in which the first element is the \n\texpected result and the rest are the arguments for the function.\n\t*/\n\trootMeanSquaredError: function rootMeanSquaredError(f, data) {\n\t\tvar length = 0,\n\t\t\terror = iterable(data).map(function (datum) {\n\t\t\t\tlength++;\n\t\t\t\treturn Math.pow(datum[0] - f.apply(this, datum.slice(1)), 2);\n\t\t\t}).sum();\n\t\treturn length === 0 ? 0 : Math.sqrt(error / length);\n\t},\n\n\t// ## Expansions ###############################################################################\n\t\n\t/** An element's `neighbourhood` is a set of new elements, with values belonging to the n \n\tdimensional ball around this element's values with the given `radius` (1% by default). \n\t*/\n\tneighbourhood: function neighbourhood(radius) {\n\t\tvar elem = this,\n\t\t\tneighbours = [],\n\t\t\tmodel = this.problem.elementModel();\n\t\tthis.values.forEach(function (value, i) {\n\t\t\tvar range = model[i],\n\t\t\t\td = Array.isArray(radius) ? radius[i] : !isNaN(radius) ? radius : range.discrete ? 1 : 0.1,\n\t\t\t\tv = value + d;\n\t\t\tif (v <= range.max) {\n\t\t\t\tneighbours.push(elem.modification(i, v));\n\t\t\t}\n\t\t\tv = value - d;\n\t\t\tif (v >= range.min) {\n\t\t\t\tneighbours.push(elem.modification(i, v));\n\t\t\t}\n\t\t});\n\t\treturn neighbours;\n\t},\n\t\n\t/** The method `modification(index, value, ...)` returns a new and unevaluated copy of this \n\telement, with its values modified as specified. Values are always coerced to the [0,1] range.\n\t*/\n\tmodification: function modification() {\n\t\tvar newValues = this.values.slice(),\n\t\t\tmodel = this.problem.elementModel(),\n\t\t\trange, i, v;\n\t\tfor (i = 0; i < arguments.length; i += 2) {\n\t\t\tv = +arguments[i + 1];\n\t\t\traiseIf(isNaN(v), \"Invalid value \", v, \" for element!\");\n\t\t\trange = model[i];\n\t\t\tv = clamp(v, range.min, range.max);\n\t\t\tnewValues[arguments[i] |0] = v;\n\t\t}\n\t\treturn new this.constructor(this.problem, newValues);\n\t},\n\t\n\t// ## Mappings #################################################################################\n\t\n\t/** Gives an alternate representation of this element. See `Problem.mapping()`.\n\t*/\n\tmapping: function mapping() {\n\t\treturn this.problem.mapping(this);\n\t},\n\t\n\t/** A range mapping builds an array of equal length of this element's `values`. Each value is \n\ttranslated from the element model's range to the given range.\n\t*/\n\trangeMapping: function rangeMapping() {\n\t\tvar args = arguments,\n\t\t\tmodel = this.problem.elementModel(),\n\t\t\tlastRange = args[args.length - 1];\n\t\traiseIf(args.length < 1, \"Element.rangeMapping() expects at least one argument!\");\n\t\treturn this.values.map(function (v, i) {\n\t\t\tvar rangeFrom = model[i],\n\t\t\t\trangeTo = args.length > i ? args[i] : lastRange;\n\t\t\tv = (v - rangeFrom.min) / (rangeFrom.max - rangeFrom.min) * (rangeTo[1] - rangeTo[0]) + rangeTo[0];\n\t\t\treturn clamp(v, rangeTo[0], rangeTo[1]);\n\t\t});\n\t},\n\t\n\t/** The `normalizedValues` of an element is a mapping to the range [0,1].\n\t*/\n\tnormalizedValues: function normalizedValues() {\n\t\treturn this.rangeMapping([0, 1]);\n\t},\n\t\n\t/** An array mapping builds an array of equal length of this element's `values`. Each value is \n\tused to index the corresponding items argument. If there are less arguments than the element's \n\t`length`, the last one is used for the rest of the values.\n\t*/\n\tarrayMapping: function arrayMapping() {\n\t\tvar args = arguments,\n\t\t\tlastItems = args[args.length - 1],\n\t\t\tmodel = this.problem.elementModel();\n\t\traiseIf(args.length < 1, \"Element.arrayMapping() expects at least one argument!\");\n\t\treturn this.values.map(function (v, i) {\n\t\t\tvar items = args.length > i ? args[i] : lastItems,\n\t\t\t\trange = model[i],\n\t\t\t\tindex = Math.floor((v - range.min) / (range.max - range.min) * items.length);\n\t\t\treturn items[index];\n\t\t});\n\t},\n\t\n\t/** A set mapping builds an array of equal length of this element's `values`. Each value is used \n\tto select one item. Items are not selected more than once.\n\t*/\n\tsetMapping: function setMapping(items, full) {\n\t\traiseIf(!Array.isArray(items), \"Element.setMapping() expects an array argument!\");\n\t\titems = items.slice(); // Shallow copy.\n\t\tvar result = this.normalizedValues().map(function (v, i) {\n\t\t\t\traiseIf(items.length < 1, \"Element.setMapping(): insufficient elements!\");\n\t\t\t\tvar index = clamp(Math.floor(v * items.length), 0, items.length - 1);\n\t\t\t\treturn items.splice(index, 1)[0];\n\t\t\t});\n\t\tif (full) {\n\t\t\traiseIf(items.length != 1, \"Element.setMapping(): wrong amount of elements!\");\n\t\t\tresult.push(items[0]);\n\t\t}\n\t\treturn result;\n\t},\n\t\n\t// ## Other utilities ##########################################################################\n\n\t/** A `clone` is a copy of this element.\n\t*/\n\tclone: function clone() {\n\t\treturn new this.constructor(this.problem, this.values, this.evaluation);\n\t},\n\t\n\t/** Two elements can be compared with `equals(other)`. It checks if the other element has the \n\tsame values and constructor than this one.\n\t*/\n\tequals: function equals(other) {\n\t\tif (this.constructor === other.constructor && this.values.length === other.values.length) {\n\t\t\tfor (var i = 0, len = this.values.length; i < len; i++) {\n\t\t\t\tif (this.values[i] !== other.values[i]) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},\n\t\n\t/** The default string representation of an Element instance has this shape: \n\t`\"Element(values, evaluation)\"`.\n\t*/\n\ttoString: function toString() {\n\t\treturn \"<\"+ (this.constructor.name || 'Element') +\" \"+ JSON.stringify(this.values) +\" \"+ this.evaluation +\">\";\n\t},\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Element',\n\t\tserializer: function serialize_Element(obj) {\n\t\t\treturn [obj.problem, obj.values, obj.evaluation];\n\t\t}\n\t}\n}); // declare Element.\n","/**\t# Problem\n\nThe Problem type represents a search or optimization problem in Inveniemus.\n*/\nvar Problem = exports.Problem = declare({\n\t/** The problem constructor takes the following parameters:\t\n\t*/\n\tconstructor: function Problem(params) {\n\t\tparams = params || {};\n\t\tinitialize(this, params)\n\t\t\t/** + A `title` to be displayed to the user.\n\t\t\t*/\n\t\t\t.string('title', { coerce: true, defaultValue: this.constructor.name || \"\" })\n\t\t\t/** + A `description` of the problem to be displayed to the user may also be appreciated.\n\t\t\t*/\n\t\t\t.string('description', { coerce: true, defaultValue: \"\" })\n\t\t\t/** + A `random` number generator, required by many operations. By default \n\t\t\t\t`base.Randomness.DEFAULT` is used.\n\t\t\t*/\n\t\t\t.object('random', { defaultValue: Randomness.DEFAULT });\n\t\t/** + One or more `objectives`, which defines the mode of optimization. It may be either a\n\t\t\tnumber or array of numbers, where `-Infinity` means minimization (the default),\n\t\t\t`+Infinity` means maximization and a number means approximation to that value.\n\t\t*/\n\t\tvar objectives = params.hasOwnProperty('objectives') ? params.objectives : -Infinity;\n\t\tif (typeof params.objectives === 'number' && !isNaN(params.objectives)) {\n\t\t\tthis.objectives = [params.objectives];\n\t\t} else if (Array.isArray(params.objectives)) {\n\t\t\tthis.objectives = params.objectives;\n\t\t} else {\n\t\t\tthis.objectives = [-Infinity]; // Minimization is the default.\n\t\t}\n\t},\n\n\t/** The `elementModel` is an array of ranges, each an array of two numbers defining the minimum\n\tan maximum possible value of each position of every element in this problem. All elements should\n\talso be of the same length as the model.\n\t\n\tBy default, the method returns the `__elementModel__` property. It is inefficiency to recompute \n\tthis result every time, since it is required in many places.\n\t*/\n\t__elementModel__: Iterable.repeat({ min: 0, max: 1, discrete: false }, 10).toArray(),\n\t\n\telementModel: function elementModel() {\n\t\treturn this.__elementModel__;\n\t},\n\t\n\t/** Problem uses `Element` instances to represent its candidate solutions.\n\t*/\n\tnewElement: function newElement(values, evaluation) {\n\t\treturn new Element(this, values, evaluation);\n\t},\n\t\n\t/** The problem's elements must be evaluated somehow. This can be interpreted as the solution's \n\tcost in a search problem or the target function of an optimization problem. The default \n\tbehaviour is adding up this element's values, useful only for testing. It can return a future \n\tif the evaluation has to be done asynchronously. \n\t*/\n\tevaluation: function evaluation(element) {\n\t\treturn iterable(element.values).sum();\n\t},\n\t\n\t/** The `evaluate` method is used to assign an evaluation to all the given `elements`. By \n\tdefault it iterates over all elements and gets their evaluation using the `evaluation` method. \n\tIf `reevaluate` is false (the default), already evaluated elements are ignored. This method may \n\tbe overriden to make a relative evaluation scheme (e.g. in coevolution).\n\t*/\n\tevaluate: function evaluate(elements, reevaluate) {\n\t\tvar async = false;\n\t\telements = iterable(elements).filter(\n\t\t\tfunction (element) {\n\t\t\t\treturn reevaluate || isNaN(element.evaluation);\n\t\t\t},\n\t\t\tfunction (element) { // ... evaluate them.\n\t\t\t\tvar result = element.evaluate();\n\t\t\t\tasync = async || Future.__isFuture__(result);\n\t\t\t\treturn result;\n\t\t\t});\n\t\treturn async ? Future.all(elements) : elements.toArray();\n\t},\n\t\n\t/** Usually a numbers array is just too abstract to handle, and\tanother representation of the \n\tcandidate solution must be build. For this `mapping()` must be overridden to returns an \n\talternate representation of an element that may be fitter for evaluation or showing it to the\n\tuser. By default it just returns the same `values` array.\n\t*/\n\tmapping: function mapping(element) {\n\t\treturn element.values;\n\t},\n\t\n\t/** An element is `sufficient` when it can be considered a solution of a search or a good enough\n\tsolution of an optimization. By default it returns false.\n\t*/\n\tsufficientElement: function sufficientElement(element) {\n\t\treturn false;\n\t},\n\t\n\t/** When a set of elements is sufficient, the search/optimization ends. The method \n\t`suffices(elements)` returns `true` if inside the elements array there are enough actual \n\tsolutions to this problem. It holds the implementation of the goal test in search problems. By \n\tdefault calls the `suffice` method of the first element (assumed to be the best one).\n\t*/\n\tsufficientElements: function sufficientElements(elements) {\n\t\treturn this.sufficientElement(elements[0]);\n\t},\n\t\n\t// ## Optimization modes #######################################################################\n\t\n\t/** How elements are compared with each other in the problem determines which kind of \n\toptimization is performed. The `compare` method implements the comparison between two elements. \n\tIt returns a positive number if `element2` is better than `element1`, a negative number if \n\t`element2` is worse then `element1`, or zero otherwise. Better and worse may mean less or \n\tgreater evaluation (`minimization`), viceversa (`maximization`) or another criteria altogether.\n\t*/\n\tcompare: function compare(element1, element2) {\n\t\tif (this.objectives.length === 1) {\n\t\t\treturn this.singleObjectiveComparison(this.objectives[0], element1.evaluation, element2.evaluation);\n\t\t} else {\n\t\t\treturn this.paretoComparison(this.objectives, element1.evaluation, element2.evaluation);\n\t\t}\n\t},\n\t\n\t/** A single objective optimization has three modes, given by the `objective` parameter: \n\t*/\n\tsingleObjectiveComparison: function singleObjectiveComparison(objective, value1, value2) {\n\t\tvar d;\n\t\tswitch (objective) {\n\t\t\t/** + `-Infinity` means minimization. */\n\t\t\tcase -Infinity: {\n\t\t\t\td = value2 - value1;\n\t\t\t\treturn isNaN(d) ? Infinity : d;\n\t\t\t}\n\t\t\t/** + `+Infinity` means maximization. */\n\t\t\tcase +Infinity: {\n\t\t\t\td = value1 - value2;\n\t\t\t\treturn isNaN(d) ? -Infinity : d;\n\t\t\t}\n\t\t\t/** + An actual number means approximation to said value. */ \n\t\t\tdefault: {\n\t\t\t\td = Math.abs(value2 - objective) - Math.abs(value1 - objective);\n\t\t\t\treturn isNaN(d) ? Infinity : d;\n\t\t\t}\n\t\t}\n\t},\n\t\n\t/** The [Pareto efficiency](https://en.wikipedia.org/wiki/Pareto_efficiency) is frequently used \n\tin multiobjective optimizations, yet it is not a complete order. The `paretoComparison` method \n\ttakes an array of `objectives`, and two arrays of numbers to be compared. The result is an array \n\tof comparisons (-1, 0 or 1) with a `domination` property. If `domination` is:\n\t\n\t+ `< 0`: `element2` dominates `element1`.\n\t\n\t+ `> 0`: `element1` dominates `element2`.\n\t\n\t+ `= 0`: both elements are equally evaluated.\n\t\n\t+ `NaN`: elements could not be compared (i.e. their evaluations are different, but they do not \n\t\tdominate each other).\n\t*/\n\tparetoComparison: function paretoComparison(objectives, values1, values2) {\n\t\tvar worse = 0, better = 0,\n\t\t\tproblem = this,\n\t\t\tresult;\n\t\traiseIf(objectives.length !== values1.length, \"Expected \", objectives.length, \" evaluations, but got \", values1.length, \"!\");\n\t\traiseIf(objectives.length !== values2.length, \"Expected \", objectives.length, \" evaluations, but got \", values2.length, \"!\");\n\t\tresult = Iterable.zip(objectives, values1, values2).mapApply(function (objective, value1, value2) {\n\t\t\tvar r = problem.singleObjectiveComparison(objective, value1, value2);\n\t\t\tif (r < 0) {\n\t\t\t\tworse++;\n\t\t\t} else if (r > 0) {\n\t\t\t\tbetter++;\n\t\t\t}\n\t\t\treturn r;\n\t\t}).toArray();\n\t\tresult.domination = worse === 0 ? better : better === 0 ? -worse : NaN;\n\t\treturn result;\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** The default string representation of a Problem instance has this shape: \n\t`\"Problem(params)\"`.\n\t*/\n\ttoString: function toString() {\n\t\treturn \"<\"+ (this.constructor.name || 'Problem') +\" \"+ JSON.stringify(this.title) +\">\";\n\t},\n\t\n\t/** Returns a reconstruction of the parameters used in the construction of this instance.\n\t*/\n\t__params__: function __params__() {\n\t\tvar params = {},\n\t\t\tself = this,\n\t\t\tids = ['title', 'description'].concat(Array.prototype.slice.call(arguments));\n\t\tids.forEach(function (id) {\n\t\t\tif (self.hasOwnProperty(id)) {\n\t\t\t\tparams[id] = self[id];\n\t\t\t}\n\t\t});\n\t\tif (this.random !== Randomness.DEFAULT) {\n\t\t\tparams.random = this.random;\n\t\t}\n\t\treturn params;\n\t},\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Problem',\n\t\tserializer: function serialize_Problem(obj) {\n\t\t\treturn [obj.__params__()];\n\t\t}\n\t}\n}); // declare Problem.\n","/**\t# Metaheuristic\n\nA [Metaheuristic](http://en.wikipedia.org/wiki/Metaheuristic) is an optimization algorithm (which \ncan also be used for searching). This is the base class of all metaheuristic algorithms, and hence \nof all metaheuristic runs.\n*/\nvar Metaheuristic = exports.Metaheuristic = declare({\n\t/** Each metaheuristic has its own `logger`, to track its process.\n\t*/\n\tlogger: new Logger('inveniemus', Logger.ROOT, 'INFO'),\n\t\n\t/** The constructor takes a `params` object with the metaheuristic parameters. Although the \n\tdifferent algorithms have particular parameters of their own, some apply to all.\n\t*/\n\tconstructor: function Metaheuristic(params) {\n\t\tinitialize(this, params)\n\t\t/** First, the definition of the `problem` this metaheuristic is meant to solve.\n\t\t*/\n\t\t\t.object('problem', { defaultValue: null })\n\t\t/** The optimization's `size` is the amount of candidate solutions the metaheuristic treats \n\t\tat each step. By default it is 100.\n\t\t*/\n\t\t\t.number('size', { defaultValue: 100, coerce: true })\n\t\t/** The `state` is the array that holds the elements this metaheuristic handles at each step.\n\t\t*/\n\t\t\t.array('state', { defaultValue: [] })\n\t\t/** All optimizations perform a certain number of iterations or `steps` (100 by default).\n\t\t*/\n\t\t\t.number('steps', { defaultValue: 100, coerce: true })\n\t\t/** The property `step` indicates the current iteration of this optimization, or a negative \n\t\tnumber if it has not started yet.\n\t\t*/\n\t\t\t.integer('step', { defaultValue: -1, coerce: true })\n\t\t/** Most metaheuristic are stochastic processes, hence the need for a pseudo-random number \n\t\tgenerator. By default `base.Randomness.DEFAULT` is used, yet it is strongly advised to \n\t\tprovide one.\n\t\t*/\n\t\t\t.object('random', { defaultValue: Randomness.DEFAULT })\n\t\t/** Metaheuristic's runs usually gather `statistics` about the process.\n\t\t*/\n\t\t\t.object('statistics', { defaultValue: new Statistics() })\n\t\t\t.object('logger', { ignore: true });\n\t\tthis.events = new Events({ \n\t\t\tevents: [\"initiated\", \"updated\", \"expanded\", \"evaluated\", \"sieved\", \"advanced\", \"analyzed\", \"finished\"]\n\t\t});\n\t},\n\t\n\t__log__: function __log__(level) {\n\t\tif (this.logger) {\n\t\t\tthis.logger[level].apply(this.logger, arguments);\n\t\t}\n\t},\n\t\n\t// ## Basic workflow ###########################################################################\n\t\n\t/**\t`initiate(size=this.size)` builds and initiates this metaheuristic state with size new \n\tcursors. The elements are build using the `initial()` function.\n\t*/\n\tinitiate: function initiate(size) {\n\t\tsize = isNaN(size) ? this.size : +size >> 0;\n\t\tthis.state = new Array(size);\n\t\tfor (var i = 0; i < size; i++) {\n\t\t\tthis.state[i] = this.problem.newElement(); // Element with random values.\n\t\t}\n\t\tthis.onInitiate();\n\t},\n\t\n\t/** `update()` updates this metaheuristic's state. It assumes the state has been initialized. \n\tThe process may be asynchronous, so it returns a future. The default implementation first \n\texpands the state by calling `expand()`, then evaluates the added elements by calling \n\t`evaluate()`, and finally removes the worst elements with `sieve()`.\n\t*/\n\tupdate: function update() {\n\t\tvar mh = this;\n\t\tthis.expand();\n\t\treturn Future.then(this.evaluate(), function () {\n\t\t\tmh.sieve();\n\t\t\tmh.onUpdate();\n\t\t\treturn mh;\n\t\t});\n\t},\n\t\n\t/** `expand(expansion=[])` adds to this metaheuristic's state the given expansion. If none is \n\tgiven, `expansion()` is called to get new expansion.\n\t*/\n\texpand: function expand(expansion) {\n\t\texpansion = expansion || this.expansion();\n\t\tif (expansion.length < 1) {\n\t\t\tthis.__log__('warn', \"Expansion is empty\");\n\t\t} else {\n\t\t\tthis.state = this.state.concat(expansion);\n\t\t}\n\t\tthis.onExpand();\n\t},\n\t\n\t/** `expansion(size)` returns an array of new elements to add to the current state. The default \n\timplementation generates new random elements.\t\t\n\t*/\n\texpansion: function expansion(size) {\n\t\tvar expansionRate = isNaN(this.expansionRate) ? 0.5 : +this.expansionRate;\n\t\tsize = isNaN(size) ? Math.floor(expansionRate * this.size) : +size;\n\t\tvar elems = new Array(size), i;\n\t\tfor (i = 0; i < size; i++){\n\t\t\telems[i] = this.problem.newElement();\n\t\t}\n\t\treturn elems;\n\t},\n\t\n\t/** `evaluate(elements)` evaluates all the elements in `state` with no evaluation, using its \n\tevaluation method. After that sorts the state with the `compare` method of the problem. May \n\treturn a future, if any evaluation is asynchronous.\n\t*/\n\tevaluate: function evaluate(elements) {\n\t\tvar mh = this,\n\t\t\tevalTime = this.statistics && this.statistics.stat({key:'evaluation_time'});\n\t\tif (evalTime) evalTime.startTime();\n\t\telements = elements || this.state;\n\t\treturn Future.then(this.problem.evaluate(elements), function (results) {\n\t\t\telements = mh.sort(elements);\n\t\t\tif (evalTime) evalTime.addTime();\n\t\t\tmh.onEvaluate(results);\n\t\t\treturn elements;\n\t\t});\n\t},\n\t\n\t/** `sort(elements)` TODO\n\t*/\t\n\tsort: function sort(elements) {\n\t\telements = elements || this.state;\n\t\tif (this.problem.objectives.length > 1) { // Multi-objective optimization.\n\t\t\telements = this.multiObjectiveSort(elements);\n\t\t} else { // Single-objective optimization.\n\t\t\telements.sort(this.problem.compare.bind(this.problem));\n\t\t\telements.reverse();\n\t\t}\n\t\treturn elements;\n\t},\n\t\n\t/** `sieve(size=this.size)` cuts the current state down to the given size (or this.size by \n\tdefault). This is usually used after expanding and evaluating the state.\n\t*/\n\tsieve: function sieve(size) {\n\t\tsize = isNaN(size) ? this.size : Math.floor(size);\n\t\tif (this.state.length > size) {\n\t\t\tthis.state = this.state.slice(0, this.size);\n\t\t}\n\t\tthis.onSieve();\n\t},\n\t\n\t/** `finished()` termination criteria for this metaheuristic. By default it checks if the number \n\tof passed iterations is not greater than `steps`.\n\t*/\n\tfinished: function finished() {\n\t\treturn this.step >= this.steps || this.problem.sufficientElements(this.state);\n\t},\n\n\t/** `analyze()` updates the process' statistics.\n\t*/\n\tanalyze: function analyze(statistics) {\n\t\tstatistics = statistics || this.statistics;\n\t\tvar step = this.step;\n\t\tif (statistics) {\n\t\t\tif (typeof this.state[0].evaluation === 'number') { // Single-objective optimization.\n\t\t\t\tvar stat_evaluation = statistics.stat({ key:'evaluation', step: step });\n\t\t\t\tthis.state.forEach(function (element) {\n\t\t\t\t\tstat_evaluation.add(element.evaluation, element);\n\t\t\t\t});\n\t\t\t} else if (Array.isArray(this.state[0].evaluation)) { // Multi-objective optimization.\n\t\t\t\tvar stats_evaluation = this.state[0].evaluation.map(function (_, i) {\n\t\t\t\t\t\treturn statistics.stat({ key:'evaluation', index: i, step: step });\n\t\t\t\t\t}),\n\t\t\t\t\tstat_dominators = statistics.stat({ key:'dominators', step: step }),\n\t\t\t\t\tstat_dominated = statistics.stat({ key:'dominated', step: step });\n\t\t\t\tthis.state.forEach(function (element) {\n\t\t\t\t\telement.evaluation.forEach(function (v, i) {\n\t\t\t\t\t\tstats_evaluation[i].add(v, element);\n\t\t\t\t\t});\n\t\t\t\t\tstat_dominators.add(element.pareto.dominators.length, element);\n\t\t\t\t\tstat_dominated.add(element.pareto.dominated.length, element);\n\t\t\t\t});\n\t\t\t}\n\t\t\tthis.onAnalyze();\n\t\t}\n\t\treturn statistics;\n\t},\n\t\n\t/** `advance()` performs one step of the optimization. If the process has not been initialized, \n\tit does so. Returns a future if any step is asynchronous.\n\t*/\n\tadvance: function advance() {\n\t\tvar mh = this, \n\t\t\tstepTime = this.statistics && this.statistics.stat({key: 'step_time'}),\n\t\t\tresult;\n\t\tif (isNaN(this.step) || +this.step < 0) {\n\t\t\tthis.reset();\n\t\t\tif (stepTime) stepTime.startTime();\n\t\t\tthis.initiate();\n\t\t\tresult = this.evaluate();\n\t\t} else {\n\t\t\tif (stepTime) stepTime.startTime();\n\t\t\tresult = this.update();\n\t\t}\n\t\treturn Future.then(result, function () {\n\t\t\tmh.step = isNaN(mh.step) || +mh.step < 0 ? 0 : +mh.step + 1;\n\t\t\tmh.analyze(); // Calculate the state's stats after updating it.\n\t\t\tif (stepTime) stepTime.addTime();\n\t\t\tmh.onAdvance();\n\t\t\treturn mh;\n\t\t});\n\t},\n\t\n\t/** `run()` returns a future that is resolved when the whole search process is finished. The \n\tvalue is the best cursor after the last step. It always returns a future.\n\t*/\n\trun: function run() {\n\t\tvar mh = this, \n\t\t\tadvance = this.advance.bind(this),\n\t\t\tcontinues = function continues() {\n\t\t\t\treturn !mh.finished();\n\t\t\t};\n\t\treturn Future.doWhile(advance, continues).then(function () {\n\t\t\tmh.onFinish();\n\t\t\treturn mh.state[0]; // Return the best cursor.\n\t\t});\n\t},\n\n\t/** `reset()` reset the process to start over again. Basically cleans the statistics and sets \n\tthe current `step` to -1.\n\t*/\n\treset: function reset() {\n\t\tthis.step = -1;\n\t\tif (this.statistics) this.statistics.reset();\n\t},\n\t\n\t// ## State control ############################################################################\n\t\n\t/** The `nub` method eliminates repeated elements inside the state. Use responsibly, since this \n\tis an expensive operation. Returns the size of the resulting state.\n\t*/\n\tnub: function nub(precision) {\n\t\tprecision = isNaN(precision) ? 1e-15 : +precision;\n\t\tthis.state = iterable(this.state).nub(function (e1, e2) {\n\t\t\tvar values1 = e1.values,\n\t\t\t\tvalues2 = e2.values,\n\t\t\t\tlen = values1.length;\n\t\t\tif (len !== e2.values.length) {\n\t\t\t\treturn false;\n\t\t\t} else for (var i = 0; i < len; ++i) {\n\t\t\t\tif (Math.abs(values1[i] - values2[i]) > precision) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}).toArray();\n\t\treturn this.state.length;\n\t},\n\t\n\t// ## Events ###################################################################################\n\t\n\t/** For better customization the `events` handler emits the following events: \n\t\t\n\t+ `initiated` when the state has been initialized.\n\t*/\n\tonInitiate: function onInitiate() {\n\t\tthis.events.emit('initiated', this);\n\t\tthis.__log__('debug', 'State has been initiated. Nos coepimus.');\n\t},\n\t\n\t/** + `updated` when the state has been expanded, evaluated and sieved.\n\t*/\n\tonUpdate: function onUpdate() {\n\t\tthis.events.emit('updated', this);\n\t\tthis.__log__('debug', 'State has been updated. Mutatis mutandis.');\n\t},\n\t\n\t/** + `expanded` after new elements are added to the state.\n\t*/\n\tonExpand: function onExpand() {\n\t\tthis.events.emit('expanded', this);\n\t\tthis.__log__('debug', 'State has been expanded. Nos exploramus.');\n\t},\n\t\n\t/** + `evaluated` after the elements in the state are evaluated.\n\t*/\n\tonEvaluate: function onEvaluate(elements) {\n\t\tthis.events.emit('evaluated', this, elements);\n\t\tthis.__log__('debug', 'Evaluated and sorted ', elements.length, ' elements. Appretiatus sunt.');\n\t},\n\t\n\t/** + `sieved` after elements are removed from the state.\n\t*/\n\tonSieve: function onSieve() {\n\t\tthis.events.emit('sieved', this);\n\t\tthis.__log__('debug', 'State has been sieved. Haec est viam.');\n\t},\n\t\n\t/** + `advanced` when one full iteration is completed.\n\t*/\n\tonAdvance: function onAdvance() {\n\t\tthis.events.emit('advanced', this);\n\t\tthis.__log__('debug', 'Step ', this.step, ' has been completed. Nos proficimus.');\n\t},\n\t\n\t/** + `analyzed` after the statistics are calculated.\n\t*/\n\tonAnalyze: function onAnalyze() {\n\t\tthis.events.emit('analyzed', this);\n\t\tthis.__log__('debug', 'Statistics have been gathered. Haec sunt numeri.');\n\t},\n\t\n\t/** + `finished` when the run finishes.\n\t*/\n\tonFinish: function onFinish() {\n\t\tthis.events.emit('finished', this);\n\t\tthis.__log__('debug', 'Finished. Nos invenerunt!');\n\t},\n\t\n\t// ## Multi-objective ##########################################################################\n\t\n\t/** A Pareto analysis of a set of elements compares all elements with each other, accounting the \n\tdomination relationship between the elements. Every element gets a new property `pareto`, an \n\tobject holding two arrays:\n\t\n\t+ `pareto.dominated` is a list of elements dominated by this element,\n\t\n\t+ `pareto.dominators` is a list of elements that dominate this element.\n\t*/\n\tparetoAnalysis: function paretoAnalysis(elements) {\n\t\telements = elements || this.state;\n\t\tvar len = elements.length,\n\t\t\ti1, i2, elem1, elem2, domination;\n\t\tfor (i1 = 0; i1 < len; i1++) {\n\t\t\telements[i1].pareto = { dominated: [], dominators: [] };\n\t\t}\n\t\tfor (i1 = 0; i1 < len; i1++) {\n\t\t\telem1 = elements[i1];\n\t\t\tfor (i2 = i1 + 1; i2 < len; i2++) {\n\t\t\t\telem2 = elements[i2];\n\t\t\t\tdomination = this.problem.compare(elem1, elem2).domination;\n\t\t\t\tif (domination > 0) {\n\t\t\t\t\telem1.pareto.dominated.push(elem2);\n\t\t\t\t\telem2.pareto.dominators.push(elem1);\n\t\t\t\t} else if (domination < 0) {\n\t\t\t\t\telem2.pareto.dominated.push(elem1);\n\t\t\t\t\telem1.pareto.dominators.push(elem2);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn elements;\n\t},\n\t\n\t/** Sorting function used for multiobjective problems. By default uses `nonDominatedSort` (based\n\ton NSGA).\n\t*/\n\tmultiObjectiveSort: function multiObjectiveSort(elements) {\n\t\treturn this.nonDominatedSort(elements);\n\t},\n\t\n\t/** The crowding distance is an estimation of the density of elements surrounding each element\n\tin the given list (or the state by default). Every element will be added a `crowdingDistance` \n\tnumber property.\n\t*/\n\tcrowdingDistance: function crowdingDistance(elements) {\n\t\telements = elements || this.state;\n\t\tvar es = elements.slice(), // shallow copy.\n\t\t\tcount = this.problem.objectives.length,\n\t\t\ti, j;\n\t\tfor (i = 0; i < es.length; i++) {\n\t\t\tes[i].crowdingDistance = 0;\n\t\t}\n\t\tfor (i = 0; i < count; i++) {\n\t\t\tes.sort(function (elem1, elem2) {\n\t\t\t\treturn elem1.evaluation[i] - elem2.evaluation[i];\n\t\t\t});\n\t\t\tes[0].crowdingDistance = Infinity;\n\t\t\tes[es.length - 1].crowdingDistance = Infinity;\n\t\t\tfor (j = 1; j < es.length - 1; j++) {\n\t\t\t\tes[j].crowdingDistance += es[j + 1].evaluation[i] - es[j - 1].evaluation[i]; \n\t\t\t}\n\t\t}\n\t\treturn elements;\n\t},\n\t\n\t/** The non-dominated sort is based on [_\"A Fast Elitist Non-Dominated Sorting Genetic Algorithm\n\tfor Multi-Objective Optimization: NSGA-II\"_ by Deb (2000)](http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.18.4257).\n\t*/\n\tnonDominatedSort: function nonDominatedSort(elements) {\n\t\telements = this.paretoAnalysis(elements);\n\t\telements = this.crowdingDistance(elements);\n\t\telements.sort(function (elem1, elem2) {\n\t\t\treturn (elem1.pareto.dominators.length - elem2.pareto.dominators.length) ||\n\t\t\t\t(elem2.crowdingDistance - elem1.crowdingDistance);\n\t\t});\n\t\treturn elements;\n\t},\n\t\n\t/** The Pareto strength of an element is defined as the sum of the amount of elements being \n\tdominated by all dominators of a given element. For more information see: [_\"SPEA2: Improving \n\tthe Strength Pareto Evolutionary Algorithm\"_ by Zitzler et al (2001)](http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.112.5073).\n\t*/\n\tstrengthParetoSort: function strengthParetoSort(elements) {\n\t\telements = this.paretoAnalysis(elements);\n\t\titerable(elements).forEach(function (elem) {\n\t\t\telem.pareto.strength = iterable(elem.pareto.dominators).map(function (dominator) {\n\t\t\t\treturn dominator.pareto.dominated.length;\n\t\t\t}).sum();\n\t\t});\n\t\treturn elements.sort(function (elem1, elem2) { // Pareto strength must be minimized.\n\t\t\treturn elem1.pareto.strength - elem2.pareto.strength;\n\t\t});\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** The default string representation of a Metaheuristic shows its constructor's name and its \n\tparameters.\n\t*/\n\ttoString: function toString() {\n\t\treturn \"<\"+ (this.constructor.name || 'Metaheuristic') +\" \"+ this.problem +\">\";\n\t},\n\t\n\t/** Returns a reconstruction of the parameters used in the construction of this instance.\n\t*/\n\t__params__: function __params__() {\n\t\tvar params = { problem: this.problem, size: this.size, steps: this.steps };\n\t\tif (this.random !== Randomness.DEFAULT) {\n\t\t\tparams.random = this.random;\n\t\t}\n\t\tif (this.step >= 0) {\n\t\t\tparams.step = this.step;\n\t\t\tparams.state = this.state;\n\t\t\tparams.statistics = this.statistics;\n\t\t} else if (this.state.length > 0) {\n\t\t\tparams.state = this.state;\n\t\t}\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar id = arguments[i];\n\t\t\tif (this.hasOwnProperty(id)) {\n\t\t\t\tparams[id] = this[id];\n\t\t\t}\n\t\t}\n\t\treturn params;\n\t},\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Metaheuristic',\n\t\tserializer: function serialize_Metaheuristic(obj) {\n\t\t\treturn [obj.__params__()];\n\t\t}\n\t}\n}); // declare Metaheuristic.","/** # Hill climbing\n\n[Hill Climbing](http://en.wikipedia.org/wiki/Hill_climbing) is a simple iterative local search \nmethod. The state has only one element, and in each iteration its best successor replaces it, after\na local optimum is reached.\n*/\nvar HillClimbing = metaheuristics.HillClimbing = declare(Metaheuristic, {\n\t/** The constructor The constructor takes the following parameters:\n\t*/\n\tconstructor: function HillClimbing(params) {\n\t\tMetaheuristic.call(this, params);\n\t\tinitialize(this, params)\n\t\t/** + `delta=1` is the radius of the elements surroundings in every dimension.\n\t\t*/\n\t\t\t.number('delta', { defaultValue: 1, coerce: true })\n\t\t/** + `size` is constrained to 1 by default. This may be increased, resulting in many \n\t\tparallel climbings.\n\t\t*/\n\t\t\t.integer('size', { defaultValue: 1,\tcoerce: true });\n\t},\n\t\n\t/** The hill climbings `update()` replaces each element in the state by the best element in its \n\tneighbourhood, if there is any. The surroundings have all possible elements resulting from \n\teither an increment or decrement (of the given `delta`) in each of the centre element's \n\tdimensions.\n\t*/\n\tupdate: function update() {\n\t\tvar mh = this, \n\t\t\tlocalOptima = 0;\n\t\treturn Future.all(this.state.map(function (elem) {\n\t\t\tvar range = elem.neighbourhood(mh.delta);\n\t\t\trange.push(elem);\n\t\t\treturn Future.then(mh.evaluate(range), function (range) {\n\t\t\t\tvar best = range[0];\n\t\t\t\tif (elem === best) {\n\t\t\t\t\tlocalOptima++;\n\t\t\t\t}\n\t\t\t\treturn best;\n\t\t\t});\t\t\t\n\t\t})).then(function (elems) {\n\t\t\telems = mh.sort(elems);\n\t\t\tmh.state = elems;\n\t\t\tmh.__localOptima__ = localOptima;\n\t\t\tmh.onUpdate();\n\t\t});\n\t},\n\t\t\n\t/** `atLocalOptima()` checks if the search is currently stuck at a local optima.\n\t*/\n\tatLocalOptima: function atLocalOptima() {\n\t\treturn this.__localOptima__ >= this.state.length;\n\t},\n\t\t\n\t/** A hill climbing search must finish when a local optimum is reached. This criteria is tested \n\ttogether with all others.\n\t*/\n\tfinished: function finished() {\n\t\treturn Metaheuristic.prototype.finished.call(this) || this.atLocalOptima();\n\t},\n\t\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'HillClimbing',\n\t\tserializer: function serialize_HillClimbing(obj) {\n\t\t\treturn [obj.__params__('delta')];\n\t\t}\n\t}\n}); // declare HillClimbing.\n","/** # Genetic algorithm\n\nClassic Holland's-style [genetic algorithms](http://en.wikipedia.org/wiki/Genetic_algorithm),\nwhich is the base for many evolutionary computing variants.\n*/\nvar GeneticAlgorithm = metaheuristics.GeneticAlgorithm = declare(Metaheuristic, {\n\t/** The constructor takes many parameters specific for this technique:\n\t*/\n\tconstructor: function GeneticAlgorithm(params) {\n\t\tMetaheuristic.call(this, params); // Superconstructor call.\n\t\tinitialize(this, params)\n\t\t/** + `expansionRate=0.5` is the amount of new elements generated by crossover, as a ratio\n\t\tof the population size.\n\t\t*/\n\t\t\t.number('expansionRate', { defaultValue: 0.5, minimum: 0, coerce: true })\n\t\t/** + `mutationRate=0.2` is the chance of a new element (resulting from crossover) mutating.\n\t\t*/\n\t\t\t.number('mutationRate', { defaultValue: 0.2, minimum: 0, maximum: 1, coerce: true })\n\t\t/** + `selection(count)` is a function that selects count elements from the current \n\t\tpopulation. These will be the parents of the new elements in the next generation. By default\n\t\trank selection is used, a.k.a. fitness proportional to position in the state.\n\t\t*/\n\t\t\t.func('selection', { defaultValue: GeneticAlgorithm.selections.rankSelection })\n\t\t/** + `crossover(parents)` is a function implementing the genetic operator that simulates \n\t\treproduction with inheritance. The parents argument must be an array of elements. The result\n\t\tis an array of elements. By default the single point crossover is used.\n\t\t*/\n\t\t\t.func('crossover', { defaultValue: GeneticAlgorithm.crossovers.singlepointCrossover })\n\t\t/** `mutation(element)` is a function implementing the genetic operator that simulates \n\t\tbiological mutation, making a random change in the chromosome. By default a single point \n\t\tuniform mutation is used.\n\t\t*/\n\t\t\t.func('mutation', { defaultValue: GeneticAlgorithm.mutations.singlepointUniformMutation });\n\t},\n\n\t/** The population's (state) `expansion()` is the possibly mutated crossovers of selected \n\telements. How many is determined by `expansionRate`.\n\t*/\n\texpansion: function expansion() {\n\t\tvar parents, childs, child,\n\t\t\tnewElements = [],\n\t\t\tlen = Math.floor(this.expansionRate * this.size);\n\t\tlen += len % 2; // Make len even.\n\t\tfor (var i = 0; i < len; i += 2) {\n\t\t\tparents = this.selection();\n\t\t\tchilds = this.crossover(parents);\n\t\t\tfor (var j = 0; j < childs.length; j++) {\n\t\t\t\tchild = this.random.randomBool(this.mutationRate) ? this.mutation(childs[j]) : childs[j];\n\t\t\t\tnewElements.push(child);\n\t\t\t}\n\t\t}\n\t\tthis.onExpand();\n\t\treturn newElements;\n\t},\n\t\n\t/** ## Selection methods #######################################################################\n\n\t`GeneticAlgorithm.selections` is a bundle of standard selection methods. A selection function \n\ttakes the amount of elements to be selected and returns an array of selected elements. The \n\timplemented methods are:\n\t*/\n\t'static selections': {\n\t\t/** + `rankSelection(count=2)` makes a selection where each element's probability of being \n\t\tselected is proportional to its position in the state.\n\t\t*/\n\t\trankSelection: function rankSelection(count) {\n\t\t\tcount = isNaN(count) ? 2 : +count;\n\t\t\tvar len = this.state.length,\n\t\t\t\trandoms = this.random.randoms(count, 0, len * (len + 1) / 2 - 1),\n\t\t\t\tselected = [];\n\t\t\trandoms.sort(function (x, y) { \n\t\t\t\treturn x - y; \n\t\t\t});\n\t\t\tthis.state.forEach(function (element) {\n\t\t\t\tfor (var i = 0; i < count; i++) {\n\t\t\t\t\trandoms[i] += i - len;\n\t\t\t\t}\n\t\t\t\tif (randoms[0] <= 0) {\n\t\t\t\t\tselected.push(element);\n\t\t\t\t\trandoms.shift();\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (selected.length < count) { // Should not happen.\n\t\t\t\tselected = selected.concat(this.state.slice(0, count - selected.length));\n\t\t\t}\n\t\t\treturn selected;\n\t\t},\n\t\t\n\t\t/** + `rouletteSelection(count=2)` makes a selection where each element's probability of being \n\t\tselected is proportional to its evaluation. Warning! This selection assumes the evaluation is \n\t\tbeing maximized.\n\t\t*/\n\t\trouletteSelection: function rouletteSelection(count) { //FIXME\n\t\t\tcount = isNaN(count) ? 2 : count |0;\n\t\t\tvar len = this.state.length,\n\t\t\t\tevaluationStat = this.statistics.stat({key: 'evaluation', step: this.step}),\n\t\t\t\tmin = evaluationStat.minimum(),\n\t\t\t\tsum = evaluationStat.sum(),\n\t\t\t\trandoms = this.random.randoms(count, 0, sum - len * min),\n\t\t\t\tselected = [];\n\t\t\trandoms.sort(function (x, y) { return x-y; });\n\t\t\tthis.state.forEach(function (element) {\n\t\t\t\tfor (var i = 0; i < count; i++) {\n\t\t\t\t\trandoms[i] += i - len;\n\t\t\t\t}\n\t\t\t\tif (randoms[0] <= 0) {\n\t\t\t\t\tselected.push(element);\n\t\t\t\t\trandoms.shift();\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (selected.length < count) { // Should not happen.\n\t\t\t\tselected = selected.concat(this.state.slice(0, count - selected.length));\n\t\t\t}\n\t\t\treturn selected;\n\t\t},\n\t\t\n\t\t/** + [`stochasticUniversalSamplingSelection(count)`](http://en.wikipedia.org/wiki/Stochastic_universal_sampling)\n\t\tis a less biased version of the roulette selection method.\n\t\t*/\n\t\tstochasticUniversalSamplingSelection: function stochasticUniversalSamplingSelection(count) {\n\t\t\tcount = isNaN(count) ? 2 : count |0;\n\t\t\tvar state = this.state,\n\t\t\t\ttotalFitness = iterable(state).select('evaluation').sum(),\n\t\t\t\tp = totalFitness / count;\n\t\t\treturn base.Iterable.iterate(function (x) { \n\t\t\t\treturn x + p; \n\t\t\t}, this.random.randomInt(p), count).map(function (pointer) {\n\t\t\t\tvar sum = 0;\n\t\t\t\tfor (var i = 0; i < state.length; ++i) {\n\t\t\t\t\tsum += state[i].evaluation;\n\t\t\t\t\tif (sum >= pointer) {\n\t\t\t\t\t\treturn state[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn state[state.length - 1]; // Very improbable.\n\t\t\t}).toArray();\n\t\t},\t\t\n\t}, // GeneticAlgorithm.selections\n\n\t/** ## Crossover methods #######################################################################\n\n\t`GeneticAlgorithm.crossovers` is a bundle of standard crossover methods. A crossover function \n\ttakes an array of parent elements and returns an array of sibling elements. The implemented\n\tmethods are:\n\t*/\n\t'static crossovers': {\n\t\t/** + `singlepointCrossover(parents)` given two parents returns an array of two new elements\n\t\tbuilt with one half of each parent. The cutpoint is chosen randomly.\n\t\t*/\n\t\tsinglepointCrossover: function singlepointCrossover(parents) {\n\t\t\traiseIf(!Array.isArray(parents) || parents.length < 2, \"A two parent array is required.\");\n\t\t\tvar cut = this.random.randomInt(this.length - 1) + 1,\n\t\t\t\tvalues0 = parents[0].values,\n\t\t\t\tvalues1 = parents[1].values;\n\t\t\treturn [ \n\t\t\t\tthis.problem.newElement(values0.slice(0, cut).concat(values1.slice(cut))),\n\t\t\t\tthis.problem.newElement(values1.slice(0, cut).concat(values0.slice(cut)))\n\t\t\t];\n\t\t},\n\t\t\n\t\t/** + `twopointCrossover(parents)` given two parents returns an array of two new elements:\n\t\tthe first one with two parts of the first parent and one part of the second parent, and the \n\t\tsecond one assembled viceversa. The two cutpoints are chosen randomly.\n\t\t*/\n\t\ttwopointCrossover: function twopointCrossover(parents) {\n\t\t\traiseIf(!Array.isArray(parents) || parents.length < 2, \"A two parent array is required.\");\n\t\t\tvar cut1 = this.random.randomInt(this.length - 1) + 1,\n\t\t\t\tcut2 = this.random.randomInt(this.length - 1) + 1,\n\t\t\t\tvalues0 = parents[0].values,\n\t\t\t\tvalues1 = parents[1].values;\n\t\t\treturn [ \n\t\t\t\tthis.problem.newElement(values0.slice(0, cut1).concat(values1.slice(cut1, cut2)).concat(values0.slice(cut2))),\n\t\t\t\tthis.problem.newElement(values1.slice(0, cut1).concat(values0.slice(cut1, cut2)).concat(values1.slice(cut2)))\n\t\t\t];\n\t\t},\n\t\t\n\t\t/** + `uniformCrossover(parents)` creates as many children as the given parents, with each\n\t\tvalue taken randomly from any of the parents.\n\t\t*/\n\t\tuniformCrossover: function uniformCrossover(parents, count) {\n\t\t\tcount = isNaN(count) ? parents.length : count|0;\n\t\t\tvar result = [],\n\t\t\t\tlength = this.problem.elementLength(),\n\t\t\t\trandom = this.random,\n\t\t\t\tvalues;\n\t\t\tfor (var i = 0; i < count; ++i) {\n\t\t\t\tvalues = [];\n\t\t\t\tfor (var j = 0; j < length; ++j) {\n\t\t\t\t\tvalues.push(random.choice(parents).values[j]);\n\t\t\t\t}\n\t\t\t\tresult.push(this.problem.newElement(values));\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}, // GeneticAlgorithm.crossovers\n\t\n\t/** ## Mutation methods ########################################################################\n\n\t`GeneticAlgorithm.mutations` is a bundle of standard mutation methods. A mutation function takes \n\tan element and returns a new element which is a variation of the former. The implemented methods\n\tare:\n\t*/\n\t'static mutations': {\n\t\t/** + `singlepointUniformMutation(element)` sets a randomly selected gene to a uniform\n\t\trandom value.\n\t\t*/\n\t\tsinglepointUniformMutation: function singlepointUniformMutation(element) {\n\t\t\tvar model = this.problem.elementModel(),\n\t\t\t\ti = this.random.randomInt(model.length);\n\t\t\treturn element.modification(i, this.random.random(model[i].min, model[i].max));\n\t\t},\n\t\t\t\n\t\t/** + `uniformMutation(maxPoints=Infinity)` builds a mutation function that makes at least \n\t\tone and up to `maxPoints` mutations, changing a randomly selected gene to a uniform random\n\t\tvalue.\n\t\t*/\n\t\tuniformMutation: function uniformMutation(maxPoints) {\n\t\t\tmax = isNaN(maxPoints) ? Infinity : +maxPoints;\n\t\t\tvar model = this.problem.elementModel();\n\t\t\treturn function mutation(element) {\n\t\t\t\tvar times = maxPoints, i, range;\n\t\t\t\telement = this.problem.newElement(element.values); // Copy element.\n\t\t\t\tdo {\n\t\t\t\t\ti = this.random.randomInt(model.length);\n\t\t\t\t\telement.values[i] = this.random.random(model[i].min, model[i].max);\n\t\t\t\t} while (this.random.randomBool(this.mutationRate) && --times > 0);\n\t\t\t\treturn element;\n\t\t\t};\n\t\t},\n\t\t\n\t\t/** + `singlepointBiasedMutation(element)` sets a randomly selected gene to random deviation\n\t\tof its value, with a triangular distribution.\n\t\t*/\n\t\tsinglepointBiasedMutation: function singlepointBiasedMutation(element) {\n\t\t\tvar random = this.random,\n\t\t\t\tmodel = this.problem.elementModel(),\n\t\t\t\ti = random.randomInt(element.length);\n\t\t\treturn element.modification(i, element.values[i] + \n\t\t\t\t(random.random() - random.random()) * (model[i].max - model[i].min));\n\t\t},\n\t\t\n\t\t/** + `recombinationMutation(element)` swaps two values of the element at random.\n\t\t*/\n\t\trecombinationMutation: function recombinationMutation(element) {\n\t\t\tvar values = element.values.slice(),\n\t\t\t\ti1 = this.random.randomInt(values.length),\n\t\t\t\tv1 = values[i1],\n\t\t\t\ti2 = this.random.randomInt(values.length), v2;\n\t\t\tif (i1 === i2) {\n\t\t\t\ti2 = (i2 + 1) % element.length;\n\t\t\t}\n\t\t\tvalues[i1] = values[i2];\n\t\t\tvalues[i2] = v1;\n\t\t\treturn this.problem.newElement(values);\n\t\t}\n\t}, // GeneticAlgorithm.mutations\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'GeneticAlgorithm',\n\t\tserializer: function serialize_GeneticAlgorithm(obj) {\n\t\t\tvar params = obj.__params__('expansionRate', 'mutationRate');\n\t\t\t//TODO serialize 'selection', 'crossover', 'mutation'\n\t\t\treturn [params];\n\t\t}\n\t}\n}); // declare GeneticAlgorithm.\n","/** # Beam search\n\n[Beam search](http://en.wikipedia.org/wiki/Beam_search) is a form of parallel best-first search with \nlimited memory.\n*/\nvar BeamSearch = metaheuristics.BeamSearch = declare(Metaheuristic, {\n\t/** The constructor m take any special parameters.\n\t*/\n\tconstructor: function BeamSearch(params) {\n\t\tMetaheuristic.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t/** A `delta` may be specified for the default `successors` for continuous variables.\n\t\t\t*/\n\t\t\t.number('delta', { ignore: true, coerce: true });\n\t},\n\t\n\t/** `successors(element)` returns the elements' successors. The problem's element must have its \n\t`successors` method implemented.\n\t*/\n\tsuccessors: function successors(element) {\n\t\treturn element.neighbourhood(this.delta);\n\t},\n\t\n\t/** The expansion in beam search adds all successors of all elements to the\tstate. After being \n\tevaluated and sieved only the best will remain.\n\t*/\n\texpansion: function expansion() {\n\t\tvar allSuccessors = [],\n\t\t\tsuccessors = this.successors.bind(this);\n\t\tthis.state.forEach(function (element) {\n\t\t\tallSuccessors = allSuccessors.concat(successors(element));\n\t\t});\n\t\tthis.onExpand();\n\t\treturn allSuccessors;\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'BeamSearch',\n\t\tserializer: function serialize_BeamSearch(obj) {\n\t\t\treturn [obj.__params__('delta')];\n\t\t}\n\t}\n}); // declare BeamSearch.\n","/** # Simulated annealing\n\n[Simulated annealing](http://en.wikipedia.org/wiki/Simulated_annealing) is a stochastic global \noptimization technique.\n*/\nvar SimulatedAnnealing = metaheuristics.SimulatedAnnealing = declare(Metaheuristic, {\n\t/** The constructor takes some specific parameters for this search:\n\t*/\n\tconstructor: function SimulatedAnnealing(params) {\n\t\tMetaheuristic.call(this, params);\n\t\tinitialize(this, params)\n\t\t/** + `maximumTemperature=1` is the temperature at the start of the run.\n\t\t*/\n\t\t\t.number('maximumTemperature', { defaultValue: 1, coerce: true })\n\t\t/** + `minimumTemperature=0` is the temperature at the end of the run.\n\t\t*/\n\t\t\t.number('minimumTemperature', { defaultValue: 0, coerce: true })\n\t\t/** + `delta=1` is the radius of the elements surroundings in every dimension, that is \n\t\tchecked by this algorithm.\n\t\t*/\n\t\t\t.number('delta', { defaultValue: 1, coerce: true })\n\t\t/** + `size=1` is 1 by default, but larger states are supported.\n\t\t*/\n\t\t\t.integer('size', { defaultValue: 1,\tcoerce: true })\n\t\t/** + `temperature=coolingSchedule.linear` is the temperature function.\n\t\t*/\n\t\t\t.func('temperature', { defaultValue: this.coolingSchedule.linear });\n\t},\n\t\n\t/** `randomNeighbour(element, radius=this.delta)` returns one neighbour of the given element \n\tchosen at random.\n\t*/\n\trandomNeighbour: function randomNeighbour(element, radius) {\n\t\tradius = isNaN(radius) ? this.delta : +radius;\n\t\tvar i = this.random.randomInt(element.values.length), \n\t\t\tv = element.values[i];\n\t\treturn element.modification(i, this.random.randomBool() ? v + radius : v - radius);\n\t},\n\t\n\t/** The `acceptance(current, neighbour, temp=this.temperature())` is the probability of \n\taccepting the new element. Uses the original definitions from \n\t[Kirkpatrick's paper](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.123.7607).\n\t*/\n\tacceptance: function acceptance(current, neighbour, temp) {\n\t\ttemp = isNaN(temp) ? this.temperature() : +temp;\n\t\tif (this.problem.compare(current, neighbour) > 0) {\n\t\t\treturn 1; // Should always accept a better neighbour.\n\t\t} else {\n\t\t\tvar d = -Math.abs(neighbour.evaluation - current.evaluation);\n\t\t\treturn clamp(Math.exp(d / temp), 0, 1);\n\t\t}\n\t},\n\t\n\t/** The annealings temperature is a metaphore for the amount of randomness the process applies. \n\tThe cooling schedule is a function that calculates the temperature for any given step in the\n\toptimization.\n\t*/\n\tcoolingSchedule: {\n\t\tlinear: function temperature() {\n\t\t\treturn (1 - Math.max(0, this.step) / this.steps) * \n\t\t\t\t(this.maximumTemperature - this.minimumTemperature) + this.minimumTemperature;\n\t\t}\n\t},\n\t\n\t/** At every iteration, for each element in the state one of its neighbours is chosen randomly. \n\tIf the neighbour is better, it replaces the corresponding element. Else it may still do so, but \n\twith a probability calculated by `acceptance()`.\n\t*/\n\tupdate: function update() {\n\t\tvar mh = this,\n\t\t\ttemp = this.temperature(),\n\t\t\tacceptanceStat = this.statistics.stat({key: 'acceptance'}),\n\t\t\ttemperatureStat = this.statistics.stat({key: 'temperature'});\n\t\ttemperatureStat.add(temp, this.step);\n\t\treturn Future.all(this.state.map(function (elem) {\n\t\t\tvar neighbour = mh.randomNeighbour(elem);\n\t\t\treturn Future.then(neighbour.evaluate(), function () {\n\t\t\t\tvar p = mh.acceptance(elem, neighbour, temp);\n\t\t\t\tacceptanceStat.add(p, neighbour);\n\t\t\t\treturn mh.random.randomBool(p) ? neighbour : elem;\n\t\t\t});\n\t\t})).then(function (elems) {\n\t\t\telems = mh.sort(elems);\n\t\t\tmh.state = elems;\n\t\t\tmh.onUpdate();\n\t\t\treturn mh;\n\t\t});\n\t},\n\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'SimulatedAnnealing',\n\t\tserializer: function serialize_SimulatedAnnealing(obj) {\n\t\t\t//TODO Serialize 'temperature'\n\t\t\treturn [obj.__params__('maximumTemperature', 'minimumTemperature', 'delta')];\n\t\t}\n\t}\n}); // declare SimulatedAnnealing.\n","/** # Particle swarm\n\n[Particle Swarm](http://en.wikipedia.org/wiki/Particle_swarm_optimization) is an stochastic \noptimization technique. Every candidate solution is treated as a particle with a position and a \nvelocity. On each iteration the positions and velocities of every particle are updated considering\nthe best positions so far.\n*/\nvar ParticleSwarm = metaheuristics.ParticleSwarm = declare(Metaheuristic, {\n\t/** The constructor takes some specific parameters for this search:\n\t*/\n\tconstructor: function ParticleSwarm(params) {\n\t\tMetaheuristic.call(this, params);\n\t\tinitialize(this, params)\n\t\t/** + `inertia=1` is the weight of the particle's current velocity in the velocity update.\n\t\t*/\n\t\t\t.number('inertia', { defaultValue: 1, coerce: true })\n\t\t/** + `localAcceleration=0.5` is the weight of the particle's current best position in the \n\t\t\t\tvelocity update.\n\t\t*/\n\t\t\t.number('localAcceleration', { defaultValue: 0.5, coerce: true })\n\t\t/** + `globalAcceleration=0.3` is the weight of the whole swarm's current best position in \n\t\t\t\tthe velocity update.\n\t\t*/\n\t\t\t.number('globalAcceleration', { defaultValue: 0.3, coerce: true });\n\t},\n\t\n\t/** The elements in a particle swarm have two added properties which have to be initialized:\n\t\n\t+ `__velocity__` is the vector that defines the movement of the particle. Initially it is a \n\t\trandom vector.\n\t+ `__localBest__` is the best position of the particle in the run. The first position has \n\t\titself as the best so far.\n\t*/\n\tinitiate: function initiate(size) {\n\t\tMetaheuristic.prototype.initiate.call(this, size);\n\t\tvar mh = this,\n\t\t\tmodel = this.problem.elementModel(),\n\t\t\tresult = this.state.forEach(function (element) {\n\t\t\t\telement.__velocity__ = mh.random.randoms(element.values.length, -1, +1).map(function (v, i) {\n\t\t\t\t\treturn v * (model[i].max - model[i].min);\n\t\t\t\t});\n\t\t\t\telement.__localBest__ = element;\n\t\t\t});\n\t\tthis.onInitiate();\n\t\treturn result;\n\t},\n\t\n\t/** The method `nextVelocity` calculates the velocity of the particle for the next iteration.\n\t*/\n\tnextVelocity: function nextVelocity(element, globalBest) {\n\t\tvar mh = this,\n\t\t\tvelocity = element.__velocity__,\n\t\t\tlocalBest = element.__localBest__,\n\t\t\tlocalCoef = this.random.random(this.localAcceleration),\n\t\t\tglobalCoef = this.random.random(this.globalAcceleration),\n\t\t\tresult = element.values.map(function (v, i) {\n\t\t\t\treturn velocity[i] * mh.inertia +\n\t\t\t\t\tlocalCoef * (localBest.values[i] - v) +\n\t\t\t\t\tglobalCoef * (globalBest.values[i] - v);\n\t\t\t});\n\t\treturn result;\n\t},\n\t\n\t/** The method `nextElement` creates a new element which represents the position of a particle \n\tin the next iteration.\n\t*/\n\tnextElement: function nextElement(element, globalBest) {\n\t\tvar mh = this,\n\t\t\tnextVelocity = this.nextVelocity(element, globalBest),\n\t\t\tnextValues = element.values.map(function (v, i) {\n\t\t\t\treturn v + nextVelocity[i];\n\t\t\t}),\n\t\t\tresult = this.problem.newElement(nextValues);\n\t\treturn Future.then(result.evaluate(), function () {\n\t\t\tresult.__velocity__ = nextVelocity;\n\t\t\tresult.__localBest__ = mh.problem.compare(element.__localBest__, result) > 0 ? result : element.__localBest__;\n\t\t\treturn result;\n\t\t});\t\t\n\t},\n\t\n\t/** Updating the optimization state means updating each particle velocity and recalculating \n\ttheir positions. The best position of the whole run is stored in the `__globalBest__` property,\n\tand updated every time a new best position is achieved. If nothing fails, in the end the \n\tparticles should converge at this position.\n\t*/\n\tupdate: function update() {\n\t\tvar mh = this,\n\t\t\tglobalBest = this.__globalBest__;\n\t\tif (!globalBest) {\n\t\t\tglobalBest = this.__globalBest__ = this.state[0];\n\t\t}\n\t\treturn Future.all(this.state.map(function (element) {\n\t\t\treturn mh.nextElement(element, globalBest);\n\t\t})).then(function (elements) {\n\t\t\telements = mh.sort(elements);\n\t\t\tmh.state = elements;\n\t\t\tif (mh.problem.compare(mh.__globalBest__, elements[0]) > 0) {\n\t\t\t\tmh.__globalBest__ = elements[0];\n\t\t\t}\n\t\t\tmh.onUpdate();\n\t\t\treturn mh;\n\t\t});\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'ParticleSwarm',\n\t\tserializer: function serialize_ParticleSwarm(obj) {\n\t\t\treturn [obj.__params__('inertia', 'localAcceleration', 'globalAcceleration')];\n\t\t}\n\t}\n}); // declare ParticleSwarm.\n","/** # Differential evolution\n\n[Differential evolution](http://en.wikipedia.org/wiki/Differential_evolution) is an evolutionary\nmetaheuristic based on a particular form of crossover. This operator acts on individual values of\neach state, replacing the value with a combination of the corresponding value in three other \nrandomly chosen elements.\n*/\nvar DifferentialEvolution = metaheuristics.DifferentialEvolution = declare(Metaheuristic, {\n\t/** The constructor takes the following parameters:\n\t*/\n\tconstructor: function DifferentialEvolution(params) {\n\t\tMetaheuristic.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t/** + `differentialWeight=1` is the coefficient (usually named `F`) in the crossover \n\t\t\tformula.\n\t\t\t*/\n\t\t\t.number('differentialWeight', { coerce: true, defaultValue: 1, minimum: 0, maximum: 2 })\n\t\t\t/** + `crossoverProbability=30%` is the probability of getting a value from a crossover. \n\t\t\t*/\n\t\t\t.number('crossoverProbability', { coerce: true, defaultValue: 0.3, minimum: 0, maximum: 1 })\n\t\t\t/** Also, the state's size is constrained to a minimum of 4, because of how the \n\t\t\tcrossover works.\n\t\t\t*/\n\t\t\t.integer('size', { coerce: true, defaultValue: 100, minimum: 4 });\n\t},\n\t\n\t/** The expansion is quite simple. For each element `x` in the state a new one is generated. \n\tThree other elements are randomly selected from the state, named `a`, `b` and `c`. With a \n\tprobability of `crossoverProbability`, the ith value of the new element results from \n\t`a[i] + F(b[i] - c[i])`, where `F` is the `differentialWeight`. The other values are copied from \n\t`x`, although it is assured that at least one of the new element's is calculated as shown \n\tbefore. \n\t*/\n\texpansion: function expansion() {\n\t\tvar mh = this,\n\t\t\tresult = this.state.map(function (element, elementIndex) {\n\t\t\t\tvar stateCopy = mh.state.slice();\n\t\t\t\tstateCopy.splice(elementIndex, 1);\n\t\t\t\tvar crossover = mh.random.choices(3, stateCopy),\n\t\t\t\t\ta = crossover[0].values,\n\t\t\t\t\tb = crossover[1].values,\n\t\t\t\t\tc = crossover[2].values,\n\t\t\t\t\tlen = element.values.length,\n\t\t\t\t\trandomIndex = mh.random.randomInt(len),\n\t\t\t\t\tnewValues = element.values.map(function (value, i) {\n\t\t\t\t\t\tif (i === randomIndex || mh.random.randomBool(mh.crossoverProbability)) {\n\t\t\t\t\t\t\treturn a[i] + mh.differentialWeight * (b[i] - c[i]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\treturn mh.problem.newElement(newValues);\n\t\t\t});\n\t\tthis.onExpand();\n\t\treturn result;\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'DifferentialEvolution',\n\t\tserializer: function serialize_DifferentialEvolution(obj) {\n\t\t\treturn [obj.__params__('differentialWeight', 'crossoverProbability')];\n\t\t}\n\t}\n}); // declare DifferentialEvolution.\n","/** # Evolution strategy.\n\n[Evolution strategy](https://en.wikipedia.org/wiki/Evolution_strategy) is maybe the simplest \nevolutionary optimization method. At each step, one or more random deviations of each element are\ngenerated, replacing their parent if they prove to be better.\n*/\nvar EvolutionStrategy = metaheuristics.EvolutionStrategy = declare(Metaheuristic, {\n\t/** The constructor takes the following parameters:\n\t*/\n\tconstructor: function EvolutionStrategy(params) {\n\t\tMetaheuristic.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t/** + `mutantCount=1` is the number of mutants generated per element at each step.\n\t\t\t*/\n\t\t\t.number('mutantCount', { coerce: true, defaultValue: 1, minimum: 1 })\n\t\t\t/** + `size=1`: state's size is 1 by default in this metaheuristic.\n\t\t\t*/\n\t\t\t.integer('size', { coerce: true, defaultValue: 1, minimum: 1 });\n\t},\n\t\n\t/** A `mutant` is a new random variation of the given `element`. Although using a normal \n\tdistribution is more common, here a more efficient tringular distribution is used.\n\t*/\n\tmutant: function mutant(element) {\n\t\tvar random = this.random,\n\t\t\tmodel = this.problem.elementModel(),\n\t\t\tnewValues = element.values.map(function (v, i) {\n\t\t\t\tvar range = model[i];\n\t\t\t\treturn v + (random.random() - random.random()) * (range.max - range.min);\n\t\t\t});\n\t\treturn this.problem.newElement(newValues);\n\t},\n\t\n\t/** `mutants` calculates an array of `count` mutants, or `this.mutantCount` by default. \n\t*/\n\tmutants: function mutants(element, count) {\n\t\tcount = isNaN(count) ? this.mutantCount : +count;\n\t\tvar result = [];\n\t\tfor (var i = 0; i < count; ++i) {\n\t\t\tresult.push(this.mutant(element));\n\t\t}\n\t\treturn result;\n\t},\n\t\n\t/** The expansion simply returns a set of `this.mutantCount` mutants for each element in the\n\tcurrent state.\n\t*/\n\texpansion: function expansion() {\n\t\tvar mh = this,\n\t\t\tnewElements = [];\n\t\tthis.state.forEach(function (element) {\n\t\t\tnewElements = newElements.concat(mh.mutants(element));\n\t\t});\n\t\tthis.onExpand();\n\t\treturn newElements;\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'DistributionEstimation',\n\t\tserializer: function serialize_DistributionEstimation(obj) {\n\t\t\treturn [obj.__params__('mutantCount')];\n\t\t}\n\t}\n}); // declare EvolutionStrategy.\n","/** # Harmony search.\n\n[Harmony search](https://en.wikipedia.org/wiki/Harmony_search) is an optimization technique inspired\nby the improvisation process of musicians proposed by Zong Woo Geem in 2001.\n*/\nvar HarmonySearch = metaheuristics.HarmonySearch = declare(Metaheuristic, {\n\t/** The constructor takes the following parameters:\n\t*/\n\tconstructor: function HarmonySearch(params) {\n\t\tMetaheuristic.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t/** + `harmonyProbability=90%` or _hmcr_ is the chance of a value of the next element \n\t\t\tbeing taken from one existing element in the state (or _\"harmony memory\"_).\n\t\t\t*/\n\t\t\t.number('harmonyProbability', { coerce: true, defaultValue: 0.9, minimum: 0, maximum: 1 })\n\t\t\t/** + `adjustProbability=30%` or _par_ is the chance of adjusting a value of the next\n\t\t\telement.\n\t\t\t*/\n\t\t\t.number('adjustProbability', { coerce: true, defaultValue: 0.5, minimum: 0, maximum: 1 })\n\t\t\t/** + `delta=1` is the distance between neighbouring states for discrete adjustments.\n\t\t\t*/\n\t\t\t.number('delta', { coerce: true, defaultValue: 1 })\n\t\t\t/** + `fretWidth=0.01` is the maximum adjustment for continuous variables, expressed as \n\t\t\ta ratio of the range.\n\t\t\t*/\n\t\t\t.number('fretWidth', { coerce: true, defaultValue: 0.01 })\n\t\t\t;\n\t},\n\t\n\t/** At each step only one new element is generated. Each of its values is taken from another\n\telement in the state with a chance equal to `harmonyProbability`, else it is defined at random.\n\tIf the value comes from another element, it is slightly modified by `delta` with a chance equal\n\tto `adjustProbability`.\n\t*/\n\texpansion: function expansion() {\n\t\tvar mh = this,\n\t\t\trandom = this.random,\n\t\t\tmodel = this.problem.elementModel(),\n\t\t\tvalues = model.map(function (range, i) {\n\t\t\t\tif (random.randomBool(mh.harmonyProbability)) {\n\t\t\t\t\tvar value = random.choice(mh.state).values[i];\n\t\t\t\t\tif (random.randomBool(mh.adjustProbability)) {\n\t\t\t\t\t\tif (range.discrete) {\n\t\t\t\t\t\t\tvalue += random.choice([-mh.delta, mh.delta]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar span = range.max - range.min;\n\t\t\t\t\t\t\tvalue += random.random(-span, +span) * mh.fretWidth;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t} else {\n\t\t\t\t\treturn random.random(range.min, range.max);\n\t\t\t\t}\n\t\t\t});\n\t\tthis.onExpand();\n\t\treturn [this.problem.newElement(values)];\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'HarmonySearch',\n\t\tserializer: function serialize_HarmonySearch(obj) {\n\t\t\treturn [obj.__params__('harmonyProbability', 'adjustProbability', 'delta', 'fretWidth')];\n\t\t}\n\t}\n}); // declare HarmonySearch.","/** # Distribution estimation\n\nThis is a simple implementation of a [estimation of distributionalgorithm]\n(http://en.wikipedia.org/wiki/Estimation_of_distribution_algorithm). This stochastic optimization \nmethods try to estimate a probabilistic model for the characteristics of the better candidate \nsolutions. At each step many individual are randomly generated based on the current model. After all\nhave been evaluated, the model is adjusted.\n\nThe statistical model in this implementation is an histogram for each dimension (i.e. value of the\nelement representing the candidate solution). Dimensions are assumed to be independent of each \nother.\n*/\nvar DistributionEstimation = metaheuristics.DistributionEstimation = declare(Metaheuristic, {\n\t/** The constructor takes the following parameters:\n\t*/\n\tconstructor: function DistributionEstimation(params) {\n\t\tMetaheuristic.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t/** + `histogramWidth=10` is the amounts of ranges the value domain is split in order\n\t\t\tto calculate the histograms.\n\t\t\t*/\n\t\t\t.integer('histogramWidth', { coerce: true, defaultValue: 10, minimum: 2 });\n\t},\n\t\n\t/** New elements to add to the state in the `expansion` are build from the `histograms`\n\tcalculated from said state.\n\t*/\n\texpansion: function expansion(size) {\n\t\tvar mh = this,\n\t\t\texpansionRate = isNaN(this.expansionRate) ? 0.5 : +this.expansionRate,\n\t\t\thistograms = this.histograms(); // Get the current histogram of the state.\n\t\tsize = isNaN(size) ? Math.floor(expansionRate * this.size) : size |0;\n\t\treturn base.Iterable.repeat(null, size).map(function () {\n\t\t\treturn mh.elementFromHistograms(histograms);\n\t\t}).toArray();\n\t},\n\t\n\t/** The `histograms` have the frequencies of value ranges in the current state.\n\t*/\n\thistograms: function histograms() {\n\t\treturn DistributionEstimation.histograms(this.state, this.histogramWidth, \n\t\t\tthis.problem.elementModel().length);\n\t},\n\t\n\t'static histograms': function histograms(state, histogramWidth, histogramCount) {\n\t\tvar size = state.length,\n\t\t\tcounts = Iterable.iterate(function (v) { // Builds a matrix of zeroes.\n\t\t\t\treturn v.slice();\n\t\t\t}, Iterable.repeat(0, histogramWidth).toArray(), histogramCount).toArray();\n\t\tstate.forEach(function (element) {\n\t\t\telement.values.forEach(function (value, i) {\n\t\t\t\tvar bar = Math.min(histogramWidth - 1, Math.floor(element.values[i] * histogramWidth)); //FIXME Normalize.\n\t\t\t\tcounts[i][bar]++;\n\t\t\t});\n\t\t});\n\t\treturn counts.map(function (v) { // Turn counts into frequencies.\n\t\t\treturn v.map(function (v) {\n\t\t\t\treturn v / size;\n\t\t\t}); \n\t\t});\n\t},\n\t\n\t/** The method `elementFromHistogram` is used to make these new random elements.\n\t*/\n\telementFromHistograms: function elementFromHistogram(histograms) {\n\t\treturn DistributionEstimation.elementFromHistograms(histograms, this.problem, this.random);\n\t},\n\t\n\t'static elementFromHistograms': function elementFromHistogram(histograms, problem, random) {\n\t\tvar length = histograms.length,\n\t\t\tvalues = new Array(length),\n\t\t\thistogram, r;\n\t\tfor (var i = 0; i < length; ++i) {\n\t\t\thistogram = histograms[i];\n\t\t\tr = random.random();\n\t\t\tfor (var j = 0; j <= histogram.length; ++j) {\n\t\t\t\tif (j === histogram.length || (r -= histogram[j]) <= 0) {\n\t\t\t\t\tvalues[i] = Math.min(1, Math.max(0, (j + random.random()) / histogram.length));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn problem.newElement(values);\n\t},\n\t\n\t// ## Estimation of distribution as a problem. #################################################\n\t\n\t/** A `histogramProblem` is the problem of finding histograms that would generate good candidate\n\tsolutions for a given `problem`.\n\t*/\n\t'static histogramProblem': function histogramProblem(problem, size, histogramWidth) {\n\t\tsize = isNaN(size) ? 30 : Math.max(1, size |0);\n\t\thistogramWidth = isNaN(histogramWidth) ? 10 : Math.max(2, histogramWidth |0);\n\t\tvar elementLength = problem.elementLength(),\n\t\t\telementFromHistograms = this.elementFromHistograms;\n\t\t\tHistogramProblem = declare(Problem, {\n\t\t\t\t/** Each element of this problem represents an histogram for elements of the given\n\t\t\t\t`problem`. The argument `histogramWidth` defines how many ranges each histogram has.\n\t\t\t\t*/\n\t\t\t\telementLength: function elementLength() {\n\t\t\t\t\treturn elementLength * histogramWidth;\n\t\t\t\t},\n\t\t\t\t\n\t\t\t\t/** The evaluation of the elements is the average evaluation of `size` elements \n\t\t\t\tgenerated from the histogram that this element represents.\n\t\t\t\t*/\n\t\t\t\tevaluation: function evaluation(element) {\n\t\t\t\t\tvar histograms = this.mapping(element),\n\t\t\t\t\t\telements = base.Iterable.repeat(null, size).map(function () {\n\t\t\t\t\t\t\treturn elementFromHistograms(histograms, problem, problem.random);\n\t\t\t\t\t\t});\n\t\t\t\t\treturn Future.all(iterable(elements).map(function (e) {\n\t\t\t\t\t\treturn Future.when(e.evaluate());\n\t\t\t\t\t})).then(function (evaluations) {\n\t\t\t\t\t\treturn iterable(evaluations).sum() / evaluations.length;\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\t\n\t\t\t\t/** The `mapping` simply assembles the histograms and normalizes its frequencies.\n\t\t\t\t*/\n\t\t\t\tmapping: function mapping(element) {\n\t\t\t\t\tvar histograms = [],\n\t\t\t\t\t\thistogram, sum;\n\t\t\t\t\tfor (var i = 0; i < element.length; ++i) {\n\t\t\t\t\t\thistogram = element.values.slice(i * histogramWidth, (i+1) * histogramWidth);\n\t\t\t\t\t\tsum = iterable(histogram).sum();\n\t\t\t\t\t\thistograms[i] = histogram.map(function (f) { // Normalization\n\t\t\t\t\t\t\treturn f / sum;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\treturn histograms;\n\t\t\t\t},\n\t\t\t\t\n\t\t\t\t/** The comparison function is the same as the original problem's.\n\t\t\t\t*/\n\t\t\t\tcompare: problem.compare\n\t\t\t});\n\t\treturn new HistogramProblem({ random: problem.random });\n\t},\n\t\n\t// ## Other ####################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'DistributionEstimation',\n\t\tserializer: function serialize_DistributionEstimation(obj) {\n\t\t\treturn [obj.__params__('histogramWidth')];\n\t\t}\n\t}\n}); // declare DistributionEstimation.\n","/** # Gradient descent\n\n[Gradient descent](http://en.wikipedia.org/wiki/Gradient_descent) is an iterative optimization \nmethod, similar to Hill Climbing. The candidate solution is treated as a point in a multidimensional\nsearch space, and the gradient that the function being optimized defines in said domain is used to\nmove the current solution in the steepest direction.\n*/\nvar GradientDescent = metaheuristics.GradientDescent = declare(Metaheuristic, {\n\t/** The constructor takes the following parameters:\n\t*/\n\tconstructor: function HillClimbing(params) {\n\t\tMetaheuristic.call(this, params);\n\t\tinitialize(this, params)\n\t\t/** + `delta=1`: the maximum distance considered by gradient estimators.\n\t\t*/\n\t\t\t.number('delta', { coerce: true, defaultValue: 1 })\n\t\t/** + `size=1`: the state's size is 1 by default. This may be increased, resulting in many \n\t\tparallel descents.\n\t\t*/\n\t\t\t.integer('size', { coerce: true, defaultValue: 1, minimum: 1 });\n\t},\n\t\n\t/** A `gradient` is the vector for the direction of steepest descent (or ascent) of the function \n\tto be optimized at the given `element`. If the function is not differentiable an approximation\n\tcan be used. Since estimators may require element evaluation, which can be asynchronous, it must\n\tbe considered that this function may return a future.\n\t\n\tThe default implementation is based on the finite difference method proposed by [Kiefer and \n\tWolfowitz](http://projecteuclid.org/euclid.aoms/1177729392).\n\t*/\n\tgradient: function gradient(element) {\n\t\treturn this.gradientFiniteDifferences(element);\n\t},\n\t\n\t/** The `rate` is a number by which the gradient is multiplied before adding it to the current \n\tpoint to advance to the next step. The default implementation returns `1/step`, as [Kiefer and \n\tWolfowitz suggest](http://projecteuclid.org/euclid.aoms/1177729392).\n\t*/\n\trate: function rate(step) {\n\t\tstep = isNaN(step) ? this.step : step |0;\n\t\treturn 1 / Math.max(1, step);\n\t},\n\t\n\t/** The `estimatorWidth` is a number used by some gradient estimators. By default it returns \n\t`step^(-1/3) * delta`, similar to what [Kiefer and Wolfowitz suggest](http://projecteuclid.org/euclid.aoms/1177729392).\n\t*/\n\testimatorWidth: function estimatorWidth(step, delta) {\n\t\tstep = isNaN(step) ? this.step : step |0;\n\t\tdelta = isNaN(delta) ? this.delta : +delta;\n\t\treturn Math.pow(Math.max(1, step), -1/3) * delta;\n\t},\n\t\n\t/** In the `update`, each element in the state is moved in the search domain. The movement is \n\tset by its gradient in the direction of the optimization. The distance is defined by the `rate`\n\tfor the current step.\n\t*/\n\tupdate: function update() {\n\t\tvar mh = this,\n\t\t\trate = this.rate(this.step);\n\t\treturn Future.all(this.state.map(function (elem) {\n\t\t\treturn Future.then(mh.gradient(elem), function (gradient) {\n\t\t\t\tvar newValues = gradient.map(function (gradientValue, i) {\n\t\t\t\t\treturn elem.values[i] - gradientValue * rate;\n\t\t\t\t});\n\t\t\t\treturn mh.problem.newElement(newValues);\n\t\t\t});\n\t\t})).then(function (elems) {\n\t\t\treturn mh.evaluate(elems);\n\t\t}).then(function (elems) {\n\t\t\tmh.state = elems;\n\t\t\tmh.onUpdate();\n\t\t\treturn mh;\n\t\t});\n\t},\n\t\n\t// ## Gradient estimators ######################################################################\n\t\n\t/** A gradient estimator at the given `element` by finite differences.\n\t*/\n\tgradientFiniteDifferences: function gradientFiniteDifferences(element, width) {\n\t\twidth = isNaN(width) ? this.estimatorWidth() : +width;\n\t\tvar mh = this;\n\t\treturn Future.all(element.values.map(function (value, i) {\n\t\t\tvar left = element.modification(i, value - width),\n\t\t\t\tright = element.modification(i, value + width);\n\t\t\treturn Future.then(left.evaluate(), function (leftEvaluation) {\n\t\t\t\treturn Future.then(right.evaluate(), function (rightEvaluation) {\n\t\t\t\t\tvar comp = mh.problem.compare(left, right);\n\t\t\t\t\tcomp = comp === 0 ? comp : comp > 0 ? 1 : -1;\n\t\t\t\t\treturn (leftEvaluation - rightEvaluation) * comp / 2 / width;\n\t\t\t\t});\n\t\t\t});\n\t\t}));\n\t},\n\t\n\t/** A gradient estimator at the given `element` for [Simultaneous Perturbation Stochastic \n\tApproximation](http://www.jhuapl.edu/SPSA/).\n\t*/\n\tgradientSimultaneousPerturbation: function gradientSimultaneousPerturbation(width, element) {\n\t\tthrow new Error('GradientDescent.gradientSimultaneousPerturbation() is not implemented!');//TODO\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'GradientDescent',\n\t\tserializer: function serialize_GradientDescent(obj) {\n\t\t\treturn [obj.__params__('delta')];\n\t\t}\n\t}\n}); // declare GradientDescent.","/** # _\"Hello World\"_ problem\n\nAs it sounds, `HelloWorld` is a simple problem class, probably only useful for testing purposes.\n*/\nproblems.HelloWorld = declare(Problem, { \n\ttitle: \"Hello world\",\n\tdescription: \"Simple problem where each element is a string, and the \"+\n\t\t\"optimization goes towards the target string.\",\n\t\n\t/** In this simple problem each element is a string, and the optimization goes towards the \n\ttarget string. The string to match is specified by the `target` parameter (`\"Hello world!\"` by \n\tdefault).\n\t*/\t\n\tconstructor: function HelloWorld(params){\n\t\tProblem.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t.string('target', { coerce: true, defaultValue: 'Hello world!' });\n\t\t\n\t\tthis.__target__ = iterable(this.target).map(function (c) {\n\t\t\treturn c.charCodeAt(0);\n\t\t}).toArray();\n\t\t/** The elements' length is equal to the length of the target string. Every value is between \n\t\t32 (inclusive) and 127 (exclusive), which is the range of visible characters in ASCII.\n\t\t*/\n\t\tthis.__elementModel__ = Iterable.repeat({ min: 32, max: 127, discrete: true }, this.target.length).toArray();\n\t},\n\t\n\t/** An element's values are always numbers. These are converted to a string by converting each \n\tnumber to its corresponding Unicode character.\n\t*/\n\tmapping: function mapping(element) {\n\t\treturn element.values.map(function (v) {\n\t\t\treturn String.fromCharCode(Math.floor(v));\n\t\t}).join('');\n\t},\n\t\t\t\n\t/** An element evaluation is equal to its distance from target string.\n\t*/\n\tevaluation: function evaluation(element) {\n\t\treturn element.manhattanDistance(this.__target__, element.values);\n\t},\t\t\n\t\n\t/** Since elements' evaluation is a distance, this value must be minimized to guide the search \n\ttowards the target string.\n\t*/\n\tcompare: Problem.prototype.minimization,\n\t\n\t/** An element is sufficient when its equal to the target string.\n\t*/\n\tsufficientElement: function sufficientElement(element) {\n\t\treturn this.mapping(element) === this.target;\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'HelloWorld',\n\t\tserializer: function serialize_HelloWorld(obj) {\n\t\t\treturn [obj.__params__('target')];\n\t\t}\n\t}\n}); // declare HelloWorld.\n","/** # Test beds\n\nProblem builder for test beds of algorithms in this library.\n*/\n\n/** The function `testbed` is a shortcut used to define the test problems.\n*/\nvar TestBed = problems.TestBed = declare(Problem, {\n\tconstructor: function TestBed(spec) {\n\t\tProblem.call(this, spec);\n\t\tthis.title = spec.title;\n\t\t\n\t\tvar minimumValue = isNaN(spec.minimumValue) ? -1e6 : +spec.minimumValue,\n\t\t\tmaximumValue = isNaN(spec.maximumValue) ? +1e6 : +spec.maximumValue,\n\t\t\tlength = isNaN(spec.length) ? 2 : +spec.length;\n\t\tthis.__elementModel__ = Iterable.repeat({ min: minimumValue, max: maximumValue, discrete: !!spec.discreteDomain }, length).toArray();\n\t\t\n\t\tthis.evaluation = function evaluation(element) {\n\t\t\treturn spec.evaluation(element.values);\n\t\t};\n\t\t\n\t\t/** If an optimum value is provided (`spec.optimumValue`) it is added to the termination\n\t\tcriteria.\n\t\t*/\n\t\tif (spec.hasOwnProperty('optimumValue')) {\n\t\t\tthis.sufficientElement = function sufficientElement(element) {\n\t\t\t\treturn Math.abs(element.evaluation - spec.optimumValue) < element.resolution;\n\t\t\t};\n\t\t}\n\t}\n});\n\t\n/** Testbed problems taken from the web (e.g. \n[1](http://en.wikipedia.org/wiki/Test_functions_for_optimization),\n[2](http://www.sfu.ca/~ssurjano/optimization.html), \n[3](http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/TestGO.htm)\n).\n*/\nproblems.testbeds = {\n\t/** The [Ackley's function](http://www.sfu.ca/~ssurjano/ackley.html) (in 2 dimensions) has an\n\tglobal optimum surrounded by an outer region that is rather flat, yet with many local optima. \n\t*/\n\tAckley: function Ackley(length, a, b, c) {\n\t\ta = isNaN(a) ? 20 : +a;\n\t\tb = isNaN(b) ? 0.2 : +b;\n\t\tc = isNaN(c) ? 2 * Math.PI : +c;\n\t\treturn new TestBed({\n\t\t\ttitle: \"Ackley testbed\",\n\t\t\tlength: length,\n\t\t\tobjectives: -Infinity,\n\t\t\tminimumValue: -32.768, \n\t\t\tmaximumValue: +32.768,\t\t\t\n\t\t\toptimumValue: 0,\t\t\t\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar term1 = 0, term2 = 0, d = vs.length, v;\n\t\t\t\tfor (var i = 0; i < d; ++i) {\n\t\t\t\t\tv = vs[i];\n\t\t\t\t\tterm1 += v * v;\n\t\t\t\t\tterm2 += Math.cos(c * v);\n\t\t\t\t}\n\t\t\t\treturn -a * Math.exp(-b * Math.sqrt(term1 / d)) - Math.exp(term2 / d) + a + Math.exp(1);\n\t\t\t}\n\t\t});\n\t},\n\n\t/** The cross-in-tray is a function with many local optima, both minima and maxima. If minimized\n\tit has 4 global minima.\n\t*/\n\tcrossInTray: function crossInTray(target) {\n\t\ttarget = isNaN(target) ? -Infinity : +target;\n\t\treturn new TestBed({\n\t\t\ttitle: \"cross-in-tray testbed\",\n\t\t\tlength: 2,\n\t\t\tobjectives: target,\n\t\t\tminimumValue: -10,\n\t\t\tmaximumValue: +10,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar x = vs[0], y = vs[1];\n\t\t\t\treturn -0.0001 * Math.pow(\n\t\t\t\t\tMath.abs(Math.sin(x) * Math.sin(y) * Math.exp(Math.abs(100 - Math.sqrt(x*x + y*y) / Math.PI))) + 1,\n\t\t\t\t\t0.1);\n\t\t\t}\t\t\t\n\t\t});\n\t},\n\t\n\t/** The [Griewank function](http://www.sfu.ca/~ssurjano/griewank.html) has many local optima\n\tregularly distributed.\n\t*/\n\tGriewank: function Griewank(length) {\n\t\treturn new TestBed({\n\t\t\ttitle: \"Griewank testbed\",\n\t\t\tlength: length,\n\t\t\tminimumValue: -600,\n\t\t\tmaximumValue: +600,\n\t\t\toptimumValue: 0,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar sum = 0, prod = 1, len = vs.length, v;\n\t\t\t\tfor (var i = 0; i < len; ++i) {\n\t\t\t\t\tv = vs[i];\n\t\t\t\t\tsum += v * v / 4000;\n\t\t\t\t\tprod *= Math.cos(v / Math.sqrt(i+1));\n\t\t\t\t}\n\t\t\t\treturn sum - prod + 1;\n\t\t\t}\t\t\t\n\t\t});\n\t},\n\t\n\t/** The [Levy function](http://www.sfu.ca/~ssurjano/levy.html) is multimodal, with some \n\tdifficult local minima regions.\n\t*/\n\tLevy: function Levy(length) {\n\t\treturn new TestBed({\n\t\t\ttitle: \"Levy testbed\",\n\t\t\tlength: length,\n\t\t\tobjectives: -Infinity,\n\t\t\tminimumValue: -10,\n\t\t\tmaximumValue: +10,\n\t\t\toptimumValue: 0,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar sum = 0, d = vs.length, \n\t\t\t\t\tw1 = 1 + (vs[0] - 1) / 4, wd = 1 + (vs[d-1] - 1) / 4, w;\n\t\t\t\tfor (var i = 1; i < d - 1; ++i) {\n\t\t\t\t\tw = 1 + (vs[i] - 1) / 4;\n\t\t\t\t\tsum += Math.pow(w - 1, 2) * (1 + 10 * Math.pow(Math.sin(Math.PI * w + 1), 2));\n\t\t\t\t}\n\t\t\t\treturn Math.pow(Math.sin(Math.PI * w1), 2) + sum +\n\t\t\t\t\tMath.pow(wd - 1, 2) * (1 + Math.pow(Math.sin(2 * Math.PI * wd), 2));\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/** The [Michalewicz function](http://www.sfu.ca/~ssurjano/michal.html) is a multimodal function\n\twith a number local minima equal to the factorial of the number of dimensions; and it has steep \n\tvalleys and ridges.\n\t*/\n\tMichalewicz: function Michalewicz(length, m) {\n\t\tm = isNaN(m) ? 10 : +m;\n\t\treturn new TestBed({\n\t\t\ttitle: \"Michalewicz testbed\",\n\t\t\tlength: length,\n\t\t\tobjectives: -Infinity,\n\t\t\tminimumValue: 0,\n\t\t\tmaximumValue: Math.PI,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar sum = 0, d = vs.length, v;\n\t\t\t\tfor (var i = 0; i < d; ++i) {\n\t\t\t\t\tv = vs[i];\n\t\t\t\t\tsum += Math.sin(v) * Math.pow(Math.sin((i+1) * v * v / Math.PI), 2 * m);\n\t\t\t\t}\n\t\t\t\treturn -sum;\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/** [Perm(0,d,beta) function](http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/TestGO_files/Page2545.htm).\n\t*/\n\tperm0: function perm0(d, beta) {\n\t\td = isNaN(d) ? 2 : Math.min(1, d|0);\n\t\tbeta = isNaN(beta) ? 0 : +beta;\n\t\treturn new TestBed({\n\t\t\ttitle: \"Perm(0,\"+ d +\",\"+ beta +\") testbed\",\n\t\t\tlength: d,\n\t\t\tobjectives: -Infinity,\n\t\t\tminimumValue: -d,\n\t\t\tmaximumValue: +d,\n\t\t\toptimumValue: 0,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar sum1 = 0, sum2, v;\n\t\t\t\tfor (var i = 0; i < d; ++i) {\n\t\t\t\t\tsum2 = 0;\n\t\t\t\t\tfor (var j = 0; j < d; ++j) {\n\t\t\t\t\t\tsum2 += (j+1 + beta) * (Math.pow(vs[j], i+1) - Math.pow(1 / (j+1), i+1));\n\t\t\t\t\t}\n\t\t\t\t\tsum1 += sum2 * sum2;\n\t\t\t\t}\n\t\t\t\treturn sum1;\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/** The [Rastrigin function](http://www.sfu.ca/~ssurjano/rastr.html) is highly multimodal yet\n\tlocal minima are regularly distributed.\n\t*/\n\tRastrigin: function Rastrigin(length) {\n\t\treturn new TestBed({\n\t\t\ttitle: \"Rastrigin testbed\",\n\t\t\tlength: length,\n\t\t\tobjectives: -Infinity,\n\t\t\tminimumValue: -5.12,\n\t\t\tmaximumValue: +5.12,\n\t\t\toptimumValue: 0,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar result = 0, d = vs.length, v;\n\t\t\t\tfor (var i = 0; i < d; ++i) {\n\t\t\t\t\tv = vs[i];\n\t\t\t\t\tresult += v * v - 10 * Math.cos(2 * Math.PI * v);\n\t\t\t\t}\n\t\t\t\treturn 10 * d + result;\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/*** The [Rosenbrock function](http://en.wikipedia.org/wiki/Rosenbrock_function) is a function \n\tused as a performance test problem for optimization algorithms introduced by Howard H. \n\tRosenbrock in 1960. The global minimum is inside a long, narrow, parabolic shaped flat valley. \n\tTo find the valley is trivial, yet to converge to the global minimum (zero) is difficult.\n\t*/\n\tRosenbrock: function Rosenbrock(length, a, b) {\n\t\ta = isNaN(a) ? 1 : +a;\n\t\tb = isNaN(b) ? 100 : +b;\n\t\treturn new TestBed({\n\t\t\ttitle: \"Rosenbrock testbed\",\n\t\t\tlength: length,\n\t\t\tobjectives: -Infinity,\n\t\t\toptimumValue: 0,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar result = 0;\n\t\t\t\tfor (var i = 1; i < vs.length; ++i) {\n\t\t\t\t\tresult += b * Math.pow(vs[i-1] * vs[i-1] - vs[i], 2) + Math.pow(vs[i-1] - a, 2);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/** The [Schwefel function](http://www.sfu.ca/~ssurjano/schwef.html) is a complex test with many\n\tlocal optima.\n\t*/\n\tSchwefel: function Schwefel(length) {\n\t\treturn new TestBed({\n\t\t\ttitle: \"Schwefel testbed\",\n\t\t\tlength: length,\n\t\t\tobjectives: -Infinity,\n\t\t\tminimumValue: -500,\n\t\t\tmaximumValue: +500,\n\t\t\toptimumValue: 0,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar result = 0, d = vs.length, v;\n\t\t\t\tfor (var i = 0; i < d; ++i) {\n\t\t\t\t\tv = vs[i];\n\t\t\t\t\tresult += v * Math.sin(Math.sqrt(Math.abs(v)));\n\t\t\t\t}\n\t\t\t\treturn 418.9829 * d - result;\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/** The [sphere function](http://www.sfu.ca/~ssurjano/spheref.html) minimizes the sum of the\n\tsquares for every value in the input vector. It has as many local minima as dimensions the\n\tsearch space has, but still only one global minimum (zero). \n\t*/\n\tsphere: function sphere(length) {\n\t\treturn new TestBed({\n\t\t\ttitle: \"sphere testbed\",\n\t\t\tlength: length,\n\t\t\tobjectives: -Infinity,\n\t\t\toptimumValue: 0,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar result = 0;\n\t\t\t\tfor (var i = 0; i < vs.length; ++i) {\n\t\t\t\t\tresult += vs[i] * vs[i];\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/** A very simple class of problems that deal with optimizing the sum of the elements' values. \n\tProbably the simplest optimization problem that can be defined. It has no local optima, and it\n\tdraws a simple and gentle slope towards to global optimum.\n\t*/\n\tsumOptimization: function sumOptimization(length, target) {\n\t\tlength = isNaN(length) ? 2 : Math.max(1, length|0);\n\t\ttarget = isNaN(target) ? -Infinity : +target;\n\t\treturn new TestBed({\n\t\t\ttitle: \"sum optimization testbed\",\t\t\t\n\t\t\tlength: length,\n\t\t\tobjectives: target,\n\t\t\tminimumValue: 0,\n\t\t\tmaximumValue: +1,\n\t\t\toptimumValue: target === -Infinity ? 0 : target === +Infinity ? length : target,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar result = 0, len = vs.length;\n\t\t\t\tfor (var i = 0; i < len; ++i) {\n\t\t\t\t\tresult += vs[i];\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t},\n\t\n\t// ## Multi-objective ##########################################################################\n\t\n\t/** Multiobjective optimization problems taken from [_\"Comparison of Multiobjective Evolutionary\n\tAlgorithms: Empirical Results\"_ by Zitzler, Deb and Thiele (2000)](http://www.tik.ee.ethz.ch/sop/publicationListFiles/zdt2000a.pdf).\n\t*/\n\tZDT1: function ZDT1(length) {\n\t\tlength = isNaN(length) ? 30 : Math.max(1, length|0);\n\t\treturn new TestBed({\n\t\t\ttitle: \"Zitzler-Deb-Thiele function 1\",\t\t\t\n\t\t\tlength: length,\n\t\t\tobjectives: [-Infinity, -Infinity],\n\t\t\tminimumValue: 0,\n\t\t\tmaximumValue: +1,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar f1 = vs[0],\n\t\t\t\t\tg = iterable(vs).tail().sum() / (vs.length - 1) * 9,\n\t\t\t\t\th = 1 - Math.sqrt(f1 / g);\n\t\t\t\treturn [f1, g * h];\n\t\t\t}\n\t\t});\n\t},\n\t\n\tZDT2: function ZDT2(length) {\n\t\tlength = isNaN(length) ? 30 : Math.max(1, length|0);\n\t\treturn new TestBed({\n\t\t\ttitle: \"Zitzler-Deb-Thiele function 2\",\t\t\t\n\t\t\tlength: length,\n\t\t\tobjectives: [-Infinity, -Infinity],\n\t\t\tminimumValue: 0,\n\t\t\tmaximumValue: +1,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar f1 = vs[0],\n\t\t\t\t\tg = iterable(vs).tail().sum() / (vs.length - 1) * 9,\n\t\t\t\t\th = 1 - Math.pow(f1 / g, 2);\n\t\t\t\treturn [f1, g * h];\n\t\t\t}\n\t\t});\n\t},\n\t\n\tZDT3: function ZDT3(length) {\n\t\tlength = isNaN(length) ? 30 : Math.max(1, length|0);\n\t\treturn new TestBed({\n\t\t\ttitle: \"Zitzler-Deb-Thiele function 3\",\t\t\t\n\t\t\tlength: length,\n\t\t\tobjectives: [-Infinity, -Infinity],\n\t\t\tminimumValue: 0,\n\t\t\tmaximumValue: +1,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar f1 = vs[0],\n\t\t\t\t\tg = iterable(vs).tail().sum() / (vs.length - 1) * 9,\n\t\t\t\t\th = 1 - Math.sqrt(f1 / g) - (f1 / g) * Math.sin(10 * Math.PI * f1);\n\t\t\t\treturn [f1, g * h];\n\t\t\t}\n\t\t});\n\t}\n}; // problems.testbeds","/** # N queens puzzle problem\n\nA generalized version of the classic [8 queens puzzle](http://en.wikipedia.org/wiki/Eight_queens_puzzle),\na problem of placing 8 chess queens on an 8x8 chessboard so that no two queens may attack each \nother.\n*/\nproblems.NQueensPuzzle = declare(Problem, {\n\ttitle: \"N-queens puzzle\",\n\tdescription: \"Generalized version of the classic problem of placing \"+\n\t\t\"8 chess queens on an 8x8 chessboard so that no two queens attack each other.\",\n\t\n\t/** The constructor takes only one particular parameter:\n\t*/\t\n\tconstructor: function NQueensPuzzle(params){\n\t\tProblem.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t/** + `N=8`: the number of queens and both dimensions of the board.\n\t\t\t*/\n\t\t\t.integer('N', { coerce: true, defaultValue: 8 });\n\t\t\n\t\tthis.__rowRange__ = Iterable.range(this.N).toArray();\n\t\t/** The representation is an array of `N` positions, indicating the row of the queen for \n\t\teach column.\n\t\t*/\n\t\tthis.__elementModel__ = Iterable.repeat({ min: 0, max: this.N - 1, discrete: true }, this.N - 1).toArray();\n\t},\n\t\t\n\tmapping: function mapping(element) {\n\t\treturn element.setMapping(this.__rowRange__);\n\t},\n\t\n\t/** The elements' evaluation is the count of diagonals shared by queens pairwise.\n\t*/\n\tevaluation: function evaluation(element) {\n\t\tvar rows = this.mapping(element),\n\t\t\tcount = 0;\n\t\trows.forEach(function (row, i) {\n\t\t\tfor (var j = 1; i + j < rows.length; j++) {\n\t\t\t\tif (rows[j] == row + j || rows[j] == row - j) {\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn count;\n\t},\n\t\n\t/** Of course, the number of shared diagonals must be minimized.\n\t*/\n\tcompare: Problem.prototype.minimization,\n\t\n\t/** It is sufficient when no pair of queens share diagonals.\n\t*/\n\tsufficientElement: function sufficientElement(element) {\n\t\treturn element.evaluation === 0;\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'NQueensPuzzle',\n\t\tserializer: function serialize_NQueensPuzzle(obj) {\n\t\t\treturn [obj.__params__('N')];\n\t\t}\n\t}\n}); // declare NQueensPuzzle\n","/** # Knapsack problem\n\nThe [Knapsack problem](http://en.wikipedia.org/wiki/Knapsack_problem) is a classic combinatorial \noptimization problem. Given a set of items, each with cost and worth, a selection must be obtained \n(to go into the knapsack) so that the total cost does not exceed a certain limit, while maximizing \nthe total worth.\n*/\nproblems.KnapsackProblem = declare(Problem, {\n\ttitle: \"Knapsack problem\",\n\tdescription: \"Given a set of items with a cost and a worth, select a subset \"+\n\t\t\" maximizing the worth sum but not exceeding a cost limit.\",\n\t\n\t/** `items` is the superset of all candidate solutions. Must be an object with each item by \n\tname. Each item must have a cost and a worth, and may have an amount (1 by default).\n\t*/\n\titems: {\n\t\titemA: { cost: 12, worth: 4 }, \n\t\titemB: { cost: 2, worth: 2 }, \n\t\titemC: { cost: 1, worth: 2 }, \n\t\titemD: { cost: 1, worth: 1 },\n\t\titemE: { cost: 4, worth: 10 }\n\t},\n\t\n\t/** The problem is based on a given a set of items, each with a cost and a worth. The solution \n\tis a subset of items with maximum worth sum that does not exceed a cost limit.\n\t\n\tThe parameters specific for this problem are:\n\t*/\t\n\tconstructor: function KnapsackProblem(params){\n\t\tProblem.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t/** + `limit=15` is the cost limit that candidate solution should not exceed.\n\t\t\t*/\n\t\t\t.number('limit', { coerce: true, defaultValue: 15 })\n\t\t\t/** + `defaultAmount=1` is the amount available for each item by default.\n\t\t\t*/\n\t\t\t.integer('amount', { coerce: true, defaultValue: 1, minimum: 1 })\n\t\t\t/** + `items` is the set of items.\n\t\t\t*/\n\t\t\t.object('items', { ignore: true });\n\t\t/** The problem's representation is an array with a number for each item, in alphabetical \n\t\torder. Each number holds the selected amount for each item (from 0 up to the item's amount).\n\t\t*/\n\t\tvar items = this.items;\n\t\tthis.__elementItems__ = Object.keys(items);\n\t\tthis.__elementItems__.sort();\n\t\tthis.__elementModel__ = this.__elementItems__.map(function (name) {\n\t\t\treturn { min: 0, max: +items[name].amount || 1, discrete: true };\n\t\t});\n\t},\n\t\n\t/** All elements are mapped to an object with the selected amount associated to each item.\n\t*/\n\tmapping: function mapping(element) {\n\t\treturn iterable(this.__elementItems__).zip(Math.floor(element.values)).toObject();\n\t},\n\t\n\t/** All elements are evaluated by calculating the worth of all included items. If their cost is \n\tgreater than the problem's limit, the worth becomes negative.\n\t*/\n\tevaluation: function evaluation(element) {\n\t\tvar selection = this.mapping(element),\n\t\t\titems = this.items,\n\t\t\tworth = 0,\n\t\t\tcost = 0;\n\t\titerable(selection).forEachApply(function (name, amount) {\n\t\t\tvar item = items[name];\n\t\t\tworth += item.worth * amount;\n\t\t\tcost += item.cost * amount;\n\t\t});\n\t\treturn cost > problem.limit ? -worth : worth; //FIXME Too punishing for going over the limit.\n\t},\n\t\n\t/** The best selection of items is the one that maximizes worth, without exceeding the cost \n\tlimit.\n\t*/\n\tcompare: Problem.prototype.maximization,\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'KnapsackProblem',\n\t\tserializer: function serialize_KnapsackProblem(obj) {\n\t\t\treturn [obj.__params__('limit', 'amount', 'items')];\n\t\t}\n\t}\n}); // declare KnapsackProblem","/** # Association rules learning.\n\nAssociation rules are relations between variables found in databases. Many methods have been \nresearched to automatically search for interesting rules in large data sets.\n\nFor further information, see:\n\n+ Agrawal, R.; ImieliƄski, T.; Swami, A. [_\"Mining association rules between sets of items in large \n\tdatabases\"_](http://dl.acm.org/citation.cfm?doid=170035.170072). Proceedings of the 1993 ACM \n\tSIGMOD international conference on Management of data.\n\t\n+ Sergey Brin, Rajeev Motwani, Jeffrey D. Ullman, and Shalom Tsur. [_\"Dynamic itemset counting and \n\timplication rules for market basket data\"_](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.25.3707).\n\tSIGMOD 1997, Proceedings ACM SIGMOD International Conference on Management of Data.\n*/\nvar AssociationRuleLearning = problems.AssociationRuleLearning = declare(Problem, {\n\t/** The constructors take the following parameters:\n\t*/\n\tconstructor: function AssociationRuleLearning(params) {\n\t\tProblem.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t/** + A `dataset` with which to test the association rules. It must be a sequence of\n\t\t\trecords (each an object).\n\t\t\t*/\n\t\t\t.object('dataset', { defaultValue: [] })\n\t\t\t/** + A set of `keys` for the fields in the dataset.\n\t\t\t*/\n\t\t\t.array('keys');\n\t\t/** The elements represent classic association rules, which treat each record as a set of \n\t\t`keys`. Each position in the element's values tells if the corresponding key belongs to the \n\t\trule's antecedent or consequent; or neither. Empty antecedents and consequents always \n\t\tevaluate to false.\n\t\t*/\n\t\tthis.__elementModel__ = Iterable.repeat({ min: 0, max: 2, discrete: true }, this.keys.length).toArray();\n\t},\n\t\n\t// ## Evaluation ###############################################################################\n\t\n\t/** Turns the element into an association rule, i.e. an object with two disjunct sets of keys:\n\tone for the antecedent and the other for the consequent.\n\t*/\n\tmapping: function mapping(element) {\n\t\tvar problem = this,\n\t\t\tantecedent = [], \n\t\t\tconsequent = [];\n\t\telement.values.forEach(function (v, i) {\n\t\t\tswitch (v) {\n\t\t\t\tcase 1: antecedent.push(problem.keys[i]); break;\n\t\t\t\tcase 2: consequent.push(problem.keys[i]); break;\n\t\t\t}\n\t\t});\n\t\treturn { antecedent: antecedent, consequent: consequent };\n\t},\n\t\n\tkeysComply: function keysComply(keys, record) {\n\t\tvar it = iterable(keys);\n\t\treturn !it.isEmpty() && it.all(function (key) {\n\t\t\treturn !!record[key];\n\t\t});\n\t},\n\t\n\t/** This method checks if the given `record` complies with the given `rule`'s `antecedent`.\n\t*/\n\tantecedentComplies: function antecedentComplies(rule, record) {\n\t\treturn this.keysComply(rule.antecedent, record);\n\t},\n\t\n\t/** This method checks if the given `record` complies with the given `rule`'s `consequent`.\n\t*/\n\tconsequentComplies: function consequentComplies(rule, record) {\n\t\treturn this.keysComply(rule.consequent, record);\n\t},\n\t\n\t/** The `measures` of an `element` (representing an association rule) include the usual \n\tstatistics:\n\t\n\t+ `antecedentCount`, `consequentCount`, `ruleCount` are the numbers of records that comply with\n\t\tthis rules's antecedent, consequent and both.\n\t+ `antecedentSupport`, `consequentSupport`, `ruleSupport` are the same numbers as before but \n\t\tdivided by the total number of records.\n\t+ `confidence` can be interpreted as an estimation of _P(C|A)_ for rules _A -> C_.\n\t+ `lift` is the ratio of the observed support to that expected if A and C were independent.\n\t+ `conviction` is the ratio of the expected frequency that A occurs without C.\n\t+ `leverage` measures the difference of A and C appearing together in the data set and what \n\t\twould be expected if X and Y where statistically dependent.\n\t*/\n\tmeasures: function measures(element) {\n\t\tvar problem = this,\n\t\t\tresult = {},\n\t\t\ttotalCount = 0, \n\t\t\tantecedentCount = 0, \n\t\t\tconsequentCount = 0, \n\t\t\truleCount = 0,\n\t\t\trule = this.mapping(element);\n\t\titerable(this.dataset).forEach(function (record) {\n\t\t\tif (problem.antecedentComplies(rule, record)) {\n\t\t\t\t++antecedentCount;\n\t\t\t\tif (problem.consequentComplies(rule, record)) {\n\t\t\t\t\t++consequentCount;\n\t\t\t\t\t++ruleCount;\n\t\t\t\t}\n\t\t\t} else if (problem.consequentComplies(rule, record)) {\n\t\t\t\t++consequentCount;\n\t\t\t}\n\t\t\t++totalCount;\n\t\t});\n\t\tresult.antecedentCount = antecedentCount;\n\t\tresult.consequentCount = consequentCount;\n\t\tresult.ruleCount = ruleCount;\n\t\tresult.antecedentSupport = totalCount > 0 ? antecedentCount / totalCount : 0;\n\t\tresult.consequentSupport = totalCount > 0 ? consequentCount / totalCount : 0;\n\t\tresult.ruleSupport = totalCount > 0 ? ruleCount / totalCount : 0;\n\t\tresult.confidence = antecedentCount > 0 ? ruleCount / antecedentCount : 0;\n\t\tresult.lift = result.consequentSupport > 0 ? result.confidence / result.consequentSupport : 0;\n\t\tresult.conviction = result.consequentSupport > 0 && result.confidence < 1 ? (1 - result.consequentSupport) / (1 - result.confidence) : 0;\n\t\tresult.leverage = result.ruleSupport - result.antecedentSupport * result.consequentSupport;\n\t\treturn result;\n\t}, \n\t\n\t/** By default, the evaluation uses the rule's confidence. It assumes the elements has a \n\t`dataset` member. Measures are cached in a `__measures__` property in the element.\n\t*/\n\tevaluation: function evaluation(element) {\n\t\tif (!element.__measures__) {\n\t\t\telement.__measures__ = this.measures(element);\n\t\t}\n\t\treturn element.__measures__.confidence;\n\t}\t\n}); // declare AssociationRule.","// See __prologue__.js\n\tbase.Iterable.chain(exports, metaheuristics, problems).forEachApply(function (id, def) {\n\t\tif (typeof def === 'function' && def.__SERMAT__ && def.__SERMAT__.identifier) {\n\t\t\tdef.__SERMAT__.identifier = exports.__package__ +'.'+ def.__SERMAT__.identifier;\n\t\t\texports.__SERMAT__.include.push(def);\n\t\t}\n\t});\n\treturn exports;\n});"]} \ No newline at end of file +{"version":3,"sources":["../src/__prologue__.js","../src/Element.js","../src/Problem.js","../src/Metaheuristic.js","../src/metaheuristics/HillClimbing.js","../src/metaheuristics/GeneticAlgorithm.js","../src/metaheuristics/BeamSearch.js","../src/metaheuristics/SimulatedAnnealing.js","../src/metaheuristics/ParticleSwarm.js","../src/metaheuristics/DifferentialEvolution.js","../src/metaheuristics/EvolutionStrategy.js","../src/metaheuristics/HarmonySearch.js","../src/metaheuristics/DistributionEstimation.js","../src/metaheuristics/GradientDescent.js","../src/problems/HelloWorld.js","../src/problems/testbeds.js","../src/problems/NQueensPuzzle.js","../src/problems/KnapsackProblem.js","../src/problems/associationRules.js","../src/__epilogue__.js"],"names":[],"mappings":"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","file":"inveniemus.js","sourcesContent":["/** Package wrapper and layout.\n*/\n(function (global, init) { \"use strict\"; // Universal Module Definition.\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(['creatartis-base'], init); // AMD module.\n\t} else if (typeof module === 'object' && module.exports) {\n\t\tmodule.exports = init(require('creatartis-base')); // CommonJS module.\n\t} else { // Browser or web worker (probably).\n\t\tglobal.inveniemus = init(global.base);\n\t}\n})(this, function __init__(base){ \"use strict\";\n// Import synonyms. ////////////////////////////////////////////////////////////////////////////////\n\tvar declare = base.declare,\n\t\tinitialize = base.initialize,\n\t\titerable = base.iterable,\n\t\traiseIf = base.raiseIf,\n\t\tEvents = base.Events,\n\t\tFuture = base.Future,\n\t\tIterable = base.Iterable,\n\t\tLogger = base.Logger,\n\t\tRandomness = base.Randomness,\n\t\tStatistics = base.Statistics;\n\t\n// Library layout. /////////////////////////////////////////////////////////////////////////////////\n\tvar exports = {\n\t\t__package__: 'inveniemus',\n\t\t__name__: 'inveniemus',\n\t\t__init__: __init__,\n\t\t__dependencies__: [base],\n\t\t__SERMAT__: { include: [] },\n\t/** `metaheuristics` is a bundle of available metaheuristics.\n\t*/\t\n\t\tmetaheuristics: {},\n\t/** `problems` is a bundle of classic and reference problems.\n\t*/\n\t\tproblems: {}\n\t};\n\tvar metaheuristics = exports.metaheuristics,\n\t\tproblems = exports.problems;\n\n// Utility functions. //////////////////////////////////////////////////////////////////////////////\n\nfunction clamp(value, min, max) {\n\treturn Math.max(min, Math.min(max, value));\n}","/**\t# Element\n\nElement is the term used in Inveniemus for representations of \n[candidate solutions](http://en.wikipedia.org/wiki/Feasible_region) in a search or optimization \n[problem](Problem.js.html). Implementations may declare their own subclass of `Element` to represent\ntheir candidate solutions.\n*/\nvar Element = exports.Element = declare({\n\t/** All elements are defined by a `problem`, an array of numbers (i.e. the element's `values`, \n\trandom numbers by default) and an `evaluation` (`NaN` by default). The element's values are \n\tcoerced to be in the range provided by the problem's element model.\n\t\n\tThe `values` store all data about the candidate solution this element represents. This may \n\tappear to abstract and stark, but it helps to separate the problem definition from the search\n\tor optimization strategy.\n\t\n\tThe element's `evaluation` is a numerical assessment of the represented candidate solution. \n\tUsually is a measure of how well the problem is solved, or how close the element is to a real \n\tsolution. It guides almost all of the metaheuristics.\n\t*/\n\tconstructor: function Element(problem, values, evaluation) {\n\t\tthis.problem = problem;\n\t\tvar model = problem.elementModel();\n\t\tif (!values) {\n\t\t\tthis.values = model.map(function (range) {\n\t\t\t\tif (range.discrete) {\n\t\t\t\t\treturn problem.random.randomInt(range.min, range.max + 1);\n\t\t\t\t} else {\n\t\t\t\t\treturn problem.random.random(range.min, range.max);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tthis.values = values.map(function (value, i) {\n\t\t\t\tvar range = model[i];\n\t\t\t\traiseIf(isNaN(value), \"Value #\", i, \" for element is NaN!\");\n\t\t\t\tvalue = clamp(+value, range.min, range.max);\n\t\t\t\treturn value;\n\t\t\t});\n\t\t}\n\t\tthis.evaluation = evaluation;\n\t},\n\t\n\t/** Whether this element is an actual solution or not is decided by `suffices()`. It holds the \n\timplementation of the goal test in search problems. More complex criteria may be implemented in \n\t`Problem.suffices`. By default it returns false.\n\t*/\n\tsuffices: function suffices() {\n\t\treturn this.problem.sufficientElement(this);\n\t},\n\n\t/** The `emblem` of an element is a string that represents it and can be displayed to the user. \n\tBy default returns the string conversion of the element.\n\t*/\n\temblem: function emblem() {\n\t\treturn this +'';\n\t},\n\n\t// ## Evaluations ##############################################################################\n\n\t/** The element's `evaluation` is calculated by `evaluate()`, which assigns and returns this \n\tnumber. It may return a promise if the evaluation has to be done asynchronously. This can be \n\tinterpreted as the solution's cost in a search problem or the target function of an optimization \n\tproblem. The default behaviour is adding up this element's values, useful only for testing.\n\t*/\n\tevaluate: function evaluate() {\n\t\tvar elem = this;\n\t\treturn Future.then(this.problem.evaluation(this), function (e) {\n\t\t\telem.evaluation = e;\n\t\t\treturn e;\n\t\t});\n\t},\n\t\n\t/** The [Hamming distance](http://en.wikipedia.org/wiki/Hamming_distance) between two arrays is \n\tthe number of positions at which corresponding components are different. Arrays are assumed to \n\tbe of the same length. If they are not, only the common parts are considered.\n\t*/\n\thammingDistance: function hammingDistance(array1, array2) {\n\t\treturn iterable(array1).zip(array2).filter(function (pair) {\n\t\t\treturn pair[0] != pair[1];\n\t\t}).count();\n\t},\n\n\t/** The [Manhattan distance](http://en.wikipedia.org/wiki/Manhattan_distance) between two arrays \n\tis the sum of the absolute differences of corresponding positions.\n\t*/\n\tmanhattanDistance: function manhattanDistance(array1, array2) {\n\t\treturn iterable(array1).zip(array2).map(function (pair) {\n\t\t\treturn Math.abs(pair[0] - pair[1]);\n\t\t}).sum();\n\t},\n\n\t/** The [euclidean distance](http://en.wikipedia.org/wiki/Euclidean_distance) between two arrays \n\tis another option for evaluation.\n\t*/\n\teuclideanDistance: function euclideanDistance(array1, array2) {\n\t\treturn Math.sqrt(iterable(array1).zip(array2).map(function (pair) {\n\t\t\treturn Math.pow(pair[0] - pair[1], 2);\n\t\t}).sum());\n\t},\n\n\t/** Another common evaluation is the [root mean squared error](http://en.wikipedia.org/wiki/Root_mean_squared_error).\n\tThe method `rootMeanSquaredError` takes a function `f` (usually a mapping of this element) and \n\tsome `data`. This `data` must be an iterable of arrays, in which the first element is the \n\texpected result and the rest are the arguments for the function.\n\t*/\n\trootMeanSquaredError: function rootMeanSquaredError(f, data) {\n\t\tvar length = 0,\n\t\t\terror = iterable(data).map(function (datum) {\n\t\t\t\tlength++;\n\t\t\t\treturn Math.pow(datum[0] - f.apply(this, datum.slice(1)), 2);\n\t\t\t}).sum();\n\t\treturn length === 0 ? 0 : Math.sqrt(error / length);\n\t},\n\n\t// ## Expansions ###############################################################################\n\t\n\t/** An element's `neighbourhood` is a set of new elements, with values belonging to the n \n\tdimensional ball around this element's values with the given `radius` (1% by default). \n\t*/\n\tneighbourhood: function neighbourhood(radius) {\n\t\tvar elem = this,\n\t\t\tneighbours = [],\n\t\t\tmodel = this.problem.elementModel();\n\t\tthis.values.forEach(function (value, i) {\n\t\t\tvar range = model[i],\n\t\t\t\td = Array.isArray(radius) ? radius[i] : !isNaN(radius) ? radius : range.discrete ? 1 : 0.1,\n\t\t\t\tv = value + d;\n\t\t\tif (v <= range.max) {\n\t\t\t\tneighbours.push(elem.modification(i, v));\n\t\t\t}\n\t\t\tv = value - d;\n\t\t\tif (v >= range.min) {\n\t\t\t\tneighbours.push(elem.modification(i, v));\n\t\t\t}\n\t\t});\n\t\treturn neighbours;\n\t},\n\t\n\t/** The method `modification(index, value, ...)` returns a new and unevaluated copy of this \n\telement, with its values modified as specified. Values are always coerced to the [0,1] range.\n\t*/\n\tmodification: function modification() {\n\t\tvar newValues = this.values.slice(),\n\t\t\tmodel = this.problem.elementModel(),\n\t\t\trange, i, v;\n\t\tfor (i = 0; i < arguments.length; i += 2) {\n\t\t\tv = +arguments[i + 1];\n\t\t\traiseIf(isNaN(v), \"Invalid value \", v, \" for element!\");\n\t\t\trange = model[i];\n\t\t\tv = clamp(v, range.min, range.max);\n\t\t\tnewValues[arguments[i] |0] = v;\n\t\t}\n\t\treturn new this.constructor(this.problem, newValues);\n\t},\n\t\n\t// ## Mappings #################################################################################\n\t\n\t/** Gives an alternate representation of this element. See `Problem.mapping()`.\n\t*/\n\tmapping: function mapping() {\n\t\treturn this.problem.mapping(this);\n\t},\n\t\n\t/** A range mapping builds an array of equal length of this element's `values`. Each value is \n\ttranslated from the element model's range to the given range.\n\t*/\n\trangeMapping: function rangeMapping() {\n\t\tvar args = arguments,\n\t\t\tmodel = this.problem.elementModel(),\n\t\t\tlastRange = args[args.length - 1];\n\t\traiseIf(args.length < 1, \"Element.rangeMapping() expects at least one argument!\");\n\t\treturn this.values.map(function (v, i) {\n\t\t\tvar rangeFrom = model[i],\n\t\t\t\trangeTo = args.length > i ? args[i] : lastRange;\n\t\t\tv = (v - rangeFrom.min) / (rangeFrom.max - rangeFrom.min) * (rangeTo[1] - rangeTo[0]) + rangeTo[0];\n\t\t\treturn clamp(v, rangeTo[0], rangeTo[1]);\n\t\t});\n\t},\n\t\n\t/** The `normalizedValues` of an element is a mapping to the range [0,1].\n\t*/\n\tnormalizedValues: function normalizedValues() {\n\t\treturn this.rangeMapping([0, 1]);\n\t},\n\t\n\t/** An array mapping builds an array of equal length of this element's `values`. Each value is \n\tused to index the corresponding items argument. If there are less arguments than the element's \n\t`length`, the last one is used for the rest of the values.\n\t*/\n\tarrayMapping: function arrayMapping() {\n\t\tvar args = arguments,\n\t\t\tlastItems = args[args.length - 1],\n\t\t\tmodel = this.problem.elementModel();\n\t\traiseIf(args.length < 1, \"Element.arrayMapping() expects at least one argument!\");\n\t\treturn this.values.map(function (v, i) {\n\t\t\tvar items = args.length > i ? args[i] : lastItems,\n\t\t\t\trange = model[i],\n\t\t\t\tindex = Math.floor((v - range.min) / (range.max - range.min) * items.length);\n\t\t\treturn items[index];\n\t\t});\n\t},\n\t\n\t/** A set mapping builds an array of equal length of this element's `values`. Each value is used \n\tto select one item. Items are not selected more than once.\n\t*/\n\tsetMapping: function setMapping(items, full) {\n\t\traiseIf(!Array.isArray(items), \"Element.setMapping() expects an array argument!\");\n\t\titems = items.slice(); // Shallow copy.\n\t\tvar result = this.normalizedValues().map(function (v, i) {\n\t\t\t\traiseIf(items.length < 1, \"Element.setMapping(): insufficient elements!\");\n\t\t\t\tvar index = clamp(Math.floor(v * items.length), 0, items.length - 1);\n\t\t\t\treturn items.splice(index, 1)[0];\n\t\t\t});\n\t\tif (full) {\n\t\t\traiseIf(items.length != 1, \"Element.setMapping(): wrong amount of elements!\");\n\t\t\tresult.push(items[0]);\n\t\t}\n\t\treturn result;\n\t},\n\t\n\t// ## Other utilities ##########################################################################\n\n\t/** A `clone` is a copy of this element.\n\t*/\n\tclone: function clone() {\n\t\treturn new this.constructor(this.problem, this.values, this.evaluation);\n\t},\n\t\n\t/** Two elements can be compared with `equals(other)`. It checks if the other element has the \n\tsame values and constructor than this one.\n\t*/\n\tequals: function equals(other) {\n\t\tif (this.constructor === other.constructor && this.values.length === other.values.length) {\n\t\t\tfor (var i = 0, len = this.values.length; i < len; i++) {\n\t\t\t\tif (this.values[i] !== other.values[i]) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},\n\t\n\t/** The default string representation of an Element instance has this shape: \n\t`\"Element(values, evaluation)\"`.\n\t*/\n\ttoString: function toString() {\n\t\treturn \"<\"+ (this.constructor.name || 'Element') +\" \"+ JSON.stringify(this.values) +\" \"+ this.evaluation +\">\";\n\t},\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Element',\n\t\tserializer: function serialize_Element(obj) {\n\t\t\treturn [obj.problem, obj.values, obj.evaluation];\n\t\t}\n\t}\n}); // declare Element.\n","/**\t# Problem\n\nThe Problem type represents a search or optimization problem in Inveniemus.\n*/\nvar Problem = exports.Problem = declare({\n\t/** The problem constructor takes the following parameters:\t\n\t*/\n\tconstructor: function Problem(params) {\n\t\tparams = params || {};\n\t\tinitialize(this, params)\n\t\t\t/** + A `title` to be displayed to the user.\n\t\t\t*/\n\t\t\t.string('title', { coerce: true, defaultValue: this.constructor.name || \"\" })\n\t\t\t/** + A `description` of the problem to be displayed to the user may also be appreciated.\n\t\t\t*/\n\t\t\t.string('description', { coerce: true, defaultValue: \"\" })\n\t\t\t/** + A `random` number generator, required by many operations. By default \n\t\t\t\t`base.Randomness.DEFAULT` is used.\n\t\t\t*/\n\t\t\t.object('random', { defaultValue: Randomness.DEFAULT });\n\t\t/** + One or more `objectives`, which defines the mode of optimization. It may be either a\n\t\t\tnumber or array of numbers, where `-Infinity` means minimization (the default),\n\t\t\t`+Infinity` means maximization and a number means approximation to that value.\n\t\t*/\n\t\tvar objectives = params.hasOwnProperty('objectives') ? params.objectives : -Infinity;\n\t\tif (typeof params.objectives === 'number' && !isNaN(params.objectives)) {\n\t\t\tthis.objectives = [params.objectives];\n\t\t} else if (Array.isArray(params.objectives)) {\n\t\t\tthis.objectives = params.objectives;\n\t\t} else {\n\t\t\tthis.objectives = [-Infinity]; // Minimization is the default.\n\t\t}\n\t},\n\n\t/** The `elementModel` is an array of ranges, each an array of two numbers defining the minimum\n\tan maximum possible value of each position of every element in this problem. All elements should\n\talso be of the same length as the model.\n\t\n\tBy default, the method returns the `__elementModel__` property. It is inefficiency to recompute \n\tthis result every time, since it is required in many places.\n\t*/\n\t__elementModel__: Iterable.repeat({ min: 0, max: 1, discrete: false }, 10).toArray(),\n\t\n\telementModel: function elementModel() {\n\t\treturn this.__elementModel__;\n\t},\n\t\n\t/** Problem uses `Element` instances to represent its candidate solutions.\n\t*/\n\tnewElement: function newElement(values, evaluation) {\n\t\treturn new Element(this, values, evaluation);\n\t},\n\t\n\t/** The problem's elements must be evaluated somehow. This can be interpreted as the solution's \n\tcost in a search problem or the target function of an optimization problem. The default \n\tbehaviour is adding up this element's values, useful only for testing. It can return a future \n\tif the evaluation has to be done asynchronously. \n\t*/\n\tevaluation: function evaluation(element) {\n\t\treturn iterable(element.values).sum();\n\t},\n\t\n\t/** The `evaluate` method is used to assign an evaluation to all the given `elements`. By \n\tdefault it iterates over all elements and gets their evaluation using the `evaluation` method. \n\tIf `reevaluate` is false (the default), already evaluated elements are ignored. This method may \n\tbe overriden to make a relative evaluation scheme (e.g. in coevolution).\n\t*/\n\tevaluate: function evaluate(elements, reevaluate) {\n\t\tvar async = false;\n\t\telements = iterable(elements).filter(\n\t\t\tfunction (element) {\n\t\t\t\treturn reevaluate || isNaN(element.evaluation);\n\t\t\t},\n\t\t\tfunction (element) { // ... evaluate them.\n\t\t\t\tvar result = element.evaluate();\n\t\t\t\tasync = async || Future.__isFuture__(result);\n\t\t\t\treturn result;\n\t\t\t}).toArray();\n\t\treturn async ? Future.all(elements) : elements;\n\t},\n\t\n\t/** Usually a numbers array is just too abstract to handle, and\tanother representation of the \n\tcandidate solution must be build. For this `mapping()` must be overridden to returns an \n\talternate representation of an element that may be fitter for evaluation or showing it to the\n\tuser. By default it just returns the same `values` array.\n\t*/\n\tmapping: function mapping(element) {\n\t\treturn element.values;\n\t},\n\t\n\t/** An element is `sufficient` when it can be considered a solution of a search or a good enough\n\tsolution of an optimization. By default it returns false.\n\t*/\n\tsufficientElement: function sufficientElement(element) {\n\t\treturn false;\n\t},\n\t\n\t/** When a set of elements is sufficient, the search/optimization ends. The method \n\t`suffices(elements)` returns `true` if inside the elements array there are enough actual \n\tsolutions to this problem. It holds the implementation of the goal test in search problems. By \n\tdefault calls the `suffice` method of the first element (assumed to be the best one).\n\t*/\n\tsufficientElements: function sufficientElements(elements) {\n\t\treturn this.sufficientElement(elements[0]);\n\t},\n\t\n\t// ## Optimization modes #######################################################################\n\t\n\t/** How elements are compared with each other in the problem determines which kind of \n\toptimization is performed. The `compare` method implements the comparison between two elements. \n\tIt returns a positive number if `element2` is better than `element1`, a negative number if \n\t`element2` is worse then `element1`, or zero otherwise. Better and worse may mean less or \n\tgreater evaluation (`minimization`), viceversa (`maximization`) or another criteria altogether.\n\t*/\n\tcompare: function compare(element1, element2) {\n\t\tif (this.objectives.length === 1) {\n\t\t\treturn this.singleObjectiveComparison(this.objectives[0], element1.evaluation, element2.evaluation);\n\t\t} else {\n\t\t\treturn this.paretoComparison(this.objectives, element1.evaluation, element2.evaluation);\n\t\t}\n\t},\n\t\n\t/** A single objective optimization has three modes, given by the `objective` parameter: \n\t*/\n\tsingleObjectiveComparison: function singleObjectiveComparison(objective, value1, value2) {\n\t\tvar d;\n\t\tswitch (objective) {\n\t\t\t/** + `-Infinity` means minimization. */\n\t\t\tcase -Infinity: {\n\t\t\t\td = value2 - value1;\n\t\t\t\treturn isNaN(d) ? Infinity : d;\n\t\t\t}\n\t\t\t/** + `+Infinity` means maximization. */\n\t\t\tcase +Infinity: {\n\t\t\t\td = value1 - value2;\n\t\t\t\treturn isNaN(d) ? -Infinity : d;\n\t\t\t}\n\t\t\t/** + An actual number means approximation to said value. */ \n\t\t\tdefault: {\n\t\t\t\td = Math.abs(value2 - objective) - Math.abs(value1 - objective);\n\t\t\t\treturn isNaN(d) ? Infinity : d;\n\t\t\t}\n\t\t}\n\t},\n\t\n\t/** The [Pareto efficiency](https://en.wikipedia.org/wiki/Pareto_efficiency) is frequently used \n\tin multiobjective optimizations, yet it is not a complete order. The `paretoComparison` method \n\ttakes an array of `objectives`, and two arrays of numbers to be compared. The result is an array \n\tof comparisons (-1, 0 or 1) with a `domination` property. If `domination` is:\n\t\n\t+ `< 0`: `element2` dominates `element1`.\n\t\n\t+ `> 0`: `element1` dominates `element2`.\n\t\n\t+ `= 0`: both elements are equally evaluated.\n\t\n\t+ `NaN`: elements could not be compared (i.e. their evaluations are different, but they do not \n\t\tdominate each other).\n\t*/\n\tparetoComparison: function paretoComparison(objectives, values1, values2) {\n\t\tvar worse = 0, better = 0,\n\t\t\tproblem = this,\n\t\t\tresult;\n\t\traiseIf(objectives.length !== values1.length, \"Expected \", objectives.length, \" evaluations, but got \", values1.length, \"!\");\n\t\traiseIf(objectives.length !== values2.length, \"Expected \", objectives.length, \" evaluations, but got \", values2.length, \"!\");\n\t\tresult = Iterable.zip(objectives, values1, values2).mapApply(function (objective, value1, value2) {\n\t\t\tvar r = problem.singleObjectiveComparison(objective, value1, value2);\n\t\t\tif (r < 0) {\n\t\t\t\tworse++;\n\t\t\t} else if (r > 0) {\n\t\t\t\tbetter++;\n\t\t\t}\n\t\t\treturn r;\n\t\t}).toArray();\n\t\tresult.domination = worse === 0 ? better : better === 0 ? -worse : NaN;\n\t\treturn result;\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** The default string representation of a Problem instance has this shape: \n\t`\"Problem(params)\"`.\n\t*/\n\ttoString: function toString() {\n\t\treturn \"<\"+ (this.constructor.name || 'Problem') +\" \"+ JSON.stringify(this.title) +\">\";\n\t},\n\t\n\t/** Returns a reconstruction of the parameters used in the construction of this instance.\n\t*/\n\t__params__: function __params__() {\n\t\tvar params = {},\n\t\t\tself = this,\n\t\t\tids = ['title', 'description'].concat(Array.prototype.slice.call(arguments));\n\t\tids.forEach(function (id) {\n\t\t\tif (self.hasOwnProperty(id)) {\n\t\t\t\tparams[id] = self[id];\n\t\t\t}\n\t\t});\n\t\tif (this.random !== Randomness.DEFAULT) {\n\t\t\tparams.random = this.random;\n\t\t}\n\t\treturn params;\n\t},\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Problem',\n\t\tserializer: function serialize_Problem(obj) {\n\t\t\treturn [obj.__params__()];\n\t\t}\n\t}\n}); // declare Problem.\n","/**\t# Metaheuristic\n\nA [Metaheuristic](http://en.wikipedia.org/wiki/Metaheuristic) is an optimization algorithm (which \ncan also be used for searching). This is the base class of all metaheuristic algorithms, and hence \nof all metaheuristic runs.\n*/\nvar Metaheuristic = exports.Metaheuristic = declare({\n\t/** Each metaheuristic has its own `logger`, to track its process.\n\t*/\n\tlogger: new Logger('inveniemus', Logger.ROOT, 'INFO'),\n\t\n\t/** The constructor takes a `params` object with the metaheuristic parameters. Although the \n\tdifferent algorithms have particular parameters of their own, some apply to all.\n\t*/\n\tconstructor: function Metaheuristic(params) {\n\t\tinitialize(this, params)\n\t\t/** First, the definition of the `problem` this metaheuristic is meant to solve.\n\t\t*/\n\t\t\t.object('problem', { defaultValue: null })\n\t\t/** The optimization's `size` is the amount of candidate solutions the metaheuristic treats \n\t\tat each step. By default it is 100.\n\t\t*/\n\t\t\t.number('size', { defaultValue: 100, coerce: true })\n\t\t/** The `state` is the array that holds the elements this metaheuristic handles at each step.\n\t\t*/\n\t\t\t.array('state', { defaultValue: [] })\n\t\t/** All optimizations perform a certain number of iterations or `steps` (100 by default).\n\t\t*/\n\t\t\t.number('steps', { defaultValue: 100, coerce: true })\n\t\t/** The property `step` indicates the current iteration of this optimization, or a negative \n\t\tnumber if it has not started yet.\n\t\t*/\n\t\t\t.integer('step', { defaultValue: -1, coerce: true })\n\t\t/** Most metaheuristic are stochastic processes, hence the need for a pseudo-random number \n\t\tgenerator. By default `base.Randomness.DEFAULT` is used, yet it is strongly advised to \n\t\tprovide one.\n\t\t*/\n\t\t\t.object('random', { defaultValue: Randomness.DEFAULT })\n\t\t/** Metaheuristic's runs usually gather `statistics` about the process.\n\t\t*/\n\t\t\t.object('statistics', { defaultValue: new Statistics() })\n\t\t\t.object('logger', { ignore: true });\n\t\tthis.events = new Events({ \n\t\t\tevents: [\"initiated\", \"updated\", \"expanded\", \"evaluated\", \"sieved\", \"advanced\", \"analyzed\", \"finished\"]\n\t\t});\n\t},\n\t\n\t__log__: function __log__(level) {\n\t\tif (this.logger) {\n\t\t\tthis.logger[level].apply(this.logger, arguments);\n\t\t}\n\t},\n\t\n\t// ## Basic workflow ###########################################################################\n\t\n\t/**\t`initiate(size=this.size)` builds and initiates this metaheuristic state with size new \n\tcursors. The elements are build using the `initial()` function.\n\t*/\n\tinitiate: function initiate(size) {\n\t\tsize = isNaN(size) ? this.size : +size >> 0;\n\t\tthis.state = new Array(size);\n\t\tfor (var i = 0; i < size; i++) {\n\t\t\tthis.state[i] = this.problem.newElement(); // Element with random values.\n\t\t}\n\t\tthis.onInitiate();\n\t},\n\t\n\t/** `update()` updates this metaheuristic's state. It assumes the state has been initialized. \n\tThe process may be asynchronous, so it returns a future. The default implementation first \n\texpands the state by calling `expand()`, then evaluates the added elements by calling \n\t`evaluate()`, and finally removes the worst elements with `sieve()`.\n\t*/\n\tupdate: function update() {\n\t\tvar mh = this;\n\t\tthis.expand();\n\t\treturn Future.then(this.evaluate(), function () {\n\t\t\tmh.sieve();\n\t\t\tmh.onUpdate();\n\t\t\treturn mh;\n\t\t});\n\t},\n\t\n\t/** `expand(expansion=[])` adds to this metaheuristic's state the given expansion. If none is \n\tgiven, `expansion()` is called to get new expansion.\n\t*/\n\texpand: function expand(expansion) {\n\t\texpansion = expansion || this.expansion();\n\t\tif (expansion.length < 1) {\n\t\t\tthis.__log__('warn', \"Expansion is empty\");\n\t\t} else {\n\t\t\tthis.state = this.state.concat(expansion);\n\t\t}\n\t\tthis.onExpand();\n\t},\n\t\n\t/** `expansion(size)` returns an array of new elements to add to the current state. The default \n\timplementation generates new random elements.\t\t\n\t*/\n\texpansion: function expansion(size) {\n\t\tvar expansionRate = isNaN(this.expansionRate) ? 0.5 : +this.expansionRate;\n\t\tsize = isNaN(size) ? Math.floor(expansionRate * this.size) : +size;\n\t\tvar elems = new Array(size), i;\n\t\tfor (i = 0; i < size; i++){\n\t\t\telems[i] = this.problem.newElement();\n\t\t}\n\t\treturn elems;\n\t},\n\t\n\t/** `evaluate(elements)` evaluates all the elements in `state` with no evaluation, using its \n\tevaluation method. After that sorts the state with the `compare` method of the problem. May \n\treturn a future, if any evaluation is asynchronous.\n\t*/\n\tevaluate: function evaluate(elements) {\n\t\tvar mh = this,\n\t\t\tevalTime = this.statistics && this.statistics.stat({key:'evaluation_time'});\n\t\tif (evalTime) evalTime.startTime();\n\t\telements = elements || this.state;\n\t\treturn Future.then(this.problem.evaluate(elements), function (results) {\n\t\t\telements = mh.sort(elements);\n\t\t\tif (evalTime) evalTime.addTime();\n\t\t\tmh.onEvaluate(results);\n\t\t\treturn elements;\n\t\t});\n\t},\n\t\n\t/** `sort(elements)` TODO\n\t*/\t\n\tsort: function sort(elements) {\n\t\telements = elements || this.state;\n\t\tif (this.problem.objectives.length > 1) { // Multi-objective optimization.\n\t\t\telements = this.multiObjectiveSort(elements);\n\t\t} else { // Single-objective optimization.\n\t\t\telements.sort(this.problem.compare.bind(this.problem));\n\t\t\telements.reverse();\n\t\t}\n\t\treturn elements;\n\t},\n\t\n\t/** `sieve(size=this.size)` cuts the current state down to the given size (or this.size by \n\tdefault). This is usually used after expanding and evaluating the state.\n\t*/\n\tsieve: function sieve(size) {\n\t\tsize = isNaN(size) ? this.size : Math.floor(size);\n\t\tif (this.state.length > size) {\n\t\t\tthis.state = this.state.slice(0, this.size);\n\t\t}\n\t\tthis.onSieve();\n\t},\n\t\n\t/** `finished()` termination criteria for this metaheuristic. By default it checks if the number \n\tof passed iterations is not greater than `steps`.\n\t*/\n\tfinished: function finished() {\n\t\treturn this.step >= this.steps || this.problem.sufficientElements(this.state);\n\t},\n\n\t/** `analyze()` updates the process' statistics.\n\t*/\n\tanalyze: function analyze(statistics) {\n\t\tstatistics = statistics || this.statistics;\n\t\tvar step = this.step;\n\t\tif (statistics) {\n\t\t\tif (typeof this.state[0].evaluation === 'number') { // Single-objective optimization.\n\t\t\t\tvar stat_evaluation = statistics.stat({ key:'evaluation', step: step });\n\t\t\t\tthis.state.forEach(function (element) {\n\t\t\t\t\tstat_evaluation.add(element.evaluation, element);\n\t\t\t\t});\n\t\t\t} else if (Array.isArray(this.state[0].evaluation)) { // Multi-objective optimization.\n\t\t\t\tvar stats_evaluation = this.state[0].evaluation.map(function (_, i) {\n\t\t\t\t\t\treturn statistics.stat({ key:'evaluation', index: i, step: step });\n\t\t\t\t\t}),\n\t\t\t\t\tstat_dominators = statistics.stat({ key:'dominators', step: step }),\n\t\t\t\t\tstat_dominated = statistics.stat({ key:'dominated', step: step });\n\t\t\t\tthis.state.forEach(function (element) {\n\t\t\t\t\telement.evaluation.forEach(function (v, i) {\n\t\t\t\t\t\tstats_evaluation[i].add(v, element);\n\t\t\t\t\t});\n\t\t\t\t\tstat_dominators.add(element.pareto.dominators.length, element);\n\t\t\t\t\tstat_dominated.add(element.pareto.dominated.length, element);\n\t\t\t\t});\n\t\t\t}\n\t\t\tthis.onAnalyze();\n\t\t}\n\t\treturn statistics;\n\t},\n\t\n\t/** `advance()` performs one step of the optimization. If the process has not been initialized, \n\tit does so. Returns a future if any step is asynchronous.\n\t*/\n\tadvance: function advance() {\n\t\tvar mh = this, \n\t\t\tstepTime = this.statistics && this.statistics.stat({key: 'step_time'}),\n\t\t\tresult;\n\t\tif (isNaN(this.step) || +this.step < 0) {\n\t\t\tthis.reset();\n\t\t\tif (stepTime) stepTime.startTime();\n\t\t\tthis.initiate();\n\t\t\tresult = this.evaluate();\n\t\t} else {\n\t\t\tif (stepTime) stepTime.startTime();\n\t\t\tresult = this.update();\n\t\t}\n\t\treturn Future.then(result, function () {\n\t\t\tmh.step = isNaN(mh.step) || +mh.step < 0 ? 0 : +mh.step + 1;\n\t\t\tmh.analyze(); // Calculate the state's stats after updating it.\n\t\t\tif (stepTime) stepTime.addTime();\n\t\t\tmh.onAdvance();\n\t\t\treturn mh;\n\t\t});\n\t},\n\t\n\t/** `run()` returns a future that is resolved when the whole search process is finished. The \n\tvalue is the best cursor after the last step. It always returns a future.\n\t*/\n\trun: function run() {\n\t\tvar mh = this, \n\t\t\tadvance = this.advance.bind(this),\n\t\t\tcontinues = function continues() {\n\t\t\t\treturn !mh.finished();\n\t\t\t};\n\t\treturn Future.doWhile(advance, continues).then(function () {\n\t\t\tmh.onFinish();\n\t\t\treturn mh.state[0]; // Return the best cursor.\n\t\t});\n\t},\n\n\t/** `reset()` reset the process to start over again. Basically cleans the statistics and sets \n\tthe current `step` to -1.\n\t*/\n\treset: function reset() {\n\t\tthis.step = -1;\n\t\tif (this.statistics) this.statistics.reset();\n\t},\n\t\n\t// ## State control ############################################################################\n\t\n\t/** The `nub` method eliminates repeated elements inside the state. Use responsibly, since this \n\tis an expensive operation. Returns the size of the resulting state.\n\t*/\n\tnub: function nub(precision) {\n\t\tprecision = isNaN(precision) ? 1e-15 : +precision;\n\t\tthis.state = iterable(this.state).nub(function (e1, e2) {\n\t\t\tvar values1 = e1.values,\n\t\t\t\tvalues2 = e2.values,\n\t\t\t\tlen = values1.length;\n\t\t\tif (len !== e2.values.length) {\n\t\t\t\treturn false;\n\t\t\t} else for (var i = 0; i < len; ++i) {\n\t\t\t\tif (Math.abs(values1[i] - values2[i]) > precision) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}).toArray();\n\t\treturn this.state.length;\n\t},\n\t\n\t// ## Events ###################################################################################\n\t\n\t/** For better customization the `events` handler emits the following events: \n\t\t\n\t+ `initiated` when the state has been initialized.\n\t*/\n\tonInitiate: function onInitiate() {\n\t\tthis.events.emit('initiated', this);\n\t\tthis.__log__('debug', 'State has been initiated. Nos coepimus.');\n\t},\n\t\n\t/** + `updated` when the state has been expanded, evaluated and sieved.\n\t*/\n\tonUpdate: function onUpdate() {\n\t\tthis.events.emit('updated', this);\n\t\tthis.__log__('debug', 'State has been updated. Mutatis mutandis.');\n\t},\n\t\n\t/** + `expanded` after new elements are added to the state.\n\t*/\n\tonExpand: function onExpand() {\n\t\tthis.events.emit('expanded', this);\n\t\tthis.__log__('debug', 'State has been expanded. Nos exploramus.');\n\t},\n\t\n\t/** + `evaluated` after the elements in the state are evaluated.\n\t*/\n\tonEvaluate: function onEvaluate(elements) {\n\t\tthis.events.emit('evaluated', this, elements);\n\t\tthis.__log__('debug', 'Evaluated and sorted ', elements.length, ' elements. Appretiatus sunt.');\n\t},\n\t\n\t/** + `sieved` after elements are removed from the state.\n\t*/\n\tonSieve: function onSieve() {\n\t\tthis.events.emit('sieved', this);\n\t\tthis.__log__('debug', 'State has been sieved. Haec est viam.');\n\t},\n\t\n\t/** + `advanced` when one full iteration is completed.\n\t*/\n\tonAdvance: function onAdvance() {\n\t\tthis.events.emit('advanced', this);\n\t\tthis.__log__('debug', 'Step ', this.step, ' has been completed. Nos proficimus.');\n\t},\n\t\n\t/** + `analyzed` after the statistics are calculated.\n\t*/\n\tonAnalyze: function onAnalyze() {\n\t\tthis.events.emit('analyzed', this);\n\t\tthis.__log__('debug', 'Statistics have been gathered. Haec sunt numeri.');\n\t},\n\t\n\t/** + `finished` when the run finishes.\n\t*/\n\tonFinish: function onFinish() {\n\t\tthis.events.emit('finished', this);\n\t\tthis.__log__('debug', 'Finished. Nos invenerunt!');\n\t},\n\t\n\t// ## Multi-objective ##########################################################################\n\t\n\t/** A Pareto analysis of a set of elements compares all elements with each other, accounting the \n\tdomination relationship between the elements. Every element gets a new property `pareto`, an \n\tobject holding two arrays:\n\t\n\t+ `pareto.dominated` is a list of elements dominated by this element,\n\t\n\t+ `pareto.dominators` is a list of elements that dominate this element.\n\t*/\n\tparetoAnalysis: function paretoAnalysis(elements) {\n\t\telements = elements || this.state;\n\t\tvar len = elements.length,\n\t\t\ti1, i2, elem1, elem2, domination;\n\t\tfor (i1 = 0; i1 < len; i1++) {\n\t\t\telements[i1].pareto = { dominated: [], dominators: [] };\n\t\t}\n\t\tfor (i1 = 0; i1 < len; i1++) {\n\t\t\telem1 = elements[i1];\n\t\t\tfor (i2 = i1 + 1; i2 < len; i2++) {\n\t\t\t\telem2 = elements[i2];\n\t\t\t\tdomination = this.problem.compare(elem1, elem2).domination;\n\t\t\t\tif (domination > 0) {\n\t\t\t\t\telem1.pareto.dominated.push(elem2);\n\t\t\t\t\telem2.pareto.dominators.push(elem1);\n\t\t\t\t} else if (domination < 0) {\n\t\t\t\t\telem2.pareto.dominated.push(elem1);\n\t\t\t\t\telem1.pareto.dominators.push(elem2);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn elements;\n\t},\n\t\n\t/** Sorting function used for multiobjective problems. By default uses `nonDominatedSort` (based\n\ton NSGA).\n\t*/\n\tmultiObjectiveSort: function multiObjectiveSort(elements) {\n\t\treturn this.nonDominatedSort(elements);\n\t},\n\t\n\t/** The crowding distance is an estimation of the density of elements surrounding each element\n\tin the given list (or the state by default). Every element will be added a `crowdingDistance` \n\tnumber property.\n\t*/\n\tcrowdingDistance: function crowdingDistance(elements) {\n\t\telements = elements || this.state;\n\t\tvar es = elements.slice(), // shallow copy.\n\t\t\tcount = this.problem.objectives.length,\n\t\t\ti, j;\n\t\tfor (i = 0; i < es.length; i++) {\n\t\t\tes[i].crowdingDistance = 0;\n\t\t}\n\t\tfor (i = 0; i < count; i++) {\n\t\t\tes.sort(function (elem1, elem2) {\n\t\t\t\treturn elem1.evaluation[i] - elem2.evaluation[i];\n\t\t\t});\n\t\t\tes[0].crowdingDistance = Infinity;\n\t\t\tes[es.length - 1].crowdingDistance = Infinity;\n\t\t\tfor (j = 1; j < es.length - 1; j++) {\n\t\t\t\tes[j].crowdingDistance += es[j + 1].evaluation[i] - es[j - 1].evaluation[i]; \n\t\t\t}\n\t\t}\n\t\treturn elements;\n\t},\n\t\n\t/** The non-dominated sort is based on [_\"A Fast Elitist Non-Dominated Sorting Genetic Algorithm\n\tfor Multi-Objective Optimization: NSGA-II\"_ by Deb (2000)](http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.18.4257).\n\t*/\n\tnonDominatedSort: function nonDominatedSort(elements) {\n\t\telements = this.paretoAnalysis(elements);\n\t\telements = this.crowdingDistance(elements);\n\t\telements.sort(function (elem1, elem2) {\n\t\t\treturn (elem1.pareto.dominators.length - elem2.pareto.dominators.length) ||\n\t\t\t\t(elem2.crowdingDistance - elem1.crowdingDistance);\n\t\t});\n\t\treturn elements;\n\t},\n\t\n\t/** The Pareto strength of an element is defined as the sum of the amount of elements being \n\tdominated by all dominators of a given element. For more information see: [_\"SPEA2: Improving \n\tthe Strength Pareto Evolutionary Algorithm\"_ by Zitzler et al (2001)](http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.112.5073).\n\t*/\n\tstrengthParetoSort: function strengthParetoSort(elements) {\n\t\telements = this.paretoAnalysis(elements);\n\t\titerable(elements).forEach(function (elem) {\n\t\t\telem.pareto.strength = iterable(elem.pareto.dominators).map(function (dominator) {\n\t\t\t\treturn dominator.pareto.dominated.length;\n\t\t\t}).sum();\n\t\t});\n\t\treturn elements.sort(function (elem1, elem2) { // Pareto strength must be minimized.\n\t\t\treturn elem1.pareto.strength - elem2.pareto.strength;\n\t\t});\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** The default string representation of a Metaheuristic shows its constructor's name and its \n\tparameters.\n\t*/\n\ttoString: function toString() {\n\t\treturn \"<\"+ (this.constructor.name || 'Metaheuristic') +\" \"+ this.problem +\">\";\n\t},\n\t\n\t/** Returns a reconstruction of the parameters used in the construction of this instance.\n\t*/\n\t__params__: function __params__() {\n\t\tvar params = { problem: this.problem, size: this.size, steps: this.steps };\n\t\tif (this.random !== Randomness.DEFAULT) {\n\t\t\tparams.random = this.random;\n\t\t}\n\t\tif (this.step >= 0) {\n\t\t\tparams.step = this.step;\n\t\t\tparams.state = this.state;\n\t\t\tparams.statistics = this.statistics;\n\t\t} else if (this.state.length > 0) {\n\t\t\tparams.state = this.state;\n\t\t}\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar id = arguments[i];\n\t\t\tif (this.hasOwnProperty(id)) {\n\t\t\t\tparams[id] = this[id];\n\t\t\t}\n\t\t}\n\t\treturn params;\n\t},\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Metaheuristic',\n\t\tserializer: function serialize_Metaheuristic(obj) {\n\t\t\treturn [obj.__params__()];\n\t\t}\n\t}\n}); // declare Metaheuristic.","/** # Hill climbing\n\n[Hill Climbing](http://en.wikipedia.org/wiki/Hill_climbing) is a simple iterative local search \nmethod. The state has only one element, and in each iteration its best successor replaces it, after\na local optimum is reached.\n*/\nvar HillClimbing = metaheuristics.HillClimbing = declare(Metaheuristic, {\n\t/** The constructor The constructor takes the following parameters:\n\t*/\n\tconstructor: function HillClimbing(params) {\n\t\tMetaheuristic.call(this, params);\n\t\tinitialize(this, params)\n\t\t/** + `delta=1` is the radius of the elements surroundings in every dimension.\n\t\t*/\n\t\t\t.number('delta', { defaultValue: 1, coerce: true })\n\t\t/** + `size` is constrained to 1 by default. This may be increased, resulting in many \n\t\tparallel climbings.\n\t\t*/\n\t\t\t.integer('size', { defaultValue: 1,\tcoerce: true });\n\t},\n\t\n\t/** The hill climbings `update()` replaces each element in the state by the best element in its \n\tneighbourhood, if there is any. The surroundings have all possible elements resulting from \n\teither an increment or decrement (of the given `delta`) in each of the centre element's \n\tdimensions.\n\t*/\n\tupdate: function update() {\n\t\tvar mh = this, \n\t\t\tlocalOptima = 0;\n\t\treturn Future.all(this.state.map(function (elem) {\n\t\t\tvar range = elem.neighbourhood(mh.delta);\n\t\t\trange.push(elem);\n\t\t\treturn Future.then(mh.evaluate(range), function (range) {\n\t\t\t\tvar best = range[0];\n\t\t\t\tif (elem === best) {\n\t\t\t\t\tlocalOptima++;\n\t\t\t\t}\n\t\t\t\treturn best;\n\t\t\t});\t\t\t\n\t\t})).then(function (elems) {\n\t\t\telems = mh.sort(elems);\n\t\t\tmh.state = elems;\n\t\t\tmh.__localOptima__ = localOptima;\n\t\t\tmh.onUpdate();\n\t\t});\n\t},\n\t\t\n\t/** `atLocalOptima()` checks if the search is currently stuck at a local optima.\n\t*/\n\tatLocalOptima: function atLocalOptima() {\n\t\treturn this.__localOptima__ >= this.state.length;\n\t},\n\t\t\n\t/** A hill climbing search must finish when a local optimum is reached. This criteria is tested \n\ttogether with all others.\n\t*/\n\tfinished: function finished() {\n\t\treturn Metaheuristic.prototype.finished.call(this) || this.atLocalOptima();\n\t},\n\t\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'HillClimbing',\n\t\tserializer: function serialize_HillClimbing(obj) {\n\t\t\treturn [obj.__params__('delta')];\n\t\t}\n\t}\n}); // declare HillClimbing.\n","/** # Genetic algorithm\n\nClassic Holland's-style [genetic algorithms](http://en.wikipedia.org/wiki/Genetic_algorithm),\nwhich is the base for many evolutionary computing variants.\n*/\nvar GeneticAlgorithm = metaheuristics.GeneticAlgorithm = declare(Metaheuristic, {\n\t/** The constructor takes many parameters specific for this technique:\n\t*/\n\tconstructor: function GeneticAlgorithm(params) {\n\t\tMetaheuristic.call(this, params); // Superconstructor call.\n\t\tinitialize(this, params)\n\t\t/** + `expansionRate=0.5` is the amount of new elements generated by crossover, as a ratio\n\t\tof the population size.\n\t\t*/\n\t\t\t.number('expansionRate', { defaultValue: 0.5, minimum: 0, coerce: true })\n\t\t/** + `mutationRate=0.2` is the chance of a new element (resulting from crossover) mutating.\n\t\t*/\n\t\t\t.number('mutationRate', { defaultValue: 0.2, minimum: 0, maximum: 1, coerce: true })\n\t\t/** + `selection(count)` is a function that selects count elements from the current \n\t\tpopulation. These will be the parents of the new elements in the next generation. By default\n\t\trank selection is used, a.k.a. fitness proportional to position in the state.\n\t\t*/\n\t\t\t.func('selection', { defaultValue: GeneticAlgorithm.selections.rankSelection })\n\t\t/** + `crossover(parents)` is a function implementing the genetic operator that simulates \n\t\treproduction with inheritance. The parents argument must be an array of elements. The result\n\t\tis an array of elements. By default the single point crossover is used.\n\t\t*/\n\t\t\t.func('crossover', { defaultValue: GeneticAlgorithm.crossovers.singlepointCrossover })\n\t\t/** `mutation(element)` is a function implementing the genetic operator that simulates \n\t\tbiological mutation, making a random change in the chromosome. By default a single point \n\t\tuniform mutation is used.\n\t\t*/\n\t\t\t.func('mutation', { defaultValue: GeneticAlgorithm.mutations.singlepointUniformMutation });\n\t},\n\n\t/** The population's (state) `expansion()` is the possibly mutated crossovers of selected \n\telements. How many is determined by `expansionRate`.\n\t*/\n\texpansion: function expansion() {\n\t\tvar parents, childs, child,\n\t\t\tnewElements = [],\n\t\t\tlen = Math.floor(this.expansionRate * this.size);\n\t\tlen += len % 2; // Make len even.\n\t\tfor (var i = 0; i < len; i += 2) {\n\t\t\tparents = this.selection();\n\t\t\tchilds = this.crossover(parents);\n\t\t\tfor (var j = 0; j < childs.length; j++) {\n\t\t\t\tchild = this.random.randomBool(this.mutationRate) ? this.mutation(childs[j]) : childs[j];\n\t\t\t\tnewElements.push(child);\n\t\t\t}\n\t\t}\n\t\tthis.onExpand();\n\t\treturn newElements;\n\t},\n\t\n\t/** ## Selection methods #######################################################################\n\n\t`GeneticAlgorithm.selections` is a bundle of standard selection methods. A selection function \n\ttakes the amount of elements to be selected and returns an array of selected elements. The \n\timplemented methods are:\n\t*/\n\t'static selections': {\n\t\t/** + `rankSelection(count=2)` makes a selection where each element's probability of being \n\t\tselected is proportional to its position in the state.\n\t\t*/\n\t\trankSelection: function rankSelection(count) {\n\t\t\tcount = isNaN(count) ? 2 : +count;\n\t\t\tvar len = this.state.length,\n\t\t\t\trandoms = this.random.randoms(count, 0, len * (len + 1) / 2 - 1),\n\t\t\t\tselected = [];\n\t\t\trandoms.sort(function (x, y) { \n\t\t\t\treturn x - y; \n\t\t\t});\n\t\t\tthis.state.forEach(function (element) {\n\t\t\t\tfor (var i = 0; i < count; i++) {\n\t\t\t\t\trandoms[i] += i - len;\n\t\t\t\t}\n\t\t\t\tif (randoms[0] <= 0) {\n\t\t\t\t\tselected.push(element);\n\t\t\t\t\trandoms.shift();\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (selected.length < count) { // Should not happen.\n\t\t\t\tselected = selected.concat(this.state.slice(0, count - selected.length));\n\t\t\t}\n\t\t\treturn selected;\n\t\t},\n\t\t\n\t\t/** + `rouletteSelection(count=2)` makes a selection where each element's probability of being \n\t\tselected is proportional to its evaluation. Warning! This selection assumes the evaluation is \n\t\tbeing maximized.\n\t\t*/\n\t\trouletteSelection: function rouletteSelection(count) { //FIXME\n\t\t\tcount = isNaN(count) ? 2 : count |0;\n\t\t\tvar len = this.state.length,\n\t\t\t\tevaluationStat = this.statistics.stat({key: 'evaluation', step: this.step}),\n\t\t\t\tmin = evaluationStat.minimum(),\n\t\t\t\tsum = evaluationStat.sum(),\n\t\t\t\trandoms = this.random.randoms(count, 0, sum - len * min),\n\t\t\t\tselected = [];\n\t\t\trandoms.sort(function (x, y) { return x-y; });\n\t\t\tthis.state.forEach(function (element) {\n\t\t\t\tfor (var i = 0; i < count; i++) {\n\t\t\t\t\trandoms[i] += i - len;\n\t\t\t\t}\n\t\t\t\tif (randoms[0] <= 0) {\n\t\t\t\t\tselected.push(element);\n\t\t\t\t\trandoms.shift();\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (selected.length < count) { // Should not happen.\n\t\t\t\tselected = selected.concat(this.state.slice(0, count - selected.length));\n\t\t\t}\n\t\t\treturn selected;\n\t\t},\n\t\t\n\t\t/** + [`stochasticUniversalSamplingSelection(count)`](http://en.wikipedia.org/wiki/Stochastic_universal_sampling)\n\t\tis a less biased version of the roulette selection method.\n\t\t*/\n\t\tstochasticUniversalSamplingSelection: function stochasticUniversalSamplingSelection(count) {\n\t\t\tcount = isNaN(count) ? 2 : count |0;\n\t\t\tvar state = this.state,\n\t\t\t\ttotalFitness = iterable(state).select('evaluation').sum(),\n\t\t\t\tp = totalFitness / count;\n\t\t\treturn base.Iterable.iterate(function (x) { \n\t\t\t\treturn x + p; \n\t\t\t}, this.random.randomInt(p), count).map(function (pointer) {\n\t\t\t\tvar sum = 0;\n\t\t\t\tfor (var i = 0; i < state.length; ++i) {\n\t\t\t\t\tsum += state[i].evaluation;\n\t\t\t\t\tif (sum >= pointer) {\n\t\t\t\t\t\treturn state[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn state[state.length - 1]; // Very improbable.\n\t\t\t}).toArray();\n\t\t},\t\t\n\t}, // GeneticAlgorithm.selections\n\n\t/** ## Crossover methods #######################################################################\n\n\t`GeneticAlgorithm.crossovers` is a bundle of standard crossover methods. A crossover function \n\ttakes an array of parent elements and returns an array of sibling elements. The implemented\n\tmethods are:\n\t*/\n\t'static crossovers': {\n\t\t/** + `singlepointCrossover(parents)` given two parents returns an array of two new elements\n\t\tbuilt with one half of each parent. The cutpoint is chosen randomly.\n\t\t*/\n\t\tsinglepointCrossover: function singlepointCrossover(parents) {\n\t\t\traiseIf(!Array.isArray(parents) || parents.length < 2, \"A two parent array is required.\");\n\t\t\tvar cut = this.random.randomInt(this.length - 1) + 1,\n\t\t\t\tvalues0 = parents[0].values,\n\t\t\t\tvalues1 = parents[1].values;\n\t\t\treturn [ \n\t\t\t\tthis.problem.newElement(values0.slice(0, cut).concat(values1.slice(cut))),\n\t\t\t\tthis.problem.newElement(values1.slice(0, cut).concat(values0.slice(cut)))\n\t\t\t];\n\t\t},\n\t\t\n\t\t/** + `twopointCrossover(parents)` given two parents returns an array of two new elements:\n\t\tthe first one with two parts of the first parent and one part of the second parent, and the \n\t\tsecond one assembled viceversa. The two cutpoints are chosen randomly.\n\t\t*/\n\t\ttwopointCrossover: function twopointCrossover(parents) {\n\t\t\traiseIf(!Array.isArray(parents) || parents.length < 2, \"A two parent array is required.\");\n\t\t\tvar cut1 = this.random.randomInt(this.length - 1) + 1,\n\t\t\t\tcut2 = this.random.randomInt(this.length - 1) + 1,\n\t\t\t\tvalues0 = parents[0].values,\n\t\t\t\tvalues1 = parents[1].values;\n\t\t\treturn [ \n\t\t\t\tthis.problem.newElement(values0.slice(0, cut1).concat(values1.slice(cut1, cut2)).concat(values0.slice(cut2))),\n\t\t\t\tthis.problem.newElement(values1.slice(0, cut1).concat(values0.slice(cut1, cut2)).concat(values1.slice(cut2)))\n\t\t\t];\n\t\t},\n\t\t\n\t\t/** + `uniformCrossover(parents)` creates as many children as the given parents, with each\n\t\tvalue taken randomly from any of the parents.\n\t\t*/\n\t\tuniformCrossover: function uniformCrossover(parents, count) {\n\t\t\tcount = isNaN(count) ? parents.length : count|0;\n\t\t\tvar result = [],\n\t\t\t\tlength = this.problem.elementLength(),\n\t\t\t\trandom = this.random,\n\t\t\t\tvalues;\n\t\t\tfor (var i = 0; i < count; ++i) {\n\t\t\t\tvalues = [];\n\t\t\t\tfor (var j = 0; j < length; ++j) {\n\t\t\t\t\tvalues.push(random.choice(parents).values[j]);\n\t\t\t\t}\n\t\t\t\tresult.push(this.problem.newElement(values));\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}, // GeneticAlgorithm.crossovers\n\t\n\t/** ## Mutation methods ########################################################################\n\n\t`GeneticAlgorithm.mutations` is a bundle of standard mutation methods. A mutation function takes \n\tan element and returns a new element which is a variation of the former. The implemented methods\n\tare:\n\t*/\n\t'static mutations': {\n\t\t/** + `singlepointUniformMutation(element)` sets a randomly selected gene to a uniform\n\t\trandom value.\n\t\t*/\n\t\tsinglepointUniformMutation: function singlepointUniformMutation(element) {\n\t\t\tvar model = this.problem.elementModel(),\n\t\t\t\ti = this.random.randomInt(model.length);\n\t\t\treturn element.modification(i, this.random.random(model[i].min, model[i].max));\n\t\t},\n\t\t\t\n\t\t/** + `uniformMutation(maxPoints=Infinity)` builds a mutation function that makes at least \n\t\tone and up to `maxPoints` mutations, changing a randomly selected gene to a uniform random\n\t\tvalue.\n\t\t*/\n\t\tuniformMutation: function uniformMutation(maxPoints) {\n\t\t\tmax = isNaN(maxPoints) ? Infinity : +maxPoints;\n\t\t\tvar model = this.problem.elementModel();\n\t\t\treturn function mutation(element) {\n\t\t\t\tvar times = maxPoints, i, range;\n\t\t\t\telement = this.problem.newElement(element.values); // Copy element.\n\t\t\t\tdo {\n\t\t\t\t\ti = this.random.randomInt(model.length);\n\t\t\t\t\telement.values[i] = this.random.random(model[i].min, model[i].max);\n\t\t\t\t} while (this.random.randomBool(this.mutationRate) && --times > 0);\n\t\t\t\treturn element;\n\t\t\t};\n\t\t},\n\t\t\n\t\t/** + `singlepointBiasedMutation(element)` sets a randomly selected gene to random deviation\n\t\tof its value, with a triangular distribution.\n\t\t*/\n\t\tsinglepointBiasedMutation: function singlepointBiasedMutation(element) {\n\t\t\tvar random = this.random,\n\t\t\t\tmodel = this.problem.elementModel(),\n\t\t\t\ti = random.randomInt(element.length);\n\t\t\treturn element.modification(i, element.values[i] + \n\t\t\t\t(random.random() - random.random()) * (model[i].max - model[i].min));\n\t\t},\n\t\t\n\t\t/** + `recombinationMutation(element)` swaps two values of the element at random.\n\t\t*/\n\t\trecombinationMutation: function recombinationMutation(element) {\n\t\t\tvar values = element.values.slice(),\n\t\t\t\ti1 = this.random.randomInt(values.length),\n\t\t\t\tv1 = values[i1],\n\t\t\t\ti2 = this.random.randomInt(values.length), v2;\n\t\t\tif (i1 === i2) {\n\t\t\t\ti2 = (i2 + 1) % element.length;\n\t\t\t}\n\t\t\tvalues[i1] = values[i2];\n\t\t\tvalues[i2] = v1;\n\t\t\treturn this.problem.newElement(values);\n\t\t}\n\t}, // GeneticAlgorithm.mutations\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'GeneticAlgorithm',\n\t\tserializer: function serialize_GeneticAlgorithm(obj) {\n\t\t\tvar params = obj.__params__('expansionRate', 'mutationRate');\n\t\t\t//TODO serialize 'selection', 'crossover', 'mutation'\n\t\t\treturn [params];\n\t\t}\n\t}\n}); // declare GeneticAlgorithm.\n","/** # Beam search\n\n[Beam search](http://en.wikipedia.org/wiki/Beam_search) is a form of parallel best-first search with \nlimited memory.\n*/\nvar BeamSearch = metaheuristics.BeamSearch = declare(Metaheuristic, {\n\t/** The constructor m take any special parameters.\n\t*/\n\tconstructor: function BeamSearch(params) {\n\t\tMetaheuristic.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t/** A `delta` may be specified for the default `successors` for continuous variables.\n\t\t\t*/\n\t\t\t.number('delta', { ignore: true, coerce: true });\n\t},\n\t\n\t/** `successors(element)` returns the elements' successors. The problem's element must have its \n\t`successors` method implemented.\n\t*/\n\tsuccessors: function successors(element) {\n\t\treturn element.neighbourhood(this.delta);\n\t},\n\t\n\t/** The expansion in beam search adds all successors of all elements to the\tstate. After being \n\tevaluated and sieved only the best will remain.\n\t*/\n\texpansion: function expansion() {\n\t\tvar allSuccessors = [],\n\t\t\tsuccessors = this.successors.bind(this);\n\t\tthis.state.forEach(function (element) {\n\t\t\tallSuccessors = allSuccessors.concat(successors(element));\n\t\t});\n\t\tthis.onExpand();\n\t\treturn allSuccessors;\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'BeamSearch',\n\t\tserializer: function serialize_BeamSearch(obj) {\n\t\t\treturn [obj.__params__('delta')];\n\t\t}\n\t}\n}); // declare BeamSearch.\n","/** # Simulated annealing\n\n[Simulated annealing](http://en.wikipedia.org/wiki/Simulated_annealing) is a stochastic global \noptimization technique.\n*/\nvar SimulatedAnnealing = metaheuristics.SimulatedAnnealing = declare(Metaheuristic, {\n\t/** The constructor takes some specific parameters for this search:\n\t*/\n\tconstructor: function SimulatedAnnealing(params) {\n\t\tMetaheuristic.call(this, params);\n\t\tinitialize(this, params)\n\t\t/** + `maximumTemperature=1` is the temperature at the start of the run.\n\t\t*/\n\t\t\t.number('maximumTemperature', { defaultValue: 1, coerce: true })\n\t\t/** + `minimumTemperature=0` is the temperature at the end of the run.\n\t\t*/\n\t\t\t.number('minimumTemperature', { defaultValue: 0, coerce: true })\n\t\t/** + `delta=1` is the radius of the elements surroundings in every dimension, that is \n\t\tchecked by this algorithm.\n\t\t*/\n\t\t\t.number('delta', { defaultValue: 1, coerce: true })\n\t\t/** + `size=1` is 1 by default, but larger states are supported.\n\t\t*/\n\t\t\t.integer('size', { defaultValue: 1,\tcoerce: true })\n\t\t/** + `temperature=coolingSchedule.linear` is the temperature function.\n\t\t*/\n\t\t\t.func('temperature', { defaultValue: this.coolingSchedule.linear });\n\t},\n\t\n\t/** `randomNeighbour(element, radius=this.delta)` returns one neighbour of the given element \n\tchosen at random.\n\t*/\n\trandomNeighbour: function randomNeighbour(element, radius) {\n\t\tradius = isNaN(radius) ? this.delta : +radius;\n\t\tvar i = this.random.randomInt(element.values.length), \n\t\t\tv = element.values[i];\n\t\treturn element.modification(i, this.random.randomBool() ? v + radius : v - radius);\n\t},\n\t\n\t/** The `acceptance(current, neighbour, temp=this.temperature())` is the probability of \n\taccepting the new element. Uses the original definitions from \n\t[Kirkpatrick's paper](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.123.7607).\n\t*/\n\tacceptance: function acceptance(current, neighbour, temp) {\n\t\ttemp = isNaN(temp) ? this.temperature() : +temp;\n\t\tif (this.problem.compare(current, neighbour) > 0) {\n\t\t\treturn 1; // Should always accept a better neighbour.\n\t\t} else {\n\t\t\tvar d = -Math.abs(neighbour.evaluation - current.evaluation);\n\t\t\treturn clamp(Math.exp(d / temp), 0, 1);\n\t\t}\n\t},\n\t\n\t/** The annealings temperature is a metaphore for the amount of randomness the process applies. \n\tThe cooling schedule is a function that calculates the temperature for any given step in the\n\toptimization.\n\t*/\n\tcoolingSchedule: {\n\t\tlinear: function temperature() {\n\t\t\treturn (1 - Math.max(0, this.step) / this.steps) * \n\t\t\t\t(this.maximumTemperature - this.minimumTemperature) + this.minimumTemperature;\n\t\t}\n\t},\n\t\n\t/** At every iteration, for each element in the state one of its neighbours is chosen randomly. \n\tIf the neighbour is better, it replaces the corresponding element. Else it may still do so, but \n\twith a probability calculated by `acceptance()`.\n\t*/\n\tupdate: function update() {\n\t\tvar mh = this,\n\t\t\ttemp = this.temperature(),\n\t\t\tacceptanceStat = this.statistics.stat({key: 'acceptance'}),\n\t\t\ttemperatureStat = this.statistics.stat({key: 'temperature'});\n\t\ttemperatureStat.add(temp, this.step);\n\t\treturn Future.all(this.state.map(function (elem) {\n\t\t\tvar neighbour = mh.randomNeighbour(elem);\n\t\t\treturn Future.then(neighbour.evaluate(), function () {\n\t\t\t\tvar p = mh.acceptance(elem, neighbour, temp);\n\t\t\t\tacceptanceStat.add(p, neighbour);\n\t\t\t\treturn mh.random.randomBool(p) ? neighbour : elem;\n\t\t\t});\n\t\t})).then(function (elems) {\n\t\t\telems = mh.sort(elems);\n\t\t\tmh.state = elems;\n\t\t\tmh.onUpdate();\n\t\t\treturn mh;\n\t\t});\n\t},\n\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'SimulatedAnnealing',\n\t\tserializer: function serialize_SimulatedAnnealing(obj) {\n\t\t\t//TODO Serialize 'temperature'\n\t\t\treturn [obj.__params__('maximumTemperature', 'minimumTemperature', 'delta')];\n\t\t}\n\t}\n}); // declare SimulatedAnnealing.\n","/** # Particle swarm\n\n[Particle Swarm](http://en.wikipedia.org/wiki/Particle_swarm_optimization) is an stochastic \noptimization technique. Every candidate solution is treated as a particle with a position and a \nvelocity. On each iteration the positions and velocities of every particle are updated considering\nthe best positions so far.\n*/\nvar ParticleSwarm = metaheuristics.ParticleSwarm = declare(Metaheuristic, {\n\t/** The constructor takes some specific parameters for this search:\n\t*/\n\tconstructor: function ParticleSwarm(params) {\n\t\tMetaheuristic.call(this, params);\n\t\tinitialize(this, params)\n\t\t/** + `inertia=1` is the weight of the particle's current velocity in the velocity update.\n\t\t*/\n\t\t\t.number('inertia', { defaultValue: 1, coerce: true })\n\t\t/** + `localAcceleration=0.5` is the weight of the particle's current best position in the \n\t\t\t\tvelocity update.\n\t\t*/\n\t\t\t.number('localAcceleration', { defaultValue: 0.5, coerce: true })\n\t\t/** + `globalAcceleration=0.3` is the weight of the whole swarm's current best position in \n\t\t\t\tthe velocity update.\n\t\t*/\n\t\t\t.number('globalAcceleration', { defaultValue: 0.3, coerce: true });\n\t},\n\t\n\t/** The elements in a particle swarm have two added properties which have to be initialized:\n\t\n\t+ `__velocity__` is the vector that defines the movement of the particle. Initially it is a \n\t\trandom vector.\n\t+ `__localBest__` is the best position of the particle in the run. The first position has \n\t\titself as the best so far.\n\t*/\n\tinitiate: function initiate(size) {\n\t\tMetaheuristic.prototype.initiate.call(this, size);\n\t\tvar mh = this,\n\t\t\tmodel = this.problem.elementModel(),\n\t\t\tresult = this.state.forEach(function (element) {\n\t\t\t\telement.__velocity__ = mh.random.randoms(element.values.length, -1, +1).map(function (v, i) {\n\t\t\t\t\treturn v * (model[i].max - model[i].min);\n\t\t\t\t});\n\t\t\t\telement.__localBest__ = element;\n\t\t\t});\n\t\tthis.onInitiate();\n\t\treturn result;\n\t},\n\t\n\t/** The method `nextVelocity` calculates the velocity of the particle for the next iteration.\n\t*/\n\tnextVelocity: function nextVelocity(element, globalBest) {\n\t\tvar mh = this,\n\t\t\tvelocity = element.__velocity__,\n\t\t\tlocalBest = element.__localBest__,\n\t\t\tlocalCoef = this.random.random(this.localAcceleration),\n\t\t\tglobalCoef = this.random.random(this.globalAcceleration),\n\t\t\tresult = element.values.map(function (v, i) {\n\t\t\t\treturn velocity[i] * mh.inertia +\n\t\t\t\t\tlocalCoef * (localBest.values[i] - v) +\n\t\t\t\t\tglobalCoef * (globalBest.values[i] - v);\n\t\t\t});\n\t\treturn result;\n\t},\n\t\n\t/** The method `nextElement` creates a new element which represents the position of a particle \n\tin the next iteration.\n\t*/\n\tnextElement: function nextElement(element, globalBest) {\n\t\tvar mh = this,\n\t\t\tnextVelocity = this.nextVelocity(element, globalBest),\n\t\t\tnextValues = element.values.map(function (v, i) {\n\t\t\t\treturn v + nextVelocity[i];\n\t\t\t}),\n\t\t\tresult = this.problem.newElement(nextValues);\n\t\treturn Future.then(result.evaluate(), function () {\n\t\t\tresult.__velocity__ = nextVelocity;\n\t\t\tresult.__localBest__ = mh.problem.compare(element.__localBest__, result) > 0 ? result : element.__localBest__;\n\t\t\treturn result;\n\t\t});\t\t\n\t},\n\t\n\t/** Updating the optimization state means updating each particle velocity and recalculating \n\ttheir positions. The best position of the whole run is stored in the `__globalBest__` property,\n\tand updated every time a new best position is achieved. If nothing fails, in the end the \n\tparticles should converge at this position.\n\t*/\n\tupdate: function update() {\n\t\tvar mh = this,\n\t\t\tglobalBest = this.__globalBest__;\n\t\tif (!globalBest) {\n\t\t\tglobalBest = this.__globalBest__ = this.state[0];\n\t\t}\n\t\treturn Future.all(this.state.map(function (element) {\n\t\t\treturn mh.nextElement(element, globalBest);\n\t\t})).then(function (elements) {\n\t\t\telements = mh.sort(elements);\n\t\t\tmh.state = elements;\n\t\t\tif (mh.problem.compare(mh.__globalBest__, elements[0]) > 0) {\n\t\t\t\tmh.__globalBest__ = elements[0];\n\t\t\t}\n\t\t\tmh.onUpdate();\n\t\t\treturn mh;\n\t\t});\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'ParticleSwarm',\n\t\tserializer: function serialize_ParticleSwarm(obj) {\n\t\t\treturn [obj.__params__('inertia', 'localAcceleration', 'globalAcceleration')];\n\t\t}\n\t}\n}); // declare ParticleSwarm.\n","/** # Differential evolution\n\n[Differential evolution](http://en.wikipedia.org/wiki/Differential_evolution) is an evolutionary\nmetaheuristic based on a particular form of crossover. This operator acts on individual values of\neach state, replacing the value with a combination of the corresponding value in three other \nrandomly chosen elements.\n*/\nvar DifferentialEvolution = metaheuristics.DifferentialEvolution = declare(Metaheuristic, {\n\t/** The constructor takes the following parameters:\n\t*/\n\tconstructor: function DifferentialEvolution(params) {\n\t\tMetaheuristic.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t/** + `differentialWeight=1` is the coefficient (usually named `F`) in the crossover \n\t\t\tformula.\n\t\t\t*/\n\t\t\t.number('differentialWeight', { coerce: true, defaultValue: 1, minimum: 0, maximum: 2 })\n\t\t\t/** + `crossoverProbability=30%` is the probability of getting a value from a crossover. \n\t\t\t*/\n\t\t\t.number('crossoverProbability', { coerce: true, defaultValue: 0.3, minimum: 0, maximum: 1 })\n\t\t\t/** Also, the state's size is constrained to a minimum of 4, because of how the \n\t\t\tcrossover works.\n\t\t\t*/\n\t\t\t.integer('size', { coerce: true, defaultValue: 100, minimum: 4 });\n\t},\n\t\n\t/** The expansion is quite simple. For each element `x` in the state a new one is generated. \n\tThree other elements are randomly selected from the state, named `a`, `b` and `c`. With a \n\tprobability of `crossoverProbability`, the ith value of the new element results from \n\t`a[i] + F(b[i] - c[i])`, where `F` is the `differentialWeight`. The other values are copied from \n\t`x`, although it is assured that at least one of the new element's is calculated as shown \n\tbefore. \n\t*/\n\texpansion: function expansion() {\n\t\tvar mh = this,\n\t\t\tresult = this.state.map(function (element, elementIndex) {\n\t\t\t\tvar stateCopy = mh.state.slice();\n\t\t\t\tstateCopy.splice(elementIndex, 1);\n\t\t\t\tvar crossover = mh.random.choices(3, stateCopy),\n\t\t\t\t\ta = crossover[0].values,\n\t\t\t\t\tb = crossover[1].values,\n\t\t\t\t\tc = crossover[2].values,\n\t\t\t\t\tlen = element.values.length,\n\t\t\t\t\trandomIndex = mh.random.randomInt(len),\n\t\t\t\t\tnewValues = element.values.map(function (value, i) {\n\t\t\t\t\t\tif (i === randomIndex || mh.random.randomBool(mh.crossoverProbability)) {\n\t\t\t\t\t\t\treturn a[i] + mh.differentialWeight * (b[i] - c[i]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\treturn mh.problem.newElement(newValues);\n\t\t\t});\n\t\tthis.onExpand();\n\t\treturn result;\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'DifferentialEvolution',\n\t\tserializer: function serialize_DifferentialEvolution(obj) {\n\t\t\treturn [obj.__params__('differentialWeight', 'crossoverProbability')];\n\t\t}\n\t}\n}); // declare DifferentialEvolution.\n","/** # Evolution strategy.\n\n[Evolution strategy](https://en.wikipedia.org/wiki/Evolution_strategy) is maybe the simplest \nevolutionary optimization method. At each step, one or more random deviations of each element are\ngenerated, replacing their parent if they prove to be better.\n*/\nvar EvolutionStrategy = metaheuristics.EvolutionStrategy = declare(Metaheuristic, {\n\t/** The constructor takes the following parameters:\n\t*/\n\tconstructor: function EvolutionStrategy(params) {\n\t\tMetaheuristic.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t/** + `mutantCount=1` is the number of mutants generated per element at each step.\n\t\t\t*/\n\t\t\t.number('mutantCount', { coerce: true, defaultValue: 1, minimum: 1 })\n\t\t\t/** + `size=1`: state's size is 1 by default in this metaheuristic.\n\t\t\t*/\n\t\t\t.integer('size', { coerce: true, defaultValue: 1, minimum: 1 });\n\t},\n\t\n\t/** A `mutant` is a new random variation of the given `element`. Although using a normal \n\tdistribution is more common, here a more efficient tringular distribution is used.\n\t*/\n\tmutant: function mutant(element) {\n\t\tvar random = this.random,\n\t\t\tmodel = this.problem.elementModel(),\n\t\t\tnewValues = element.values.map(function (v, i) {\n\t\t\t\tvar range = model[i];\n\t\t\t\treturn v + (random.random() - random.random()) * (range.max - range.min);\n\t\t\t});\n\t\treturn this.problem.newElement(newValues);\n\t},\n\t\n\t/** `mutants` calculates an array of `count` mutants, or `this.mutantCount` by default. \n\t*/\n\tmutants: function mutants(element, count) {\n\t\tcount = isNaN(count) ? this.mutantCount : +count;\n\t\tvar result = [];\n\t\tfor (var i = 0; i < count; ++i) {\n\t\t\tresult.push(this.mutant(element));\n\t\t}\n\t\treturn result;\n\t},\n\t\n\t/** The expansion simply returns a set of `this.mutantCount` mutants for each element in the\n\tcurrent state.\n\t*/\n\texpansion: function expansion() {\n\t\tvar mh = this,\n\t\t\tnewElements = [];\n\t\tthis.state.forEach(function (element) {\n\t\t\tnewElements = newElements.concat(mh.mutants(element));\n\t\t});\n\t\tthis.onExpand();\n\t\treturn newElements;\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'DistributionEstimation',\n\t\tserializer: function serialize_DistributionEstimation(obj) {\n\t\t\treturn [obj.__params__('mutantCount')];\n\t\t}\n\t}\n}); // declare EvolutionStrategy.\n","/** # Harmony search.\n\n[Harmony search](https://en.wikipedia.org/wiki/Harmony_search) is an optimization technique inspired\nby the improvisation process of musicians proposed by Zong Woo Geem in 2001.\n*/\nvar HarmonySearch = metaheuristics.HarmonySearch = declare(Metaheuristic, {\n\t/** The constructor takes the following parameters:\n\t*/\n\tconstructor: function HarmonySearch(params) {\n\t\tMetaheuristic.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t/** + `harmonyProbability=90%` or _hmcr_ is the chance of a value of the next element \n\t\t\tbeing taken from one existing element in the state (or _\"harmony memory\"_).\n\t\t\t*/\n\t\t\t.number('harmonyProbability', { coerce: true, defaultValue: 0.9, minimum: 0, maximum: 1 })\n\t\t\t/** + `adjustProbability=30%` or _par_ is the chance of adjusting a value of the next\n\t\t\telement.\n\t\t\t*/\n\t\t\t.number('adjustProbability', { coerce: true, defaultValue: 0.5, minimum: 0, maximum: 1 })\n\t\t\t/** + `delta=1` is the distance between neighbouring states for discrete adjustments.\n\t\t\t*/\n\t\t\t.number('delta', { coerce: true, defaultValue: 1 })\n\t\t\t/** + `fretWidth=0.01` is the maximum adjustment for continuous variables, expressed as \n\t\t\ta ratio of the range.\n\t\t\t*/\n\t\t\t.number('fretWidth', { coerce: true, defaultValue: 0.01 })\n\t\t\t;\n\t},\n\t\n\t/** At each step only one new element is generated. Each of its values is taken from another\n\telement in the state with a chance equal to `harmonyProbability`, else it is defined at random.\n\tIf the value comes from another element, it is slightly modified by `delta` with a chance equal\n\tto `adjustProbability`.\n\t*/\n\texpansion: function expansion() {\n\t\tvar mh = this,\n\t\t\trandom = this.random,\n\t\t\tmodel = this.problem.elementModel(),\n\t\t\tvalues = model.map(function (range, i) {\n\t\t\t\tif (random.randomBool(mh.harmonyProbability)) {\n\t\t\t\t\tvar value = random.choice(mh.state).values[i];\n\t\t\t\t\tif (random.randomBool(mh.adjustProbability)) {\n\t\t\t\t\t\tif (range.discrete) {\n\t\t\t\t\t\t\tvalue += random.choice([-mh.delta, mh.delta]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar span = range.max - range.min;\n\t\t\t\t\t\t\tvalue += random.random(-span, +span) * mh.fretWidth;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t} else {\n\t\t\t\t\treturn random.random(range.min, range.max);\n\t\t\t\t}\n\t\t\t});\n\t\tthis.onExpand();\n\t\treturn [this.problem.newElement(values)];\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'HarmonySearch',\n\t\tserializer: function serialize_HarmonySearch(obj) {\n\t\t\treturn [obj.__params__('harmonyProbability', 'adjustProbability', 'delta', 'fretWidth')];\n\t\t}\n\t}\n}); // declare HarmonySearch.","/** # Distribution estimation\n\nThis is a simple implementation of a [estimation of distributionalgorithm]\n(http://en.wikipedia.org/wiki/Estimation_of_distribution_algorithm). This stochastic optimization \nmethods try to estimate a probabilistic model for the characteristics of the better candidate \nsolutions. At each step many individual are randomly generated based on the current model. After all\nhave been evaluated, the model is adjusted.\n\nThe statistical model in this implementation is an histogram for each dimension (i.e. value of the\nelement representing the candidate solution). Dimensions are assumed to be independent of each \nother.\n*/\nvar DistributionEstimation = metaheuristics.DistributionEstimation = declare(Metaheuristic, {\n\t/** The constructor takes the following parameters:\n\t*/\n\tconstructor: function DistributionEstimation(params) {\n\t\tMetaheuristic.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t/** + `histogramWidth=10` is the amounts of ranges the value domain is split in order\n\t\t\tto calculate the histograms.\n\t\t\t*/\n\t\t\t.integer('histogramWidth', { coerce: true, defaultValue: 10, minimum: 2 });\n\t},\n\t\n\t/** New elements to add to the state in the `expansion` are build from the `histograms`\n\tcalculated from said state.\n\t*/\n\texpansion: function expansion(size) {\n\t\tvar mh = this,\n\t\t\texpansionRate = isNaN(this.expansionRate) ? 0.5 : +this.expansionRate,\n\t\t\thistograms = this.histograms(); // Get the current histogram of the state.\n\t\tsize = isNaN(size) ? Math.floor(expansionRate * this.size) : size |0;\n\t\treturn base.Iterable.repeat(null, size).map(function () {\n\t\t\treturn mh.elementFromHistograms(histograms);\n\t\t}).toArray();\n\t},\n\t\n\t/** The `histograms` have the frequencies of value ranges in the current state.\n\t*/\n\thistograms: function histograms() {\n\t\treturn DistributionEstimation.histograms(this.state, this.histogramWidth, \n\t\t\tthis.problem.elementModel().length);\n\t},\n\t\n\t'static histograms': function histograms(state, histogramWidth, histogramCount) {\n\t\tvar size = state.length,\n\t\t\tcounts = Iterable.iterate(function (v) { // Builds a matrix of zeroes.\n\t\t\t\treturn v.slice();\n\t\t\t}, Iterable.repeat(0, histogramWidth).toArray(), histogramCount).toArray();\n\t\tstate.forEach(function (element) {\n\t\t\telement.values.forEach(function (value, i) {\n\t\t\t\tvar bar = Math.min(histogramWidth - 1, Math.floor(element.values[i] * histogramWidth)); //FIXME Normalize.\n\t\t\t\tcounts[i][bar]++;\n\t\t\t});\n\t\t});\n\t\treturn counts.map(function (v) { // Turn counts into frequencies.\n\t\t\treturn v.map(function (v) {\n\t\t\t\treturn v / size;\n\t\t\t}); \n\t\t});\n\t},\n\t\n\t/** The method `elementFromHistogram` is used to make these new random elements.\n\t*/\n\telementFromHistograms: function elementFromHistogram(histograms) {\n\t\treturn DistributionEstimation.elementFromHistograms(histograms, this.problem, this.random);\n\t},\n\t\n\t'static elementFromHistograms': function elementFromHistogram(histograms, problem, random) {\n\t\tvar length = histograms.length,\n\t\t\tvalues = new Array(length),\n\t\t\thistogram, r;\n\t\tfor (var i = 0; i < length; ++i) {\n\t\t\thistogram = histograms[i];\n\t\t\tr = random.random();\n\t\t\tfor (var j = 0; j <= histogram.length; ++j) {\n\t\t\t\tif (j === histogram.length || (r -= histogram[j]) <= 0) {\n\t\t\t\t\tvalues[i] = Math.min(1, Math.max(0, (j + random.random()) / histogram.length));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn problem.newElement(values);\n\t},\n\t\n\t// ## Estimation of distribution as a problem. #################################################\n\t\n\t/** A `histogramProblem` is the problem of finding histograms that would generate good candidate\n\tsolutions for a given `problem`.\n\t*/\n\t'static histogramProblem': function histogramProblem(problem, size, histogramWidth) {\n\t\tsize = isNaN(size) ? 30 : Math.max(1, size |0);\n\t\thistogramWidth = isNaN(histogramWidth) ? 10 : Math.max(2, histogramWidth |0);\n\t\tvar elementLength = problem.elementLength(),\n\t\t\telementFromHistograms = this.elementFromHistograms;\n\t\t\tHistogramProblem = declare(Problem, {\n\t\t\t\t/** Each element of this problem represents an histogram for elements of the given\n\t\t\t\t`problem`. The argument `histogramWidth` defines how many ranges each histogram has.\n\t\t\t\t*/\n\t\t\t\telementLength: function elementLength() {\n\t\t\t\t\treturn elementLength * histogramWidth;\n\t\t\t\t},\n\t\t\t\t\n\t\t\t\t/** The evaluation of the elements is the average evaluation of `size` elements \n\t\t\t\tgenerated from the histogram that this element represents.\n\t\t\t\t*/\n\t\t\t\tevaluation: function evaluation(element) {\n\t\t\t\t\tvar histograms = this.mapping(element),\n\t\t\t\t\t\telements = base.Iterable.repeat(null, size).map(function () {\n\t\t\t\t\t\t\treturn elementFromHistograms(histograms, problem, problem.random);\n\t\t\t\t\t\t});\n\t\t\t\t\treturn Future.all(iterable(elements).map(function (e) {\n\t\t\t\t\t\treturn Future.when(e.evaluate());\n\t\t\t\t\t})).then(function (evaluations) {\n\t\t\t\t\t\treturn iterable(evaluations).sum() / evaluations.length;\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\t\n\t\t\t\t/** The `mapping` simply assembles the histograms and normalizes its frequencies.\n\t\t\t\t*/\n\t\t\t\tmapping: function mapping(element) {\n\t\t\t\t\tvar histograms = [],\n\t\t\t\t\t\thistogram, sum;\n\t\t\t\t\tfor (var i = 0; i < element.length; ++i) {\n\t\t\t\t\t\thistogram = element.values.slice(i * histogramWidth, (i+1) * histogramWidth);\n\t\t\t\t\t\tsum = iterable(histogram).sum();\n\t\t\t\t\t\thistograms[i] = histogram.map(function (f) { // Normalization\n\t\t\t\t\t\t\treturn f / sum;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\treturn histograms;\n\t\t\t\t},\n\t\t\t\t\n\t\t\t\t/** The comparison function is the same as the original problem's.\n\t\t\t\t*/\n\t\t\t\tcompare: problem.compare\n\t\t\t});\n\t\treturn new HistogramProblem({ random: problem.random });\n\t},\n\t\n\t// ## Other ####################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'DistributionEstimation',\n\t\tserializer: function serialize_DistributionEstimation(obj) {\n\t\t\treturn [obj.__params__('histogramWidth')];\n\t\t}\n\t}\n}); // declare DistributionEstimation.\n","/** # Gradient descent\n\n[Gradient descent](http://en.wikipedia.org/wiki/Gradient_descent) is an iterative optimization \nmethod, similar to Hill Climbing. The candidate solution is treated as a point in a multidimensional\nsearch space, and the gradient that the function being optimized defines in said domain is used to\nmove the current solution in the steepest direction.\n*/\nvar GradientDescent = metaheuristics.GradientDescent = declare(Metaheuristic, {\n\t/** The constructor takes the following parameters:\n\t*/\n\tconstructor: function HillClimbing(params) {\n\t\tMetaheuristic.call(this, params);\n\t\tinitialize(this, params)\n\t\t/** + `delta=1`: the maximum distance considered by gradient estimators.\n\t\t*/\n\t\t\t.number('delta', { coerce: true, defaultValue: 1 })\n\t\t/** + `size=1`: the state's size is 1 by default. This may be increased, resulting in many \n\t\tparallel descents.\n\t\t*/\n\t\t\t.integer('size', { coerce: true, defaultValue: 1, minimum: 1 });\n\t},\n\t\n\t/** A `gradient` is the vector for the direction of steepest descent (or ascent) of the function \n\tto be optimized at the given `element`. If the function is not differentiable an approximation\n\tcan be used. Since estimators may require element evaluation, which can be asynchronous, it must\n\tbe considered that this function may return a future.\n\t\n\tThe default implementation is based on the finite difference method proposed by [Kiefer and \n\tWolfowitz](http://projecteuclid.org/euclid.aoms/1177729392).\n\t*/\n\tgradient: function gradient(element) {\n\t\treturn this.gradientFiniteDifferences(element);\n\t},\n\t\n\t/** The `rate` is a number by which the gradient is multiplied before adding it to the current \n\tpoint to advance to the next step. The default implementation returns `1/step`, as [Kiefer and \n\tWolfowitz suggest](http://projecteuclid.org/euclid.aoms/1177729392).\n\t*/\n\trate: function rate(step) {\n\t\tstep = isNaN(step) ? this.step : step |0;\n\t\treturn 1 / Math.max(1, step);\n\t},\n\t\n\t/** The `estimatorWidth` is a number used by some gradient estimators. By default it returns \n\t`step^(-1/3) * delta`, similar to what [Kiefer and Wolfowitz suggest](http://projecteuclid.org/euclid.aoms/1177729392).\n\t*/\n\testimatorWidth: function estimatorWidth(step, delta) {\n\t\tstep = isNaN(step) ? this.step : step |0;\n\t\tdelta = isNaN(delta) ? this.delta : +delta;\n\t\treturn Math.pow(Math.max(1, step), -1/3) * delta;\n\t},\n\t\n\t/** In the `update`, each element in the state is moved in the search domain. The movement is \n\tset by its gradient in the direction of the optimization. The distance is defined by the `rate`\n\tfor the current step.\n\t*/\n\tupdate: function update() {\n\t\tvar mh = this,\n\t\t\trate = this.rate(this.step);\n\t\treturn Future.all(this.state.map(function (elem) {\n\t\t\treturn Future.then(mh.gradient(elem), function (gradient) {\n\t\t\t\tvar newValues = gradient.map(function (gradientValue, i) {\n\t\t\t\t\treturn elem.values[i] - gradientValue * rate;\n\t\t\t\t});\n\t\t\t\treturn mh.problem.newElement(newValues);\n\t\t\t});\n\t\t})).then(function (elems) {\n\t\t\treturn mh.evaluate(elems);\n\t\t}).then(function (elems) {\n\t\t\tmh.state = elems;\n\t\t\tmh.onUpdate();\n\t\t\treturn mh;\n\t\t});\n\t},\n\t\n\t// ## Gradient estimators ######################################################################\n\t\n\t/** A gradient estimator at the given `element` by finite differences.\n\t*/\n\tgradientFiniteDifferences: function gradientFiniteDifferences(element, width) {\n\t\twidth = isNaN(width) ? this.estimatorWidth() : +width;\n\t\tvar mh = this;\n\t\treturn Future.all(element.values.map(function (value, i) {\n\t\t\tvar left = element.modification(i, value - width),\n\t\t\t\tright = element.modification(i, value + width);\n\t\t\treturn Future.then(left.evaluate(), function (leftEvaluation) {\n\t\t\t\treturn Future.then(right.evaluate(), function (rightEvaluation) {\n\t\t\t\t\tvar comp = mh.problem.compare(left, right);\n\t\t\t\t\tcomp = comp === 0 ? comp : comp > 0 ? 1 : -1;\n\t\t\t\t\treturn (leftEvaluation - rightEvaluation) * comp / 2 / width;\n\t\t\t\t});\n\t\t\t});\n\t\t}));\n\t},\n\t\n\t/** A gradient estimator at the given `element` for [Simultaneous Perturbation Stochastic \n\tApproximation](http://www.jhuapl.edu/SPSA/).\n\t*/\n\tgradientSimultaneousPerturbation: function gradientSimultaneousPerturbation(width, element) {\n\t\tthrow new Error('GradientDescent.gradientSimultaneousPerturbation() is not implemented!');//TODO\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'GradientDescent',\n\t\tserializer: function serialize_GradientDescent(obj) {\n\t\t\treturn [obj.__params__('delta')];\n\t\t}\n\t}\n}); // declare GradientDescent.","/** # _\"Hello World\"_ problem\n\nAs it sounds, `HelloWorld` is a simple problem class, probably only useful for testing purposes.\n*/\nproblems.HelloWorld = declare(Problem, { \n\ttitle: \"Hello world\",\n\tdescription: \"Simple problem where each element is a string, and the \"+\n\t\t\"optimization goes towards the target string.\",\n\t\n\t/** In this simple problem each element is a string, and the optimization goes towards the \n\ttarget string. The string to match is specified by the `target` parameter (`\"Hello world!\"` by \n\tdefault).\n\t*/\t\n\tconstructor: function HelloWorld(params){\n\t\tProblem.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t.string('target', { coerce: true, defaultValue: 'Hello world!' });\n\t\t\n\t\tthis.__target__ = iterable(this.target).map(function (c) {\n\t\t\treturn c.charCodeAt(0);\n\t\t}).toArray();\n\t\t/** The elements' length is equal to the length of the target string. Every value is between \n\t\t32 (inclusive) and 127 (exclusive), which is the range of visible characters in ASCII.\n\t\t*/\n\t\tthis.__elementModel__ = Iterable.repeat({ min: 32, max: 127, discrete: true }, this.target.length).toArray();\n\t},\n\t\n\t/** An element's values are always numbers. These are converted to a string by converting each \n\tnumber to its corresponding Unicode character.\n\t*/\n\tmapping: function mapping(element) {\n\t\treturn element.values.map(function (v) {\n\t\t\treturn String.fromCharCode(Math.floor(v));\n\t\t}).join('');\n\t},\n\t\t\t\n\t/** An element evaluation is equal to its distance from target string.\n\t*/\n\tevaluation: function evaluation(element) {\n\t\treturn element.manhattanDistance(this.__target__, element.values);\n\t},\t\t\n\t\n\t/** Since elements' evaluation is a distance, this value must be minimized to guide the search \n\ttowards the target string.\n\t*/\n\tcompare: Problem.prototype.minimization,\n\t\n\t/** An element is sufficient when its equal to the target string.\n\t*/\n\tsufficientElement: function sufficientElement(element) {\n\t\treturn this.mapping(element) === this.target;\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'HelloWorld',\n\t\tserializer: function serialize_HelloWorld(obj) {\n\t\t\treturn [obj.__params__('target')];\n\t\t}\n\t}\n}); // declare HelloWorld.\n","/** # Test beds\n\nProblem builder for test beds of algorithms in this library.\n*/\n\n/** The function `testbed` is a shortcut used to define the test problems.\n*/\nvar TestBed = problems.TestBed = declare(Problem, {\n\tconstructor: function TestBed(spec) {\n\t\tProblem.call(this, spec);\n\t\tthis.title = spec.title;\n\t\t\n\t\tvar minimumValue = isNaN(spec.minimumValue) ? -1e6 : +spec.minimumValue,\n\t\t\tmaximumValue = isNaN(spec.maximumValue) ? +1e6 : +spec.maximumValue,\n\t\t\tlength = isNaN(spec.length) ? 2 : +spec.length;\n\t\tthis.__elementModel__ = Iterable.repeat({ min: minimumValue, max: maximumValue, discrete: !!spec.discreteDomain }, length).toArray();\n\t\t\n\t\tthis.evaluation = function evaluation(element) {\n\t\t\treturn spec.evaluation(element.values);\n\t\t};\n\t\t\n\t\t/** If an optimum value is provided (`spec.optimumValue`) it is added to the termination\n\t\tcriteria.\n\t\t*/\n\t\tif (spec.hasOwnProperty('optimumValue')) {\n\t\t\tthis.sufficientElement = function sufficientElement(element) {\n\t\t\t\treturn Math.abs(element.evaluation - spec.optimumValue) < element.resolution;\n\t\t\t};\n\t\t}\n\t}\n});\n\t\n/** Testbed problems taken from the web (e.g. \n[1](http://en.wikipedia.org/wiki/Test_functions_for_optimization),\n[2](http://www.sfu.ca/~ssurjano/optimization.html), \n[3](http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/TestGO.htm)\n).\n*/\nproblems.testbeds = {\n\t/** The [Ackley's function](http://www.sfu.ca/~ssurjano/ackley.html) (in 2 dimensions) has an\n\tglobal optimum surrounded by an outer region that is rather flat, yet with many local optima. \n\t*/\n\tAckley: function Ackley(length, a, b, c) {\n\t\ta = isNaN(a) ? 20 : +a;\n\t\tb = isNaN(b) ? 0.2 : +b;\n\t\tc = isNaN(c) ? 2 * Math.PI : +c;\n\t\treturn new TestBed({\n\t\t\ttitle: \"Ackley testbed\",\n\t\t\tlength: length,\n\t\t\tobjectives: -Infinity,\n\t\t\tminimumValue: -32.768, \n\t\t\tmaximumValue: +32.768,\t\t\t\n\t\t\toptimumValue: 0,\t\t\t\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar term1 = 0, term2 = 0, d = vs.length, v;\n\t\t\t\tfor (var i = 0; i < d; ++i) {\n\t\t\t\t\tv = vs[i];\n\t\t\t\t\tterm1 += v * v;\n\t\t\t\t\tterm2 += Math.cos(c * v);\n\t\t\t\t}\n\t\t\t\treturn -a * Math.exp(-b * Math.sqrt(term1 / d)) - Math.exp(term2 / d) + a + Math.exp(1);\n\t\t\t}\n\t\t});\n\t},\n\n\t/** The cross-in-tray is a function with many local optima, both minima and maxima. If minimized\n\tit has 4 global minima.\n\t*/\n\tcrossInTray: function crossInTray(target) {\n\t\ttarget = isNaN(target) ? -Infinity : +target;\n\t\treturn new TestBed({\n\t\t\ttitle: \"cross-in-tray testbed\",\n\t\t\tlength: 2,\n\t\t\tobjectives: target,\n\t\t\tminimumValue: -10,\n\t\t\tmaximumValue: +10,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar x = vs[0], y = vs[1];\n\t\t\t\treturn -0.0001 * Math.pow(\n\t\t\t\t\tMath.abs(Math.sin(x) * Math.sin(y) * Math.exp(Math.abs(100 - Math.sqrt(x*x + y*y) / Math.PI))) + 1,\n\t\t\t\t\t0.1);\n\t\t\t}\t\t\t\n\t\t});\n\t},\n\t\n\t/** The [Griewank function](http://www.sfu.ca/~ssurjano/griewank.html) has many local optima\n\tregularly distributed.\n\t*/\n\tGriewank: function Griewank(length) {\n\t\treturn new TestBed({\n\t\t\ttitle: \"Griewank testbed\",\n\t\t\tlength: length,\n\t\t\tminimumValue: -600,\n\t\t\tmaximumValue: +600,\n\t\t\toptimumValue: 0,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar sum = 0, prod = 1, len = vs.length, v;\n\t\t\t\tfor (var i = 0; i < len; ++i) {\n\t\t\t\t\tv = vs[i];\n\t\t\t\t\tsum += v * v / 4000;\n\t\t\t\t\tprod *= Math.cos(v / Math.sqrt(i+1));\n\t\t\t\t}\n\t\t\t\treturn sum - prod + 1;\n\t\t\t}\t\t\t\n\t\t});\n\t},\n\t\n\t/** The [Levy function](http://www.sfu.ca/~ssurjano/levy.html) is multimodal, with some \n\tdifficult local minima regions.\n\t*/\n\tLevy: function Levy(length) {\n\t\treturn new TestBed({\n\t\t\ttitle: \"Levy testbed\",\n\t\t\tlength: length,\n\t\t\tobjectives: -Infinity,\n\t\t\tminimumValue: -10,\n\t\t\tmaximumValue: +10,\n\t\t\toptimumValue: 0,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar sum = 0, d = vs.length, \n\t\t\t\t\tw1 = 1 + (vs[0] - 1) / 4, wd = 1 + (vs[d-1] - 1) / 4, w;\n\t\t\t\tfor (var i = 1; i < d - 1; ++i) {\n\t\t\t\t\tw = 1 + (vs[i] - 1) / 4;\n\t\t\t\t\tsum += Math.pow(w - 1, 2) * (1 + 10 * Math.pow(Math.sin(Math.PI * w + 1), 2));\n\t\t\t\t}\n\t\t\t\treturn Math.pow(Math.sin(Math.PI * w1), 2) + sum +\n\t\t\t\t\tMath.pow(wd - 1, 2) * (1 + Math.pow(Math.sin(2 * Math.PI * wd), 2));\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/** The [Michalewicz function](http://www.sfu.ca/~ssurjano/michal.html) is a multimodal function\n\twith a number local minima equal to the factorial of the number of dimensions; and it has steep \n\tvalleys and ridges.\n\t*/\n\tMichalewicz: function Michalewicz(length, m) {\n\t\tm = isNaN(m) ? 10 : +m;\n\t\treturn new TestBed({\n\t\t\ttitle: \"Michalewicz testbed\",\n\t\t\tlength: length,\n\t\t\tobjectives: -Infinity,\n\t\t\tminimumValue: 0,\n\t\t\tmaximumValue: Math.PI,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar sum = 0, d = vs.length, v;\n\t\t\t\tfor (var i = 0; i < d; ++i) {\n\t\t\t\t\tv = vs[i];\n\t\t\t\t\tsum += Math.sin(v) * Math.pow(Math.sin((i+1) * v * v / Math.PI), 2 * m);\n\t\t\t\t}\n\t\t\t\treturn -sum;\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/** [Perm(0,d,beta) function](http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/TestGO_files/Page2545.htm).\n\t*/\n\tperm0: function perm0(d, beta) {\n\t\td = isNaN(d) ? 2 : Math.min(1, d|0);\n\t\tbeta = isNaN(beta) ? 0 : +beta;\n\t\treturn new TestBed({\n\t\t\ttitle: \"Perm(0,\"+ d +\",\"+ beta +\") testbed\",\n\t\t\tlength: d,\n\t\t\tobjectives: -Infinity,\n\t\t\tminimumValue: -d,\n\t\t\tmaximumValue: +d,\n\t\t\toptimumValue: 0,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar sum1 = 0, sum2, v;\n\t\t\t\tfor (var i = 0; i < d; ++i) {\n\t\t\t\t\tsum2 = 0;\n\t\t\t\t\tfor (var j = 0; j < d; ++j) {\n\t\t\t\t\t\tsum2 += (j+1 + beta) * (Math.pow(vs[j], i+1) - Math.pow(1 / (j+1), i+1));\n\t\t\t\t\t}\n\t\t\t\t\tsum1 += sum2 * sum2;\n\t\t\t\t}\n\t\t\t\treturn sum1;\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/** The [Rastrigin function](http://www.sfu.ca/~ssurjano/rastr.html) is highly multimodal yet\n\tlocal minima are regularly distributed.\n\t*/\n\tRastrigin: function Rastrigin(length) {\n\t\treturn new TestBed({\n\t\t\ttitle: \"Rastrigin testbed\",\n\t\t\tlength: length,\n\t\t\tobjectives: -Infinity,\n\t\t\tminimumValue: -5.12,\n\t\t\tmaximumValue: +5.12,\n\t\t\toptimumValue: 0,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar result = 0, d = vs.length, v;\n\t\t\t\tfor (var i = 0; i < d; ++i) {\n\t\t\t\t\tv = vs[i];\n\t\t\t\t\tresult += v * v - 10 * Math.cos(2 * Math.PI * v);\n\t\t\t\t}\n\t\t\t\treturn 10 * d + result;\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/*** The [Rosenbrock function](http://en.wikipedia.org/wiki/Rosenbrock_function) is a function \n\tused as a performance test problem for optimization algorithms introduced by Howard H. \n\tRosenbrock in 1960. The global minimum is inside a long, narrow, parabolic shaped flat valley. \n\tTo find the valley is trivial, yet to converge to the global minimum (zero) is difficult.\n\t*/\n\tRosenbrock: function Rosenbrock(length, a, b) {\n\t\ta = isNaN(a) ? 1 : +a;\n\t\tb = isNaN(b) ? 100 : +b;\n\t\treturn new TestBed({\n\t\t\ttitle: \"Rosenbrock testbed\",\n\t\t\tlength: length,\n\t\t\tobjectives: -Infinity,\n\t\t\toptimumValue: 0,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar result = 0;\n\t\t\t\tfor (var i = 1; i < vs.length; ++i) {\n\t\t\t\t\tresult += b * Math.pow(vs[i-1] * vs[i-1] - vs[i], 2) + Math.pow(vs[i-1] - a, 2);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/** The [Schwefel function](http://www.sfu.ca/~ssurjano/schwef.html) is a complex test with many\n\tlocal optima.\n\t*/\n\tSchwefel: function Schwefel(length) {\n\t\treturn new TestBed({\n\t\t\ttitle: \"Schwefel testbed\",\n\t\t\tlength: length,\n\t\t\tobjectives: -Infinity,\n\t\t\tminimumValue: -500,\n\t\t\tmaximumValue: +500,\n\t\t\toptimumValue: 0,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar result = 0, d = vs.length, v;\n\t\t\t\tfor (var i = 0; i < d; ++i) {\n\t\t\t\t\tv = vs[i];\n\t\t\t\t\tresult += v * Math.sin(Math.sqrt(Math.abs(v)));\n\t\t\t\t}\n\t\t\t\treturn 418.9829 * d - result;\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/** The [sphere function](http://www.sfu.ca/~ssurjano/spheref.html) minimizes the sum of the\n\tsquares for every value in the input vector. It has as many local minima as dimensions the\n\tsearch space has, but still only one global minimum (zero). \n\t*/\n\tsphere: function sphere(length) {\n\t\treturn new TestBed({\n\t\t\ttitle: \"sphere testbed\",\n\t\t\tlength: length,\n\t\t\tobjectives: -Infinity,\n\t\t\toptimumValue: 0,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar result = 0;\n\t\t\t\tfor (var i = 0; i < vs.length; ++i) {\n\t\t\t\t\tresult += vs[i] * vs[i];\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/** A very simple class of problems that deal with optimizing the sum of the elements' values. \n\tProbably the simplest optimization problem that can be defined. It has no local optima, and it\n\tdraws a simple and gentle slope towards to global optimum.\n\t*/\n\tsumOptimization: function sumOptimization(length, target) {\n\t\tlength = isNaN(length) ? 2 : Math.max(1, length|0);\n\t\ttarget = isNaN(target) ? -Infinity : +target;\n\t\treturn new TestBed({\n\t\t\ttitle: \"sum optimization testbed\",\t\t\t\n\t\t\tlength: length,\n\t\t\tobjectives: target,\n\t\t\tminimumValue: 0,\n\t\t\tmaximumValue: +1,\n\t\t\toptimumValue: target === -Infinity ? 0 : target === +Infinity ? length : target,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar result = 0, len = vs.length;\n\t\t\t\tfor (var i = 0; i < len; ++i) {\n\t\t\t\t\tresult += vs[i];\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t},\n\t\n\t// ## Multi-objective ##########################################################################\n\t\n\t/** Multiobjective optimization problems taken from [_\"Comparison of Multiobjective Evolutionary\n\tAlgorithms: Empirical Results\"_ by Zitzler, Deb and Thiele (2000)](http://www.tik.ee.ethz.ch/sop/publicationListFiles/zdt2000a.pdf).\n\t*/\n\tZDT1: function ZDT1(length) {\n\t\tlength = isNaN(length) ? 30 : Math.max(1, length|0);\n\t\treturn new TestBed({\n\t\t\ttitle: \"Zitzler-Deb-Thiele function 1\",\t\t\t\n\t\t\tlength: length,\n\t\t\tobjectives: [-Infinity, -Infinity],\n\t\t\tminimumValue: 0,\n\t\t\tmaximumValue: +1,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar f1 = vs[0],\n\t\t\t\t\tg = iterable(vs).tail().sum() / (vs.length - 1) * 9,\n\t\t\t\t\th = 1 - Math.sqrt(f1 / g);\n\t\t\t\treturn [f1, g * h];\n\t\t\t}\n\t\t});\n\t},\n\t\n\tZDT2: function ZDT2(length) {\n\t\tlength = isNaN(length) ? 30 : Math.max(1, length|0);\n\t\treturn new TestBed({\n\t\t\ttitle: \"Zitzler-Deb-Thiele function 2\",\t\t\t\n\t\t\tlength: length,\n\t\t\tobjectives: [-Infinity, -Infinity],\n\t\t\tminimumValue: 0,\n\t\t\tmaximumValue: +1,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar f1 = vs[0],\n\t\t\t\t\tg = iterable(vs).tail().sum() / (vs.length - 1) * 9,\n\t\t\t\t\th = 1 - Math.pow(f1 / g, 2);\n\t\t\t\treturn [f1, g * h];\n\t\t\t}\n\t\t});\n\t},\n\t\n\tZDT3: function ZDT3(length) {\n\t\tlength = isNaN(length) ? 30 : Math.max(1, length|0);\n\t\treturn new TestBed({\n\t\t\ttitle: \"Zitzler-Deb-Thiele function 3\",\t\t\t\n\t\t\tlength: length,\n\t\t\tobjectives: [-Infinity, -Infinity],\n\t\t\tminimumValue: 0,\n\t\t\tmaximumValue: +1,\n\t\t\tevaluation: function evaluation(vs) {\n\t\t\t\tvar f1 = vs[0],\n\t\t\t\t\tg = iterable(vs).tail().sum() / (vs.length - 1) * 9,\n\t\t\t\t\th = 1 - Math.sqrt(f1 / g) - (f1 / g) * Math.sin(10 * Math.PI * f1);\n\t\t\t\treturn [f1, g * h];\n\t\t\t}\n\t\t});\n\t}\n}; // problems.testbeds","/** # N queens puzzle problem\n\nA generalized version of the classic [8 queens puzzle](http://en.wikipedia.org/wiki/Eight_queens_puzzle),\na problem of placing 8 chess queens on an 8x8 chessboard so that no two queens may attack each \nother.\n*/\nproblems.NQueensPuzzle = declare(Problem, {\n\ttitle: \"N-queens puzzle\",\n\tdescription: \"Generalized version of the classic problem of placing \"+\n\t\t\"8 chess queens on an 8x8 chessboard so that no two queens attack each other.\",\n\t\n\t/** The constructor takes only one particular parameter:\n\t*/\t\n\tconstructor: function NQueensPuzzle(params){\n\t\tProblem.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t/** + `N=8`: the number of queens and both dimensions of the board.\n\t\t\t*/\n\t\t\t.integer('N', { coerce: true, defaultValue: 8 });\n\t\t\n\t\tthis.__rowRange__ = Iterable.range(this.N).toArray();\n\t\t/** The representation is an array of `N` positions, indicating the row of the queen for \n\t\teach column.\n\t\t*/\n\t\tthis.__elementModel__ = Iterable.repeat({ min: 0, max: this.N - 1, discrete: true }, this.N - 1).toArray();\n\t},\n\t\t\n\tmapping: function mapping(element) {\n\t\treturn element.setMapping(this.__rowRange__);\n\t},\n\t\n\t/** The elements' evaluation is the count of diagonals shared by queens pairwise.\n\t*/\n\tevaluation: function evaluation(element) {\n\t\tvar rows = this.mapping(element),\n\t\t\tcount = 0;\n\t\trows.forEach(function (row, i) {\n\t\t\tfor (var j = 1; i + j < rows.length; j++) {\n\t\t\t\tif (rows[j] == row + j || rows[j] == row - j) {\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn count;\n\t},\n\t\n\t/** Of course, the number of shared diagonals must be minimized.\n\t*/\n\tcompare: Problem.prototype.minimization,\n\t\n\t/** It is sufficient when no pair of queens share diagonals.\n\t*/\n\tsufficientElement: function sufficientElement(element) {\n\t\treturn element.evaluation === 0;\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'NQueensPuzzle',\n\t\tserializer: function serialize_NQueensPuzzle(obj) {\n\t\t\treturn [obj.__params__('N')];\n\t\t}\n\t}\n}); // declare NQueensPuzzle\n","/** # Knapsack problem\n\nThe [Knapsack problem](http://en.wikipedia.org/wiki/Knapsack_problem) is a classic combinatorial \noptimization problem. Given a set of items, each with cost and worth, a selection must be obtained \n(to go into the knapsack) so that the total cost does not exceed a certain limit, while maximizing \nthe total worth.\n*/\nproblems.KnapsackProblem = declare(Problem, {\n\ttitle: \"Knapsack problem\",\n\tdescription: \"Given a set of items with a cost and a worth, select a subset \"+\n\t\t\" maximizing the worth sum but not exceeding a cost limit.\",\n\t\n\t/** `items` is the superset of all candidate solutions. Must be an object with each item by \n\tname. Each item must have a cost and a worth, and may have an amount (1 by default).\n\t*/\n\titems: {\n\t\titemA: { cost: 12, worth: 4 }, \n\t\titemB: { cost: 2, worth: 2 }, \n\t\titemC: { cost: 1, worth: 2 }, \n\t\titemD: { cost: 1, worth: 1 },\n\t\titemE: { cost: 4, worth: 10 }\n\t},\n\t\n\t/** The problem is based on a given a set of items, each with a cost and a worth. The solution \n\tis a subset of items with maximum worth sum that does not exceed a cost limit.\n\t\n\tThe parameters specific for this problem are:\n\t*/\t\n\tconstructor: function KnapsackProblem(params){\n\t\tProblem.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t/** + `limit=15` is the cost limit that candidate solution should not exceed.\n\t\t\t*/\n\t\t\t.number('limit', { coerce: true, defaultValue: 15 })\n\t\t\t/** + `defaultAmount=1` is the amount available for each item by default.\n\t\t\t*/\n\t\t\t.integer('amount', { coerce: true, defaultValue: 1, minimum: 1 })\n\t\t\t/** + `items` is the set of items.\n\t\t\t*/\n\t\t\t.object('items', { ignore: true });\n\t\t/** The problem's representation is an array with a number for each item, in alphabetical \n\t\torder. Each number holds the selected amount for each item (from 0 up to the item's amount).\n\t\t*/\n\t\tvar items = this.items;\n\t\tthis.__elementItems__ = Object.keys(items);\n\t\tthis.__elementItems__.sort();\n\t\tthis.__elementModel__ = this.__elementItems__.map(function (name) {\n\t\t\treturn { min: 0, max: +items[name].amount || 1, discrete: true };\n\t\t});\n\t},\n\t\n\t/** All elements are mapped to an object with the selected amount associated to each item.\n\t*/\n\tmapping: function mapping(element) {\n\t\treturn iterable(this.__elementItems__).zip(Math.floor(element.values)).toObject();\n\t},\n\t\n\t/** All elements are evaluated by calculating the worth of all included items. If their cost is \n\tgreater than the problem's limit, the worth becomes negative.\n\t*/\n\tevaluation: function evaluation(element) {\n\t\tvar selection = this.mapping(element),\n\t\t\titems = this.items,\n\t\t\tworth = 0,\n\t\t\tcost = 0;\n\t\titerable(selection).forEachApply(function (name, amount) {\n\t\t\tvar item = items[name];\n\t\t\tworth += item.worth * amount;\n\t\t\tcost += item.cost * amount;\n\t\t});\n\t\treturn cost > problem.limit ? -worth : worth; //FIXME Too punishing for going over the limit.\n\t},\n\t\n\t/** The best selection of items is the one that maximizes worth, without exceeding the cost \n\tlimit.\n\t*/\n\tcompare: Problem.prototype.maximization,\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'KnapsackProblem',\n\t\tserializer: function serialize_KnapsackProblem(obj) {\n\t\t\treturn [obj.__params__('limit', 'amount', 'items')];\n\t\t}\n\t}\n}); // declare KnapsackProblem","/** # Association rules learning.\n\nAssociation rules are relations between variables found in databases. Many methods have been \nresearched to automatically search for interesting rules in large data sets.\n\nFor further information, see:\n\n+ Agrawal, R.; ImieliƄski, T.; Swami, A. [_\"Mining association rules between sets of items in large \n\tdatabases\"_](http://dl.acm.org/citation.cfm?doid=170035.170072). Proceedings of the 1993 ACM \n\tSIGMOD international conference on Management of data.\n\t\n+ Sergey Brin, Rajeev Motwani, Jeffrey D. Ullman, and Shalom Tsur. [_\"Dynamic itemset counting and \n\timplication rules for market basket data\"_](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.25.3707).\n\tSIGMOD 1997, Proceedings ACM SIGMOD International Conference on Management of Data.\n*/\nvar AssociationRuleLearning = problems.AssociationRuleLearning = declare(Problem, {\n\t/** The constructors take the following parameters:\n\t*/\n\tconstructor: function AssociationRuleLearning(params) {\n\t\tProblem.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t/** + A `dataset` with which to test the association rules. It must be a sequence of\n\t\t\trecords (each an object).\n\t\t\t*/\n\t\t\t.object('dataset', { defaultValue: [] })\n\t\t\t/** + A set of `keys` for the fields in the dataset.\n\t\t\t*/\n\t\t\t.array('keys');\n\t\t/** The elements represent classic association rules, which treat each record as a set of \n\t\t`keys`. Each position in the element's values tells if the corresponding key belongs to the \n\t\trule's antecedent or consequent; or neither. Empty antecedents and consequents always \n\t\tevaluate to false.\n\t\t*/\n\t\tthis.__elementModel__ = Iterable.repeat({ min: 0, max: 2, discrete: true }, this.keys.length).toArray();\n\t},\n\t\n\t// ## Evaluation ###############################################################################\n\t\n\t/** Turns the element into an association rule, i.e. an object with two disjunct sets of keys:\n\tone for the antecedent and the other for the consequent.\n\t*/\n\tmapping: function mapping(element) {\n\t\tvar problem = this,\n\t\t\tantecedent = [], \n\t\t\tconsequent = [];\n\t\telement.values.forEach(function (v, i) {\n\t\t\tswitch (v) {\n\t\t\t\tcase 1: antecedent.push(problem.keys[i]); break;\n\t\t\t\tcase 2: consequent.push(problem.keys[i]); break;\n\t\t\t}\n\t\t});\n\t\treturn { antecedent: antecedent, consequent: consequent };\n\t},\n\t\n\tkeysComply: function keysComply(keys, record) {\n\t\tvar it = iterable(keys);\n\t\treturn !it.isEmpty() && it.all(function (key) {\n\t\t\treturn !!record[key];\n\t\t});\n\t},\n\t\n\t/** This method checks if the given `record` complies with the given `rule`'s `antecedent`.\n\t*/\n\tantecedentComplies: function antecedentComplies(rule, record) {\n\t\treturn this.keysComply(rule.antecedent, record);\n\t},\n\t\n\t/** This method checks if the given `record` complies with the given `rule`'s `consequent`.\n\t*/\n\tconsequentComplies: function consequentComplies(rule, record) {\n\t\treturn this.keysComply(rule.consequent, record);\n\t},\n\t\n\t/** The `measures` of an `element` (representing an association rule) include the usual \n\tstatistics:\n\t\n\t+ `antecedentCount`, `consequentCount`, `ruleCount` are the numbers of records that comply with\n\t\tthis rules's antecedent, consequent and both.\n\t+ `antecedentSupport`, `consequentSupport`, `ruleSupport` are the same numbers as before but \n\t\tdivided by the total number of records.\n\t+ `confidence` can be interpreted as an estimation of _P(C|A)_ for rules _A -> C_.\n\t+ `lift` is the ratio of the observed support to that expected if A and C were independent.\n\t+ `conviction` is the ratio of the expected frequency that A occurs without C.\n\t+ `leverage` measures the difference of A and C appearing together in the data set and what \n\t\twould be expected if X and Y where statistically dependent.\n\t*/\n\tmeasures: function measures(element) {\n\t\tvar problem = this,\n\t\t\tresult = {},\n\t\t\ttotalCount = 0, \n\t\t\tantecedentCount = 0, \n\t\t\tconsequentCount = 0, \n\t\t\truleCount = 0,\n\t\t\trule = this.mapping(element);\n\t\titerable(this.dataset).forEach(function (record) {\n\t\t\tif (problem.antecedentComplies(rule, record)) {\n\t\t\t\t++antecedentCount;\n\t\t\t\tif (problem.consequentComplies(rule, record)) {\n\t\t\t\t\t++consequentCount;\n\t\t\t\t\t++ruleCount;\n\t\t\t\t}\n\t\t\t} else if (problem.consequentComplies(rule, record)) {\n\t\t\t\t++consequentCount;\n\t\t\t}\n\t\t\t++totalCount;\n\t\t});\n\t\tresult.antecedentCount = antecedentCount;\n\t\tresult.consequentCount = consequentCount;\n\t\tresult.ruleCount = ruleCount;\n\t\tresult.antecedentSupport = totalCount > 0 ? antecedentCount / totalCount : 0;\n\t\tresult.consequentSupport = totalCount > 0 ? consequentCount / totalCount : 0;\n\t\tresult.ruleSupport = totalCount > 0 ? ruleCount / totalCount : 0;\n\t\tresult.confidence = antecedentCount > 0 ? ruleCount / antecedentCount : 0;\n\t\tresult.lift = result.consequentSupport > 0 ? result.confidence / result.consequentSupport : 0;\n\t\tresult.conviction = result.consequentSupport > 0 && result.confidence < 1 ? (1 - result.consequentSupport) / (1 - result.confidence) : 0;\n\t\tresult.leverage = result.ruleSupport - result.antecedentSupport * result.consequentSupport;\n\t\treturn result;\n\t}, \n\t\n\t/** By default, the evaluation uses the rule's confidence. It assumes the elements has a \n\t`dataset` member. Measures are cached in a `__measures__` property in the element.\n\t*/\n\tevaluation: function evaluation(element) {\n\t\tif (!element.__measures__) {\n\t\t\telement.__measures__ = this.measures(element);\n\t\t}\n\t\treturn element.__measures__.confidence;\n\t}\t\n}); // declare AssociationRule.","// See __prologue__.js\n\tbase.Iterable.chain(exports, metaheuristics, problems).forEachApply(function (id, def) {\n\t\tif (typeof def === 'function' && def.__SERMAT__ && def.__SERMAT__.identifier) {\n\t\t\tdef.__SERMAT__.identifier = exports.__package__ +'.'+ def.__SERMAT__.identifier;\n\t\t\texports.__SERMAT__.include.push(def);\n\t\t}\n\t});\n\treturn exports;\n});"]} \ No newline at end of file