如何在给定目标和约束的情况下设置函数的 x?

How to set x of a function given a target and a constraint?

我正在尝试以某种方式复制 excel 求解器在 python 中所做的事情。 我有一组这样的函数:P1 = f1(x), P2= f2(x), Q1= g1(x) and Q2= g2(x)

我试图找到 x 的值,例如 P1+P2 = 某个目标,而 Q1+Q2 是最小值。可以用 scipy 来完成吗?我已经知道如何使用 fsolve 设置 P1+P2 部分,只是不知道是否可以添加 Q1+Q2 限制。有什么想法吗?

正如 joni 所建议的,这可以通过使用 scipy.optimize.minimize 库来实现。您可以定义一个函数 residual 如下:

def residual(x):
    # calculate/define Q1 = g1(x)
    # calculate/define Q2 = g2(x)

    res = Q1 + Q2

    return res

然后可以使用来自 scipy.optimize.minimize:

的约束算法轻松地最小化此函数
import numpy as np
from scipy.optimize import minimize

x0 = 1 # just for example
res = minimize(residual, x0, method='trust-constr', constraints=your_constraints)

必须定义约束 P1+P2 = target 并将其传递给 constraints 参数,如 here 所述。您必须根据您的约束寻找线性或非线性约束。