python - Scipy.optimize Differential_evolution 索引错误 : tuple index out of range

标签 python numpy scipy linear-algebra differential-evolution

我有一个平滑函数 f(x) = sin(x/5) * exp(x/10) + 5 * exp(-x/2) 任务是找到非平滑函数 h 的最小值(x) = int(f(x)) 在 1 到 30 的区间内。换句话说,f (x) 的每个值都转换为 int 类型,并且该函数仅接受整数值。

我使用两种方法从 scipy.optimize 中找到最小值:minimum 和 Differential_evolution。最小化给出了-5的结果,而difference_evolution给出了索引错误:元组索引超出范围 问题是为什么以及出了什么问题?

这是代码:

import math
import numpy as np
from scipy.optimize import minimize
from scipy.optimize import differential_evolution
from scipy.linalg import *
import matplotlib.pyplot as plt

def f(x):
    return np.sin(x / 5.0) * np.exp(x / 10.0) + 5 * np.exp((-x / 2.0))

def h(x):
    return f(x).astype(int)

x = np.arange(1, 30)
y = h(x)

plt.plot(x, y)
plt.show()


#res = minimize(h, 30, method='BFGS')
#print res

res = differential_evolution(h, [1, 30])
print res

最佳答案

这是因为 difference_evolutionbounds 参数需要一个 (min, max) 对序列。鉴于您只有一对 x 的最小值和最大值,您可以执行以下操作:

res = differential_evolution(h, [(1, 30)])
print res

这将导致:

     fun: -11.0
 message: 'Optimization terminated successfully.'
    nfev: 92
     nit: 5
 success: True
       x: array([ 25.76747524])

更多信息请查看官方文档:https://docs.scipy.org/doc/scipy-0.19.0/reference/generated/scipy.optimize.differential_evolution.html

我希望这会有所帮助。

关于python - Scipy.optimize Differential_evolution 索引错误 : tuple index out of range,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44347216/

相关文章:

python - Numpy 索引 : Return the rest

python - 过滤 numpy 数组时 0::和 0: 有什么区别?

python - 连续二维切片上的 Numpy 向量化函数

python - Numpy 神秘地停止工作

python - 从 numpy 结构化数组(数组中的元组列表)中删除列?

python - 多索引上的重新索引会更改结构并删除索引名称

python - 让 PostgreSQL percent_rank 和 scipy.stats.percentileofscore 结果匹配

python - 如何将 xml 文档拆分为特定标记之间的字符串?

python - 插入后如何更新 Mongo 文档?

python - 使用Python按下按键时在功能之间切换