首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GPyOpt -如何运行物理实验?

GPyOpt -如何运行物理实验?
EN

Stack Overflow用户
提问于 2019-11-26 22:14:37
回答 1查看 790关注 0票数 2

我正在尝试做一些物理实验,以找到一个能优化一些参数的配方。通过物理实验,我的意思是我有一个化学实验台,我把东西混合在一起,然后测量配方的性质。在历史上,我一直使用传统的to,但我需要加快我的时间,以达到理想的配方。我知道单纯形优化,但我对尝试贝叶斯优化很感兴趣。我发现了GPyOpt,它声称(甚至在SO标签描述中)支持物理实验。然而,目前还不清楚如何启用这种行为。

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

代码语言:javascript
复制
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进行物理实验的目的是什么?

EN

回答 1

Stack Overflow用户

发布于 2019-11-28 12:23:04

几件事。

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

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

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

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

希望这能有所帮助!

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59052871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档