/*
* Fatrop - A fast trajectory optimization solver
* Copyright (C) 2022 - 2024 Lander Vanroye, KU Leuven. All rights reserved.
*
* This file is part of Fatrop.
*
* Fatrop is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Fatrop is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Fatrop. If not, see . */
#ifndef OCPINCLUDED
#define OCPINCLUDED
#include "fatrop/blasfeo_wrapper/LinearAlgebraBlasfeo.hpp"
#include "OCPDims.hpp"
#include "fatrop/ocp/OCPKKT.hpp"
#include "fatrop/solver/FatropData.hpp"
#include
#include "fatrop/auxiliary/Common.hpp"
namespace fatrop
{
/** \brief interface class for OCP operations*/
class OCP
{
public:
virtual fatrop_int eval_lag_hess(
OCPKKTMemory *OCP,
double obj_scale,
const FatropVecBF &primal_vars,
const FatropVecBF &lam) = 0;
virtual fatrop_int eval_constr_jac(
OCPKKTMemory *OCP,
const FatropVecBF &primal_vars,
const FatropVecBF &slack_vars) = 0;
virtual fatrop_int eval_contr_viol(
OCPKKTMemory *OCP,
const FatropVecBF &primal_vars,
const FatropVecBF &slack_vars,
FatropVecBF &constraint_violation) = 0;
virtual fatrop_int eval_ineqs(
OCPKKTMemory *OCP,
const FatropVecBF &primal_vars,
FatropVecBF &constraint_violation) = 0;
virtual fatrop_int eval_obj_grad(
OCPKKTMemory *OCP,
double obj_scale,
const FatropVecBF &primal_vars,
FatropVecBF &gradient_x
) = 0;
virtual fatrop_int eval_obj(
OCPKKTMemory *OCP,
double obj_scale,
const FatropVecBF &primal_vars,
double &res) = 0;
virtual fatrop_int integrate_dynamics(
OCPKKTMemory *OCP,
const fatrop_int k,
const FatropVecBF &uk,
const FatropVecBF &xk,
FatropVecBF &xkp1) = 0;
virtual OCPDims get_ocp_dims() const = 0;
virtual fatrop_int get_bounds(
FatropVecBF &lower,
FatropVecBF &upper) const = 0;
virtual fatrop_int get_initial_sol_guess(
FatropVecBF &initial) const = 0;
virtual void reset() = 0;
// virtual fatrop_int GetDefaultParams(
// FatropOptions ¶ms) const = 0;
virtual void set_parameters(const std::vector &stage_params_in, const std::vector &global_params_in) = 0;
virtual void set_initial_sol_guess(const std::shared_ptr &fatropdata, std::vector &initial_u, std::vector &initial_x) = 0;
virtual void get_solution(const std::shared_ptr &fatropdata, std::vector &u, std::vector &x) = 0;
};
} // namespace fatrop
#endif // OCPINCLUDED