tycho-solver
Version:
Evolutionary computation and optimization library
39 lines • 1.71 kB
JavaScript
import { LSInitializationOperator } from './InitializationOperator';
import { LSEvaluationOperator } from './EvaluationOperator';
import { LSTerminationOperator } from './TerminationOperator';
import { NeighborhoodOperator } from './NeighborhoodOperator';
export const RandomRestartsOperator = async ({ initialSolution, objectiveFunction, neighborhoodFunction, options }) => {
const { randomRestarts = 1, randomInitializer } = options;
let bestResult = null;
// Instantiate modular operators
const evaluationOperator = new LSEvaluationOperator(objectiveFunction);
const neighborhoodOperator = NeighborhoodOperator;
const terminationOperator = new LSTerminationOperator();
for (let restart = 0; restart < randomRestarts; restart++) {
const args = {
initialSolution: restart === 0
? initialSolution
: (randomInitializer ? randomInitializer() : initialSolution),
objectiveFunction,
options,
evaluationOperator,
neighborhoodOperator,
terminationOperator
};
if (randomInitializer !== undefined) {
args.randomInitializer = randomInitializer;
}
if (neighborhoodFunction !== undefined) {
args.neighborhoodFunction = neighborhoodFunction;
}
const result = await new LSInitializationOperator().initialize(args);
if (!bestResult ||
(options.maximize
? result.fitness > bestResult.fitness
: result.fitness < bestResult.fitness)) {
bestResult = result;
}
}
return bestResult;
};
//# sourceMappingURL=RandomRestartsOperator.js.map