首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scipy.optimize differential_evolution索引错误:元组索引超出范围

Scipy.optimize differential_evolution索引错误:元组索引超出范围
EN

Stack Overflow用户
提问于 2017-06-03 18:23:51
回答 1查看 1.7K关注 0票数 2

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

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

以下是代码:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-03 19:08:41

这是因为bounds参数differential_evolution需要(min,max)对序列。如果x只有一对min和max值,则可以执行以下操作:

代码语言:javascript
复制
res = differential_evolution(h, [(1, 30)])
print res

这将导致:

代码语言:javascript
复制
     fun: -11.0
 message: 'Optimization terminated successfully.'
    nfev: 92
     nit: 5
 success: True
       x: array([ 25.76747524])

有关更多信息,请参见正式文档:evolution.html

我希望这能帮到你。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44347216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档