This code contains a minimal example of an optimization problem that can be built and solved using panocpy
, it includes visualization of the iterates.
9x1, x2 = cs.SX.sym(
"x1"), cs.SX.sym(
"x2")
14f_expr = (1 - x1) ** 2 + p * (x2 - x1 ** 2) ** 2
16 (x1 - 0.5) ** 3 - x2 + 1,
23f = cs.Function(
"f", [x, p], [f_expr])
24g = cs.Function(
"g", [x, p], [g_expr])
30prob = pa.generate_and_compile_casadi_problem(f, g)
34prob.C.lowerbound = [-0.25, -0.5]
35prob.C.upperbound = [1.5, 2.5]
36prob.D.lowerbound = [-np.inf, -np.inf]
37prob.D.upperbound = [0, 0]
46 stop_crit=pa.PANOCStopCrit.ApproxKKT,
56def cb(it): iterates.append(np.copy(it.x))
59innersolver.set_progress_callback(cb)
76x0 = np.array([0.1, 1.8])
77y0 = np.zeros((prob.m,))
80x_sol, y_sol, stats =
solver(prob, x0, y0)
84print(f
"Solution: {x_sol}")
85print(f
"Multipliers: {y_sol}")
86print(f
"Cost: {prob.f(x_sol)}")
87from pprint
import pprint
92import matplotlib.pyplot
as plt
93from matplotlib
import patheffects
95cost_function_v = np.vectorize(prob.f, signature=
'(n)->()')
96constraint_g_v = np.vectorize(prob.g, signature=
'(n)->(m)')
98x = np.linspace(-1.5, 1.5, 256)
99y = np.linspace(-0.5, 2.5, 256)
100X, Y = np.meshgrid(x, y)
101XY = np.vstack([[X], [Y]]).T
103plt.figure(figsize=(10, 6))
106plt.contourf(X, Y, Zf, 32)
112fx = [patheffects.withTickedStroke(spacing=7, linewidth=0.8)]
113cgc = plt.contour(X, Y, Zgc, [0], colors=
'black', linewidths=0.8, linestyles=
'-')
114plt.setp(cgc.collections, path_effects=fx)
115cgl = plt.contour(X, Y, Zgl, [0], colors=
'black', linewidths=0.8, linestyles=
'-')
116plt.setp(cgl.collections, path_effects=fx)
117xl = plt.contour(X, Y, -X, [-prob.C.lowerbound[0]], colors=
'black', linewidths=0.8, linestyles=
'-')
118plt.setp(xl.collections, path_effects=fx)
120plt.title(
"PANOC+ALM Rosenbrock example")
125xy = np.array(iterates)
126plt.plot(xy[:,0], xy[:,1],
'r:.', markersize=4, linewidth=1)
127plt.plot(x_sol[0], x_sol[1],
'ro', markersize=10, fillstyle=
'none')
Augmented Lagrangian Method solver.
Second order PANOC solver for ALM.
Parameters for the Augmented Lagrangian solver.
Parameters for the LBFGS and SpecializedLBFGS classes.
Tuning parameters for the second order PANOC algorithm.