MCPcopy Create free account
hub / github.com/cvanaret/Uno / check_first_order_convergence

Method check_first_order_convergence

uno/optimization/OptimizationProblem.cpp:242–259  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

240 }
241
242 SolutionStatus OptimizationProblem::check_first_order_convergence(const Iterate& current_iterate, double primal_tolerance,
243 double dual_tolerance) const {
244 // evaluate termination conditions based on optimality conditions
245 const bool stationarity = (current_iterate.residuals.stationarity / current_iterate.residuals.stationarity_scaling <= dual_tolerance);
246 const bool primal_feasibility = (current_iterate.primal_feasibility <= primal_tolerance);
247 const bool complementarity = (current_iterate.residuals.complementarity / current_iterate.residuals.complementarity_scaling <= dual_tolerance);
248
249 DEBUG << "\nTermination criteria for primal-dual tolerances = (" << primal_tolerance << ", " << dual_tolerance << "):\n";
250 DEBUG << "Stationarity: " << std::boolalpha << stationarity << '\n';
251 DEBUG << "Primal feasibility: " << std::boolalpha << primal_feasibility << '\n';
252 DEBUG << "Complementarity: " << std::boolalpha << complementarity << '\n';
253
254 if (stationarity && primal_feasibility && 0. < current_iterate.objective_multiplier && complementarity) {
255 // feasible regular stationary point
256 return SolutionStatus::FEASIBLE_KKT_POINT;
257 }
258 return SolutionStatus::NOT_OPTIMAL;
259 }
260
261 // infeasibility measure: constraint violation
262 void OptimizationProblem::set_infeasibility_measure(Iterate& iterate, Evaluations& evaluations, Norm norm) const {

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected