RsBundle  Check-in [8d2547a9f9]

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: 8d2547a9f9c09704209061595d64e2069b527cd8
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
Unified Diff Ignore Whitespace Patch
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;