[SciPy-user] Using fmin

David Warde-Farley dwf at cs.toronto.edu
Thu Mar 26 00:33:55 EDT 2009


On 25-Mar-09, at 5:48 PM, Moofle wrote:

> I am not sure how to pass alpha, omega, beta into the fmin method.  
> To be honest,
> I am not even completely sure about how that method even works even  
> though I
> have looked at the documentation for hours. In particular, I dont  
> know what the
> args=() is used for!! I can solve this in excel using solver and  
> AMPL, but I
> sure would appreciate a few hints!!


If you're simultaneously optimizing over all of these parameters,  
you'll need to write a function that takes as its first parameter a  
vector argument, then unpack it. Are the u_i's held constant?

"args" is for parameters to your function that don't change from one  
step to the next. They are passed in every time your function is  
called as additional arguments.

For example, if I wanted to minimize (x - p + q)**2, but didn't want  
to hardcode values of p and q into my function, I'd do something like

def foo(x, p, q):
	return (x - p + q)**2

and then call fmin_powell(foo, 20, args=(5,3)). Then every time foo  
gets called it will receive 5 as its argument for p and 3 as it's  
argument for q, with 20 as the starting value.

In [8]: fmin_powell(foo, 20, args=(30,2))
Optimization terminated successfully.
          Current function value: 0.000000
          Iterations: 2
          Function evaluations: 20
Out[8]: array(28.000000000000039)



If, as I suspect, the u's are constant, I'd do something like this:

def myfunction(parameters, u):
	alpha, beta, omega = parameters
	total = 0
	for u_i in u:
		v_i = ... # fill in code for v_i
		total += ...  # fill in code for the i'th term
	return total


Then call

fmin_powell(myfunction, initialguesses, args=(U,))

Where initialguesses is an array containing the initial value for  
alpha, beta, and omega, and U is an array containing the u_i's.

NOTE that args=(U,) creates a tuple of length 1. args=U would treat  
each u_i as a separate argument to the function.

David



More information about the SciPy-User mailing list