Passing arguments to scipy optimize.minimize objective function (getting error by number of arguments)

I'm trying to use scipy's optimizer.minimize function, but I can't figure out exactly how to pass arguments to an object function. I have some code that should work fine for me, but gives me an error on the number of arguments.

result = minimize(compute_cost, x0, args=(parameter), method='COBYLA',constraints=cons, options={'maxiter':10000,'rhobeg':20})

      

Here is the function signature for the objective function: def compute_cost(x,parameter)

parameter

is a dict that has 51 key value pairs.

This gives the following error:

capi_return is NULL Call-back cb_calcfc_in__cobyla__user__routines failed. Traceback (most recent call last): File "C:\..\resource_optimizer.py", line 138, in <module> result = minimize(compute_cost, x0, args=(parameter), method='COBYLA',constraints=cons, options={'maxiter':10000,'rhobeg':20}) File "C:\Python27\lib\site-packages\scipy\optimize\_minimize.py", line 432, in minimize return _minimize_cobyla(fun, x0, args, constraints, **options) File "C:\Python27\lib\site-packages\scipy\optimize\cobyla.py", line 246, in _minimize_cobyla dinfo=info) File "C:\Python27\lib\site-packages\scipy\optimize\cobyla.py", line 238, in calcfc f = fun(x, *args) TypeError: compute_cost() takes exactly 2 arguments (52 given)

Can someone help me figure this out.

+3


source to share


1 answer


Change args=(parameter)

to args=(parameter,)

, so args

is a tuple containing one element.



args=(parameter)

is equivalent args=parameter

. When you do this, each element parameter

is passed as a separate argument to your target function.

+8


source







All Articles