使用 Scipy 包优化函数

Optimizing a function using Scipy Package

我得到了一个 objective 函数,我需要在 Python 中使用 非线性 优化器来最大化它。我知道许多优化器被写成最小化,但我在设置参数时遇到了问题,因为我有一些 inequality 约束要满足。我使用 Wolfram Alpha 优化器检查了我的 objective 函数的根并且有 x = 1.86121 和 y = 1.07457.

我还计划检查这些根并使用拉格朗日方法找到拉格朗日乘数。有谁知道如何使用 Scipy.optimize 设置此优化问题。我相信我必须将约束设置为单独的函数,但我不知道如何设置。谢谢。

Objective 函数: 最大化 5-x^2-xy-3y^2

受约束: x>=0, y>=0, and xy >=2

import numpy as np
import scipy.optimize

def obj(x):
    return -1 * (5 - x[0]**2 - x[0]*x[1] - 3*x[1]**2)

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

result = scipy.optimize.minimize(fun = obj, x0 = [1, 1], bounds=[(0, np.inf), (0, np.inf)], constraints={"fun": cons, "type": "ineq"})

检查