首页 > 解决方案 > 使用 Scipy 包优化函数

问题描述

我得到了一个目标函数,我需要在 Python 中使用非线性优化器来最大化它。我知道许多优化器都是以最小化形式编写的,但是鉴于我需要满足一些不等式约束,因此我在设置参数时遇到了麻烦。我使用 Wolfram Alpha 优化器检查了我的目标函数的根,并且 x = 1.86121 和 y = 1.07457。

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

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

受约束: x>=0、y>=0 和 xy >=2

标签: pythonoptimizationscipyminimizationscipy-optimize

解决方案


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"})

检查这个


推荐阅读