def tryOneParameter(self, key, fitnessFunctionName, args=(), nbIndividuals=30): #only makes one parameters vary for a range of value firstValue = self.initialIndividual.inputParametersVariable[key]['value']*(1-self.initialIndividual.inputParametersVariable[key]['variation']/100) lastValue = self.initialIndividual.inputParametersVariable[key]['value']*(1+self.initialIndividual.inputParametersVariable[key]['variation']/100) step = (lastValue - firstValue)/nbIndividuals xaxis = [firstValue]*nbIndividuals yaxis = [None]*nbIndividuals newIndiv = copy.deepcopy(self.initialIndividual) newIndiv.inputParametersVariable[key]['value'] = firstValue with Timer.LoggerTimer("{} {} | Fitness : {} | Computation Time ".format(newIndiv.inputParametersVariable[key]['name'], newIndiv.inputParametersVariable[key]['value'], newIndiv.fitness)): #bug, la fitness affichée est la fitness d'avant le calcul newIndiv.calc(getattr(newIndiv, fitnessFunctionName), args) yaxis[0] = newIndiv.fitness for i in range(nbIndividuals - 1): newIndiv.inputParametersVariable[key]['value'] = newIndiv.inputParametersVariable[key]['value'] + step with Timer.LoggerTimer("{} {} | Fitness : {} | Computation Time ".format(newIndiv.inputParametersVariable[key]['name'], newIndiv.inputParametersVariable[key]['value'], newIndiv.fitness)): newIndiv.calc(getattr(newIndiv, fitnessFunctionName), args) xaxis[i+1] = newIndiv.inputParametersVariable[key]['value'] yaxis[i+1] = newIndiv.fitness if (newIndiv.fitness < self.bestIndividual.fitness): self.bestIndividual = newIndiv return (xaxis, yaxis)
def testBetaBetaX(population, testName, fitnessFunctionName, args = (), testSize = 41): nbFigures = -1 beta_x_first = population.initialIndividual.inputParametersVariable['beta_x']['value'] - population.initialIndividual.inputParametersVariable['beta_x']['value']*population.initialIndividual.inputParametersVariable['beta_x']['variation']/100 beta_x_last = population.initialIndividual.inputParametersVariable['beta_x']['value'] + population.initialIndividual.inputParametersVariable['beta_x']['value']*population.initialIndividual.inputParametersVariable['beta_x']['variation']/100 beta_x_step = (beta_x_last - beta_x_first)/10 #10 = nbValues of beta_x we want to try beta_x_first = beta_x_first + beta_x_step print("{} {} {}".format(beta_x_first, beta_x_last, beta_x_step)) beta_init_first = population.initialIndividual.inputParametersVariable['beta']['value'] - population.initialIndividual.inputParametersVariable['beta']['value']*population.initialIndividual.inputParametersVariable['beta']['variation']/100 xaxis = [beta_init_first]*(testSize+1) yaxis = [None]*(testSize+1) newIndiv = copy.deepcopy(population.initialIndividual) pathName = "../Results/VariationTests/" + testName os.makedirs(pathName, exist_ok=True) while(beta_x_first <= beta_x_last): i=0 fileNameEnd = testName + "__{}_{}".format('beta_x', round(beta_x_first,2)) newIndiv.inputParametersVariable['beta_x']['value'] = round(beta_x_first,2) newIndiv.inputParametersVariable['beta']['value'] = round(beta_init_first,2) beta_first = beta_init_first beta_last = beta_x_first beta_step = (beta_last - beta_first) / testSize while(i<testSize+1 and beta_first <= beta_x_first): # and beta_first <= beta_x_first ? with Timer.LoggerTimer("{} {} | {} {} | Fitness : {} | Computation Time ".format(newIndiv.inputParametersVariable['beta_x']['name'], newIndiv.inputParametersVariable['beta_x']['value'], newIndiv.inputParametersVariable['beta']['name'], newIndiv.inputParametersVariable['beta']['value'], newIndiv.fitness)): newIndiv.calc(getattr(newIndiv, fitnessFunctionName), args) xaxis[i] = newIndiv.inputParametersVariable['beta']['value'] yaxis[i] = newIndiv.fitness beta_first = round(beta_first + beta_step, 2) newIndiv.inputParametersVariable['beta']['value'] = beta_first i = i+1 nbFigures = nbFigures + 1 plt.figure(nbFigures) #plt.subplot(2,1,nbFigures+1) plt.plot(xaxis, yaxis, "r+", marker="+") plt.xlabel(population.initialIndividual.inputParametersVariable['beta']['name']) plt.ylabel(fileNameEnd) plt.grid(True) fileName = "{}_variationTest_{}_{}.png".format('beta', fileNameEnd, testSize) plt.figure(nbFigures).savefig(pathName + '/' + fileName) beta_x_first = beta_x_first + beta_x_step
def testDeadriseE(population, testName, fitnessFunctionName, args = (), testSize = 25): #nbFigures = -1 nbFigures = 0 deadrise = 5 E = 2 stepE = (6-2)/testSize pathName = "../Results/VariationTests/" + testName os.makedirs(pathName, exist_ok=True) xaxis = [E]*(testSize+1) yaxis_effectivePower = [None]*(testSize+1) yaxis_stability = [None]*(testSize+1) i=0 fileNameEnd = 'EffectivePowerAndStability' while(E <= 6): population.initialIndividual.inputParametersVariable['e']['value']= E with Timer.LoggerTimer("E : {} | FitnessEffectivePower : {} | FitnessStability : {}| Computation Time ".format( population.initialIndividual.inputParametersVariable['e']['value'], population.initialIndividual.fitnessEffectivePower, population.initialIndividual.fitnessStability)): population.initialIndividual.calc(getattr(population.initialIndividual, fitnessFunctionName), args) xaxis[i] = population.initialIndividual.inputParametersVariable['e']['value'] yaxis_effectivePower[i] = population.initialIndividual.fitnessEffectivePower yaxis_stability[i] = population.initialIndividual.fitnessStability E = E + stepE i = i+1 #nbFigures = nbFigures + 1 fig = plt.figure(nbFigures) ax1 = plt.subplot() color = 'tab:red' # color = "r+" ax1.set_xlabel("{}".format(population.initialIndividual.inputParametersVariable['e']['name'])) ax1.set_ylabel("EffectivePower", color = color) ax1.tick_params(axis='y', labelcolor=color) ax1.plot(xaxis, yaxis_effectivePower, color, marker="+") ax2 = ax1.twinx() color = 'tab:blue' # color = "b+" ax2.set_ylabel("Stability", color = color) ax2.tick_params(axis='y', labelcolor=color) ax2.plot(xaxis, yaxis_stability, color, marker="+") fig.tight_layout() plt.grid(True) fileName = "{}_variationTest_{}_{}.png".format('e', fileNameEnd, testSize) plt.figure(nbFigures).savefig(pathName + '/' + fileName) plt.close()
def geneticAlgorithm(self, selectionFunction, selectionFunctionArgs = ()): for i in range(self.nbMaxGeneration): print("\n\nGen n° {}".format(i+1)) with Timer.LoggerTimer('Next Generation '): self.nextGeneration(selectionFunction, selectionFunctionArgs) print(self.bestIndividual) for i in range(self.populationSize): print(self.population[i]) self.bestIndividual = self.population[self.populationSize-1] print(self.bestIndividual)
def testDeadriseLCG(population, testName, fitnessFunctionName, args = (), testSize = 41): #nbFigures = -1 nbFigures = 0 deadrise = 5 LCG = 24 stepLCG = (30-24)/testSize pathName = "../Results/VariationTests/" + testName os.makedirs(pathName, exist_ok=True) xaxis = [LCG]*(testSize+1) yaxis_effectivePower = [None]*(testSize+1) yaxis_stability = [None]*(testSize+1) while (deadrise <= 25): i=0 LCG = 24 population.initialIndividual.inputParametersVariable['beta']['value'] = deadrise population.initialIndividual.inputParametersVariable['beta_x']['value'] = deadrise fileNameEnd = testName + "__{}_{}".format('Deadrise', deadrise) while(LCG <= 30): population.initialIndividual.inputParametersVariable['LCG']['value']= LCG with Timer.LoggerTimer("{} {} |{} {} | {} | FitnessEffectivePower : {} | FitnessStability : {}| Computation Time ".format(population.initialIndividual.inputParametersVariable['beta_x']['name'], population.initialIndividual.inputParametersVariable['beta_x']['value'], population.initialIndividual.inputParametersVariable['beta']['name'], population.initialIndividual.inputParametersVariable['beta']['value'], population.initialIndividual.inputParametersVariable['LCG']['value'], population.initialIndividual.fitnessEffectivePower, population.initialIndividual.fitnessStability)): population.initialIndividual.calc(getattr(population.initialIndividual, fitnessFunctionName), args) xaxis[i] = population.initialIndividual.inputParametersVariable['LCG']['value'] yaxis_effectivePower[i] = population.initialIndividual.fitnessEffectivePower yaxis_stability[i] = population.initialIndividual.fitnessStability LCG = LCG + stepLCG i = i+1 #nbFigures = nbFigures + 1 fig = plt.figure(nbFigures) ax1 = plt.subplot() color = 'tab:red' # color = "r+" ax1.set_xlabel("LCG with set Deadrise Angle of {}°".format(deadrise)) ax1.set_ylabel("EffectivePower", color = color) ax1.tick_params(axis='y', labelcolor=color) ax1.plot(xaxis, yaxis_effectivePower, color, marker="+") ax2 = ax1.twinx() color = 'tab:blue' # color = "b+" ax2.set_ylabel("Stability", color = color) ax2.tick_params(axis='y', labelcolor=color) ax2.plot(xaxis, yaxis_stability, color, marker="+") fig.tight_layout() plt.grid(True) fileName = "{}_variationTest_{}_{}.png".format('beta', fileNameEnd, testSize) plt.figure(nbFigures).savefig(pathName + '/' + fileName) plt.close() deadrise = deadrise + 1
# population.tryOneParameter('LCG') # with Timer.LoggerTimer('\nVariation Test Stability '): # # variationTestMultiple(population, ["Drag"], ["calcFitnessDrag"]) # for key in ['e']: # variationTest(population, "EffectivePower", "calcFitnessEffectivePower", (), key) # with Timer.LoggerTimer('\nVariation Test Stability '): # variationTest(population, "Stability", "calcFitnessStability", (), 'LCG', 25) # with Timer.LoggerTimer('\nVariation Test Stability '): variationTest(population, "Stability", "calcFitnessStability", (), 'VCG', 25) with Timer.LoggerTimer('\nVariation Test Stability '): variationTest(population, "Stability", "calcFitnessStability", (), 'e', 25) # with Timer.LoggerTimer('\nTest e'): # testDeadriseE(population, 'EffectivePowerAndStability', 'calcFitnessEffectivePower', ()) # # # with Timer.LoggerTimer('\nTest VCG'): # testDeadriseVCG(population, 'EffectivePowerAndStability', 'calcFitnessEffectivePower', ())