使用方法SLSQP在scipy.minimize中出现问题

时间:2014-07-23 13:47:26

标签: 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.minimize(loss, [0., 0.], method='SLSQP', constraints=cons, args = (r,))

    return x_opt

对于上下文,考虑到一些回报r,将其视为来自一组投资额x的损失的最小化。唯一的限制是没有资金的创造,所以投资的总和应该是0。

所以,如果我设置r = [0.,0.1],一切都很好,函数会返回一个错误,因为没有最小值 - 你可以将x [0]设置为负无穷大,将x [1]设置为加号无穷大,以最大化您的利润。但是如果我设置r = [0.,0.001],那么就没有错误,函数总是返回初始值(这里是[0.,0。])。

这似乎是一个来自舍入错误的错误,但我很惊讶,因为这种方法被广泛使用......我想念一些东西吗?

我正在使用python3和scipy 0.14。

编辑: 我确信这是现在的错误,因为我试图用cvxopt模块解决这个优化问题,它返回正确的解决方案。我已经报告了这个错误,我正在等待scipy家伙的确认,然后再回答这个问题。如果这不是正确的做法,有人告诉我,我是新人。

0 个答案:

没有答案