python - 使用 Scipy 包优化函数
问题描述
我得到了一个目标函数,我需要在 Python 中使用非线性优化器来最大化它。我知道许多优化器都是以最小化形式编写的,但是鉴于我需要满足一些不等式约束,因此我在设置参数时遇到了麻烦。我使用 Wolfram Alpha 优化器检查了我的目标函数的根,并且 x = 1.86121 和 y = 1.07457。
我还计划检查这些根并使用拉格朗日方法找到拉格朗日乘数。有谁知道如何使用Scipy.optimize
. 我相信我必须将约束设置为单独的函数,但我不知道如何。谢谢你。
目标函数: 最大化 5-x^2-xy-3y^2
受约束: x>=0、y>=0 和 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"})
检查这个。
推荐阅读
- c# - Zedgraph X 轴平移或缩放 C#
- reactjs - 为什么值不与 value 属性绑定?
- hashicorp-vault - 用户可以在从 github 创建令牌时指定 Vault 的策略吗?
- python - Python plt在for循环中绘图 - 不工作
- android - 如何仅从收件箱中接收来自android中特定号码的短信
- c++ - 使用 std::sort 对矩阵进行排序
- java - 了解 cpu 和 mem SIGAR 输出
- asp.net-mvc - MVC 完整日历错误
- java - Java 8 流从 List 中的 Map 读取值
- javascript - 用cheerio解析节点js