You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为skopt中的简单多元方程优化正确定义搜索空间?

如何为skopt中的简单多元方程优化正确定义搜索空间?

嘿,我来帮你捋清楚这个问题~ 你遇到的报错其实是skopt的参数传递逻辑和你写的函数不匹配导致的:skopt里的优化器(比如你用的dummy_minimize)会把搜索空间里的所有维度参数打包成一个单一元组传给目标函数,而不是像你预期的那样分两个独立参数传入,所以才会报缺少some_y的错误。

给你两种简单的解决办法,选哪种都可以:

方法一:修改目标函数,适配元组参数

直接把函数改成接收一个元组参数,然后解构出你需要的some_x和some_y,原来的搜索空间BOUNDS定义是完全没问题的:

import skopt

def black_box_function(params):
    some_x, some_y = params
    return -some_x + 2 - (some_y - 1) ** 2 + 1

BOUNDS = [(0, 100.0), (0, 100.0)]

result = skopt.dummy_minimize(func=black_box_function, dimensions=BOUNDS)
# 可以打印最优参数看看
print("最优参数:", result.x)

方法二:用Lambda包装原函数,不用修改函数本身

如果你不想改动原来的black_box_function,可以用lambda函数做个“适配器”,把skopt传的元组解开成两个参数传给原函数:

import skopt

def black_box_function(some_x, some_y):
    return -some_x + 2 - (some_y - 1) ** 2 + 1

BOUNDS = [(0, 100.0), (0, 100.0)]

# 用lambda把元组参数解开
result = skopt.dummy_minimize(func=lambda params: black_box_function(*params), dimensions=BOUNDS)
print("最优参数:", result.x)

两种方法都能正常运行,而且最终的最优参数应该会接近(100, 1)——毕竟你的函数里,要让返回值最小,some_x越大越好(因为前面是负号),some_y越接近1越好(因为-(some_y-1)²的最小值是0)。

备注:内容来源于stack exchange,提问作者WhiskeyHammer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 14:40:30