764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
|
let aggr = self.minorants[i].split_off(self.params.max_bundle_size-2);
let aggr_sum = aggr.iter().map(|m| m.multiplier).sum();
let (aggr_mins, aggr_primals) : (Vec<_>, Vec<_>) = aggr.into_iter().map(|m| {
(m.index, m.primal.unwrap())
}).unzip();
let (aggr_min, aggr_coeffs) = try!(self.master.aggregate(i, &aggr_mins));
// append aggregated minorant
debug_assert_eq!(aggr_coeffs.len(), aggr_primals.len());
self.minorants[i].push(MinorantInfo{
index: aggr_min,
multiplier: aggr_sum,
primal: Some(self.problem.aggregate_primals(&aggr_coeffs, aggr_primals)),
});
}
}
Ok(())
}
/// Perform a descent step.
|
<
|
|
>
|
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
|
let aggr = self.minorants[i].split_off(self.params.max_bundle_size-2);
let aggr_sum = aggr.iter().map(|m| m.multiplier).sum();
let (aggr_mins, aggr_primals) : (Vec<_>, Vec<_>) = aggr.into_iter().map(|m| {
(m.index, m.primal.unwrap())
}).unzip();
let (aggr_min, aggr_coeffs) = try!(self.master.aggregate(i, &aggr_mins));
// append aggregated minorant
self.minorants[i].push(MinorantInfo {
index: aggr_min,
multiplier: aggr_sum,
primal: Some(self.problem.aggregate_primals(
aggr_coeffs.into_iter().zip(aggr_primals.into_iter()).collect())),
});
}
}
Ok(())
}
/// Perform a descent step.
|