RsBundle  Check-in [6ca92bc9a1]

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:parallel: add subproblem index to `SubgradientExtender`
Downloads: Tarball | ZIP archive
Timelines: family | ancestors | descendants | both | problem-update
Files: files | file ages | folders
SHA1: 6ca92bc9a1ca5dd53077052ed9b00e11cd22e52b
User & Date: fifr 2019-07-25 14:07:47.132
Context
2019-07-25
14:08
parallel: reexport problem update types check-in: 6d924d1242 user: fifr tags: problem-update
14:07
parallel: add subproblem index to `SubgradientExtender` check-in: 6ca92bc9a1 user: fifr tags: problem-update
13:54
Merge async check-in: 5f2a3800b8 user: fifr tags: problem-update
Changes
Unified Diff Ignore Whitespace Patch
Changes to src/master/primalmaster.rs.
53
54
55
56
57
58
59
60
61
62

63
64
65

66
67
68
69
70
71
72
        sgext: Box<SubgradientExtender<P, E>>,
    ) -> Result<(), M::Err>
    where
        E: Into<Box<dyn std::error::Error + Send + Sync>>,
    {
        let primals = &self.primals;
        let mut sgext = sgext;
        self.master.add_vars(&vars, &mut |_fidx, minidx, vars| {
            sgext(
                vars,

                primals[minidx]
                    .as_ref()
                    .expect("Extension for non-existing primal requested"),

            )
            .map_err(|err| err.into())
        })
    }

    pub fn add_minorant(&mut self, fidx: usize, minorant: Minorant, primal: P) -> Result<(), M::Err> {
        let index = self.master.add_minorant(fidx, minorant)?;







|

<
>



>







53
54
55
56
57
58
59
60
61

62
63
64
65
66
67
68
69
70
71
72
73
        sgext: Box<SubgradientExtender<P, E>>,
    ) -> Result<(), M::Err>
    where
        E: Into<Box<dyn std::error::Error + Send + Sync>>,
    {
        let primals = &self.primals;
        let mut sgext = sgext;
        self.master.add_vars(&vars, &mut |fidx, minidx, vars| {
            sgext(

                fidx,
                primals[minidx]
                    .as_ref()
                    .expect("Extension for non-existing primal requested"),
                vars,
            )
            .map_err(|err| err.into())
        })
    }

    pub fn add_minorant(&mut self, fidx: usize, minorant: Minorant, primal: P) -> Result<(), M::Err> {
        let index = self.master.add_minorant(fidx, minorant)?;
Changes to src/parallel/problem.rs.
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
        bounds: Vec<(Real, Real)>,
        sgext: Box<SubgradientExtender<P, E>>,
    },
}

/// The subgradient extender is a callback used to update existing minorants
/// given their associated primal data.
pub type SubgradientExtender<P, E> = FnMut(&[usize], &P) -> Result<DVector, E> + Send;

/// This trait provides information available in the
/// [`FirstOrderProblem::update`] method.
pub trait UpdateState<P> {
    /// Whether the last step was a descent step.
    fn was_descent(&self) -> bool;








|







55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
        bounds: Vec<(Real, Real)>,
        sgext: Box<SubgradientExtender<P, E>>,
    },
}

/// The subgradient extender is a callback used to update existing minorants
/// given their associated primal data.
pub type SubgradientExtender<P, E> = FnMut(usize, &P, &[usize]) -> Result<DVector, E> + Send;

/// This trait provides information available in the
/// [`FirstOrderProblem::update`] method.
pub trait UpdateState<P> {
    /// Whether the last step was a descent step.
    fn was_descent(&self) -> bool;