【问题标题】:Optimizing a function using Scipy Package使用 Scipy 包优化函数
【发布时间】:2020-11-25 21:56:07
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: python optimization scipy minimization scipy-optimize


    【解决方案1】:
    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"})
    

    检查this

    【讨论】:

    • 我看到了你的逻辑,但输出错误。为什么不添加约束 x[0] and x[1] >= 0
    • 这些约束在bound 参数中。目标函数有错别字:应该是- (5 - x[0]**2 - x[0]*x[1] - 3*x[1]**2)
    • 谢谢@FBruzzesi。我修正了错字,现在它可以工作了。
    • @enesdemirag 非常感谢,它成功了!你们都太善良了
    • 最小化 f(x) 并将结果作为负数与最小化 -f(x) 不同。 @eruiz
    猜你喜欢
    • 2019-03-15
    • 2022-01-08
    • 1970-01-01
    • 2016-05-26
    • 1970-01-01
    • 2019-07-20
    • 2016-07-24
    • 2018-03-31
    • 1970-01-01
    相关资源
    最近更新 更多