Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | Add `MasterProblem::set_num_subproblems`. |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA1: |
a89b3502b51408955433ac8ca5ec6998 |
| User & Date: | fifr 2016-09-28 15:02:26.367 |
Context
|
2016-09-28
| ||
| 15:02 | Add `Vector::add_scaled`. check-in: 88be8bb445 user: fifr tags: trunk | |
| 15:02 | Add `MasterProblem::set_num_subproblems`. check-in: a89b3502b5 user: fifr tags: trunk | |
| 12:23 | minorant: Add `Minorant::new`. check-in: 19d05ec52f user: fifr tags: trunk | |
Changes
Changes to src/master/boxed.rs.
| ︙ | ︙ | |||
178 179 180 181 182 183 184 185 186 187 188 189 190 191 |
}
return norm2;
}
}
impl<M : UnconstrainedMasterProblem> MasterProblem for BoxedMasterProblem<M> {
fn set_vars(&mut self, n: usize, lb : Option<DVector>, ub: Option<DVector>) {
assert!(lb.as_ref().map(|x| x.len()).unwrap_or(n) == n);
assert!(ub.as_ref().map(|x| x.len()).unwrap_or(n) == n);
self.lb = lb.unwrap_or_else(|| dvec![NEG_INFINITY; n]);
self.ub = ub.unwrap_or_else(|| dvec![INFINITY; n]);
}
| > > > > | 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 |
}
return norm2;
}
}
impl<M : UnconstrainedMasterProblem> MasterProblem for BoxedMasterProblem<M> {
fn set_num_subproblems(&mut self, n : usize) -> Result<()> {
self.master.set_num_subproblems(n).map_err(|err| Error::Solver(Box::new(err)))
}
fn set_vars(&mut self, n: usize, lb : Option<DVector>, ub: Option<DVector>) {
assert!(lb.as_ref().map(|x| x.len()).unwrap_or(n) == n);
assert!(ub.as_ref().map(|x| x.len()).unwrap_or(n) == n);
self.lb = lb.unwrap_or_else(|| dvec![NEG_INFINITY; n]);
self.ub = ub.unwrap_or_else(|| dvec![INFINITY; n]);
}
|
| ︙ | ︙ |
Changes to src/master/master.rs.
| ︙ | ︙ | |||
33 34 35 36 37 38 39 |
}
/// Result type for master problems.
pub type Result<T> = result::Result<T, Error>;
pub trait MasterProblem {
| > > > | | 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
}
/// Result type for master problems.
pub type Result<T> = result::Result<T, Error>;
pub trait MasterProblem {
/// Set the number of subproblems.
fn set_num_subproblems(&mut self, n : usize) -> Result<()>;
/// Set the lower and upper bounds of the variables.
fn set_vars(&mut self, nvars: usize, lb : Option<DVector>, ub: Option<DVector>);
/// Return the current number of minorants of subproblem `fidx`.
fn num_minorants(&self, fidx : usize) -> usize;
/// Add a new minorant to the model.
fn add_minorant(&mut self, fidx: usize, minorant: Minorant) -> Result<()>;
|
| ︙ | ︙ |
Changes to src/solver.rs.
| ︙ | ︙ | |||
514 515 516 517 518 519 520 521 522 523 |
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_vars(self.problem.num_variables(), lb, ub);
self.master.set_max_updates(self.params.max_updates);
| > > < < | 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 |
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"));
}
}
let m = self.problem.num_subproblems();
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) {
Ok(r) => r,
Err(err) => return Err(Error::Eval(Box::new(err))),
};
self.cur_vals[i] = result.objective();
|
| ︙ | ︙ |