Running PHYSBO interactively
You can run PHYSBO interactively in the following way:
Get the next parameter to run from PHYSBO
Get the evaluation values outside of PHYSBO
Register the evaluation values into PHYSBO
For example, it is suitable for the following cases.
You want to perform an experiment manually and give the evaluation values to PHYSBO.
You want to control the execution flexibly, such as running the simulator in a separate process.
Preparation of search candidate data
As the previous tutorials, save the dataset file s5-210.csv into the subdirectory data
, and load dataset from this file as the following:
[1]:
import physbo
import numpy as np
def load_data():
A = np.asarray(np.loadtxt('data/s5-210.csv',skiprows=1, delimiter=',') )
X = A[:,0:3]
t = -A[:,3]
return X, t
X, t = load_data()
X = physbo.misc.centering(X)
Definition of simulator
[2]:
class simulator:
def __init__( self ):
_, self.t = load_data()
def __call__( self, action ):
return self.t[action]
Executing optimization
[3]:
# Set policy
policy = physbo.search.discrete.policy(test_X=X)
# Set seed
policy.set_seed( 0 )
In each search step, the following processes are performed.
Running random_search or bayes_search with
max_num_probes=1, simulator=None
to get action IDs (parameters).Getting the evaluation value (array of actions) by
t = simulator(actions)
.Registering the evaluation value for the action ID (parameter) with
policy.write(actions, t)
.Showing the history with
physbo.search.utility.show_search_results
.
In the following, we will perform two random sampling (1st, and 2nd steps) and two Bayesian optimization proposals (3rd, and 4th steps).
[ ]:
simulator = simulator()
''' 1st step (random sampling) '''
actions = policy.random_search(max_num_probes=1, simulator=None)
t = simulator(actions)
policy.write(actions, t)
physbo.search.utility.show_search_results(policy.history, 10)
''' 2nd step (random sampling) '''
actions = policy.random_search(max_num_probes=1, simulator=None)
t = simulator(actions)
policy.write(actions, t)
physbo.search.utility.show_search_results(policy.history, 10)
''' 3rd step (bayesian optimization) '''
actions = policy.bayes_search(max_num_probes=1, simulator=None, score='EI', interval=0, num_rand_basis = 5000)
t = simulator(actions)
policy.write(actions, t)
physbo.search.utility.show_search_results(policy.history, 10)
''' 4-th step (bayesian optimization) '''
actions = policy.bayes_search(max_num_probes=1, simulator=None, score='EI', interval=0, num_rand_basis = 5000)
t = simulator(actions)
policy.write(actions, t)
physbo.search.utility.show_search_results(policy.history, 10)
Suspend and restart
You can suspend and restart the optimization process by saving the following predictor, training, and history to an external file.
predictor: Prediction model of the objective function
training: Data used to train the predictor (
physbo.variable
object)history: History of optimization runs (
physbo.search.discrete.results.history
object)
[5]:
policy.save(file_history='history.npz', file_training='training.npz', file_predictor='predictor.dump')
[ ]:
# delete policy
del policy
# load policy
policy = physbo.search.discrete.policy(test_X=X)
policy.load(file_history='history.npz', file_training='training.npz', file_predictor='predictor.dump')
''' 5-th step (bayesian optimization) '''
actions = policy.bayes_search(max_num_probes=1, simulator=None, score='EI', interval=0, num_rand_basis = 5000)
t = simulator(actions)
policy.write(actions, t)
physbo.search.utility.show_search_results(policy.history, 10)
# It is also possible to specify predictor and training separately.
''' 6-th step (bayesian optimization) '''
actions = policy.bayes_search(max_num_probes=1,
predictor=policy.predictor, training=policy.training,
simulator=None, score='EI', interval=0, num_rand_basis = 5000)
t = simulator(actions)
policy.write(actions, t)
physbo.search.utility.show_search_results(policy.history, 10)
[ ]: