如何在 scipy 中解决具有一维数组约束的线性优化问题?

问题描述 投票:0回答:1

我有一个优化问题,其中约束之一是:
(x_i 的加权和) = 常数。

这是例子:

# Solving: ones @ x -> min
# weights 1D-array (n)
ones = np.ones_like(weights)
coefficient = 1/2 * len(weights) * np.prod(weights)
# constrain I want: weights @ x == coefficient

scipy.optimize.linprog
需要 2D 数组作为等式约束的系数矩阵,并需要 1D 数组作为右侧部分。但就我而言,我有一维数组作为系数(可以很容易地转换为对角矩阵)。

右侧部分也有系数,我们无法将其转换为向量,因为有很多变体,其总和相同但值 x_i 不同,因此我们不能只约束所有 x_i 值。

您应该如何解决此类包含的问题?

python optimization scipy linear-programming
1个回答
0
投票

我明白了。您可以为系数创建 2D 数组,为右侧部分创建 1D 数组,就像这样。

b_eq = np.zeros_like(weights, dtype=np.float64)
b_eq = len(weights)

A_eq_tmp = np.zeros((len(C), len(C)))
A_eq_tmp[0] = 2/weights

所以基本上你用零填充整个矩阵,并且右边的部分也是如此。然后,用您的权重填充矩阵中的一行,并在右侧部分填充一个值。

© www.soinside.com 2019 - 2024. All rights reserved.