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

shgo最小化失败原因探究:线性约束下无可行解问题

问题

尝试在scipy.optimize.shgo中应用线性约束时,程序无法找到可行解。以下是最简复现代码:

from scipy.optimize import shgo, rosen

# 定义线性不等式约束:x[i+1] ≥ x[i] + 0.1
constraints = [{'type': 'ineq', 'fun': lambda x, i=i: x[i+1] - x[i] - 0.1} for i in range(2)]

# 变量边界
bounds = [(0, 20)]*3

# 调用shgo(默认采样方法)
result = shgo(rosen, bounds, constraints=constraints)

print("Optimal solution:", result.x)
print("Optimal value:", result.fun)

已知存在满足约束的解(例如rosen((0.1, 0.21, 0.32))返回13.046181),但运行上述代码后输出:

Optimal solution: None
Optimal value: None
解决方法

修改shgo的sampling_method参数为'halton'或'sobol'即可正常运行:

result = shgo(rosen, bounds, sampling_method='halton', constraints=constraints)

运行结果:

Optimal solution: [1.08960341 1.18960341 1.41515624]
Optimal value: 0.04453888080946618
原因说明

默认的'simplicial'采样方法通过单纯形网格生成初始样本点,这种采样方式在处理线性不等式约束划定的狭窄可行域时(本例中可行域要求x[1] ≥ x[0]+0.1、x[2] ≥ x[1]+0.1,是原边界空间的一个小角落),很难生成落在可行域内的初始点,导致后续无法找到可行解。

而'halton'和'sobol'属于低差异序列采样,能更均匀地覆盖整个搜索空间,更容易命中约束定义的可行区域,因此可以顺利完成优化。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 03:52:27