use crate::{constraints, SolverError};
pub struct HomotopyProblem<
ParametricPenaltyFunctionType,
ParametricGradientType,
ConstraintType,
ParametricCostType,
> where
ParametricPenaltyFunctionType: Fn(&[f64], &[f64], &mut [f64]) -> Result<(), SolverError>,
ParametricGradientType: Fn(&[f64], &[f64], &mut [f64]) -> Result<(), SolverError>,
ParametricCostType: Fn(&[f64], &[f64], &mut f64) -> Result<(), SolverError>,
ConstraintType: constraints::Constraint,
{
pub(crate) constraints: ConstraintType,
pub(crate) parametric_gradient: ParametricGradientType,
pub(crate) parametric_cost: ParametricCostType,
pub(crate) penalty_function: ParametricPenaltyFunctionType,
pub(crate) num_penalty_constraints: usize,
}
impl<ParametricPenaltyFunctionType, ParametricGradientType, ConstraintType, ParametricCostType>
HomotopyProblem<
ParametricPenaltyFunctionType,
ParametricGradientType,
ConstraintType,
ParametricCostType,
>
where
ParametricPenaltyFunctionType: Fn(&[f64], &[f64], &mut [f64]) -> Result<(), SolverError>,
ParametricGradientType: Fn(&[f64], &[f64], &mut [f64]) -> Result<(), SolverError>,
ParametricCostType: Fn(&[f64], &[f64], &mut f64) -> Result<(), SolverError>,
ConstraintType: constraints::Constraint,
{
pub fn new(
constraints: ConstraintType,
parametric_gradient: ParametricGradientType,
parametric_cost: ParametricCostType,
penalty_function: ParametricPenaltyFunctionType,
num_penalty_constraints: usize,
) -> HomotopyProblem<
ParametricPenaltyFunctionType,
ParametricGradientType,
ConstraintType,
ParametricCostType,
> {
HomotopyProblem {
constraints,
parametric_gradient,
parametric_cost,
penalty_function,
num_penalty_constraints,
}
}
}