如何使用 scipy.optimize.minimize 仅获取我的变量的值

计算科学 优化 Python
2021-12-13 02:48:44

当我使用 scipy.optimize.minimize 最小化一个函数时,我得到了一大堆东西,但我只想得到我的变量的值,这是我的代码:

import scipy.optimize as so

def func_AC(r):
    return 1/((r**2)+1)

guess = 0

minimo = so.minimize(func_AC,guess)

print(minimo)

这就是我得到的:

  fun: array([1.])
  hess_inv: array([[1]])
  jac: array([-1.49011612e-08])
  message: 'Optimization terminated successfully.'
  nfev: 3
  nit: 0
  njev: 1
  status: 0
  success: True
    x: array([0.])

只有这个价值观我会很高兴

success: True
    x: array([0.])

我也需要我的函数有界限,但我不知道怎么做,谁能帮我有相同的代码,但有界限 r>=1?提前致谢

1个回答

对于第一个问题,值存储在minimo对象的成员中。明确地

print(minimo.success)
print(minimo.x)

关于如何设置界限的问题的第二部分,

import scipy.optimize as so
from scipy.optimize import Bounds
import numpy as np

my_bounds = Bounds(0,np.inf)

def func_AC(r):
    return 1/((r[0]**2)+1)

guess = [2]

minimo = so.minimize(func_AC,guess,bounds = my_bounds)

print(minimo.success)
print(minimo.x)

这里隐藏的技巧是 scipy optimize 喜欢将不同的变量表示为列表的元素。那就是r不再是单个变量,而是变量列表。