use crate::{constraints, SolverError};
pub struct Problem<'a, GradientType, ConstraintType, CostType>
where
GradientType: Fn(&[f64], &mut [f64]) -> Result<(), SolverError>,
CostType: Fn(&[f64], &mut f64) -> Result<(), SolverError>,
ConstraintType: constraints::Constraint,
{
pub(crate) constraints: &'a ConstraintType,
pub(crate) gradf: GradientType,
pub(crate) cost: CostType,
}
impl<'a, GradientType, ConstraintType, CostType> Problem<'a, GradientType, ConstraintType, CostType>
where
GradientType: Fn(&[f64], &mut [f64]) -> Result<(), SolverError>,
CostType: Fn(&[f64], &mut f64) -> Result<(), SolverError>,
ConstraintType: constraints::Constraint,
{
pub fn new(
constraints: &'a ConstraintType,
cost_gradient: GradientType,
cost: CostType,
) -> Problem<'a, GradientType, ConstraintType, CostType> {
Problem {
constraints,
gradf: cost_gradient,
cost,
}
}
}