forked from mariosky/EvoloPy
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathoptimizer.py
131 lines (106 loc) · 3.54 KB
/
optimizer.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# -*- coding: utf-8 -*-
"""
Created on Tue May 17 15:50:25 2016
@author: hossam
"""
import PSO as pso
import MVO as mvo
import GWO as gwo
import MFO as mfo
import CS as cs
import BAT as bat
import WOA as woa
import FFA as ffa
import benchmarks
import csv
import numpy
import time
def selector(algo,func_details,popSize,Iter):
function_name=func_details[0]
lb=func_details[1]
ub=func_details[2]
dim=func_details[3]
if(algo==0):
x=pso.PSO(getattr(benchmarks, function_name),lb,ub,dim,popSize,Iter)
if(algo==1):
x=mvo.MVO(getattr(benchmarks, function_name),lb,ub,dim,popSize,Iter)
if(algo==2):
x=gwo.GWO(getattr(benchmarks, function_name),lb,ub,dim,popSize,Iter)
if(algo==3):
x=mfo.MFO(getattr(benchmarks, function_name),lb,ub,dim,popSize,Iter)
if(algo==4):
x=cs.CS(getattr(benchmarks, function_name),lb,ub,dim,popSize,Iter)
if(algo==5):
x=bat.BAT(getattr(benchmarks, function_name),lb,ub,dim,popSize,Iter)
if(algo==6):
x=woa.WOA(getattr(benchmarks, function_name),lb,ub,dim,popSize,Iter)
if(algo==7):
x=ffa.FFA(getattr(benchmarks, function_name),lb,ub,dim,popSize,Iter)
return x
# Select optimizers
PSO= False
MVO= False
GWO = False
MFO= False
CS= False
BAT= False
WOA= False
FFA=True
# Select benchmark function
F1=True
F2=False
F3=False
F4=False
F5=False
F6=False
F7=False
F8=False
F9=False
F10=False
F11=False
F12=False
F13=False
F14=False
F15=False
F16=False
F17=False
F18=False
F19=False
optimizer=[PSO, MVO, GWO, MFO, CS, BAT, WOA, FFA]
benchmarkfunc=[F1,F2,F3,F4,F5,F6,F7,F8,F9,F10,F11,F12,F13,F14,F15,F16,F17,F18,F19]
# Select number of repetitions for each experiment.
# To obtain meaningful statistical results, usually 30 independent runs
# are executed for each algorithm.
NumOfRuns=1
# Select general parameters for all optimizers (population size, number of iterations)
PopulationSize = 50
Iterations= 500
#Export results ?
Export=True
#ExportToFile="YourResultsAreHere.csv"
#Automaticly generated name by date and time
ExportToFile="experiment"+time.strftime("%Y-%m-%d-%H-%M-%S")+".csv"
# 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")