13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
-
+
|
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
use super::msg::{ResultMsg, WorkerMsg};
use crate::problem::{
FirstOrderProblem, PrimalExtender, ResultSender, SubgradientExtender, UpdateSendError, UpdateSender, UpdateState,
FirstOrderProblem, ResultSender, SubgradientExtender, UpdateSendError, UpdateSender, UpdateState,
};
use crate::{DVector, Minorant, Real};
use log::{debug, error, info};
use mpi::environment::Universe;
use mpi::topology::{Communicator, SystemCommunicator};
use mpi::Rank;
|
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
|
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
|
-
-
-
-
-
-
+
+
-
-
-
|
bounds,
Box::new(move |fidx: usize, m: &mut P::Minorant| {
sgext.extend_subgradient(fidx, m).map_err(Error::OracleError)
}),
)
}
fn add_subproblems(
&self,
nnew: usize,
pext: Box<dyn PrimalExtender<P::Minorant, P::Err>>,
) -> Result<(), UpdateSendError> {
self.0.add_subproblems(
fn add_subproblems(&self, minorants: Vec<P::Minorant>) -> Result<(), UpdateSendError> {
self.0.add_subproblems(minorants)
nnew,
Box::new(move |m: &mut P::Minorant| pext.extend_primal(m).map_err(Error::OracleError)),
)
}
fn error(&self, err: P::Err) -> Result<(), UpdateSendError> {
self.0.error(Error::OracleError(err))
}
}
|