forked from dragonfly/dragonfly
-
Notifications
You must be signed in to change notification settings - Fork 0
/
in_code_demo.py
62 lines (54 loc) · 2.48 KB
/
in_code_demo.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
"""
In code demo for borehole_constrained example.
-- kandasamy@cs.cmu.edu
"""
from __future__ import print_function
from dragonfly import load_config, maximise_function, maximise_multifidelity_function
# From current directory
from park1_constrained import objective
from park1_constrained_mf import objective as mf_objective
from park1_constrained_mf import cost as mf_cost
from dc2_constraint import constraint as dc2_constraint
def main():
""" Main function. """
# First Specify all parameters
disc_num_items_x1 = [4, 10, 23, 45, 78, 87.1, 91.8, 99, 75.7, 28.1, 3.141593]
domain_vars = [
{'name': 'x0', 'type': 'discrete_numeric', 'items': '0:0.05:1', 'dim': 2},
{'name': 'x1', 'type': 'discrete_numeric', 'items': disc_num_items_x1},
{'name': 'x2', 'type': 'float', 'min': 10, 'max': 16},
]
domain_constraints = [
{'name': 'dc1', 'constraint': 'sum(x0) + (x2 - 10)/6.0 <= 2.1'},
{'name': 'dc2', 'constraint': dc2_constraint}
]
disc_items_z2 = ['a', 'ab', 'abc', 'abcd', 'abcde', 'abcdef', 'abcdefg', 'abcdefg',
'abcdefgh', 'abcdefghi']
fidel_vars = [{'name': 'z1', 'type': 'discrete', 'items': disc_items_z2, 'dim': 2},
{'name': 'z2', 'type': 'float', 'min': 21.3, 'max': 243.9},
]
fidel_to_opt = [["abcdefghi", "abcdefghi"], 200.1]
# Budget of evaluations
max_num_evals = 100 # Optimisation budget (max number of evaluations)
max_mf_capital = max_num_evals * mf_cost(fidel_to_opt) # Multi-fideltiy capital
# First do the MF version
config_params = {'domain': domain_vars, 'fidel_space': fidel_vars,
'domain_constraints': domain_constraints,
'fidel_to_opt': fidel_to_opt}
config = load_config(config_params)
# Optimise
mf_opt_val, mf_opt_pt, history = maximise_multifidelity_function(mf_objective,
config.fidel_space, config.domain,
config.fidel_to_opt, mf_cost,
max_mf_capital, config=config)
print(mf_opt_pt, mf_opt_val)
# Non-MF version
config_params = {'domain': domain_vars, 'domain_constraints': domain_constraints}
config = load_config(config_params)
max_capital = 100 # Optimisation budget (max number of evaluations)
# Optimise
opt_val, opt_pt, history = maximise_function(objective, config.domain,
max_num_evals, config=config)
print(opt_pt, opt_val)
if __name__ == '__main__':
main()