add convex optimization