我没有问题scipy.optimize.fmin为一个变量的函数工作,但不知怎的,我无法弄清楚如何让它适用于2个变量。下面是我尝试(和失败)最大化的函数的简单示例。我做错了什么?
from scipy.optimize import fmin
test2 = lambda x,y: x-x**2 + y - y**2
guess = [ 0.5,0.5 ] #just some guess
print fmin( -test2, guess, args=(x,y) )
错误讯息:
print fmin( -test2, guess, args=(x,y) )
TypeError: bad operand type for unary -: 'function'
更新:谢谢你的回答!结束以下也有效:
谢谢,这很有用。结束以下代码也起作用:
来自scipy.optimize import fmin
test2 = lambda x: -(x[0]-x[0]**2 + x[1] - x[1]**2 )
guess = [ 0.5,0.5 ] #just some guess
print fmin( test2, guess )
Optimization terminated successfully.
Current function value: -0.500000
Iterations: 18
Function evaluations: 37
[ 0.5 0.5]
正如您可能已经猜到的那样,我仍然在学习基础知识,并且总是找不到明显的错误消息。
答案 0 :(得分:2)
错误消息非常明确:您无法否定函数。在函数定义中移动否定。同时,您应该更改函数,使其适用于单个参数,即NumPy数组:
>>> def test2(x):
... return -np.sum(x - x**2)
...
>>> test2(np.array([.5, .5]))
-0.5
然后在没有args
的情况下将其最小化:
>>> fmin(test2, np.array([.5, .5]))
Optimization terminated successfully.
Current function value: -0.500000
Iterations: 18
Function evaluations: 37
array([ 0.5, 0.5])