Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | firstorderproblem: pass the subproblem index to `extend_subgradient` |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA1: |
166a377203547ee4e0b46377ec1e272d |
| User & Date: | fifr 2019-07-25 13:46:16.613 |
Context
|
2019-07-30
| ||
| 08:16 | Merge release check-in: b34991ebb9 user: fifr tags: trunk | |
|
2019-07-25
| ||
| 13:46 | Update version to 0.6.0 check-in: b839aed06b user: fifr tags: release, v0.6.0 | |
| 13:46 | firstorderproblem: pass the subproblem index to `extend_subgradient` check-in: 166a377203 user: fifr tags: trunk | |
| 13:43 | Update version to 0.5.4 check-in: 8224602a4c user: fifr tags: trunk, v0.5.4 | |
Changes
Changes to src/firstorderproblem.rs.
|
| | | 1 2 3 4 5 6 7 8 | // Copyright (c) 2016, 2017, 2019 Frank Fischer <frank-fischer@shadow-soft.de> // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but |
| ︙ | ︙ | |||
179 180 181 182 183 184 185 |
/// The default implementation returns no updates.
fn update(&mut self, _state: &UpdateState<Self::Primal>) -> Result<Vec<Update>, Self::Err> {
Ok(vec![])
}
/// Return new components for a subgradient.
///
| | | | > > > > > | 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 |
/// The default implementation returns no updates.
fn update(&mut self, _state: &UpdateState<Self::Primal>) -> Result<Vec<Update>, Self::Err> {
Ok(vec![])
}
/// Return new components for a subgradient.
///
/// The components are typically generated by some primal information. The
/// corresponding primal along with its subproblem index is passed as a
/// parameter.
///
/// The default implementation fails because it should never be
/// called.
fn extend_subgradient(
&mut self,
_i: usize,
_primal: &Self::Primal,
_vars: &[usize],
) -> Result<Vec<Real>, Self::Err> {
unimplemented!()
}
}
|
Changes to src/solver.rs.
| ︙ | ︙ | |||
703 704 705 706 707 708 709 |
}
if !newvars.is_empty() {
let problem = &mut self.problem;
let primals = &self.primals;
self.master.add_vars(
&newvars.iter().map(|v| (v.0, v.1, v.2)).collect::<Vec<_>>(),
| | | | 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 |
}
if !newvars.is_empty() {
let problem = &mut self.problem;
let primals = &self.primals;
self.master.add_vars(
&newvars.iter().map(|v| (v.0, v.1, v.2)).collect::<Vec<_>>(),
&mut |fidx, minidx, vars| {
problem
.extend_subgradient(fidx, primals[minidx].as_ref().unwrap(), vars)
.map(DVector)
.map_err(|e| e.into())
},
)?;
// modify moved variables
for (index, val) in newvars.iter().filter_map(|v| v.0.map(|i| (i, v.3))) {
self.cur_y[index] = val;
|
| ︙ | ︙ |