[SciPy-user] Using SciPy/NumPy optimization

lechtlr lechtlr at yahoo.com
Tue Mar 13 14:46:44 EDT 2007


Hi there:

I am looking for a non-linear, constrained optimization tool, and thought fmin_tnc would do the job that I wanted to do.
As a starter, I tried the attached script posted here recently. However, I get the following error when I run this script: 
"TypeError: only length-1 arrays can be converted to Python scalars" 
Can any one help me to figure out what I was doing wrong ?  

Thanks,
Lex

>>> 

Traceback (most recent call last):
 
 File "C:\Python24\lib\site-packages\scipy\optimize\tnc.py", line 200, in fmin_tnc
    fmin, ftol, rescale)
  File "C:\Python24\lib\site-packages\scipy\optimize\tnc.py", line 165, in func_and_grad
    g = approx_fprime(x, func, epsilon, *args)
  File "C:\Python24\lib\site-packages\scipy\optimize\optimize.py", line 555, in approx_fprime
    grad[k] = (apply(f,(xk+ei,)+args) - f0)/epsilon
TypeError: only
 length-1 arrays can be converted to Python scalars
>>> 

from numpy import *
from scipy.optimize import fmin_tnc

class LossFunction(object):
    def __init__(self, x, y):
      self.x = x
      self.y = y

    def __call__(self, abc):
      """ A function suitable for passing to the fmin() minimizers.
      """
      a, b, c = abc
      y = a*(1.0 + b*c*self.x) ** (-1.0/b)
      dy = self.y - y
      return dy*dy

x = array([1502.0, 1513.7,1517.5,1545.5,1578.9,1587.3,1600.4,1636.1,1682.9,1697.6,1813.4,1907.5])
y = array([0.28,0.22,0.26,0.18,0.12,0.13,0.09,0.07,0.06,0.05,0.01,0.01])

lf = LossFunction(x, y)
abc0 = [10., 2.5, 0.0]  
retcode, nfeval, abc_optimal = fmin_tnc(lf, abc0,  approx_grad=True, bounds=None, epsilon=1e-008)
  
 
---------------------------------
Don't pick lemons.
See all the new 2007 cars at Yahoo! Autos.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.scipy.org/pipermail/scipy-user/attachments/20070313/c76f2558/attachment.html>


More information about the SciPy-User mailing list