Skip to content

Commit

Permalink
added stateless option
Browse files Browse the repository at this point in the history
The stateless option just runs HM until a the bbf is run for the first time and returns those to the hm callee
  • Loading branch information
ErikOrm committed Dec 7, 2023
1 parent 319b61e commit 705c538
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 18 deletions.
39 changes: 24 additions & 15 deletions hypermapper/bo/bo.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,12 +113,15 @@ def main(settings, black_box_function=None):
0,
)
if default_doe_parameter_array.shape[0] > 0:
default_doe_data_array = param_space.run_configurations(
default_doe_parameter_array,
beginning_of_time,
settings,
black_box_function,
)
if settings["hypermapper_mode"]["mode"] == "stateless":
return default_doe_parameter_array, param_space.parameter_names
else:
default_doe_data_array = param_space.run_configurations(
default_doe_parameter_array,
beginning_of_time,
settings,
black_box_function,
)
else:
default_doe_data_array = DataArray(
torch.Tensor(),
Expand Down Expand Up @@ -153,9 +156,12 @@ def main(settings, black_box_function=None):
"random sampling",
allow_repetitions=False,
)
tmp_data_array = param_space.run_configurations(
tmp_parameter_array, beginning_of_time, settings, black_box_function
)
if settings["hypermapper_mode"]["mode"] == "stateless":
return tmp_parameter_array, param_space.parameter_names
else:
tmp_data_array = param_space.run_configurations(
tmp_parameter_array, beginning_of_time, settings, black_box_function
)
data_array.cat(tmp_data_array)
absolute_configuration_index += 1
iteration_number += 1
Expand Down Expand Up @@ -312,12 +318,15 @@ def main(settings, black_box_function=None):
# Evaluate configs
##################
black_box_function_t0 = time.time()
new_data_array = param_space.run_configurations(
best_configurations,
beginning_of_time,
settings,
black_box_function,
)
if settings["hypermapper_mode"]["mode"] == "stateless":
return best_configurations, param_space.parameter_names
else:
new_data_array = param_space.run_configurations(
best_configurations,
beginning_of_time,
settings,
black_box_function,
)
data_array.cat(new_data_array)
feasible_data_array = data_array.get_feasible()
black_box_function_t1 = time.time()
Expand Down
10 changes: 8 additions & 2 deletions hypermapper/run.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@

from typing import Union, Dict, Callable, Optional

import torch

from hypermapper.util.util import (
get_min_configurations,
get_min_feasible_configurations,
Expand All @@ -13,7 +15,7 @@


def optimize(
settings_file: Union[str, Dict], black_box_function: Optional[Callable] = None
settings_file: Union[str, Dict], black_box_function: Optional[Callable] = None
):
"""
Optimize is the main method of Hypermapper. It takes a problem to optimize and optimization settings
Expand Down Expand Up @@ -52,7 +54,11 @@ def optimize(
if settings["optimization_method"] in ["bayesian_optimization"]:
from hypermapper.bo import bo

data_array = bo.main(settings, black_box_function=black_box_function)
out = bo.main(settings, black_box_function=black_box_function)
if isinstance(out, tuple):
return out[0].numpy(), out[1] # configurations and parameter names
else:
data_array = out

elif settings["optimization_method"] == "exhaustive":
from hypermapper.other import exhaustive
Expand Down
16 changes: 16 additions & 0 deletions hypermapper/schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,19 @@
"mode",
"exhaustive_search_file"
]
},
"stateless": {
"additionalProperties": false,
"properties": {
"mode": {
"enum": [
"stateless"
]
}
},
"required": [
"mode"
]
}
},
"models": {
Expand Down Expand Up @@ -264,6 +277,9 @@
},
{
"$ref": "#/hypermapper_modes/client-server"
},
{
"$ref": "#/hypermapper_modes/stateless"
}
],
"type": "object"
Expand Down
2 changes: 1 addition & 1 deletion hypermapper/util/settings_check.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ def settings_check_bo(
print("Using EI acquisition function instead")
settings["acquisition_function"] = "EI"

if not settings["hypermapper_mode"]["mode"] in ["default", "client-server"]:
if not settings["hypermapper_mode"]["mode"] in ["default", "client-server", "stateless"]:
print("Unrecognized hypermapper mode:", settings["hypermapper_mode"])
raise SystemExit

Expand Down

0 comments on commit 705c538

Please sign in to comment.