title: Integer step size in scipy optimize minimize
body: <p>I have a computer vision algorithm I want to tune up using <a href="http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html">scipy.optimize.minimize</a>. Right now I only want to tune up two parameters but the number of parameters might eventually grow so I would like to use a technique that can do high-dimensional gradient searches. The Nelder-Mead implementation in SciPy seemed like a good fit. </p>
  
  <p>I got the code all set up but it seems that the minimize function really wants to use floating point values with a step size that is less than one.The current set of parameters are both integers and one has a step size of one and the other has a step size of two (i.e. the value must be odd, if it isn't the thing I am trying to optimize will convert it to an odd number). Roughly one parameter is a window size in pixels and the other parameter is a threshold (a value from 0-255). </p>
  
  <p>For what it is worth I am using a fresh build of scipy from the git repo. Does anyone know how to tell scipy to use a specific step size for each parameter? Is there some way I can roll my own gradient function? Is there a scipy flag that could help me out? I am aware that this could be done with a simple parameter sweep, but I would eventually like to apply this code to much larger sets of parameters. </p>
  
  <p>The code itself is dead simple:</p>
  
  <pre><code>import numpy as np
  from scipy.optimize import minimize
  from ScannerUtil import straightenImg 
  import bson
  
  def doSingleIteration(parameters):
      # do some machine vision magic
      # return the difference between my value and the truth value
  
  parameters = np.array([11,10])
  res = minimize( doSingleIteration, parameters, method='Nelder-Mead',options={'xtol': 1e-2, 'disp': True,'ftol':1.0,}) #not sure if these params do anything
  print "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
  print res
  </code></pre>
  
  <p>This is what my output looks like. As you can see we are repeating a lot of runs and not getting anywhere in the minimization. </p>
  
  <pre><code>*+++++++++++++++++++++++++++++++++++++++++
  [ 11.  10.]  &lt;-- Output from scipy minimize
  {'block_size': 11, 'degree': 10} &lt;-- input to my algorithm rounded and made int
  +++++++++++++++++++++++++++++++++++++++++
  120  &lt;-- output of the function I am trying to minimize
  +++++++++++++++++++++++++++++++++++++++++
  [ 11.55  10.  ]
  {'block_size': 11, 'degree': 10}
  +++++++++++++++++++++++++++++++++++++++++
  120
  +++++++++++++++++++++++++++++++++++++++++
  [ 11.   10.5]
  {'block_size': 11, 'degree': 10}
  +++++++++++++++++++++++++++++++++++++++++
  120
  +++++++++++++++++++++++++++++++++++++++++
  [ 11.55   9.5 ]
  {'block_size': 11, 'degree': 9}
  +++++++++++++++++++++++++++++++++++++++++
  120
  +++++++++++++++++++++++++++++++++++++++++
  [ 11.1375  10.25  ]
  {'block_size': 11, 'degree': 10}
  +++++++++++++++++++++++++++++++++++++++++
  120
  +++++++++++++++++++++++++++++++++++++++++
  [ 11.275  10.   ]
  {'block_size': 11, 'degree': 10}
  +++++++++++++++++++++++++++++++++++++++++
  120
  +++++++++++++++++++++++++++++++++++++++++
  [ 11.    10.25]
  {'block_size': 11, 'degree': 10}
  +++++++++++++++++++++++++++++++++++++++++
  120
  +++++++++++++++++++++++++++++++++++++++++
  [ 11.275   9.75 ]
  {'block_size': 11, 'degree': 9}
  +++++++++++++++++++++++++++++++++++++++++
  120
  +++++++++++++++++++++++++++++++++++++++++
  ~~~
  SNIP 
  ~~~
  +++++++++++++++++++++++++++++++++++++++++
  [ 11.         10.0078125]
  {'block_size': 11, 'degree': 10}
  +++++++++++++++++++++++++++++++++++++++++
  120
  Optimization terminated successfully.
           Current function value: 120.000000
           Iterations: 7
           Function evaluations: 27
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    status: 0
      nfev: 27
   success: True
       fun: 120.0
         x: array([ 11.,  10.])
   message: 'Optimization terminated successfully.'
       nit: 7*
  </code></pre>