python - GPyOpt - 如何进行物理实验?

标签 python gpyopt

我正在尝试做一些物理实验来找到优化某些参数的配方。我所说的物理实验是指我有一个化学实验台,我将物质混合在一起,然后测量该配方的特性。过去我曾使用过传统的 DOE,但我需要加快时间以获得理想的配方。我知道单纯形优化,但我有兴趣尝试贝叶斯优化。我发现 GPyOpt 声称(即使在 SO 标签描述中)支持物理实验。但是,尚不清楚如何启用这种行为。

我尝试过的一件事是通过input收集用户输入,我想我可以去掉优化器和函数,但这感觉很困惑。在下面的示例代码中,我使用 GPyOpt 示例中的函数,但必须输入实际值。

from GPyOpt.methods import BayesianOptimization
import numpy as np


# --- Define your problem
def f(x):
    return (6*x-2)**2*np.sin(12*x-4)


def g(x):
    print(f(x))
    return float(input("Result?"))


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

myBopt = BayesianOptimization(f=g,
                              domain=domain,
                              X=np.array([[0.745], [0.766], [0], [1], [0.5]]),
                              Y=np.array([[f(0.745)], [f(0.766)], [f(0)], [f(1)], [f(0.5)]]),
                              acquisition_type='LCB')
myBopt.run_optimization(max_iter=15, eps=0.001)

所以,我的问题是,使用 GPyOpt 进行物理实验的预期方式是什么?

最佳答案

一些事情。

首先,设置f=None。请注意,如果您碰巧使用它,这会产生副作用,导致 BO 对象忽略 maximize=True。

其次,您不需要使用run_optimization,而是需要suggest_next_locations。前者运行整个优化,而后者仅运行一次迭代。此方法返回一个带有参数组合(“位置”)的向量,以便在实验室中进行测试。

第三,您需要就批量大小做出一些决定。您获得的组合/位置的数量由用于初始化 BayesianOptimization 对象的 batch_size 参数控制。采集函数的选择在这里很重要,因为有些函数与 batch_size 1 密切相关。如果您需要更大的批处理,那么您需要阅读文档以获取适合您情况的组合(例如 acquisition_type=EIevaluator_type=local_penalization

第四,您需要在迭代之间显式管理数据。至少有两种方法可以解决这个问题。一种是腌制 BO 对象并向其添加更多数据。我认为更优雅的另一种选择是每次创建一个完全新鲜的 BO 对象。实例化它时,您将新数据连接到旧数据,然后对整个数据集运行一次迭代(再次使用 suggest_next_locations)。如果您使用 BO 在计算机中优化函数,这可能有点疯狂,但考虑到化学步骤可能有多慢,这可能是最干净的(并且更容易进行中途修正。)

希望这有帮助!

关于python - GPyOpt - 如何进行物理实验?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59052871/

相关文章:

python - Hadoop Map中最高/最低温度的python mapreduce示例

python - 在 Tails 上使用 python 包管理器时 Torsocks 连接被拒绝错误

python - 如何合并两个 GPy 模型的图?

python - GpyOpt 忽略约束。指定它们的正确方法是什么?

Python/GPyOpt : Optimizing only one argument

python - Pandas 中的不规则、不连续的周期

python - 在 Python 中生成唯一排列

python - Tensorflow prefetch_to_device

python - 使用 GpyOpt 时如何添加限制条件?