python - scipy.optimize 非线性约束

标签 python numpy optimization scipy

我有非线性约束的非线性函数,我想优化它。我不知道如何使用 scipy.optimize 定义非线性约束。到目前为止,我的代码如下所示:

from math import cos, atan
import numpy as np
from scipy.optimize import minimize
import sympy as sy

def f(x):
    return 0.1*x*y

def ineq_constraint(x):
    x**2 + y**2 - (5+2.2*sy.cos(10*sy.atan(x/y)))**2
    return x,y

con = {'type': 'ineq', 'fun': ineq_constraint}
minimize(f,x0,method='SLSQP',constraints=con)

最佳答案

代码有一些小问题;这是修改后的版本(下面的解释):

from math import cos, atan
import numpy as np
from scipy.optimize import minimize


def f(x):
    return 0.1 * x[0] * x[1]

def ineq_constraint(x):
    return x[0]**2 + x[1]**2 - (5. + 2.2 * cos(10 * atan(x[0] / x[1])))**2


con = {'type': 'ineq', 'fun': ineq_constraint}
x0 = [1, 1]
res = minimize(f, x0, method='SLSQP', constraints=con)

res 如下所示:

     fun: 0.37229877398896682
     jac: array([ 0.16372866,  0.22738743,  0.        ])
 message: 'Optimization terminated successfully.'
    nfev: 96
     nit: 22
    njev: 22
  status: 0
 success: True
       x: array([ 2.27385837,  1.63729975])

一个问题是 xy 没有在你的函数中定义,我用 x[0] 代替了它们x[1],分别;也没有必要使用 sympy 来定义你的约束,你想返回实际的约束而不是 xy

关于python - scipy.optimize 非线性约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43309877/

相关文章:

Javascript:通过浏览器显示每个功能所需的时间

python - Python-删除黑色轮廓并在JPEG图像上覆盖PNG图像

python - 填充 Numpy 数组的有效方法

python - 将数组归一化为标准正态分布

python - Sympy:如何计算矩阵相对于向量场的李导数

c - 是否可以针对特定代码段禁用 gcc/g++ 优化?

python - 通过 SCAPY 使用特定私钥解密 SSL/TLS

python - 使用 scrapy 遍历嵌套标签中文本中的列表和 strip 标签

python - 通过两列的并集重新索引 pandas 数据框

php - 使用 PHP 的 echo 编写 HTML 与编写纯 HTML 会导致性能上的差异吗?