Skip to content

Commit

Permalink
Merge pull request #94 from panzerox123/hypermapper-v3
Browse files Browse the repository at this point in the history
Fixes for Batch Optimization for HyperMapper-v3
  • Loading branch information
ErikOrm committed Sep 6, 2023
2 parents 6de72e4 + 1c0e544 commit 4fc83b3
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 16 deletions.
5 changes: 3 additions & 2 deletions hypermapper/bo/bo.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from hypermapper.param.data import DataArray
from hypermapper.param.doe import get_doe_sample_configurations
from hypermapper.param.sampling import random_sample
from hypermapper.param.transformations import preprocess_parameters_array
from hypermapper.util.file import load_previous
from hypermapper.util.file import (
initialize_output_data_file,
Expand Down Expand Up @@ -247,10 +248,11 @@ def main(settings, black_box_function=None):
(best_configurations, best_configuration.unsqueeze(0)), 0
)
if batch_idx < settings["batch_size"] - 1:
preprocessed_best_configuration = preprocess_parameters_array(best_configuration.unsqueeze(0), param_space)
fantasized_values = torch.tensor(
[
model.get_mean_and_std(
best_configuration.unsqueeze(0), False
preprocessed_best_configuration[0].unsqueeze(0), False
)[0]
for model in regression_models
]
Expand Down Expand Up @@ -282,7 +284,6 @@ def main(settings, black_box_function=None):
allow_repetitions=False,
previously_run=data_array.string_dict,
)

##################
# Evaluate configs
##################
Expand Down
48 changes: 34 additions & 14 deletions hypermapper/param/space.py
Original file line number Diff line number Diff line change
Expand Up @@ -677,20 +677,40 @@ def run_configurations_with_black_box_function(
original_configurations = self.convert(configurations, "internal", "original")
objective_values = []
timestamps = []
for original_configuration in original_configurations:
output = black_box_function(
{
name: value
for name, value in zip(self.parameter_names, original_configuration)
}
)
if isinstance(output, tuple):
output = list(output)
if not (type(output) is list or type(output) is dict):
output = [output]
objective_values.append(output)
timestamps.append(self.current_milli_time() - beginning_of_time)

configurations_run = 0
while configurations_run < len(original_configurations):
if len(original_configurations) > 1:
outputs = black_box_function(
[
{
name: value
for name,value in zip(self.parameter_names, config)
}
for config in original_configurations[configurations_run:configurations_run+self.settings["batch_size"]]
]
)
for output in outputs:
if isinstance(output, tuple):
output = list(output)
if not (type(output) is list or type(output) is dict):
output = [output]
objective_values.append(output)
timestamps.append(self.current_milli_time() - beginning_of_time)
else:
output = black_box_function(
{
name: value
for name, value in zip(self.parameter_names, original_configurations[configurations_run:configurations_run+self.settings["batch_size"]])
}
)
if isinstance(output, tuple):
output = list(output)
if not (type(output) is list or type(output) is dict):
output = [output]
objective_values.append(output)
timestamps.append(self.current_milli_time() - beginning_of_time)
configurations_run += self.settings["batch_size"]

output_names = (
self.metric_names
+ ([self.feasible_output_name] if self.enable_feasible_predictor else [])
Expand Down

0 comments on commit 4fc83b3

Please sign in to comment.