Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | Add variable+value update. |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA1: |
8d2547a9f9c09704209061595d64e206 |
| User & Date: | fifr 2016-10-11 08:50:18.884 |
Context
|
2016-10-13
| ||
| 17:45 | Implement `IntoIterator` for `DVector`. check-in: b491a4796b user: fifr tags: trunk | |
|
2016-10-11
| ||
| 08:50 | Add variable+value update. check-in: 8d2547a9f9 user: fifr tags: trunk | |
| 08:45 | solver: Check bounds for validity. check-in: d67ab3a0b0 user: fifr tags: trunk | |
Changes
Changes to src/firstorderproblem.rs.
| ︙ | ︙ | |||
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
/// Problem update information.
///
/// The solver calls the `update` method of the problem regularly.
/// This method can modify the problem by adding (or removing)
/// variables. The possible updates are encoded in this type.
#[derive(Debug, Clone, Copy)]
pub enum Update {
AddVariable{lower: Real, upper: Real},
}
/**
* Trait for implementing a first-order problem description.
*
*/
pub trait FirstOrderProblem<'a> {
| > > > > > > | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
/// Problem update information.
///
/// The solver calls the `update` method of the problem regularly.
/// This method can modify the problem by adding (or removing)
/// variables. The possible updates are encoded in this type.
#[derive(Debug, Clone, Copy)]
pub enum Update {
/// Add a variable with bounds.
///
/// The initial value of the variable will be the feasible value
/// closest to 0.
AddVariable{lower: Real, upper: Real},
/// Add a variable with bounds and initial value.
AddVariableValue{lower: Real, upper: Real, value: Real},
}
/**
* Trait for implementing a first-order problem description.
*
*/
pub trait FirstOrderProblem<'a> {
|
| ︙ | ︙ |
Changes to src/solver.rs.
| ︙ | ︙ | |||
584 585 586 587 588 589 590 591 592 593 594 595 596 597 |
if lower > upper {
return Err(Error::InvalidBounds(lower, upper))
}
let value = if lower > 0.0 { lower }
else if upper < 0.0 { upper }
else { 0.0 };
newvars.push((lower - value, upper - value));
},
}
}
if !newvars.is_empty() {
let mut problem = &mut self.problem;
let minorants = &self.minorants;
| > > > > > > > > > | 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 |
if lower > upper {
return Err(Error::InvalidBounds(lower, upper))
}
let value = if lower > 0.0 { lower }
else if upper < 0.0 { upper }
else { 0.0 };
newvars.push((lower - value, upper - 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));
},
}
}
if !newvars.is_empty() {
let mut problem = &mut self.problem;
let minorants = &self.minorants;
|
| ︙ | ︙ |