-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathExp.py
More file actions
129 lines (117 loc) · 4.48 KB
/
Exp.py
File metadata and controls
129 lines (117 loc) · 4.48 KB
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
import os
import time
import random
import shutil
import numpy as np
import ioh
from ioh import ProblemClass, Experiment
import matlab.engine
future=matlab.engine.start_matlab(background=True)
eng=future.result() # Wait for MATLAB engine to start
class Opts:
def __init__(self,dim,Instance,Index,Name,ShowIts,MaxEvals,MaxIts,Ftarget):
self.dimension=dim
self.instance=Instance
self.index=Index
self.name=Name
self.maxevals=MaxEvals
self.showits=ShowIts
self.maxits=MaxIts
self.ftarget=Ftarget
def to_dict(self):
return {
'dimension': self.dimension,
'instance': self.instance,
'index': self.index,
'name': self.name,
'maxevals': self.maxevals,
'maxits': self.maxits,
'showits': self.showits,
'ftarget': self.ftarget
}
class Algorithm:
def __init__(self):
self.x=0
self.evals=1
def __call__(self, p):
#------------------------------------------------------------------
# Options
#------------------------------------------------------------------
opts=Opts(
dim=p.meta_data.n_variables,
Instance=p.meta_data.instance,
Index=p.meta_data.problem_id,
Name=p.meta_data.name,
ShowIts=0,
MaxEvals=min(100*p.meta_data.n_variables,1000)+1,
MaxIts=float('inf'),
Ftarget=float('-inf')
)
opts_dict=opts.to_dict()
opts_matlab=eng.eval("struct()")
for key, value in opts_dict.items():
opts_matlab[key]=value
#------------------------------------------------------------------
# Bounds
#------------------------------------------------------------------
lower_bounds=p.bounds.lb
upper_bounds=p.bounds.ub
bounds=np.array([[lb,ub] for lb, ub in zip(lower_bounds,upper_bounds)])
#------------------------------------------------------------------
# Run algorithm
#------------------------------------------------------------------
time.sleep(1)
values_matlab=eng.alg_RS(1, opts_matlab, bounds)
f_values_list=np.array(values_matlab)
#------------------------------------------------------------------
# Assigning calculations from MATLAB to IOH
#------------------------------------------------------------------
for row in f_values_list:
global f_value
f_value=row[0]
x_value=row[1:]
p(x_value)
#==========================================================================
Suite=["bench_fun_eps","bench_fun_pitz","Circular_Antenna_Array",
"Frequency_Modulated_Sound_Waves","Frequency_Modulated_Sound_Waves",
"Frequency_Modulated_Sound_Waves","Frequency_Modulated_Sound_Waves",
"Lennard_Jones_Potential","Lennard_Jones_Potential","Lennard_Jones_Potential",
"Lennard_Jones_Potential","Spacecraft_Trajectory_OptimizationC1",
"Spacecraft_Trajectory_OptimizationC2","Spread_Spectrum_Radar",
"Tersoff_PotentialC1","Tersoff_PotentialC1","Tersoff_PotentialC1",
"Tersoff_PotentialC1","WindWake","WindWake","WindWake","WindWake"]
Ndims=[49,10,12,6,12,24,48,6,12,24,48,26,22,20,6,12,24,48,6,12,24,48]
for fun_name, dim in zip(Suite, Ndims):
globals()[fun_name]=lambda x: f_value
ioh.wrap_problem(
globals()[fun_name],
name=fun_name,
optimization_type=ioh.OptimizationType.MIN,
problem_class=ProblemClass.REAL
)
def run_experiment():
exp=Experiment(
Algorithm(),
fids=[fun_name],
dims=[dim],
iids=[0],
njobs=1,
reps=15,
old_logger=False,
store_positions=False,
remove_data=False,
algorithm_name="RS",
algorithm_info="v1.0",
experiment_attributes={
"test_suite": "Practical problem suite",
"evaluation_budget": "min(1000, dims[i] * 100)",
},
)
# Run the experiment
exp()
if __name__ == "__main__":
run_experiment()
if os.path.exists("ioh_data"):
shutil.rmtree("ioh_data")
eng.quit() # Quit MATLAB after finishing
print("Successful launch")