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
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 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
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>,
    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
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(
                self.master.build_with_state(s).map_err(Error::BuildMaster)?,
            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(())
    }