Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | solver: set center value of newly separated variables correctly. The former implementation only worked with new variables being centered at 0. |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA1: |
5e794600f2948b6db8c5264a9df027db |
| User & Date: | fifr 2017-03-03 15:41:16.389 |
Context
|
2017-03-03
| ||
| 15:46 | solver: fix adding new variables to master. check-in: 705a1cf52f user: fifr tags: trunk | |
| 15:41 | solver: set center value of newly separated variables correctly. check-in: 5e794600f2 user: fifr tags: trunk | |
| 15:40 | Inhibit some clippy warnings. check-in: a9461b0e93 user: fifr tags: trunk | |
Changes
Changes to src/solver.rs.
| ︙ | ︙ | |||
603 604 605 606 607 608 609 |
let value = if lower > 0.0 {
lower
} else if upper < 0.0 {
upper
} else {
0.0
};
| | | | | | | 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 |
let value = if lower > 0.0 {
lower
} else if upper < 0.0 {
upper
} else {
0.0
};
newvars.push((lower - value, upper - value, value));
}
Update::AddVariableValue { lower, upper, value } => {
if lower > upper {
return Err(Error::InvalidBounds(lower, upper));
}
if value < lower || value > upper {
return Err(Error::ViolatedBounds(lower, upper, value));
}
newvars.push((lower - value, upper - value, value));
}
}
}
if !newvars.is_empty() {
let mut problem = &mut self.problem;
let minorants = &self.minorants;
self.master.add_vars(&newvars.iter().map(|v| (v.1, v.2)).collect::<Vec<_>>(),
&mut move |fidx, minidx, vars| {
problem.extend_subgradient(minorants[fidx][minidx].primal.as_ref().unwrap(), vars)
.map(DVector)
.unwrap()
});
let newn = self.cur_y.len() + newvars.len();
self.cur_y.extend(newvars.iter().map(|v| v.2));
self.nxt_d.resize(newn, 0.0);
self.nxt_y.extend(newvars.iter().map(|v| v.2));
Ok(true)
} else {
Ok(false)
}
}
/// Return the current aggregated primal information for a subproblem.
|
| ︙ | ︙ |