[SciPy-User] how to use properly the function fmin () to scipy.optimize
Warren Weckesser
warren.weckesser@enthought....
Tue Mar 13 12:50:52 CDT 2012
On Tue, Mar 13, 2012 at 12:35 PM, Warren Weckesser <
warren.weckesser@enthought.com> wrote:
>
>
> On Tue, Mar 13, 2012 at 8:02 AM, javi <fralosal@ei.upv.es> wrote:
>
>> Hello, I have been trying to find the right way to use the function fmin
>> () to
>> use downhill simplex.
>>
>> Mainly I have a problem with that is that the algorithm converges to good
>> effect, ie as a solution with a value next to zero.
>>
>> To test the performance of the algorithm I used the following example:
>>
>> def minimize (x):
>>
>> min = x [0] + x [1] + x [2] + x [3]
>> return min
>>
>> In which given a vector x would want to obtain the values of its elements
>> that
>> when added give the minimum possible value.
>>
>> To do this use the following function call:
>>
>> solution = fmin (minimize, x0 = array ([1, 2, 3, 4]), args = "1", xtol =
>> 0.21, =
>> 0.21 ftol, full_output = 1)
>>
>> print "value parameters", solution [0], "\ n"
>>
>> and I get the following results:
>>
>> Optimization terminated successfully.
>> Current function value: 10.000000
>> Iterations: 1
>> Function evaluations: 5
>>
>> value of the parameters: [1. 2. 3. 4.]
>>
>> As you can see the solution is VERY BAD, and I understand that due to
>> large
>> values of ftol and xtol that I gave it converges very quickly and gives a
>> small value.
>>
>> Now, for that is a better result, ie, better than the 10 found understand
>> that I
>> must decrease and ftol xtol values, but in doing so I get:
>>
>>
>> "Warning: Maximum number of function evaluations exceeded Has Been."
>>
>> Where I understand the algorithm before converging has made excessive
>> calls to
>> the function "minimize".
>>
>> Could you tell me what the correct use of the parameters ftol and xtol
>> to find
>> a good minimum next to 0?. Sshould generally be used in subsequent cases
>> of ftol
>> and xtol values?, They differ?.
>>
>> A greeting and thank you very much.
>>
>>
>
> It looks like you want to solve a *constrained* minimization problem, in
> which all the components of x remain positive. The function fmin() is for
> unconstrained optimization, and your objective function has no
> (unconstrained) minimum.
>
> You can try fmin_cobyla or fmin_slsqp.
>
Or fmin_tnc or fmin_l_bfgs. See the docstrings of these functions for more
information and examples.
Warren
> Here's a short demonstration:
>
> -----
> from scipy.optimize import fmin_slsqp, fmin_cobyla
>
>
> def objective(x):
> """The objective function to be minized."""
> return x.sum()
>
> def all_positive_constr(x):
> """Component constraint function for fmin_slsqp."""
> return x
>
>
> # The following are the component constraint functions for fmin_cobyla.
>
> def x0_positive(x):
> return x[0]
>
> def x1_positive(x):
> return x[1]
>
> def x2_positive(x):
> return x[2]
>
> def x3_positive(x):
> return x[3]
>
>
> if __name__ == "__main__":
>
> print "Using fmin_slsqp"
> result = fmin_slsqp(objective, [1,2,3,4],
> f_ieqcons=all_positive_constr)
> print result
> print
>
> print "Using fmin_cobyla"
> result = fmin_cobyla(objective, [1,2,3,4], [x0_positive, x1_positive,
> x2_positive, x3_positive])
> print result
> print
> -----
>
> Warren
>
> _______________________________________________
>> SciPy-User mailing list
>> SciPy-User@scipy.org
>> http://mail.scipy.org/mailman/listinfo/scipy-user
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.scipy.org/pipermail/scipy-user/attachments/20120313/0279ffcc/attachment-0001.html
More information about the SciPy-User
mailing list