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

使用fmfn/BayesianOptimization优化多维向量遇ValueError求助

解决BayesianOptimization处理多维向量参数的报错问题

问题场景

使用BayesianOptimization包优化10维向量输入的目标函数时,运行代码触发维度不匹配的ValueError,原代码如下:

import numpy as np
def black_box_function(vector):
    s = 0
    for i in range (0, 10):
        s = s + vector[i]/(vector[i+1] + vector[i+2])
    return s

from bayes_opt import BayesianOptimization
pbounds = {'vector': (-2*np.ones(10), 2*np.ones(10))}

optimizer = BayesianOptimization(
    f=black_box_function,
    pbounds=pbounds,
    verbose=2, 
    random_state=1,
)

optimizer.maximize(
    init_points=2,
    n_iter=3,
)

报错信息:

ValueError: Output size (1,) is not compatible with broadcast dimensions of inputs (10,).

报错原因

BayesianOptimization的pbounds参数要求每个键对应单个参数的上下界,而非直接传入多维数组。原代码将整个10维向量作为一个参数定义,导致内部采样逻辑无法处理维度匹配,触发报错。

另外,原目标函数存在索引越界问题:循环range(0,10)中,当i=8时访问vector[10],i=9时访问vector[11],超出10维向量的索引范围(0-9),需要同步修正。

解决方案

  1. 将10维向量拆分为10个独立参数,每个参数的上下界设为(-2,2)
  2. 修改目标函数,接受这10个独立参数并组合为向量进行计算
  3. 修正目标函数中的索引越界问题

修正后的代码

import numpy as np
from bayes_opt import BayesianOptimization

# 修改目标函数:接受10个独立参数,或用*args兼容任意数量参数
def black_box_function(*args):
    vector = np.array(args)
    s = 0
    # 修正循环范围,避免索引越界(i最大为7,确保i+2<=9)
    for i in range(len(vector)-2):
        denominator = vector[i+1] + vector[i+2]
        # 避免除以0的情况
        if denominator != 0:
            s += vector[i]/denominator
    return s

# 定义10个独立参数的上下界
pbounds = {f'x{i}': (-2, 2) for i in range(10)}

optimizer = BayesianOptimization(
    f=black_box_function,
    pbounds=pbounds,
    verbose=2, 
    random_state=1,
)

optimizer.maximize(
    init_points=2,
    n_iter=3,
)

说明

  • 用*args接收参数可以灵活适配任意维度的参数输入,无需修改函数定义
  • 添加了除以0的判断,避免运行时出现ZeroDivisionError
  • 修正后的循环范围len(vector)-2保证索引不会越界,兼容不同长度的向量输入

内容的提问来源于stack exchange,提问作者Larry Baynes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 18:20:13