Python 中具有多个函数和线性约束的优化线性规划问题查询

问题描述

我对 Python 中的优化有点陌生,尤其是在 Scipy 上。如果我只有一个这样的功能

def prod(x):
    return -x[0] * x[1]

然后我可以很容易地知道如何进行最大化:

linear_constraint = LinearConstraint([[1,1]],[20],[20])
x0 = np.array([15,5])
result = minimize(prod,x0,constraints=linear_constraint)
print(result['x'])

考虑到 x0 * x1 的约束,这基本上是最大化 x0 + x1 = 20。这里的答案是array([10.,10.])

所以现在,我想做一些更复杂的事情,而不仅仅是优化一个功能。假设我想优化多个功能。假设我有大小为 P 的矩阵 n x 3

A     B     C
3     2     7
6     3     4
8     1     5
...

有没有办法优化(最小化)P[i] * x,这里的* 是所有i = 1..n 的点积?总之,我想优化:

3*x[0] + 2*x[1] + 7*x[2]
6*x[0] + 3*x[1] + 4*x[2]
8*x[0] + 1*x[1] + 5*x[2]
...

并且在 x[0] + x[1] + x[2] = 1 的约束下。任何人都知道如何在 Python 上正确实现这一点(顺便说一下,我正在使用 Scipy)?我仍然不确定从哪里开始。提前致谢!

解决方法

对于标准优化工具,目标函数必须返回一个标量。这称为“单一目标”。优化中有一个分支处理多目标(名称如向量优化、多目标优化和多标准优化)。有很多关于这方面的文献。我建议阅读一些书来熟悉相关的概念、想法和算法。