@@ -55,6 +55,8 @@ def __init__(self, model, bc_solver, **kwargs):
55
55
:reltol: relative stopping tolerance (1.0e-5)
56
56
:abstol: absolute stopping tolerance (1.0e-12)
57
57
:maxiter: maximum number of iterations (max(1000, 10n))
58
+ :maxupdate: maximum number of penalty or multiplier
59
+ updates (100)
58
60
:ny: apply Nocedal/Yuan linesearch (False)
59
61
:nbk: max number of backtracking steps in Nocedal/Yuan
60
62
linesearch (5)
@@ -69,7 +71,9 @@ def __init__(self, model, bc_solver, **kwargs):
69
71
:Exit codes:
70
72
:opt: Optimal solution found
71
73
:iter: Maximum iteration reached
72
- :stal: Not making sufficient progress
74
+ :feas: Feasible, but not optimal, solution found
75
+ :fail: Cannot make further progress from current point
76
+ :stal: Problem converged to an infeasible point
73
77
:time: Time limit exceeded
74
78
"""
75
79
self .model = AugmentedLagrangian (model , ** kwargs )
@@ -106,6 +110,8 @@ def __init__(self, model, bc_solver, **kwargs):
106
110
self .maxiter = kwargs .get ("maxiter" ,
107
111
100 * self .model .model .original_n )
108
112
113
+ self .maxupdate = kwargs .get ("maxupdate" ,100 )
114
+
109
115
# Maximum run time
110
116
self .maxtime = kwargs .get ("maxtime" , 1800. )
111
117
@@ -401,7 +407,7 @@ def solve(self, **kwargs):
401
407
except UserExitRequest :
402
408
self .status = "usr"
403
409
404
- exitIter = self .niter_total > self .maxiter
410
+ exitIter = self .niter_total > self .maxiter or self . iter > self . maxupdate
405
411
406
412
exitTime = (cputime () - tick ) > self .maxtime
407
413
0 commit comments