如何进行物理实验?

2024-04-29 22:59:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一些物理实验,以找到一个优化一些参数的公式。物理实验我的意思是我有一个化学实验台,我把材料混合在一起,然后测量配方的性质。历史上,我一直使用传统的方法,但我需要加快我的时间,以获得理想的公式。我知道单纯形优化,但我有兴趣尝试贝叶斯优化。我找到了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做物理实验的方法是什么?你知道吗


Tags: 方法函数import示例inputreturndomaindef
1条回答
网友
1楼 · 发布于 2024-04-29 22:59:55

一些事情。你知道吗

首先,设置f=None。请注意,如果您碰巧使用这个函数,它会导致BO对象忽略maximize=True。你知道吗

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

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

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

希望这有帮助!你知道吗

相关问题 更多 >