I'm using Matlab's fmincon to solve a constrained nonlinear optimization for varying sets of parameters in the objective function. I have 2 parameters and have 400 unique combination of these 2 parameters. Within a particular combination of parameters I use a range of start points (100 start points). Trying to do rough simulation of multi-start functionality using optimization toolbox.
For a given combination of parameters in objective function, majority of the start points would solve the optimization problem and exit with a positive exitflag like 1 and in some cases 2. But for very small number of cases, the program would finish with an exitflag of -3 which corresponds to objective function at current iteration went below options.ObjectiveLimit and maximum constraint violation was less than options.TolCon.. In such cases, the output message mentions about problem might be unbounded. One example message is below
Problem appears unbounded.
fmincon stopped because the objective function value is less than the default value of the objective function limit and constraints are satisfied to within the default value of the constraint tolerance.
Stopping criteria details:
fmincon stopped because the objective function value, -5.374294e+40, is less than options.ObjectiveLimit = -1.000000e+20, and the relative maximum constraint violation, 0.000000e+00, is less than options.TolCon = 1.000000e-06.
Optimization Metric Options objective value = -5.37e+40 ObjectiveLimit = -1e+20 (default) relative max(constraint violation) = 0.00e+00 TolCon = 1e-06 (default)
Here are my questions: -
a) If the problem was able to find local minima for certain start points (as indicated by exitflag 1) within a particular combination of parameters, why does few other start points mention about problem being "unbounded" (exitflag -3).
b) When the exitflag is -3, the objective function value returned by fmincon does NOT match the explicit calculation of function value at the x point returned by fmincon. Matlab link on Current Point and Function value mentions "The function value is the value of the objective function at the current point." which does not state restriction on exitflags. On the other hand, Output Arguments states this for x "The solution found by the optimization function. If exitflag > 0, then x is a solution; otherwise, x is the value of the optimization routine when it terminated prematurely." possibly implying that if exitflag is negative then The function value is NOT the value of the objective function at the current point. I'm not sure whether it is inconsistent documentation or a mis-interpretation on my part?
Lastly, will draw attention to the statement Exit flags are not infallible guides to the quality of a solution. Many other factors, such as tolerance settings, can affect whether a solution is satisfactory to you. You are responsible for deciding whether a solver returns a satisfactory answer. Sometimes a negative exit flag does not correspond to a "bad" solution. Similarly, sometimes a positive exit flag does not correspond to a "good" solution.. I can understand +ve exitflags not being necessarily good in all scenarios, but why would a negative exitflag not necessarily mean a "bad" solution?