How does MatLab verifies feasibility of initial guess in global optimization problems with respect to linear constraints?
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
I have just found out that the point "result" which is a solution of optimization problem with ONLY linear inequality constraints and bounds
[result,fval, exitFlag, output, population, scores] = ...
ga(@(x) Gibbs(x), ...
5, ...
[1, 2, 2, 1, 1; 2, 3, 0, 1, 0; 0, 0, 3, 0, 1], [nU; nC; nN], ...
[], [], [0, 0, 0, 0, 0], ...
min([nU, nU/2, nU/2, nU, nU; nC/2, nC/3, nN/3, nC, nN]), ...
[], options_ga);
is not a feasible initial point for the "patternsearch" called for the same problem just to refine the solution
[result, fval] = patternsearch(@(x) Gibbs(x), ...
result, ...
[1, 2, 2, 1, 1; 2, 3, 0, 1, 0; 0, 0, 3, 0, 1], [nU; nC; nN], ...
[], [], [0, 0, 0, 0, 0], ...
min([nU, nU/2, nU/2, nU, nU; nC/2, nC/3, nN/3, nC, nN]), ...
[], options_ps);
where every "...Tolerance" (if applicable) in every "options_..." is set to 1E-12
'ConstraintTolerance', 1E-12, ...
'FunctionTolerance', 1E-12, ...
'MeshTolerance', 1E-12, ...
'StepTolerance', 1E-12, ...
After some debugging I found out that the feasibility of initial point in either patternsearch and ga is determined by the internal function
isTrialFeasible.m
which uses the "CostraintTolerance" value as tol and is called on the line 128 of the internal function
preProcessLinearConstr.m
According to the script (line 58 of isTrialFeasible)
if haveIneqs
constrViolation = Aineq*X-bineq;
maxconstraint = max(max(constrViolation(~isinf(constrViolation))),maxconstraint);
feasible = feasible && maxconstraint <= tol;
end
if the trial is not feasible then the "linprog" function is called
if ~feasible
% Find a feasible initial point using linprog dual-simplex algorithm
[XOUT,~,success] = linprog([],Aineq,Bineq,Aeq,Beq,LB,UB,[], ...
optimoptions('linprog', 'Algorithm', 'dual-simplex', 'Display', 'off'));
....
with some options where XOUT is the feasible initial point. But the feasibility according to this script is not controlled by any outer Tolerances, provided during the ga or patternsearch call. The linprog default value, 1E-6, is used instead.
Is their any way how I could attribute the feasibility of initial guess to the tolerance I provide during call?
0 comentarios
Respuestas (0)
Ver también
Categorías
Más información sobre Direct Search en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!