rckstr_scntst
Aug22-11, 03:58 PM
I am minimizing a scalar function of 5 variables which looks something like:
f(x1,...x5) = -x1*x2, if g(x1,...x5)=1
infinity, if g(x1,...x5)=0
where g is can only take on two values, and cannot be expressed in closed-form.
Because of the essential discontinuities in the domain, I figured I better try a derivative-free method like Nelder-Mead Simplex. I tried using the MATLAB fminsearch() implementation, and it is not performing too well. While it does converge (even for very low tolerances) it is not reaching the local minima. The function changes very little, if at all, between iterations. See the end of the post for a history of a typical optimization (first 30 iterations)
Does anybody have any idea how to tune the simplex method for this problem, or suggest an alternative optimizer?
Many thanks,
s.
Iteration Func-count min f(x) Procedure
0 1 -0.00157673
1 6 -0.00165556 initial simplex
2 7 -0.00165556 reflect
3 9 -0.00171195 expand
4 11 -0.00172117 reflect
5 13 -0.00188736 expand
6 14 -0.00188736 reflect
7 15 -0.00188736 reflect
8 17 -0.00194533 reflect
9 19 -0.00194533 contract inside
10 21 -0.00214186 expand
11 22 -0.00214186 reflect
12 24 -0.00215877 reflect
13 26 -0.00242805 expand
14 28 -0.00272589 expand
15 30 -0.00272589 contract inside
16 31 -0.00272589 reflect
17 33 -0.00272589 contract inside
18 35 -0.00272589 contract inside
19 37 -0.00274379 reflect
20 39 -0.00274379 contract inside
21 41 -0.00274379 contract inside
22 43 -0.00274379 contract inside
23 45 -0.00274379 contract inside
24 47 -0.00274379 contract inside
25 49 -0.00274379 contract inside
26 51 -0.00274379 contract inside
27 53 -0.00274379 contract inside
28 55 -0.00274379 contract inside
29 56 -0.00274379 reflect
30 58 -0.00278432 reflect
31 60 -0.00286262 reflect
32 62 -0.00286262 contract inside
33 63 -0.00286262 reflect
34 65 -0.00292913 expand
35 67 -0.00292913 contract inside
36 69 -0.00305228 expand
37 70 -0.00305228 reflect
38 72 -0.00327878 expand
39 73 -0.00327878 reflect
40 75 -0.00356812 expand
f(x1,...x5) = -x1*x2, if g(x1,...x5)=1
infinity, if g(x1,...x5)=0
where g is can only take on two values, and cannot be expressed in closed-form.
Because of the essential discontinuities in the domain, I figured I better try a derivative-free method like Nelder-Mead Simplex. I tried using the MATLAB fminsearch() implementation, and it is not performing too well. While it does converge (even for very low tolerances) it is not reaching the local minima. The function changes very little, if at all, between iterations. See the end of the post for a history of a typical optimization (first 30 iterations)
Does anybody have any idea how to tune the simplex method for this problem, or suggest an alternative optimizer?
Many thanks,
s.
Iteration Func-count min f(x) Procedure
0 1 -0.00157673
1 6 -0.00165556 initial simplex
2 7 -0.00165556 reflect
3 9 -0.00171195 expand
4 11 -0.00172117 reflect
5 13 -0.00188736 expand
6 14 -0.00188736 reflect
7 15 -0.00188736 reflect
8 17 -0.00194533 reflect
9 19 -0.00194533 contract inside
10 21 -0.00214186 expand
11 22 -0.00214186 reflect
12 24 -0.00215877 reflect
13 26 -0.00242805 expand
14 28 -0.00272589 expand
15 30 -0.00272589 contract inside
16 31 -0.00272589 reflect
17 33 -0.00272589 contract inside
18 35 -0.00272589 contract inside
19 37 -0.00274379 reflect
20 39 -0.00274379 contract inside
21 41 -0.00274379 contract inside
22 43 -0.00274379 contract inside
23 45 -0.00274379 contract inside
24 47 -0.00274379 contract inside
25 49 -0.00274379 contract inside
26 51 -0.00274379 contract inside
27 53 -0.00274379 contract inside
28 55 -0.00274379 contract inside
29 56 -0.00274379 reflect
30 58 -0.00278432 reflect
31 60 -0.00286262 reflect
32 62 -0.00286262 contract inside
33 63 -0.00286262 reflect
34 65 -0.00292913 expand
35 67 -0.00292913 contract inside
36 69 -0.00305228 expand
37 70 -0.00305228 reflect
38 72 -0.00327878 expand
39 73 -0.00327878 reflect
40 75 -0.00356812 expand