RsBundle  Diff

Differences From Artifact [0670463a87]:

  • File src/solver/sync.rs — part of check-in [162ca7268e] at 2022-06-13 17:39:08 on branch solver-state — sync: remove `new_with_state` method. Use `set_state` instead. (user: fifr size: 31922)

To Artifact [23897ed221]:

  • File src/solver/sync.rs — part of check-in [c4e5d199b3] at 2022-06-13 18:13:18 on branch solver-state — masterprocess: save current center index in state (user: fifr size: 32021)

34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
use threadpool::ThreadPool;

use crate::{DVector, Minorant, Real};

use super::channels::{
    ChannelResultSender, ChannelUpdateSender, ClientReceiver, ClientSender, EvalResult, Message, Update,
};
use super::masterprocess::{MasterError, MasterProcess, MasterResponse, Response};
use crate::master::{Builder as MasterBuilder, MasterProblem};
use crate::problem::{FirstOrderProblem, UpdateState};
use crate::terminator::{StandardTerminatable, StandardTerminator, Terminator};
use crate::weighter::{HKWeightable, HKWeighter, Weighter};

/// The default iteration limit.
pub const DEFAULT_ITERATION_LIMIT: usize = 10_000;







|







34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
use threadpool::ThreadPool;

use crate::{DVector, Minorant, Real};

use super::channels::{
    ChannelResultSender, ChannelUpdateSender, ClientReceiver, ClientSender, EvalResult, Message, Update,
};
use super::masterprocess::{MasterError, MasterProcess, MasterProcessState, MasterResponse, Response};
use crate::master::{Builder as MasterBuilder, MasterProblem};
use crate::problem::{FirstOrderProblem, UpdateState};
use crate::terminator::{StandardTerminatable, StandardTerminator, Terminator};
use crate::weighter::{HKWeightable, HKWeighter, Weighter};

/// The default iteration limit.
pub const DEFAULT_ITERATION_LIMIT: usize = 10_000;
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[derive(Clone, Debug)]
pub struct SyncSolverState<M> {
    data: SolverData,
    cnt_descent: usize,
    cnt_null: usize,
    cnt_evals: usize,
    master_state: Option<M>,
}

impl<P, T, W, M> Solver<P, T, W, M>
where
    P: FirstOrderProblem,
    T: Terminator<SolverData> + Default,
    W: Weighter<SolverData> + Default,







|







899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[derive(Clone, Debug)]
pub struct SyncSolverState<M> {
    data: SolverData,
    cnt_descent: usize,
    cnt_null: usize,
    cnt_evals: usize,
    master_state: Option<MasterProcessState<M>>,
}

impl<P, T, W, M> Solver<P, T, W, M>
where
    P: FirstOrderProblem,
    T: Terminator<SolverData> + Default,
    W: Weighter<SolverData> + Default,
924
925
926
927
928
929
930
931
932
933
934

935
936
937
938
939
940
941
        self.cnt_evals = state.cnt_evals;

        let (tx, rx) = channel();
        self.client_tx = Some(tx.clone());
        self.client_rx = Some(rx);

        self.master_proc = if let Some(s) = state.master_state {
            Some(MasterProcess::start(
                self.master.build_with_state(s).map_err(Error::BuildMaster)?,
                tx,
                &mut self.threadpool,

            ))
        } else {
            None
        };

        Ok(())
    }







|
|


>







924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
        self.cnt_evals = state.cnt_evals;

        let (tx, rx) = channel();
        self.client_tx = Some(tx.clone());
        self.client_rx = Some(rx);

        self.master_proc = if let Some(s) = state.master_state {
            Some(MasterProcess::start_with_center_idx(
                self.master.build_with_state(s.master_state).map_err(Error::BuildMaster)?,
                tx,
                &mut self.threadpool,
                s.center_idx,
            ))
        } else {
            None
        };

        Ok(())
    }