Python scipy中的问题。使用SLSQP方法最小化

Python scipy中的问题。使用SLSQP方法最小化,python,scipy,mathematical-optimization,Python,Scipy,Mathematical Optimization,我对SLSQP方法有一些问题。我希望这不是什么愚蠢的事情。因此,最小代码如下所示: import numpy as np import scipy.optimize as scopt def loss(x,r): return -np.dot(x,r) def opt(r): def cons(x): return sum(x) cons = [{'type': 'eq', 'fun': cons}] x_opt = scopt.m

我对SLSQP方法有一些问题。我希望这不是什么愚蠢的事情。因此,最小代码如下所示:

import numpy as np
import scipy.optimize as scopt

def loss(x,r):
        return -np.dot(x,r)

def opt(r):
    def cons(x):
        return sum(x)

    cons = [{'type': 'eq', 'fun': cons}]

    x_opt = scopt.minimize(loss, [0., 0.], method='SLSQP', constraints=cons, args = (r,))

    return x_opt
在上下文中,将其视为一组投资量x的损失最小化,给定一些回报r。唯一的限制是不存在货币创造,因此投资总额应为0

因此,如果我设置r=[0,0.1],一切正常,函数返回一个错误,因为没有最小值——你可以将x[0]设置为负无穷大,将x[1]设置为正无穷大,以使利润最大化。但是如果我改为设置r=[0,0.001],那么就没有错误,函数总是返回初始值([0,0.])

这似乎是一个来自舍入错误的错误,但我很惊讶,因为这种方法被广泛使用。。。我错过什么了吗

我正在使用python3和scipy0.14

编辑:
我确信这是一个bug,因为我已经尝试用cvxopt模块解决这个优化问题,它返回正确的解决方案。我已经报告了这个bug,在回答这个问题之前,我正在等待scipy的确认。如果这不是正确的方法,有人告诉我,我是新来的。

在Python3上,这种方法也有问题。我有一个在Python2上完美运行的程序,但在Python3上生成了许多
nan
值。我不知道为什么会有什么不同。你在这方面有什么进展吗?嗨,很明显,原始fortran代码中的公差标准有问题,我有时间的时候必须看一下。因为我的问题应该独立于python版本(即使我没有测试),所以您的问题可能是另一个问题。