问题描述
为了熟悉全局优化方法,特别是 scipy.optimize v1.3.0
中的 shgo
优化器,我尝试最小化方差 向量
与 x = [x1,...,xN]
的 var(x)0 在约束下
x
有一个给定的平均值:
In order to get familiar with global optimization methods and in particular with the shgo
optimizer from scipy.optimize v1.3.0
I have tried to minimize the variance var(x)
of a vector x = [x1,...,xN]
with 0 <= xi <= 1
under the constraint that x
has a given average value:
import numpy as np
from scipy.optimize import shgo
# Constraint
avg = 0.5 # Given average value of x
cons = {'type': 'eq', 'fun': lambda x: np.mean(x)-avg}
# Minimize the variance of x under the given constraint
res = shgo(lambda x: np.var(x), bounds=6*[(0, 1)], constraints=cons)
shgo
方法在这个问题上失败了:
The shgo
method fails on this problem:
>>> res
fun: 0.0
message: 'Failed to find a feasible minimiser point. Lowest sampling point = 0.0'
nfev: 65
nit: 2
nlfev: 0
nlhev: 0
nljev: 0
success: False
x: array([0., 0., 0., 0., 0., 0.])
正确的解决方案是均匀分布 x = [0.5, 0.5, 0.5, 0.5, 0.5, 0.5]
并且可以通过使用局部优化器 minimize
轻松找到来自 scipy.optimize
的代码>:
The correct solution would be the uniform distribution x = [0.5, 0.5, 0.5, 0.5, 0.5, 0.5]
and it can be easily found by using the local optimizer minimize
from scipy.optimize
:
from scipy.optimize import minimize
from numpy.random import random
x0 = random(6) # Random start vector
res2 = minimize(lambda x: np.var(x), x0, bounds=6*[(0, 1)], constraints=cons)
minimize
方法为任意起始向量生成正确的结果:
The minimize
method yields the correct result for arbitrary start vectors:
>>> res2.success
True
>>> res2.x
array([0.5, 0.5, 0.5, 0.5, 0.5, 0.5])
我的问题是:为什么 shgo
在这个相对简单的任务上失败了?是我弄错了还是 shgo
根本无法解决这个问题?任何帮助将不胜感激.
My question is: Why shgo
fails on this relatively simple task? Did I made a mistake or is shgo
simply not usable for this problem? Any help would be greatly appreciated.
推荐答案
AStefan-Endres 在 github 上的 scipy 项目页面中提供了对这个问题的非常详细的答案.在此再次感谢 Stefan-Endres!
A very detailed answer to this question has been provided by Stefan-Endres in the scipy project page on github. At this point many thanks to Stefan-Endres again!
这篇关于scipy 的 shgo 优化器未能最小化方差的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!