288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
|
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
|
-
+
|
} else {
subg = dvec![0.0; self.rhs.len()];
objective = -try!(self.nets[fidx].objective());
}
let sol = try!(self.nets[fidx].get_solution());
for (i,lhs) in self.lhs.iter().enumerate() {
subg[i] -= lhs[fidx].iter().map(|elem| elem.val * sol[elem.ind]).sum();
subg[i] -= lhs[fidx].iter().map(|elem| elem.val * sol[elem.ind]).sum::<Real>();
}
Ok(SimpleEvaluation {
objective: objective,
minorants: vec![(Minorant {
constant: objective,
linear: subg,
|
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
|
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
|
-
+
|
objective -= try!(self.nets[i].objective());
sols.push(try!(self.nets[i].get_solution()));
}
let mut subg = self.rhs.clone();
for (i, lhs) in self.lhs.iter().enumerate() {
for (fidx, flhs) in lhs.iter().enumerate() {
subg[i] -= flhs.iter().map(|elem| elem.val * sols[fidx][elem.ind]).sum();
subg[i] -= flhs.iter().map(|elem| elem.val * sols[fidx][elem.ind]).sum::<Real>();
}
}
Ok(SimpleEvaluation {
objective: objective,
minorants: vec![(Minorant {
constant: objective,
|