我目前正在尝试优化表单的一个函数:
其中σ和x是优化变量,我们说x是一个向量(形式为[x_1,x_2]),它的系数为X_2 = x_1^2 * A + x_2^2 * B,其中A和B是正矩阵。
我尝试过使用scipy.optimize
,但它不起作用。我确信这与优化变量是标量/矩阵有关。我在下面附上了我的代码:
from scipy.optimize import minimize
import numpy as np
def objective(x):
x_array = x[0]
sigma = x[1]
fun = np.trace((np.kron(np.diag(np.square(x_array)), rho.T)) @ sigma)
return fun
x0 = np.array([np.array([1 ,1]), np.eye(4)])
res = minimize(objective, x0, method = 'Nelder-Mead')
我收到一个错误消息,内容是
ValueError:设置带有序列的数组元素。
如何用Python解决这个优化问题呢?
1条答案
按热度按时间qacovj5a1#
在scipy.optimize中,x向量应该是长度为NUMVAR的一维向量。您传递的是更复杂的内容。您应该执行以下操作:
这不能运行,因为我们没有一个合适的运行最小的例子。下次,请看一下:https://stackoverflow.com/help/minimal-reproducible-example。
请注意,我假设我们有2个变量x和4个变量sigma,并且sigma是一个对角矩阵。如果sigma是一个完整的矩阵,它将有16个变量。不清楚用户的意图。这是一个很好的例子,在这里,首先用清晰的数学来说明问题总是一个好主意。我在代码中没有看到任何A和B矩阵,在数学模型中,所以描述看起来不同步。当然,我们也缺少任何约束。同样,描述和数学不一样,数学和代码不一样。