In [110]: brute(func, [slice(0, 10, 0.1)], finish=lambda func, x0, args=(): fmin(func, x0, args, full_output=True, maxiter=4))
Warning: Maximum number of iterations has been exceeded.
Out[110]: array([ 5.2325])
为了进行比较,以下是maxiter=100时的结果:
In [111]: brute(func, [slice(0, 10, 0.1)], finish=lambda func, x0, args=(): fmin(func, x0, args, full_output=True, maxiter=100))
Optimization terminated successfully.
Current function value: -0.986810
Iterations: 13
Function evaluations: 26
Out[111]: array([ 5.2235498])
当我们在lambda表达式中对fmin的调用中不使用maxiter:
In [112]: brute(func, [slice(0, 10, 0.1)], finish=lambda func, x0, args=(): fmin(func, x0, args, full_output=True))
Optimization terminated successfully.
Current function value: -0.986810
Iterations: 13
Function evaluations: 26
Out[112]: array([ 5.2235498])
正如预期的那样,该结果与不重写finish相同:
In [113]: brute(func, [slice(0, 10, 0.1)])
Out[113]: array([ 5.2235498])
^{} 没有向最小化函数传递其他参数的选项,因此要覆盖默认行为,必须创建一个
fmin
的包装,并在包装中设置maxiter
参数。包装器然后作为finish
参数传递给brute
。在例如,假设我们希望
在间隔[0,10]上,我们希望将
fmin
的最大迭代次数限制为4。下面是如何做到这一点(在ipython会话中)。在首先,进口:
^{pr2}$定义目标函数:
调用}。(与lambda表达式不同,您可以定义一个单独的函数来执行相同的操作。)
brute
,为finish
参数使用lambda表达式。lambda表达式只将其参数传递给fmin
,以及full_output=True
和{为了进行比较,以下是
maxiter=100
时的结果:当我们在lambda表达式中对
fmin
的调用中不使用maxiter
:正如预期的那样,该结果与不重写
finish
相同:相关问题 更多 >
编程相关推荐