本文整理汇总了C#中IGenomeFactory类的典型用法代码示例。如果您正苦于以下问题:C# IGenomeFactory类的具体用法?C# IGenomeFactory怎么用?C# IGenomeFactory使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
IGenomeFactory类属于命名空间,在下文中一共展示了IGenomeFactory类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: CreateEvolutionAlgorithm
/// <summary>
/// Create and return a GenerationalNeatEvolutionAlgorithm object (specific to fitness-based evaluations) ready for running the
/// NEAT algorithm/search based on the given genome factory and genome list. Various sub-parts of the algorithm are
/// also constructed and connected up.
/// </summary>
/// <param name="genomeFactory">The genome factory from which to generate new genomes</param>
/// <param name="genomeList">The current genome population</param>
/// <returns>Constructed evolutionary algorithm</returns>
public override INeatEvolutionAlgorithm<NeatGenome> CreateEvolutionAlgorithm(
IGenomeFactory<NeatGenome> genomeFactory,
List<NeatGenome> genomeList)
{
// Create distance metric. Mismatched genes have a fixed distance of 10; for matched genes the distance is their weigth difference.
IDistanceMetric distanceMetric = new ManhattanDistanceMetric(1.0, 0.0, 10.0);
ISpeciationStrategy<NeatGenome> speciationStrategy =
new ParallelKMeansClusteringStrategy<NeatGenome>(distanceMetric, ParallelOptions);
// Create complexity regulation strategy.
var complexityRegulationStrategy =
ExperimentUtils.CreateComplexityRegulationStrategy(ComplexityRegulationStrategy, Complexitythreshold);
// Create the evolution algorithm.
var ea = new GenerationalNeatEvolutionAlgorithm<NeatGenome>(NeatEvolutionAlgorithmParameters, speciationStrategy,
complexityRegulationStrategy);
// Create IBlackBox evaluator.
var mazeNavigationEvaluator = new MazeNavigationFitnessEvaluator(MaxDistanceToTarget, MaxTimesteps, MazeVariant,
MinSuccessDistance);
// Create genome decoder.
var genomeDecoder = CreateGenomeDecoder();
// Create a genome list evaluator. This packages up the genome decoder with the genome evaluator.
IGenomeEvaluator<NeatGenome> fitnessEvaluator =
new ParallelGenomeFitnessEvaluator<NeatGenome, IBlackBox>(genomeDecoder, mazeNavigationEvaluator,
ParallelOptions);
// Initialize the evolution algorithm.
ea.Initialize(fitnessEvaluator, genomeFactory, genomeList);
// Finished. Return the evolution algorithm
return ea;
}
示例2: CreateEvolutionAlgorithm
/// <summary>
/// Create and return a SteadyStateNeatEvolutionAlgorithm object (specific to fitness-based evaluations) ready for
/// running the
/// NEAT algorithm/search based on the given genome factory and genome list. Various sub-parts of the algorithm are
/// also constructed and connected up.
/// </summary>
/// <param name="genomeFactory">The genome factory from which to generate new genomes</param>
/// <param name="genomeList">The current genome population</param>
/// <param name="startingEvaluations">The number of evaluations that have been executed prior to the current run.</param>
/// <returns>Constructed evolutionary algorithm</returns>
public override INeatEvolutionAlgorithm<NeatGenome> CreateEvolutionAlgorithm(
IGenomeFactory<NeatGenome> genomeFactory,
List<NeatGenome> genomeList, ulong startingEvaluations)
{
FileDataLogger logger = null;
// Create distance metric. Mismatched genes have a fixed distance of 10; for matched genes the distance is their weigth difference.
IDistanceMetric distanceMetric = new ManhattanDistanceMetric(1.0, 0.0, 10.0);
ISpeciationStrategy<NeatGenome> speciationStrategy =
new ParallelKMeansClusteringStrategy<NeatGenome>(distanceMetric, ParallelOptions);
// Create complexity regulation strategy.
var complexityRegulationStrategy =
ExperimentUtils.CreateComplexityRegulationStrategy(ComplexityRegulationStrategy, Complexitythreshold);
// Initialize the logger
if (_generationalLogFile != null)
{
logger =
new FileDataLogger(_generationalLogFile);
}
// Create the evolution algorithm.
var ea = new SteadyStateNeatEvolutionAlgorithm<NeatGenome>(NeatEvolutionAlgorithmParameters,
speciationStrategy, complexityRegulationStrategy, _batchSize, _populationEvaluationFrequency,
RunPhase.Primary, logger);
// Create IBlackBox evaluator.
var mazeNavigationEvaluator = new MazeNavigationMCNSEvaluator(MaxDistanceToTarget, MaxTimesteps,
MazeVariant,
MinSuccessDistance, _behaviorCharacterizationFactory);
// Create genome decoder.
var genomeDecoder = CreateGenomeDecoder();
// Create a novelty archive.
AbstractNoveltyArchive<NeatGenome> archive =
new BehavioralNoveltyArchive<NeatGenome>(_archiveAdditionThreshold,
_archiveThresholdDecreaseMultiplier, _archiveThresholdIncreaseMultiplier,
_maxGenerationArchiveAddition, _maxGenerationsWithoutArchiveAddition);
// IGenomeEvaluator<NeatGenome> fitnessEvaluator =
// new SerialGenomeBehaviorEvaluator<NeatGenome, IBlackBox>(genomeDecoder, mazeNavigationEvaluator,
// _nearestNeighbors, archive);
IGenomeEvaluator<NeatGenome> fitnessEvaluator =
new ParallelGenomeBehaviorEvaluator<NeatGenome, IBlackBox>(genomeDecoder, mazeNavigationEvaluator,
SelectionType.SteadyState,
SearchType.MinimalCriteriaNoveltySearch,
_nearestNeighbors, archive);
// Initialize the evolution algorithm.
ea.Initialize(fitnessEvaluator, genomeFactory, genomeList, 0, MaxEvaluations, archive);
// Finished. Return the evolution algorithm
return ea;
}
示例3: CreateEvolutionAlgorithm
/// <summary>
/// Create and return a SteadyStateNeatEvolutionAlgorithm object (specific to fitness-based evaluations) ready for
/// running the
/// NEAT algorithm/search based on the given genome factory and genome list. Various sub-parts of the algorithm are
/// also constructed and connected up.
/// </summary>
/// <param name="genomeFactory">The genome factory from which to generate new genomes</param>
/// <param name="genomeList">The current genome population</param>
/// <param name="startingEvaluations">The number of evaluations that have been executed prior to the current run.</param>
/// <returns>Constructed evolutionary algorithm</returns>
public override INeatEvolutionAlgorithm<NeatGenome> CreateEvolutionAlgorithm(
IGenomeFactory<NeatGenome> genomeFactory,
List<NeatGenome> genomeList, ulong startingEvaluations)
{
ulong initializationEvaluations;
// Instantiate the internal initialization algorithm
_mazeNavigationInitializer.InitializeAlgorithm(ParallelOptions, genomeList,
CreateGenomeDecoder(), startingEvaluations);
// Run the initialization algorithm until the requested number of viable seed genomes are found
List<NeatGenome> seedPopulation = _mazeNavigationInitializer.EvolveViableGenomes(SeedGenomeCount, true,
out initializationEvaluations);
// Create complexity regulation strategy.
var complexityRegulationStrategy =
ExperimentUtils.CreateComplexityRegulationStrategy(ComplexityRegulationStrategy, Complexitythreshold);
// Create the evolution algorithm.
AbstractNeatEvolutionAlgorithm<NeatGenome> ea =
new QueueingNeatEvolutionAlgorithm<NeatGenome>(NeatEvolutionAlgorithmParameters,
new ParallelKMeansClusteringStrategy<NeatGenome>(new ManhattanDistanceMetric(1.0, 0.0, 10.0),
ParallelOptions),
complexityRegulationStrategy, _batchSize, RunPhase.Primary, (_bridgingMagnitude > 0),
false, _evolutionDataLogger, _experimentLogFieldEnableMap);
// Create IBlackBox evaluator.
IPhenomeEvaluator<IBlackBox, BehaviorInfo> mazeNavigationEvaluator =
new MazeNavigationMCSEvaluator(MaxDistanceToTarget, MaxTimesteps,
MazeVariant, MinSuccessDistance, _behaviorCharacterizationFactory,
_bridgingMagnitude, _bridgingApplications, initializationEvaluations);
// Create genome decoder.
IGenomeDecoder<NeatGenome, IBlackBox> genomeDecoder = CreateGenomeDecoder();
// IGenomeEvaluator<NeatGenome> fitnessEvaluator =
// new SerialGenomeBehaviorEvaluator<NeatGenome, IBlackBox>(genomeDecoder, mazeNavigationEvaluator,
// SelectionType.Queueing, SearchType.MinimalCriteriaSearch, _evaluationDataLogger,
// SerializeGenomeToXml);
IGenomeEvaluator<NeatGenome> fitnessEvaluator =
new ParallelGenomeBehaviorEvaluator<NeatGenome, IBlackBox>(genomeDecoder, mazeNavigationEvaluator,
SelectionType.Queueing, SearchType.MinimalCriteriaSearch, _evaluationDataLogger,
SerializeGenomeToXml);
// Initialize the evolution algorithm.
ea.Initialize(fitnessEvaluator, genomeFactory, seedPopulation, DefaultPopulationSize,
null, MaxEvaluations + startingEvaluations);
// Finished. Return the evolution algorithm
return ea;
}
示例4: CreateEvolutionAlgorithm
/// <summary>
/// Create and return a GenerationalNeatEvolutionAlgorithm object (specific to fitness-based evaluations) ready for
/// running the
/// NEAT algorithm/search based on the given genome factory and genome list. Various sub-parts of the algorithm are
/// also constructed and connected up.
/// </summary>
/// <param name="genomeFactory">The genome factory from which to generate new genomes</param>
/// <param name="genomeList">The current genome population</param>
/// <param name="startingEvaluations">The number of evaluations that have been executed prior to the current run.</param>
/// <returns>Constructed evolutionary algorithm</returns>
public override INeatEvolutionAlgorithm<NeatGenome> CreateEvolutionAlgorithm(
IGenomeFactory<NeatGenome> genomeFactory,
List<NeatGenome> genomeList, ulong startingEvaluations)
{
// Create distance metric. Mismatched genes have a fixed distance of 10; for matched genes the distance is their weigth difference.
IDistanceMetric distanceMetric = new ManhattanDistanceMetric(1.0, 0.0, 10.0);
ISpeciationStrategy<NeatGenome> speciationStrategy =
new ParallelKMeansClusteringStrategy<NeatGenome>(distanceMetric, ParallelOptions);
// Create complexity regulation strategy.
var complexityRegulationStrategy =
ExperimentUtils.CreateComplexityRegulationStrategy(ComplexityRegulationStrategy, Complexitythreshold);
// Create the evolution algorithm.
var ea = new GenerationalNeatEvolutionAlgorithm<NeatGenome>(NeatEvolutionAlgorithmParameters,
speciationStrategy,
complexityRegulationStrategy);
// Create IBlackBox evaluator.
var mazeNavigationEvaluator = new MazeNavigationNoveltyEvaluator(MaxDistanceToTarget, MaxTimesteps,
MazeVariant,
MinSuccessDistance, _behaviorCharacterizationFactory);
// Create genome decoder.
var genomeDecoder = CreateGenomeDecoder();
// Create a novelty archive.
AbstractNoveltyArchive<NeatGenome> archive =
new BehavioralNoveltyArchive<NeatGenome>(_archiveAdditionThreshold,
_archiveThresholdDecreaseMultiplier, _archiveThresholdIncreaseMultiplier,
_maxGenerationArchiveAddition, _maxGenerationsWithoutArchiveAddition);
// Create a genome list evaluator. This packages up the genome decoder with the genome evaluator.
// IGenomeFitnessEvaluator<NeatGenome> fitnessEvaluator =
// new SerialGenomeBehaviorEvaluator<NeatGenome, IBlackBox>(genomeDecoder, mazeNavigationEvaluator, _nearestNeighbors, archive);
IGenomeEvaluator<NeatGenome> fitnessEvaluator =
new ParallelGenomeBehaviorEvaluator<NeatGenome, IBlackBox>(genomeDecoder, mazeNavigationEvaluator,
SelectionType.Generational, SearchType.NoveltySearch,
ParallelOptions, _nearestNeighbors, archive);
// Initialize the evolution algorithm.
ea.Initialize(fitnessEvaluator, genomeFactory, genomeList, MaxGenerations, null, archive);
// Finished. Return the evolution algorithm
return ea;
}
示例5: CreateEvolutionAlgorithm
public override NeatEvolutionAlgorithm<NeatGenome> CreateEvolutionAlgorithm(IGenomeFactory<NeatGenome> genomeFactory, List<NeatGenome> genomeList)
{
var ea = DefaultNeatEvolutionAlgorithm;
var evaluator = new LocalXorEvaluator();
// Create genome decoder.
IGenomeDecoder<NeatGenome, IBlackBox> genomeDecoder = CreateGenomeDecoder();
// Create a genome list evaluator. This packages up the genome decoder with the genome evaluator.
IGenomeListEvaluator<NeatGenome> innerEvaluator = new SerialGenomeListEvaluator<NeatGenome, IBlackBox>(genomeDecoder, evaluator);
// Wrap the list evaluator in a 'selective' evaulator that will only evaluate new genomes. That is, we skip re-evaluating any genomes
// that were in the population in previous generations (elite genomes). This is determined by examining each genome's evaluation info object.
IGenomeListEvaluator<NeatGenome> selectiveEvaluator = new SelectiveGenomeListEvaluator<NeatGenome>(
innerEvaluator,
SelectiveGenomeListEvaluator<NeatGenome>.CreatePredicate_OnceOnly());
// Initialize the evolution algorithm.
ea.Initialize(selectiveEvaluator, genomeFactory, genomeList);
// Finished. Return the evolution algorithm
return ea;
}
示例6: CreateEvolutionAlgorithm
/// <summary>
/// Create and return a SteadyStateNeatEvolutionAlgorithm object (specific to fitness-based evaluations) ready for
/// running the
/// NEAT algorithm/search based on the given genome factory and genome list. Various sub-parts of the algorithm are
/// also constructed and connected up.
/// </summary>
/// <param name="genomeFactory">The genome factory from which to generate new genomes</param>
/// <param name="genomeList">The current genome population</param>
/// <param name="startingEvaluations">The number of evaluations that have been executed prior to the current run.</param>
/// <returns>Constructed evolutionary algorithm</returns>
public override INeatEvolutionAlgorithm<NeatGenome> CreateEvolutionAlgorithm(
IGenomeFactory<NeatGenome> genomeFactory,
List<NeatGenome> genomeList, ulong startingEvaluations)
{
FileDataLogger logger = null;
// Create distance metric. Mismatched genes have a fixed distance of 10; for matched genes the distance is their weigth difference.
IDistanceMetric distanceMetric = new ManhattanDistanceMetric(1.0, 0.0, 10.0);
ISpeciationStrategy<NeatGenome> speciationStrategy =
new ParallelKMeansClusteringStrategy<NeatGenome>(distanceMetric, ParallelOptions);
// Create complexity regulation strategy.
var complexityRegulationStrategy =
ExperimentUtils.CreateComplexityRegulationStrategy(ComplexityRegulationStrategy, Complexitythreshold);
// Initialize the logger
if (_generationalLogFile != null)
{
logger =
new FileDataLogger(_generationalLogFile);
}
// Create the evolution algorithm.
var ea = new SteadyStateNeatEvolutionAlgorithm<NeatGenome>(NeatEvolutionAlgorithmParameters,
speciationStrategy, complexityRegulationStrategy, _batchSize, _populationEvaluationFrequency,
RunPhase.Primary, logger);
// Create IBlackBox evaluator.
var mazeNavigationEvaluator = new MazeNavigationRandomEvaluator(MaxDistanceToTarget, MaxTimesteps,
MazeVariant, MinSuccessDistance);
// Create genome decoder.
var genomeDecoder = CreateGenomeDecoder();
IGenomeEvaluator<NeatGenome> fitnessEvaluator =
new ParallelGenomeFitnessEvaluator<NeatGenome, IBlackBox>(genomeDecoder, mazeNavigationEvaluator,
ParallelOptions);
// Initialize the evolution algorithm.
ea.Initialize(fitnessEvaluator, genomeFactory, genomeList, null, MaxEvaluations);
// Finished. Return the evolution algorithm
return ea;
}
示例7: CreateEvolutionAlgorithm
public override NeatEvolutionAlgorithm<NeatGenome> CreateEvolutionAlgorithm(IGenomeFactory<NeatGenome> genomeFactory, List<NeatGenome> genomeList)
{
// Create the evolution algorithm.
var ea = DefaultNeatEvolutionAlgorithm;
var evaluator = new RemoteBatchSixMultiplexerEvaluator(ea);
IGenomeDecoder<NeatGenome, FastCyclicNetwork> genomeDecoder = _decoder;
// Evaluates list of phenotypes
IGenomeListEvaluator<NeatGenome> innerEvaluator =
new BatchGenomeListEvaluator<NeatGenome, FastCyclicNetwork>(
genomeDecoder,
evaluator);
// Weeds down the list to be evaluated
IGenomeListEvaluator<NeatGenome> selectiveEvaluator =
new SelectiveGenomeListEvaluator<NeatGenome>(
innerEvaluator,
SelectiveGenomeListEvaluator<NeatGenome>.CreatePredicate_OnceOnly());
ea.Initialize(selectiveEvaluator, genomeFactory, genomeList);
return ea;
}
示例8: CreateEvolutionAlgorithm
/// <summary>
/// Create and return a SteadyStateNeatEvolutionAlgorithm object (specific to fitness-based evaluations) ready for
/// running the
/// NEAT algorithm/search based on the given genome factory and genome list. Various sub-parts of the algorithm are
/// also constructed and connected up.
/// </summary>
/// <param name="genomeFactory">The genome factory from which to generate new genomes</param>
/// <param name="genomeList">The current genome population</param>
/// <param name="startingEvaluations">The number of evaluations that have been executed prior to the current run.</param>
/// <returns>Constructed evolutionary algorithm</returns>
public override INeatEvolutionAlgorithm<NeatGenome> CreateEvolutionAlgorithm(
IGenomeFactory<NeatGenome> genomeFactory,
List<NeatGenome> genomeList, ulong startingEvaluations)
{
// Create complexity regulation strategy.
var complexityRegulationStrategy =
ExperimentUtils.CreateComplexityRegulationStrategy(ComplexityRegulationStrategy, Complexitythreshold);
// Create the evolution algorithm.
AbstractNeatEvolutionAlgorithm<NeatGenome> ea =
new QueueingNeatEvolutionAlgorithm<NeatGenome>(NeatEvolutionAlgorithmParameters,
new ParallelKMeansClusteringStrategy<NeatGenome>(new ManhattanDistanceMetric(1.0, 0.0, 10.0),
ParallelOptions),
complexityRegulationStrategy, _batchSize, RunPhase.Primary);
// Create IBlackBox evaluator.
IPhenomeEvaluator<IBlackBox, FitnessInfo> mazeNavigationEvaluator =
new MazeNavigationRandomEvaluator(MaxDistanceToTarget, MaxTimesteps,
MazeVariant, MinSuccessDistance);
// Create genome decoder.
IGenomeDecoder<NeatGenome, IBlackBox> genomeDecoder = CreateGenomeDecoder();
IGenomeEvaluator<NeatGenome> fitnessEvaluator =
new SerialGenomeFitnessEvaluator<NeatGenome, IBlackBox>(genomeDecoder, mazeNavigationEvaluator,
_evaluationDataLogger);
// IGenomeEvaluator<NeatGenome> fitnessEvaluator =
// new ParallelGenomeFitnessEvaluator<NeatGenome, IBlackBox>(genomeDecoder, mazeNavigationEvaluator,
// _evaluationDataLogger, SerializeGenomeToXml);
// Initialize the evolution algorithm.
ea.Initialize(fitnessEvaluator, genomeFactory, genomeList, DefaultPopulationSize,
null, MaxEvaluations);
// Finished. Return the evolution algorithm
return ea;
}
示例9: CreateEvolutionAlgorithm
public NeatEvolutionAlgorithm<NeatGenome> CreateEvolutionAlgorithm(IGenomeFactory<NeatGenome> genomeFactory, List<NeatGenome> genomeList)
{
// Create distance metric. Mismatched genes have a fixed distance of 10; for matched genes the distance is their weigth difference.
IDistanceMetric distanceMetric = new ManhattanDistanceMetric(1.0, 0.0, 10.0);
ISpeciationStrategy<NeatGenome> speciationStrategy =
new KMeansClusteringStrategy<NeatGenome>(distanceMetric);
// Create complexity regulation strategy.
IComplexityRegulationStrategy complexityRegulationStrategy =
ExperimentUtils.CreateComplexityRegulationStrategy("absolute", 10);
// Create the evolution algorithm.
var ea = new NeatEvolutionAlgorithm<NeatGenome>(
NeatEvolutionAlgorithmParameters,
speciationStrategy,
complexityRegulationStrategy);
// Create IBlackBox evaluator.
var evaluator = new RemoteXorEvaluator();
// Create genome decoder.
IGenomeDecoder<NeatGenome, IBlackBox> genomeDecoder = CreateGenomeDecoder();
// Create a genome list evaluator. This packages up the genome decoder with the genome evaluator.
IGenomeListEvaluator<NeatGenome> innerEvaluator = new SerialGenomeListEvaluator<NeatGenome, IBlackBox>(genomeDecoder, evaluator);
// Wrap the list evaluator in a 'selective' evaulator that will only evaluate new genomes. That is, we skip re-evaluating any genomes
// that were in the population in previous generations (elite genomes). This is determined by examining each genome's evaluation info object.
IGenomeListEvaluator<NeatGenome> selectiveEvaluator = new SelectiveGenomeListEvaluator<NeatGenome>(
innerEvaluator,
SelectiveGenomeListEvaluator<NeatGenome>.CreatePredicate_OnceOnly());
// Initialize the evolution algorithm.
ea.Initialize(selectiveEvaluator, genomeFactory, genomeList);
// Finished. Return the evolution algorithm
return ea;
}
示例10: CreateEvolutionAlgorithm
public NeatEvolutionAlgorithm<NeatGenome> CreateEvolutionAlgorithm(IGenomeFactory<NeatGenome> genomeFactory, List<NeatGenome> genomeList)
{
IDistanceMetric distanceMetric = new ManhattanDistanceMetric(1.0, 0.0, 10.0);
ISpeciationStrategy<NeatGenome> speciationStrategy = new KMeansClusteringStrategy<NeatGenome>(distanceMetric);
IComplexityRegulationStrategy complexityRegulationStrategy = ExperimentUtils.CreateComplexityRegulationStrategy(_complexityRegulationStr, _complexityThreshold);
NeatEvolutionAlgorithm<NeatGenome> ea = new NeatEvolutionAlgorithm<NeatGenome>(_eaParams, speciationStrategy, complexityRegulationStrategy);
// Create black box evaluator
SimpleEvaluator evaluator = new SimpleEvaluator(_optimizer);
IGenomeDecoder<NeatGenome, IBlackBox> genomeDecoder = CreateGenomeDecoder();
IGenomeListEvaluator<NeatGenome> innerEvaluator = new UnityParallelListEvaluator<NeatGenome, IBlackBox>(genomeDecoder, evaluator, _optimizer);
IGenomeListEvaluator<NeatGenome> selectiveEvaluator = new SelectiveGenomeListEvaluator<NeatGenome>(innerEvaluator,
SelectiveGenomeListEvaluator<NeatGenome>.CreatePredicate_OnceOnly());
//ea.Initialize(selectiveEvaluator, genomeFactory, genomeList);
ea.Initialize(innerEvaluator, genomeFactory, genomeList);
return ea;
}
示例11: CreateEvolutionAlgorithm
/// <summary>
/// Create and return a NeatEvolutionAlgorithm object ready for running the NEAT algorithm/search. Various sub-parts
/// of the algorithm are also constructed and connected up.
/// This overload accepts a pre-built genome population and their associated/parent genome factory.
/// </summary>
public NeatEvolutionAlgorithm<NeatGenome> CreateEvolutionAlgorithm(IGenomeFactory<NeatGenome> genomeFactory, List<NeatGenome> genomeList)
{
// Create distance metric. Mismatched genes have a fixed distance of 10; for matched genes the distance is their weigth difference.
IDistanceMetric distanceMetric = new ManhattanDistanceMetric(1.0, 0.0, 10.0);
ISpeciationStrategy<NeatGenome> speciationStrategy = new ParallelKMeansClusteringStrategy<NeatGenome>(distanceMetric, _parallelOptions);
// Create complexity regulation strategy.
IComplexityRegulationStrategy complexityRegulationStrategy = ExperimentUtils.CreateComplexityRegulationStrategy(_complexityRegulationStr, _complexityThreshold);
// Create the evolution algorithm.
NeatEvolutionAlgorithm<NeatGenome> ea = new NeatEvolutionAlgorithm<NeatGenome>(_eaParams, speciationStrategy, complexityRegulationStrategy);
// Create IBlackBox evaluator.
DoublePoleBalancingEvaluator evaluator;
switch(_variantStr)
{
case "DoublePole":
evaluator = new DoublePoleBalancingEvaluator();
break;
case "DoublePoleNv":
evaluator = new DoublePoleBalancingEvaluatorNv();
break;
case "DoublePoleNvAntiWiggle":
evaluator = new DoublePoleBalancingEvaluatorNvAntiWiggle();
break;
default:
throw new SharpNeatException(string.Format("DoublePoleBalancing experiment config XML specifies unknown variant [{0}]", _variantStr));
}
// Create genome decoder.
IGenomeDecoder<NeatGenome, IBlackBox> genomeDecoder = CreateGenomeDecoder();
// Create a genome list evaluator. This packages up the genome decoder with the genome evaluator.
IGenomeListEvaluator<NeatGenome> innerEvaluator = new ParallelGenomeListEvaluator<NeatGenome, IBlackBox>(genomeDecoder, evaluator, _parallelOptions);
// Wrap the list evaluator in a 'selective' evaulator that will only evaluate new genomes. That is, we skip re-evaluating any genomes
// that were in the population in previous generations (elite genomes). This is determiend by examining each genome's evaluation info object.
IGenomeListEvaluator<NeatGenome> selectiveEvaluator = new SelectiveGenomeListEvaluator<NeatGenome>(
innerEvaluator,
SelectiveGenomeListEvaluator<NeatGenome>.CreatePredicate_OnceOnly());
// Initialize the evolution algorithm.
ea.Initialize(selectiveEvaluator, genomeFactory, genomeList);
// Finished. Return the evolution algorithm
return ea;
}
示例12: EvolveViableAgents
/// <summary>
/// Evolves the requisite number of agents who satisfy the MC of the given maze.
/// </summary>
/// <param name="genomeFactory">The agent genome factory.</param>
/// <param name="seedAgentList">The seed population of agents.</param>
/// <param name="mazeStructure">The maze structure on which agents are to be evaluated.</param>
/// <returns></returns>
private List<NeatGenome> EvolveViableAgents(IGenomeFactory<NeatGenome> genomeFactory,
List<NeatGenome> seedAgentList, MazeStructure mazeStructure)
{
List<NeatGenome> viableMazeAgents;
uint restartCount = 0;
ulong initializationEvaluations;
do
{
// Instantiate the internal initialization algorithm
_mazeNavigationInitializer.InitializeAlgorithm(ParallelOptions, seedAgentList.ToList(), genomeFactory,
mazeStructure, new NeatGenomeDecoder(ActivationScheme), 0);
// Run the initialization algorithm until the requested number of viable seed genomes are found
viableMazeAgents = _mazeNavigationInitializer.EvolveViableGenomes(out initializationEvaluations,
_maxInitializationEvaluations, restartCount);
restartCount++;
// Repeat if maximum allotted evaluations is exceeded
} while (_maxInitializationEvaluations != null && viableMazeAgents == null &&
initializationEvaluations > _maxInitializationEvaluations);
return viableMazeAgents;
}
示例13: CreateCoevolutionAlgorithmContainer
/// <summary>
/// Creates the evolution algorithm container using the given factories and genome lists.
/// </summary>
/// <param name="genomeFactory1">The agent genome factory.</param>
/// <param name="genomeFactory2">The maze genome factory.</param>
/// <param name="genomeList1">The agent genome list.</param>
/// <param name="genomeList2">The maze genome list.</param>
/// <returns>The instantiated coevolution algorithm container.</returns>
public override ICoevolutionAlgorithmContainer<NeatGenome, MazeGenome> CreateCoevolutionAlgorithmContainer(
IGenomeFactory<NeatGenome> genomeFactory1,
IGenomeFactory<MazeGenome> genomeFactory2, List<NeatGenome> genomeList1, List<MazeGenome> genomeList2)
{
List<NeatGenome> seedAgentPopulation = new List<NeatGenome>();
// Compute the maze max complexity
((MazeGenomeFactory) genomeFactory2).MaxComplexity = MazeUtils.DetermineMaxPartitions(_mazeHeight,
_mazeWidth, 200);
// Create maze decoder to decode initialization mazes
MazeDecoder mazeDecoder = new MazeDecoder(_mazeHeight, _mazeWidth, _mazeScaleMultiplier);
// Loop through every maze and evolve the requisite number of viable genomes that solve it
for (int idx = 0; idx < genomeList2.Count; idx++)
{
Console.WriteLine(@"Evolving viable agents for maze population index {0} and maze ID {1}", idx,
genomeList2[idx].Id);
// Evolve the number of agents required to meet the success MC for the current maze
List<NeatGenome> viableMazeAgents = EvolveViableAgents(genomeFactory1, genomeList1.ToList(),
mazeDecoder.Decode(genomeList2[idx]));
// Add the viable agent genomes who solve the current maze (but avoid adding duplicates, as identified by the genome ID)
// Note that it's fine to have multiple mazes solved by the same agent, so in this case, we'll leave the agent
// in the pool of seed agent genomes
foreach (
NeatGenome viableMazeAgent in
viableMazeAgents.Where(
viableMazeAgent =>
seedAgentPopulation.Select(sap => sap.Id).Contains(viableMazeAgent.Id) == false))
{
seedAgentPopulation.Add(viableMazeAgent);
}
}
// If we still lack the genomes to fill out agent specie count while still satisfying the maze MC,
// iteratively pick a random maze and evolve agents on that maze until we reach the requisite number
while (seedAgentPopulation.ToList().Count < _numAgentSuccessCriteria*AgentNumSpecies)
{
FastRandom rndMazePicker = new FastRandom();
// Pick a random maze on which to evolve agent(s)
MazeGenome mazeGenome = genomeList2[rndMazePicker.Next(genomeList2.Count - 1)];
Console.WriteLine(
@"Continuing viable agent evolution on maze {0}, with {1} of {2} required agents in place",
mazeGenome.Id, seedAgentPopulation.Count, (_numAgentSuccessCriteria*AgentNumSpecies));
// Evolve the number of agents required to meet the success MC for the maze
List<NeatGenome> viableMazeAgents = EvolveViableAgents(genomeFactory1, genomeList1.ToList(),
mazeDecoder.Decode(mazeGenome));
// Iterate through each viable agent and remove them if they've already solved a maze or add them to the list
// of viable agents if they have not
foreach (NeatGenome viableMazeAgent in viableMazeAgents)
{
// If they agent has already solved maze and is in the list of viable agents, remove that agent
// from the pool of seed genomes (this is done because here, we're interested in getting unique
// agents and want to avoid an endless loop wherein the same viable agents are returned)
if (seedAgentPopulation.Select(sap => sap.Id).Contains(viableMazeAgent.Id))
{
genomeList1.Remove(viableMazeAgent);
}
// Otherwise, add that agent to the list of viable agents
else
{
seedAgentPopulation.Add(viableMazeAgent);
}
}
}
// Set dummy fitness so that seed maze(s) will be marked as evaluated
foreach (MazeGenome mazeGenome in genomeList2)
{
mazeGenome.EvaluationInfo.SetFitness(0);
}
// Reset primary NEAT genome parameters on agent genome factory
((NeatGenomeFactory) genomeFactory1).ResetNeatGenomeParameters(NeatGenomeParameters);
// Create the NEAT (i.e. navigator) queueing evolution algorithm
AbstractEvolutionAlgorithm<NeatGenome> neatEvolutionAlgorithm =
new MultiQueueNeatEvolutionAlgorithm<NeatGenome>(
new NeatEvolutionAlgorithmParameters
{
SpecieCount = AgentNumSpecies,
MaxSpecieSize = AgentDefaultPopulationSize/AgentNumSpecies
},
new ParallelKMeansClusteringStrategy<NeatGenome>(new ManhattanDistanceMetric(1.0, 0.0, 10.0),
ParallelOptions), null, NavigatorBatchSize, RunPhase.Primary, _navigatorEvolutionDataLogger,
_navigatorLogFieldEnableMap, _navigatorPopulationGenomesDataLogger, _populationLoggingBatchInterval);
//.........这里部分代码省略.........
示例14: btnCreateRandomPop_Click
private void btnCreateRandomPop_Click(object sender, EventArgs e)
{
// Parse population size and interconnection proportion from GUI fields.
int? popSize = ParseInt(txtParamPopulationSize);
if(null == popSize) {
return;
}
double? initConnProportion = ParseDouble(txtParamInitialConnectionProportion);
if(null == initConnProportion) {
return;
}
INeatExperiment experiment = GetSelectedExperiment();
experiment.NeatGenomeParameters.InitialInterconnectionsProportion = initConnProportion.Value;
// Create a genome factory appropriate for the experiment.
IGenomeFactory<NeatGenome> genomeFactory = experiment.CreateGenomeFactory();
// Create an initial population of randomly generated genomes.
List<NeatGenome> genomeList = genomeFactory.CreateGenomeList(popSize.Value, 0u);
// Assign population to form variables & update GUI appropriately.
_genomeFactory = genomeFactory;
_genomeList = genomeList;
UpdateGuiState();
}
示例15: NeatTrainer
public NeatTrainer(ExperimentSettings experimentSettings, NeatEvolutionAlgorithmParameters evolutionAlgorithmParameters, TrainingGameSettings gameSettings)
{
var neuromonPhenomeEvaluator = new NeuromonEvaluator(gameSettings, experimentSettings);
var neatGenomeParameters = new NeatGenomeParameters();
_neuromonExperiment = new NeuromonExperiment(experimentSettings, evolutionAlgorithmParameters, neuromonPhenomeEvaluator, neatGenomeParameters);
_genomeIo = new GenomeIo(_neuromonExperiment);
_genomeFactory = _neuromonExperiment.CreateGenomeFactory();
if (experimentSettings.LoadExistingPopulation)
{
_genomePopulation = _genomeIo.Read(experimentSettings.ExistingPopulationFilePath);
}
else
{
// Randomly generate a new population
_genomePopulation = _genomeFactory.CreateGenomeList(experimentSettings.PopulationSize, 0);
}
_genomeIo.CacheChampion(_genomePopulation.OrderByDescending(g => g.EvaluationInfo.Fitness).First());
_fitnessStagnationDetector = new FitnessStagnationDetector(experimentSettings.StagnationDetectionTriggerValue);
_desiredFitness = experimentSettings.DesiredFitness;
_previousGeneration = 0;
_overallBestFitness = 0.0;
}