soco 1.0.1

Algorithms for Smoothed Online Convex Optimization
Documentation
#[cfg(test)]
mod static_integral {
    use crate::factories::penalize_zero;
    use crate::init;
    use crate::utils::upper_bounds;
    use num::Float;
    use soco::algorithms::offline::multi_dimensional::static_integral::static_integral;
    use soco::algorithms::offline::{
        OfflineAlgorithm, OfflineOptions, OfflineResult,
    };
    use soco::config::IntegralConfig;
    use soco::distance::manhattan_scaled;
    use soco::problem::{Problem, SmoothedConvexOptimization};
    use soco::verifiers::VerifiableProblem;

    #[test]
    fn _1() {
        init();

        let p = SmoothedConvexOptimization {
            d: 5,
            t_end: 100,
            bounds: vec![(0, 2), (0, 1), (0, 5), (0, 3), (0, 2)],
            switching_cost: manhattan_scaled(vec![1.5, 1., 4., 2., 1.7]),
            hitting_cost: penalize_zero(),
        };
        p.verify().unwrap();

        let result = static_integral
            .solve_with_default_options(p.clone(), OfflineOptions::default())
            .unwrap()
            .xs();
        result.verify(p.t_end, &upper_bounds(&p.bounds)).unwrap();

        assert!(p.objective_function(&result).unwrap().cost.is_finite());
        assert!(
            p.total_movement(&result, false).unwrap()
                == p.movement(
                    IntegralConfig::repeat(0, p.d),
                    result[0].clone(),
                    false
                )
        );
    }
}