Это пример кода, необходимого для запуска байесовской оптимизации неизвестной целевой функции «черный ящик» с дискретными точками данных, включенными в пример кода, чтобы вы могли легко изменять числа и легко выполнять собственную оптимизацию. Это предназначено для того, чтобы помочь исследователям быстро и легко проводить свои собственные эксперименты, не тратя много времени на изучение python, numpy, GPyOpt и т. д.

Пример кода 1D

Этот код можно использовать для оптимизации функции 2D-черного ящика, просто заменив ее собственными точками данных.

Примечание: измените данные в

X_данные и Y_данные

изменить границы домена в соответствии с вашими конкретными данными

для вашего конкретного эксперимента выберите функцию сбора данных, которая, по вашему мнению, лучше всего подходит для решения вашей задачи.

Acquisition_type=’__’,

тип используемой функции сбора данных. — «EI», ожидаемое улучшение. — «EI_MCMC», интегрированное ожидаемое улучшение (требуется модель GP_MCMC). — «ИМБ», максимальная вероятность улучшения. — «MPI_MCMC», максимальная вероятность улучшения (требуется модель GP_MCMC). — «LCB», GP — нижняя доверительная граница. — «LCB_MCMC», интегрированная нижняя доверительная граница GP (требуется модель GP_MCMC).

from GPyOpt.methods import BayesianOptimization
import numpy as np

Y_Data = np.array([ [0.5], [0.59], [0.7], [0.92], [0.86]])

X_Data = np.array([ [2], [3], [4], [8], [16]])

domain = [{'name': 'var_1', 'type': 'continuous', 'domain': (.1,3)}]

myBopt = BayesianOptimization(
  f=None, 
  domain=domain,
  model_type='GP',
  X = X_Data,
  Y = -Y_Data,
  acquisition_type='EI',
  verbosity=True,  
  normalize_Y = False,
  maximize = True,
  exact_feval = False)
x_next = myBopt.suggest_next_locations()
print("next point to evaluate")
print(x_next)
myBopt.plot_acquisition()

вывод должен быть:

следующая точка для оценки
[[11.16726975]]

2D пример кода

Этот код можно использовать для оптимизации функции 2D-черного ящика, просто заменив ее собственными точками данных.

Примечание: измените данные в

xy_init и z_init

для вашего конкретного эксперимента и выберите функцию сбора данных, которая, по вашему мнению, лучше всего подходит для вашей задачи.

Acquisition_type=’__’,

тип используемой функции сбора данных. — «EI», ожидаемое улучшение. — «EI_MCMC», интегрированное ожидаемое улучшение (требуется модель GP_MCMC). — «ИМБ», максимальная вероятность улучшения. — «MPI_MCMC», максимальная вероятность улучшения (требуется модель GP_MCMC). — «LCB», GP — нижняя доверительная граница. — «LCB_MCMC», интегрированная нижняя доверительная граница GP (требуется модель GP_MCMC).

from GPyOpt.methods import BayesianOptimization
import numpy as np
import GPyOpt


xy_init = np.array([
                   [2, 5],
                   [3, 5.9],
                   [4, 7],
                   [8, 9.2],
                   [1.6, 8.6]
                 ] )

z_init = np.array([[83.9],[72.1],[94.8],[63],[54.4]])*(-1)


domain = [{'name': 'xy_init', 'type': 'continuous', 'domain': (0,10)},
        {'name': 'z_init', 'type': 'continuous', 'domain': (0,10)},

        ]



bo_step = GPyOpt.methods.BayesianOptimization(
        f = None,
        domain = domain,
        model_type='GP',
        acquisition_type='EI',
        X = xy_init,
        Y = z_init
        )

x_next = bo_step.suggest_next_locations()


print("Value of (x,y) that next should be evaluated, to minimize the objective func:"+str(x_next))
print("current max")
print(np.sum(x_next))

bo_step.plot_acquisition()

вывод будет:

Значение (x,y), которое следует вычислить следующим образом, чтобы минимизировать целевую функцию: [[4,42626 0,53062734]]
текущий максимум
4,956887334695302