This class contains the methods for handling optimization problems, defining their input parameters (if any), decision variables,
objetive function and constraints, choosing and calling a solver to obtain a numerical solution, and retrieving that solution.