public void CanGenerateGenoType() { var randomGenerator = new UniformRandomGenerator(); var possibleFunctions = new List <IGenoTypeNode> { new SquareRoot(), new Multiplication(), new Plus(), new Minus() }; var possibleTerminals = new List <IGenoTypeNode> { new FeatureTerminal("a"), new FeatureTerminal("b"), new FeatureTerminal("c"), new FeatureTerminal("d") }; var eaGeneExpressionParameters = new EaGeneExpressionParameters(4, possibleFunctions, possibleTerminals); var parameterTerminalFactory = new ParameterTerminalFactory(eaGeneExpressionParameters, randomGenerator); var genoTypeFactory = new GenoTypeFactory(eaGeneExpressionParameters, randomGenerator, parameterTerminalFactory); var genoType = genoTypeFactory.GetGenoType(); Assert.NotNull(genoType); }
public UniformRandomSequenceGenerator(uint dimensionality, UniformRandomGenerator rng) : this(NQuantLibcPINVOKE.new_UniformRandomSequenceGenerator(dimensionality, UniformRandomGenerator.getCPtr(rng)), true) { if (NQuantLibcPINVOKE.SWIGPendingException.Pending) { throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve(); } }
public GaussianRandomGenerator(UniformRandomGenerator rng) : this(NQuantLibcPINVOKE.new_GaussianRandomGenerator(UniformRandomGenerator.getCPtr(rng)), true) { if (NQuantLibcPINVOKE.SWIGPendingException.Pending) { throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve(); } }
public void todo(IDataSet dataSet) { var randomGenerator = new UniformRandomGenerator(); var possibleFunctions = new List <IGenoTypeNode> { new Multiplication(), new Plus(), new Minus() }; var possibleTerminals = new List <IGenoTypeNode>(); foreach (var mappedColumn in dataSet.MappedColumns) { possibleTerminals.Add(new FeatureTerminal(mappedColumn.Key)); } var eaGeneExpressionParameters = new EaGeneExpressionParameters(10, possibleFunctions, possibleTerminals); var parameterTerminalFactory = new ParameterTerminalFactory(eaGeneExpressionParameters, randomGenerator); var genoTypeFactory = new GenoTypeFactory(eaGeneExpressionParameters, randomGenerator, parameterTerminalFactory); var genoType = genoTypeFactory.GetGenoType(); var phenoTypeTree = new PhenoTypeTree(genoType.GenoTypeNodes); var stringExpresssion = phenoTypeTree.ToString(); // TODO make mapped columns more sophisticated var mappedColumnsUsedInExpression = new Dictionary <string, int>(); foreach (var mappedColumn in dataSet.MappedColumns) { if (stringExpresssion.Contains(mappedColumn.Key)) { mappedColumnsUsedInExpression.Add(mappedColumn.Key, mappedColumn.Value); } } var expression = new Expression(stringExpresssion); var numberOfRows = dataSet.MappedData.GetLength(0); var sum = 0.0; for (var row = 0; row < numberOfRows; row++) { foreach (var usedMappedColumn in mappedColumnsUsedInExpression) { expression.Parameters[usedMappedColumn.Key.Replace("]", "").Replace("[", "")] = dataSet.MappedData[row, usedMappedColumn.Value]; } if (!expression.HasErrors()) { var test = (double)expression.Evaluate(); sum = sum + test; } } }
void Initialize(int regionSize, int gaussianMin, int gaussianMax, bool loading = false) { CreatureList = creatureList.AsReadOnly(); EntityList = entityList.AsReadOnly(); CreateRegions(regionSize, loading); Random = new UniformRandomGenerator(); GaussianRandom = new NormalRandomGenerator(gaussianMin, gaussianMax, Random); }
void Initialize(int regionSize, UniformRandomGenerator random, NormalRandomGenerator gaussianRandom, bool loading = false) { CreatureList = creatureList.AsReadOnly(); EntityList = entityList.AsReadOnly(); CreateRegions(regionSize, loading); Random = random; GaussianRandom = gaussianRandom; }
public IGenoTypeNode GetTerminalNode() { if (UniformRandomGenerator.GetContinousRandomNumber(0, 1.0) < EaGeneExpressionParameters.ParameterProbability) { return(ParameterTerminalFactory.GetParameterTerminal()); } return(EaGeneExpressionParameters.PossibleTerminals[ UniformRandomGenerator.GetIntegerRandomNumber(0, NumberOfPossibleTerminals)]); }
public RandomNumbersGenerator() { //random = new Random(); arrivalTimeUniformRandom = new UniformRandomGenerator(); regularDrugsServiceTimeNormalRandom = new NormalRandomGenerator(600, 1300); regularDrugsServiceTimeNormalRandom.Mean = 900; hardDrugsServiceTimeNormalRandom = new NormalRandomGenerator(900, 1830); hardDrugsServiceTimeNormalRandom.Mean = 1400; typeOfRecipeNormalRandom = new NormalRandomGenerator(0, 10); typeOfRecipeNormalRandom.Mean = 3; }
public IGenoTypeNode GetParameterTerminal() { if (UniformRandomGenerator.GetContinousRandomNumber(0, 1.0) <= EaGeneExpressionParameters.ConstantProbability) { return(new ParameterTerminal(EaGeneExpressionParameters.PossibleConstants[UniformRandomGenerator.GetIntegerRandomNumber(0, PossibleConstantsCountMinusOne)].Value)); } return(EaGeneExpressionParameters.ParameterTypeInteger ? new ParameterTerminal(UniformRandomGenerator.GetIntegerRandomNumber((int)EaGeneExpressionParameters.ParameterMinimum, (int)EaGeneExpressionParameters.ParameterMaximum)) : new ParameterTerminal(UniformRandomGenerator.GetContinousRandomNumber(EaGeneExpressionParameters.ParameterMinimum, EaGeneExpressionParameters.ParameterMaximum))); }
public void PerformCrossover(ref IGenoType genoTypeLeft, ref IGenoType genoTypeRight) { if ((new PhenoTypeTree(genoTypeLeft.GenoTypeNodes)).ToString().Equals((new PhenoTypeTree(genoTypeRight.GenoTypeNodes)).ToString())) { return; } // var left1 = new PhenoTypeTree(genoTypeLeft.GenoTypeNodes).ToString(); // var right1 = new PhenoTypeTree(genoTypeRight.GenoTypeNodes).ToString(); if (!(UniformRandomGenerator.GetContinousRandomNumber(0, 1.0) <= EaGeneExpressionParameters.CrossoverProbability)) { return; } if (UniformRandomGenerator.GetContinousRandomNumber(0, 1.0) < 0.5) { var numberOfNodes = PhenoTypeTree.GetNumberOfNodes(genoTypeLeft.GenoTypeNodes); var crossOverPosition1 = UniformRandomGenerator.GetIntegerRandomNumber(0, numberOfNodes - 1); if (UniformRandomGenerator.GetContinousRandomNumber(0, 1.0) < 0.1) { for (var index = crossOverPosition1; index < genoTypeLeft.GenoTypeNodes.Count; index++) { Swap(genoTypeLeft.GenoTypeNodes, genoTypeRight.GenoTypeNodes, index); } } else { for (var index = 0; index <= crossOverPosition1; index++) { Swap(genoTypeLeft.GenoTypeNodes, genoTypeRight.GenoTypeNodes, index); } } } else { var crossOverPosition1 = UniformRandomGenerator.GetIntegerRandomNumber(1, genoTypeLeft.GenoTypeNodes.Count - 2); var crossOverPosition2 = UniformRandomGenerator.GetIntegerRandomNumber(crossOverPosition1, genoTypeLeft.GenoTypeNodes.Count - 2); for (var index = crossOverPosition1; index < crossOverPosition2; index++) { Swap(genoTypeLeft.GenoTypeNodes, genoTypeRight.GenoTypeNodes, index); } } // var left2 = new PhenoTypeTree(genoTypeLeft.GenoTypeNodes).ToString(); // var right2 = new PhenoTypeTree(genoTypeRight.GenoTypeNodes).ToString(); }
public void PerformMutation(ref IGenoType genoType) { if (!(UniformRandomGenerator.GetContinousRandomNumber(0, 1.0) <= EaGeneExpressionParameters.MutationProbability)) { return; } var randomNumber = UniformRandomGenerator.GetContinousRandomNumber(0, 1.0); if (randomNumber <= 0.3) { genoType = GenoTypeFactory.GetGenoType(); } else { //var index = UniformRandomGenerator.GetIntegerRandomNumber(0, genoType.GenoTypeNodes.Count - 1); var numberOfNodes = PhenoTypeTree.GetNumberOfNodes(genoType.GenoTypeNodes); var index = UniformRandomGenerator.GetIntegerRandomNumber(0, numberOfNodes - 1); if (randomNumber <= 0.6) { var node = genoType.GenoTypeNodes[index]; genoType.GenoTypeNodes.RemoveAt(index); index = UniformRandomGenerator.GetIntegerRandomNumber(0, genoType.GenoTypeNodes.Count - 1); genoType.GenoTypeNodes.Insert(index, node); } else { if (genoType.GenoTypeNodes[index].GetType() == typeof(ParameterTerminal)) { ((ParameterTerminal)genoType.GenoTypeNodes[index]).Value = ((ParameterTerminal)genoType.GenoTypeNodes[index]).Value + UniformRandomGenerator.GetContinousRandomNumber(-3.0, 3.0); } else { if (index < EaGeneExpressionParameters.MaximumNumberOfHeadNodes) { genoType.GenoTypeNodes[index] = GenoTypeFactory.GetFunctionOrTerminalNode(); } else { genoType.GenoTypeNodes[index] = GenoTypeFactory.GetTerminalNode(); } } } } }
public void CanTranslateTest3() { var randomGenerator = new UniformRandomGenerator(); var possibleFunctions = new List <IGenoTypeNode> { new SquareRoot(), new Multiplication(), new Division(), new Plus(), new Minus(), new Minimum(), new Maximum(), new Not(), new Exp(), new Sinus(), new Cosinus() }; var possibleTerminals = new List <IGenoTypeNode> { new FeatureTerminal("a"), new FeatureTerminal("b"), new FeatureTerminal("c"), new FeatureTerminal("d") }; var eaGeneExpressionParameters = new EaGeneExpressionParameters(20, possibleFunctions, possibleTerminals); var parameterTerminalFactory = new ParameterTerminalFactory(eaGeneExpressionParameters, randomGenerator); var genoTypeFactory = new GenoTypeFactory(eaGeneExpressionParameters, randomGenerator, parameterTerminalFactory); eaGeneExpressionParameters.ParameterTypeInteger = true; eaGeneExpressionParameters.ConstantProbability = 0; var genoType = genoTypeFactory.GetGenoType(); var phenoTypeTree = new GeneExpression.PhenoTypeTree(genoType.GenoTypeNodes); var expresssion = phenoTypeTree.ToString(); }
public IGenoTypeNode GetFunctionNode() { return(EaGeneExpressionParameters.PossibleFunctions[ UniformRandomGenerator.GetIntegerRandomNumber(0, NumberOfPossibleFunctions)]); }
public World(int regionSize, UniformRandomGenerator random, NormalRandomGenerator gaussianRandom) : base("World") { SpawnPointList = new List <SpawnPoint>(); Initialize(regionSize, random, gaussianRandom); }
public FoodWorld(int regionSize, UniformRandomGenerator random, NormalRandomGenerator gaussianRandom) : base(regionSize, random, gaussianRandom) { FoodToClone = new Food(); }
internal static global::System.Runtime.InteropServices.HandleRef getCPtr(UniformRandomGenerator obj) { return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; }
public GaussianRandomGenerator(UniformRandomGenerator rng) : this(NQuantLibcPINVOKE.new_GaussianRandomGenerator(UniformRandomGenerator.getCPtr(rng)), true) { if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve(); }
public void CanCrossover() { var listLeft = new List <IGenoTypeNode> { new SquareRoot(), new Multiplication(), new Plus(), new Minus(), new FeatureTerminal("a"), new FeatureTerminal("b"), new FeatureTerminal("c"), new FeatureTerminal("d") }; var listRight = new List <IGenoTypeNode> { new Sinus(), new Multiplication(), new Division(), new Minus(), new FeatureTerminal("a1"), new FeatureTerminal("b1"), new FeatureTerminal("c1"), new FeatureTerminal("d1") }; var possibleFunctions = new List <IGenoTypeNode> { new SquareRoot(), new Multiplication(), new Plus(), new Minus() }; var possibleTerminals = new List <IGenoTypeNode> { new FeatureTerminal("a"), new FeatureTerminal("b"), new FeatureTerminal("c"), new FeatureTerminal("d") }; var eaGeneExpressionParameters = new EaGeneExpressionParameters(4, possibleFunctions, possibleTerminals) { CrossoverProbability = 1.0 }; IGenoType left = new GeneExpression.GenoType { GenoTypeNodes = listLeft }; IGenoType right = new GeneExpression.GenoType { GenoTypeNodes = listRight }; var randomGenerator = new UniformRandomGenerator(); var genotypeCrossoverator1 = new GenoTypeCrossoveratorBasic1(randomGenerator, eaGeneExpressionParameters); var phenoTypeTreeLeft1 = new GeneExpression.PhenoTypeTree(left.GenoTypeNodes); var phenoTypeTreeRight1 = new GeneExpression.PhenoTypeTree(right.GenoTypeNodes); genotypeCrossoverator1.PerformCrossover(ref left, ref right); var phenoTypeTreeLeft2 = new GeneExpression.PhenoTypeTree(left.GenoTypeNodes); var phenoTypeTreeRight2 = new GeneExpression.PhenoTypeTree(right.GenoTypeNodes); Assert.NotEqual(phenoTypeTreeLeft1, phenoTypeTreeLeft2); Assert.NotEqual(phenoTypeTreeRight1, phenoTypeTreeRight2); }
static void Main() { var randomGenerator = new UniformRandomGenerator(); var dataSet = GetDataSet(); var target = GetTarget(); var eaGeneExpressionParameters = GetEaGeneExpressionParameters(dataSet); var parameterTerminalFactory = new ParameterTerminalFactory(eaGeneExpressionParameters, randomGenerator); var genoTypeFactory = new GenoTypeFactory(eaGeneExpressionParameters, randomGenerator, parameterTerminalFactory); var mutator = new GenoTypeMutatorBasic1(randomGenerator, eaGeneExpressionParameters, genoTypeFactory); var crossOverator = new GenoTypeCrossoveratorBasic1(randomGenerator, eaGeneExpressionParameters); var populationP = GetFirstPopulation(eaGeneExpressionParameters, parameterTerminalFactory, genoTypeFactory); var listOfObjectiveValuesP = new List <IObjectiveValues>(); for (var c = 0; c < populationP.Count; c++) { var objectiveValues = GetObjectiveValues(target, dataSet, populationP[c]); listOfObjectiveValuesP.Add(objectiveValues); } listOfObjectiveValuesP = Nsga2TournamentSelector.PerformSelection(eaGeneExpressionParameters.TournamentSize, listOfObjectiveValuesP, randomGenerator); var tempPopulation = new List <Individual>(); foreach (var objectiveValues in listOfObjectiveValuesP) { var indy = populationP.FirstOrDefault(x => x.Guid == objectiveValues.IndividualGuid); tempPopulation.Add((Individual)indy.Clone()); } populationP = tempPopulation; for (var generation = 0; generation < eaGeneExpressionParameters.NumberOfGeneration; generation++) { var populationQ = new List <Individual>(); foreach (var individual in populationP) { populationQ.Add((Individual)individual.Clone()); } populationQ = PerformCrossOver(populationQ, randomGenerator, crossOverator); foreach (var individual in populationQ) { mutator.PerformMutation(ref individual.GenoType); } var combinedPopulation = new List <Individual>(); var combinedlistOfObjectiveValues = new List <IObjectiveValues>(); foreach (var individual in populationP) { var clone = (Individual)individual.Clone(); combinedPopulation.Add(clone); var objectiveValues = GetObjectiveValues(target, dataSet, clone); combinedlistOfObjectiveValues.Add(objectiveValues); } foreach (var individual in populationQ) { var clone = (Individual)individual.Clone(); combinedPopulation.Add(clone); var objectiveValues = GetObjectiveValues(target, dataSet, clone); combinedlistOfObjectiveValues.Add(objectiveValues); } combinedlistOfObjectiveValues = Nsga2Ranker.Rank(combinedlistOfObjectiveValues); combinedlistOfObjectiveValues = Nsga2Crowder.CalculateCrowdingDistances(combinedlistOfObjectiveValues); combinedlistOfObjectiveValues = combinedlistOfObjectiveValues.OrderBy(i => i.Rank).ThenByDescending(i => i.CrowdingDistance).ToList(); tempPopulation = new List <Individual>(); var counter = 0; var smallestMse = decimal.MaxValue; decimal largestMse = 0; var smallestPosition = -1; foreach (var objectiveValues in combinedlistOfObjectiveValues) { var indy = combinedPopulation.FirstOrDefault(x => x.Guid == objectiveValues.IndividualGuid); tempPopulation.Add((Individual)indy.Clone()); var ovs = GetObjectiveValues(target, dataSet, combinedPopulation.FirstOrDefault(x => x.Guid == objectiveValues.IndividualGuid)); if (ovs.Values[0] < smallestMse) { smallestMse = ovs.Values[0]; smallestPosition = counter; } if (ovs.Values[0] > largestMse) { largestMse = ovs.Values[0]; } counter++; if (counter == eaGeneExpressionParameters.PopulationSize) { break; } } populationP = tempPopulation; Console.WriteLine(generation + " " + smallestMse + " " + largestMse); Console.WriteLine(new PhenoTypeTree(populationP[smallestPosition].GenoType.GenoTypeNodes)); } }
internal static global::System.Runtime.InteropServices.HandleRef getCPtr(UniformRandomGenerator obj) { return((obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr); }
public IGenoTypeNode GetFunctionOrTerminalNode() { return(UniformRandomGenerator.GetContinousRandomNumber(0, 1.0) < EaGeneExpressionParameters.FunctionProbability ? GetFunctionNode() : GetTerminalNode()); }
public override void Work(Microsoft.Xna.Framework.GameTime gameTime) { base.Work(gameTime); int foodCount = 0; foreach (Entity entity in EntityList) { if (entity.EntityName == "Food") { foodCount += 1; } } if (foodCount < MinimumFood) { var rand = new UniformRandomGenerator(); for (int i = foodCount; i < MinimumFood; i++) { Food food = new Food(); AddEntity(food); food.Position = new EntityPosition(rand.Next(Width), rand.Next(Height)); } } int creatureCount = 0; foreach (Entity entity in EntityList) { if (entity.EntityName == "Creature") { creatureCount += 1; } } //if (creatureCount < MinimumCreatures) //{ // for (int i = creatureCount; i < MinimumCreatures; i++) // { // var creature1 = CreatureList[Pseudo.Random.Next(0, CreatureList.Count)]; // Creature creature2; // do // { // creature2 = CreatureList[Pseudo.Random.Next(0, CreatureList.Count)]; // } while (creature1 == creature2); // double posX = Pseudo.Random.Next(Width); // double posY = Pseudo.Random.Next(Height); // var child = creature1.CreateOffspring(creature2, posX, posY); // child.Rotation = Math.PI * 2 * Pseudo.Random.NextDouble(); // child.Energy.SetToMax(); // AddEntity(child); // } //} if (runTime) { newGenerationTick += 1; } if (newGenerationTick >= newGenerationPeriod) { newGenerationTick = 0; spawnNewGeneration(); } }
public UniformRandomSequenceGenerator(uint dimensionality, UniformRandomGenerator rng) : this(NQuantLibcPINVOKE.new_UniformRandomSequenceGenerator(dimensionality, UniformRandomGenerator.getCPtr(rng)), true) { if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve(); }
public FitnessWorld(int regionSize, UniformRandomGenerator random, NormalRandomGenerator gaussianRandom) : base(regionSize, random, gaussianRandom) { }