def run(optimizer, objectivefunc, NumOfRuns, params, export_flags): """ It serves as the main interface of the framework for running the experiments. Parameters ---------- optimizer : list The list of optimizers names objectivefunc : list The list of benchmark functions NumOfRuns : int The number of independent runs params : set The set of parameters which are: 1. Size of population (PopulationSize) 2. The number of iterations (Iterations) export_flags : set The set of Boolean flags which are: 1. Export (Exporting the results in a file) 2. Export_details (Exporting the detailed results in files) 3. Export_convergence (Exporting the covergence plots) 4. Export_boxplot (Exporting the box plots) Returns ----------- N/A """ # Select general parameters for all optimizers (population size, number of iterations) .... PopulationSize = params['PopulationSize'] Iterations = params['Iterations'] #Export results ? Export = export_flags['Export_avg'] Export_details = export_flags['Export_details'] Export_convergence = export_flags['Export_convergence'] Export_boxplot = export_flags['Export_boxplot'] Flag = False Flag_details = False # CSV Header for for the cinvergence CnvgHeader = [] results_directory = time.strftime("%Y-%m-%d-%H-%M-%S") + '/' Path(results_directory).mkdir(parents=True, exist_ok=True) for l in range(0, Iterations): CnvgHeader.append("Iter" + str(l + 1)) for i in range(0, len(optimizer)): for j in range(0, len(objectivefunc)): convergence = [0] * NumOfRuns executionTime = [0] * NumOfRuns for k in range(0, NumOfRuns): func_details = benchmarks.getFunctionDetails(objectivefunc[j]) x = selector(optimizer[i], func_details, PopulationSize, Iterations) convergence[k] = x.convergence optimizerName = x.optimizer objfname = x.objfname if (Export_details == True): ExportToFile = results_directory + "experiment_details.csv" with open(ExportToFile, 'a', newline='\n') as out: writer = csv.writer(out, delimiter=',') if ( Flag_details == False ): # just one time to write the header of the CSV file header = numpy.concatenate( [["Optimizer", "objfname", "ExecutionTime"], CnvgHeader]) writer.writerow(header) Flag_details = True # at least one experiment executionTime[k] = x.executionTime a = numpy.concatenate( [[x.optimizer, x.objfname, x.executionTime], x.convergence]) writer.writerow(a) out.close() if (Export == True): ExportToFile = results_directory + "experiment.csv" with open(ExportToFile, 'a', newline='\n') as out: writer = csv.writer(out, delimiter=',') if (Flag == False ): # just one time to write the header of the CSV file header = numpy.concatenate( [["Optimizer", "objfname", "ExecutionTime"], CnvgHeader]) writer.writerow(header) Flag = True avgExecutionTime = float("%0.2f" % (sum(executionTime) / NumOfRuns)) avgConvergence = numpy.around(numpy.mean( convergence, axis=0, dtype=numpy.float64), decimals=2).tolist() a = numpy.concatenate( [[optimizerName, objfname, avgExecutionTime], avgConvergence]) writer.writerow(a) out.close() if Export_convergence == True: conv_plot.run(results_directory, optimizer, objectivefunc, Iterations) if Export_boxplot == True: box_plot.run(results_directory, optimizer, objectivefunc, Iterations) if (Flag == False): # Faild to run at least one experiment print( "No Optomizer or Cost function is selected. Check lists of available optimizers and cost functions" ) print("Execution completed")
Flag = False # CSV Header for for the cinvergence CnvgHeader = [] for l in range(0, Iterations): CnvgHeader.append("Iter" + str(l + 1)) for i in range(0, len(optimizer)): for j in range(0, len(benchmarkfunc)): if ( (optimizer[i] == True) and (benchmarkfunc[j] == True) ): # start experiment if an optimizer and an objective function is selected for k in range(0, NumOfRuns): func_details = benchmarks.getFunctionDetails(j) x = selector(i, func_details, PopulationSize, Iterations) if (Export == True): with open(ExportToFile, 'a', newline='\n') as out: writer = csv.writer(out, delimiter=',') if ( Flag == False ): # just one time to write the header of the CSV file header = numpy.concatenate([[ "Optimizer", "objfname", "startTime", "EndTime", "ExecutionTime" ], CnvgHeader]) writer.writerow(header) a = numpy.concatenate([[ x.optimizer, x.objfname, x.startTime, x.endTime, x.executionTime
def run(optimizers, objectiveFuncs, NumOfRuns, params, exportFlags): """ It serves as the main interface of the framework for running the experiments. Parameters ---------- optimizers : list The list of optimizers names objectiveFuncs : list The list of benchmark functions NumOfRuns : int The number of independent runs params : set The set of parameters which are: 1. Size of population (populationSize) 2. The number of iterations (iterations) exportFlags : set The set of Boolean flags which are: 1. export (Exporting the results in a file) 2. exportDetails (Exporting the detailed results in files) 3. exportConvergence (Exporting the covergence plots) 4. exportBoxplot (Exporting the box plots) Returns ----------- N/A """ # Select general parameters for all optimizers (population size, number of iterations) .... populationSize = params["populationSize"] iterations = params["iterations"] # export results ? export = exportFlags["exportAvg"] exportDetails = exportFlags["exportDetails"] exportConvergence = exportFlags["exportConvergence"] exportBoxplot = exportFlags["exportBoxplot"] flag = False flagDetails = False # CSV Header for for the convergence cnvgHeader = [] resultsDirectory = time.strftime("%Y-%m-%d-%H-%M-%S") + "/" Path(resultsDirectory).mkdir(parents=True, exist_ok=True) for l in range(0, iterations): cnvgHeader.append("Iter" + str(l + 1)) for _, optimizer in enumerate(optimizers): for _, objectiveFunc in enumerate(objectiveFuncs): convergence = [0] * NumOfRuns executionTime = [0] * NumOfRuns for k in range(0, NumOfRuns): func_details = benchmarks.getFunctionDetails(objectiveFunc) x = selector(optimizer, func_details, populationSize, iterations) convergence[k] = x.convergence optimizerName = x.optimizer objfname = x.objfname if exportDetails == True: exportToFile = resultsDirectory + "experiment_details.csv" with open(exportToFile, "a", newline="\n") as out: writer = csv.writer(out, delimiter=",") if ( flagDetails == False ): # just one time to write the header of the CSV file header = numpy.concatenate( [["Optimizer", "objfname", "ExecutionTime"], cnvgHeader]) writer.writerow(header) flagDetails = True # at least one experiment executionTime[k] = x.executionTime a = numpy.concatenate( [[x.optimizer, x.objfname, x.executionTime], x.convergence]) writer.writerow(a) out.close() if export == True: exportToFile = resultsDirectory + "experiment.csv" with open(exportToFile, "a", newline="\n") as out: writer = csv.writer(out, delimiter=",") if (flag == False ): # just one time to write the header of the CSV file header = numpy.concatenate( [["Optimizer", "objfname", "ExecutionTime"], cnvgHeader]) writer.writerow(header) flag = True avgExecutionTime = float("%0.2f" % (sum(executionTime) / NumOfRuns)) avgConvergence = numpy.around(numpy.mean( convergence, axis=0, dtype=numpy.float64), decimals=2).tolist() a = numpy.concatenate( [[optimizerName, objfname, avgExecutionTime], avgConvergence]) writer.writerow(a) out.close() if exportConvergence == True: conv_plot.run(resultsDirectory, optimizers, objectiveFuncs, iterations) if exportBoxplot == True: box_plot.run(resultsDirectory, optimizers, objectiveFuncs, iterations) if flag == False: # Faild to run at least one experiment print( "No Optomizer or Cost function is selected. Check lists of available optimizers and cost functions" ) print("Execution completed")
# Check if it works at least once Flag=False # CSV Header for for the cinvergence CnvgHeader=[] for l in range(0,Iterations): CnvgHeader.append("Iter"+str(l+1)) for i in range (0, len(optimizer)): for j in range (0, len(benchmarkfunc)): if((optimizer[i]==True) and (benchmarkfunc[j]==True)): # start experiment if an optimizer and an objective function is selected for k in range (0,NumOfRuns): func_details=benchmarks.getFunctionDetails(j) x=selector(i,func_details,PopulationSize,Iterations) if(Export==True): with open(ExportToFile, 'a',newline='\n') as out: writer = csv.writer(out,delimiter=',') if (Flag==False): # just one time to write the header of the CSV file header= numpy.concatenate([["Optimizer","objfname","startTime","EndTime","ExecutionTime"],CnvgHeader]) writer.writerow(header) a=numpy.concatenate([[x.optimizer,x.objfname,x.startTime,x.endTime,x.executionTime],x.convergence]) writer.writerow(a) out.close() Flag=True # at least one experiment if (Flag==False): # Faild to run at least one experiment print("No Optomizer or Cost function is selected. Check lists of available optimizers and cost functions")
def run(optimizer, objectivefunc, NumOfRuns, params, export_flags): PopulationSize = params["PopulationSize"] Iterations = params["Iterations"] Export = export_flags["Export_avg"] Export_details = export_flags["Export_details"] Export_convergence = export_flags["Export_convergence"] Export_boxplot = export_flags["Export_boxplot"] Flag = False Flag_details = False CnvgHeader = [] results_directory = time.strftime("%Y-%m-%d |%H:%M:%S") + "/" Path(results_directory).mkdir(parents=True, exist_ok=True) for l in range(0, Iterations): CnvgHeader.append("Iter" + str(l + 1)) for i in range(0, len(optimizer)): for j in range(0, len(objectivefunc)): convergence = [0] * NumOfRuns executionTime = [0] * NumOfRuns for k in range(0, NumOfRuns): func_details = benchmarks.getFunctionDetails(objectivefunc[j]) x = selector(optimizer[i], func_details, PopulationSize, Iterations) convergence[k] = x.convergence optimizerName = x.optimizer objfname = x.objfname if Export_details == True: ExportToFile = results_directory + "experiment_details.csv" with open(ExportToFile, "a", newline="\n") as out: writer = csv.writer(out, delimiter=",") if (Flag_details == False): header = numpy.concatenate( [["Optimizer", "objfname", "ExecutionTime"], CnvgHeader]) writer.writerow(header) Flag_details = True executionTime[k] = x.executionTime a = numpy.concatenate( [[x.optimizer, x.objfname, x.executionTime], x.convergence]) writer.writerow(a) out.close() if Export == True: ExportToFile = results_directory + "experiment.csv" with open(ExportToFile, "a", newline="\n") as out: writer = csv.writer(out, delimiter=",") if (Flag == False): header = numpy.concatenate( [["Optimizer", "objfname", "ExecutionTime"], CnvgHeader]) writer.writerow(header) Flag = True avgExecutionTime = float("%0.2f" % (sum(executionTime) / NumOfRuns)) avgConvergence = numpy.around(numpy.mean( convergence, axis=0, dtype=numpy.float64), decimals=2).tolist() a = numpy.concatenate( [[optimizerName, objfname, avgExecutionTime], avgConvergence]) writer.writerow(a) out.close() if Export_convergence == True: conv_plot.run(results_directory, optimizer, objectivefunc, Iterations) if Export_boxplot == True: box_plot.run(results_directory, optimizer, objectivefunc, Iterations) if Flag == False: print( "Selectionez un optimisateur ou une une fonction a fin de demarrer l'aoptimisation" ) print("Execution terminée")