DotNet Reference

DotNet Reference

LinearConstraint.cs
Go to the documentation of this file.
1 // Copyright 2010-2018 Google LLC
2 // Licensed under the Apache License, Version 2.0 (the "License");
3 // you may not use this file except in compliance with the License.
4 // You may obtain a copy of the License at
5 //
6 // http://www.apache.org/licenses/LICENSE-2.0
7 //
8 // Unless required by applicable law or agreed to in writing, software
9 // distributed under the License is distributed on an "AS IS" BASIS,
10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 // See the License for the specific language governing permissions and
12 // limitations under the License.
13 
15 {
16  using System;
17  using System.Collections.Generic;
18 
19 public class LinearConstraint
20 {
21 
22  public virtual String ToString()
23  {
24  return "LinearConstraint";
25  }
26 
27  public virtual Constraint Extract(Solver solver)
28  {
29  return null;
30  }
31 }
32 
34 {
35 
36  public RangeConstraint(LinearExpr expr, double lb, double ub)
37  {
38  this.expr_ = expr;
39  this.lb_ = lb;
40  this.ub_ = ub;
41  }
42 
43  public override String ToString()
44  {
45  return "" + lb_ + " <= " + expr_.ToString() + " <= " + ub_;
46  }
47 
48  public override Constraint Extract(Solver solver)
49  {
50  Dictionary<Variable, double> coefficients =
51  new Dictionary<Variable, double>();
52  double constant = expr_.Visit(coefficients);
53  Constraint ct = solver.MakeConstraint(lb_ - constant, ub_ - constant);
54  foreach (KeyValuePair<Variable, double> pair in coefficients)
55  {
56  ct.SetCoefficient(pair.Key, pair.Value);
57  }
58  return ct;
59  }
60 
61  public static implicit operator bool(RangeConstraint ct)
62  {
63  return false;
64  }
65 
66  private LinearExpr expr_;
67  private double lb_;
68  private double ub_;
69 }
70 
71 public class Equality : LinearConstraint
72 {
73  public Equality(LinearExpr left, LinearExpr right, bool equality)
74  {
75  this.left_ = left;
76  this.right_ = right;
77  this.equality_ = equality;
78  }
79 
80  public override String ToString()
81  {
82  return "" + left_.ToString() + " == " + right_.ToString();
83  }
84 
85  public override Constraint Extract(Solver solver)
86  {
87  Dictionary<Variable, double> coefficients =
88  new Dictionary<Variable, double>();
89  double constant = left_.Visit(coefficients);
90  constant += right_.DoVisit(coefficients, -1);
91  Constraint ct = solver.MakeConstraint(-constant, -constant);
92  foreach (KeyValuePair<Variable, double> pair in coefficients)
93  {
94  ct.SetCoefficient(pair.Key, pair.Value);
95  }
96  return ct;
97  }
98 
99  public static implicit operator bool(Equality ct)
100  {
101  return (object)ct.left_ == (object)ct.right_ ? ct.equality_ : !ct.equality_;
102  }
103 
104  private LinearExpr left_;
105  private LinearExpr right_;
106  private bool equality_;
107 }
108 
110 {
111  public VarEquality(Variable left, Variable right, bool equality)
112  {
113  this.left_ = left;
114  this.right_ = right;
115  this.equality_ = equality;
116  }
117 
118  public override String ToString()
119  {
120  return "" + left_.Name() + " == " + right_.Name();
121  }
122 
123  public override Constraint Extract(Solver solver)
124  {
125  Constraint ct = solver.MakeConstraint(0.0, 0.0);
126  ct.SetCoefficient(left_, 1.0);
127  ct.SetCoefficient(right_, -1.0);
128  return ct;
129  }
130 
131  public static implicit operator bool(VarEquality ct)
132  {
133  return (object)ct.left_ == (object)ct.right_ ? ct.equality_ : !ct.equality_;
134  }
135 
136  private Variable left_;
137  private Variable right_;
138  private bool equality_;
139 }
140 
141 // TODO(user): Try to move this code back to the .swig with @define macros.
142 public partial class MPConstraintVector: IDisposable, System.Collections.IEnumerable
143 #if !SWIG_DOTNET_1
144  , System.Collections.Generic.IList<Constraint>
145 #endif
146 {
147  // cast from C# MPConstraint array
148  public static implicit operator MPConstraintVector(Constraint[] inVal) {
149  var outVal= new MPConstraintVector();
150  foreach (Constraint element in inVal) {
151  outVal.Add(element);
152  }
153  return outVal;
154  }
155 
156  // cast to C# MPConstraint array
157  public static implicit operator Constraint[](MPConstraintVector inVal) {
158  var outVal= new Constraint[inVal.Count];
159  inVal.CopyTo(outVal);
160  return outVal;
161  }
162 }
163 } // namespace Google.OrTools.LinearSolver
Definition: Variable.cs:13
override String ToString()
virtual String ToString()
override String ToString()
void SetCoefficient(Variable var, double coeff)
override Constraint Extract(Solver solver)
override Constraint Extract(Solver solver)
override Constraint Extract(Solver solver)
virtual Constraint Extract(Solver solver)
override String ToString()
Definition: LinearExpr.cs:20
RangeConstraint(LinearExpr expr, double lb, double ub)
double Visit(Dictionary< Variable, double > coefficients)
Definition: LinearExpr.cs:27
MPConstraintVector()
Equality(LinearExpr left, LinearExpr right, bool equality)
VarEquality(Variable left, Variable right, bool equality)
virtual double DoVisit(Dictionary< Variable, double > coefficients, double multiplier)
Definition: LinearExpr.cs:21
Constraint MakeConstraint(double lb, double ub)
string Name()
Definition: Variable.cs:47