【发布时间】:2014-11-18 05:24:31
【问题描述】:
我是 scipy.optimize 模块的新手,需要帮助尝试在公式 V 上使用最小化函数,该公式适用于矩阵并具有 2 个约束,但我不确定我是否正确处理函数的形成或其中之一约束。
M 是一个 NxN 矩阵,但例如我将给出 4x4 矩阵
[[ 0.00123727 0.00011974 0.00067403 0.00060845]
[ 0.00011974 0.00736665 0.00165674 0.00053581]
[ 0.00067403 0.00165674 0.00281547 0.00129646]
[ 0.00060845 0.00053581 0.00129646 0.00153195]]
X 是一个 1xN 矩阵,其中所有数字都是正数,并且必须加起来为 1,这就是我要解决的问题
约束:
X[0] + X[1] + X[2] + … X[n] = 1
E = X[0]*R[0] + X[1]*R[1] + X[2]*R[2] + … X[n]*R[n] (E is user input)
我试图最小化的功能是:
V = X[0]**2 * M[0][0] + 2*X[0]*X[1]*M[0][1] + 2*X[0]*X[2]*M[0][2] + 2 * X[0] * X[3] * M[0][3] * X[1]**2 * M[1][1] + ….etc
我目前的代码是
cons = ({'type': 'eq', 'fun': lambda x: sum(w) - 1})
args = n, m, w
answer = scipy.optimize.minimize(func(*args), w, args=(), method='SLSQP',
bounds=((0, None), (0, None)),
constraints=cons)
def func(n, m, x):
row = 0
col = 0
formula = []
while row < n:
while col < n:
if col == row:
item = (x[row]**2) * m[row][col]
formula.append(item)
col += 1
else:
item2 = 2 * x[row] * x[col] * m[row][col]
formula.append(item2)
col += 1
row += 1
col = 0
return sum(formula)
我难以理解的是如何表达第二个约束。我也不确定我是否正确处理了公式的创建。非常感谢任何帮助
【问题讨论】:
-
您的任务看起来像一个二次规划问题 (en.wikipedia.org/wiki/Quadratic_programming)。 CVXopt 在这里可能有用 (cvxopt.org/userguide/coneprog.html#quadratic-programming)
标签: python optimization numpy matrix scipy