Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | solver: Use `CplexMaster` as default for large master problems. |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA1: |
cc9ce5ef1576a6196e4a0edab9220b17 |
| User & Date: | fifr 2016-09-28 15:15:52.488 |
Context
|
2016-09-28
| ||
| 15:52 | Add `MinorantIndex` as reference to minorants to master problem. check-in: 29f93aefac user: fifr tags: trunk | |
| 15:15 | solver: Use `CplexMaster` as default for large master problems. check-in: cc9ce5ef15 user: fifr tags: trunk | |
| 15:15 | master: Add CPLEX based full master problem solver. check-in: 041b3e1f76 user: fifr tags: trunk | |
Changes
Changes to src/solver.rs.
| ︙ | ︙ | |||
16 17 18 19 20 21 22 |
*/
//! The main bundle method solver.
use {Real, DVector};
use {FirstOrderProblem, Evaluation, HKWeighter};
| | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
*/
//! The main bundle method solver.
use {Real, DVector};
use {FirstOrderProblem, Evaluation, HKWeighter};
use master::{self, MasterProblem, BoxedMasterProblem, MinimalMaster, CplexMaster};
use std::result;
use std::error;
use std::mem::swap;
use std::f64::{INFINITY, NEG_INFINITY};
use std::time::Instant;
|
| ︙ | ︙ | |||
503 504 505 506 507 508 509 |
* Initializes the master problem.
*
* The oracle is evaluated once at the initial center and the
* master problem is initialized with the returned subgradient
* information.
*/
fn init_master(&mut self) -> Result<()> {
| > > > > | > > > > < | 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 |
* Initializes the master problem.
*
* The oracle is evaluated once at the initial center and the
* master problem is initialized with the returned subgradient
* information.
*/
fn init_master(&mut self) -> Result<()> {
let m = self.problem.num_subproblems();
self.master = if m == 1 && self.params.max_bundle_size == 2 {
debug!("Use minimal master problem");
Box::new(BoxedMasterProblem::<MinimalMaster>::new().unwrap())
} else {
debug!("Use CPLEX master problem");
Box::new(BoxedMasterProblem::<CplexMaster>::new().unwrap())
};
let lb = self.problem.lower_bounds().map(|v| v.to_dense());
let ub = self.problem.upper_bounds().map(|v| v.to_dense());
if let Some(ref x) = lb {
if x.len() != self.problem.num_variables() {
return Err(Error::Dimension("Dimension of lower bounds does not match number of variables"));
}
}
self.master.set_num_subproblems(m);
self.master.set_vars(self.problem.num_variables(), lb, ub);
self.master.set_max_updates(self.params.max_updates);
self.cur_val = 0.0;
for i in 0..m {
let result = match self.problem.evaluate(i, &self.cur_y, INFINITY, 0.0) {
|
| ︙ | ︙ |