Results and statuses

Numerical result

Both solve modes return their final objective value from solve() and write numerical solutions into the original CVXPY variables:

value = problem.solve()

print(problem.status)
print(problem.value)
print(x.value)
print(y.value)

problem.value is the original modeled objective evaluated at the final variables. It excludes the proximal term and, for mode="penalty", the slack penalty. When the status ends in _with_slack, this value is evaluated at a point whose final total slack exceeds slack_tol.

Direct-mode statuses

Status

Meaning

converged

The gap between the final x- and y-subproblem objective values satisfies the combined abs_tol and rel_tol stopping test.

converged_inaccurate

The solve reached max_iter before that objective gap satisfied the combined stopping test.

Penalty-mode statuses

Status

Meaning

converged

The slack-penalized subproblem objective gap satisfies the combined absolute-and-relative stopping test and total slack is at or below slack_tol.

converged_with_slack

The slack-penalized subproblem objective gap satisfies the combined stopping test, but the final total slack is above slack_tol.

converged_inaccurate

The iteration limit was reached before the slack-penalized objective gap met its combined tolerance, but total slack is at or below slack_tol.

converged_inaccurate_with_slack

The iteration limit was reached before the slack-penalized objective gap met its combined tolerance, and total slack remains above slack_tol.

A penalty-mode status ending in _with_slack also emits a warning with the final total slack and slack_tol. Increasing nu, improving the initial values, or using another convex solver can reduce the slack.

See Solving for the ACS algorithm and the interpretation of its objective-gap stopping test.