public MinFunGettingStarted ( int earlyPopulation, int numberOfParents, int numberOfGenerationRepetitions, int choromosemeLenght, double sigma, int kIndividualTornomantInit, int a, int b, int c, FunctionSelected functionSelected, Selection selectionList, Recombination recombinations, Mutation mutations ) : base(earlyPopulation, numberOfParents, numberOfGenerationRepetitions) { ChoromosemeLenght = choromosemeLenght; Sigma = sigma; KIndividualTornomantInit = kIndividualTornomantInit; A = a; B = b; C = c; FunctionSelected = functionSelected; SelectionList = selectionList; Recombinations = recombinations; mutationList = mutations; }
// Use this for initialization void Start() { pop = GameObject.Find("GameMaster"); naturalSel = pop.GetComponent <NaturalSelection>(); artSel = pop.GetComponent <ArtificalSelection>(); recom = pop.GetComponent <Recombination>(); replace = pop.GetComponent <Replacement>(); playerNum = PauseMenu.playerNum; //number of players is taken from other script because it enables changing this value in game by user Players = new GameObject[playerNum]; jumpingEnabled = PauseMenu.jumpingEnabled; //jumping can be enabled through game menu SpawnPlayers(); }
public Task <(MinFuncIndividual first, MinFuncIndividual second)> HandleRecombination(MinFuncIndividual parent1, MinFuncIndividual parent2, Recombination recombination) { if (recombination == Recombination.Simple) { var random = RandomHelper.CreateRandom(0, _chromosomeLength); var child1 = new MinFuncIndividual(new double[_chromosomeLength]); var child2 = new MinFuncIndividual(new double[_chromosomeLength]); for (int i = random; i < _chromosomeLength; i++) { child1.Generate[i] = (parent1.Generate[i] * _alfa) + (parent2.Generate[i] * (1 - _alfa)); child2.Generate[i] = (parent1.Generate[i] * _alfa) + (parent2.Generate[i] * (1 - _alfa)); } return(Task.FromResult((child1, child2))); } return(Task.FromResult((new MinFuncIndividual(null), new MinFuncIndividual(null)))); }
void Start() { population = GameObject.Find("GameMaster").gameObject.GetComponent <Population>(); recom = GameObject.Find("GameMaster").gameObject.GetComponent <Recombination>(); art = GameObject.Find("GameMaster").gameObject.GetComponent <ArtificalSelection>(); }
public async Task <(MinFuncIndividual first, MinFuncIndividual second)> ProcessRecombinationHandler(MinFuncIndividual parent1, MinFuncIndividual parent2, Recombination recombination) { //var threadId = Thread.CurrentThread.ManagedThreadId; foreach (IRecombinationMethod <MinFuncIndividual, MinFuncIndividual> recombinationRequest in _recombinationRequestList) { var result = await recombinationRequest.HandleRecombination(parent1, parent2, recombination); if (result is (MinFuncIndividual, MinFuncIndividual) && result.first.Generate != null && result.second.Generate != null) { return(result.first, result.second); } } return(null, null); }
public async Task <(Individual first, Individual second)> HandleRecombination(Individual first, Individual second, Recombination recombination) { var point1 = RandomHelper.CreateRandom(1, first.Generate.Count()); var point2 = RandomHelper.CreateRandom(point1, first.Generate.Count()); bool[] child1Generate = new bool[first.Generate.Count()]; bool[] child2Generate = new bool[first.Generate.Count()]; await Task.Run(() => { for (int i = 0; i < first.Generate.Count(); i++) { if (point1.Equals(point2)) { child1Generate[i] = (i < point1) ? first.Generate[i] : second.Generate[i]; child2Generate[i] = (i < point1) ? second.Generate[i] : first.Generate[i]; } else { child1Generate[i] = (i < point1) ? first.Generate[i] : ((i < point2) ? second.Generate[i] : first.Generate[i]); child2Generate[i] = (i < point1) ? second.Generate[i] : ((i < point2) ? first.Generate[i] : second.Generate[i]); } } }); var child1 = new Individual(child1Generate, _items, _knapsackCapacity); var child2 = new Individual(child2Generate, _items, _knapsackCapacity); //noise for mutation if (RandomHelper.CreateRandom(0, 100) < 35) { child1 = await _simpleMutation.HandleMutation(child1, Mutation.None); } if (RandomHelper.CreateRandom(0, 100) < 35) { child2 = await _simpleMutation.HandleMutation(child2, Mutation.None); } return(child1, child2); }