0
votes

I'm trying to solve a non-linear constraint optimization problem using MatLab's fmincon function with "Interior point" algorithm. The problem is volume minimization under the stress constraint. This solver has been successfully applied on my problem, but it doesn't give me a good result, the volume should drop more. The optimizer finds a local minumum, but optimization stops after 3 iterations showing a massage:

 Local minimum possible. Constraints satisfied. 
fmincon stopped because the size of the current step is less than the selected value of the step size tolerance and constraints are  satisfied to within the selected value of the constraint tolerance. 

Options that use:

The options that I use: options=optimset('Algorithm','interior-point','Display','iter-detailed',...

 'MaxFunEvals',10000,'TolX',1e-20,'TolFun',1e-20,','DiffMinChange',1e-1);

I dont know how to change OptimalityTolerance not to be 1e-6 with the algorithm "Interior point". I tried with:

opts = optimoptions('fmincon','OptimalityTolerance',1e-12);

but if i run this the OptimalityTolerance stays at 1e-6 and my results are no different no matter what I use before.

enter image description here

1
I think you need to change the DiffMinChange to a smaller value. - Mansoor
I tried that as well, to set DiffMinChange to be 10^-2, then after one iteration volume drops from 1.385567e+07 do 2 e+05 10^-2 and then radius goes to zero. - LejlaS
How does optimset relates to this question? And please include an MVC example in your question. - saastn

1 Answers

0
votes

You are using local optimization (no matter whether you use the interior-point or the trust-region-reflective version of fmincon). Usually, there is no need to increase MaxFunEvals or the tolerances unless your cost function is badly scaled, i.e. it takes very small values (< 1e-4), than you reach the tolerances earlier (but you can just scale the parameters to improve convergence).

Anyway, the option you are looking for is OptimalityTolerance. But I would recommend to check out a global optimization algorithm like patternsearch (ga is very slow and a little bit exaggerated.)

You can check out the default options by typing

opts = optimoptions('fmincon')

opts =

fmincon options:

Options used by current Algorithm ('interior-point'):
(Other available algorithms: 'active-set', 'sqp', 'sqp-legacy', 'trust-region-reflective')

Set properties:
No options set.

Default properties:
Algorithm: 'interior-point'
CheckGradients: 0
ConstraintTolerance: 1.0000e-06
Display: 'final'
FiniteDifferenceStepSize: 'sqrt(eps)'
FiniteDifferenceType: 'forward'
HessianApproximation: 'bfgs'
HessianFcn: []
HessianMultiplyFcn: []
HonorBounds: 1
MaxFunctionEvaluations: 3000
MaxIterations: 1000
ObjectiveLimit: -1.0000e+20
OptimalityTolerance: 1.0000e-06
OutputFcn: []
PlotFcn: []
ScaleProblem: 0
SpecifyConstraintGradient: 0
SpecifyObjectiveGradient: 0
StepTolerance: 1.0000e-10
SubproblemAlgorithm: 'factorization'
TypicalX: 'ones(numberOfVariables,1)'
UseParallel: 0