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

gk7wooem  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(77)

我有一个优化问题,其中一个约束是:
(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数组作为右边部分的系数矩阵。但在我的例子中,我有1D数组作为系数(可以很容易地转换为对角矩阵)。
我们也有系数在右边的部分,我们不能转换为向量,因为有很多变量的总和是相同的,但值x_i不同,所以我们不能只约束所有x_i值。
你应该怎么做来解决这样的约束问题?

neskvpey

neskvpey1#

我明白了。你可以为系数创建二维数组,为右边部分创建一维数组。

b_eq = np.zeros_like(weights, dtype=np.float64)
b_eq[0] = coefficient

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

字符串
所以基本上你用零填充整个矩阵,右边部分也是,然后你用你的权重和右边部分的一个值填充矩阵的一行。

相关问题