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

使用Scipy模拟双退火优化带约束序列遇类型错误求解决

解决Scipy模拟双退火(dual_annealing)的边界格式错误

错误原因

scipy.optimize.dual_annealing的bounds参数要求是一维列表/数组,每个元素为(下限, 上限)的数值元组,对应单个优化变量的约束。你当前使用嵌套Bounds对象的结构,无法被内部处理逻辑转换为数值数组,因此触发ufunc 'isinf'类型错误。

解决方案

1. 构造正确的边界列表

将所有优化变量的上下界按顺序展开为一维列表:每个序列元素包含2个变量,重复10次即可得到20个变量的边界集合。

import numpy as np
from scipy.optimize import dual_annealing

self.sequence_length = 10
# 每个序列元素的两个变量上下界,重复10次生成完整边界列表
self.action_space = [(np.pi/12, 5*np.pi/9), (75.0, 200.0)] * self.sequence_length

2. 适配目标函数输入格式

目标函数接收的参数是长度为20的一维数组,需要将其重塑为(10,2)的序列结构,再进行业务计算:

def func(self, x):
    # 将一维输入数组重塑为10个元素的序列,每个元素含2个值
    sequence = x.reshape((self.sequence_length, 2))
    # 替换为你的实际目标计算逻辑,返回需要最小化的数值
    example_objective = np.sum(sequence)  # 示例:计算序列所有元素的和
    return example_objective

3. 调用dual_annealing

使用修正后的边界列表调用函数即可:

result = dual_annealing(self.func, initial_temp=10000, bounds=self.action_space, maxfun=1000)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 21:07:51