首页 > 解决方案 > cvxpy 正在解决产生空答案

问题描述

我正在使用以下代码:

import sys, numpy as np
import cvxpy as cvx

if __name__ == '__main__':
    sims = np.random.randint(20, 30, size=500)
    center = 30
    n = [500, 1]

    # minimize     p'*log(p)
    # subject to
    #              sum(p) = 1
    #              sum(p'*a) = target1

    A = np.mat(np.vstack([np.ones(n[0]), sims]))
    b = np.mat([1.0, center]).T

    x = cvx.Variable(n)
    obj = cvx.Maximize(cvx.sum(cvx.entr(x)))
    constraints = [A @ x == b]
    prob = cvx.Problem(obj, constraints)
    prob.solve()
    weights = np.array(x.value)

这里x.value是空的。我不确定如何修改我的上述设置。我正在尝试将 的平均值重新调整为此处sims由变量定义的不同值center

标签: pythonpython-3.8cvxpyconvex-optimization

解决方案


首先以调试方式:尝试使用它来查看问题所在:

prob.solve(verbose=True)

并检查是否找到了解决方案:

print(prob.status)

在您的情况下,问题是不可行的,您试图解决的线性问题 - 并不总是有解决方案。您可以引入一个“eps”变量来定义您的问题所需的准确度,或者使用线性代数库预先测试是否存在某些解决方案。


推荐阅读