Scippy

SoPlex

Sequential object-oriented simPlex

soplex-vectors_overview.cpp
Go to the documentation of this file.
1 /*
2  DVector primRhs; ///< rhs vector for computing the primal vector
3  UpdateVector primVec; ///< primal vector
4  DVector dualRhs; ///< rhs vector for computing the dual vector
5  UpdateVector dualVec; ///< dual vector
6  UpdateVector addVec; ///< storage for thePvec = &addVec
7 
8  DVector theURbound; ///< Upper Row Feasibility bound
9  DVector theLRbound; ///< Lower Row Feasibility bound
10  DVector theUCbound; ///< Upper Column Feasibility bound
11  DVector theLCbound; ///< Lower Column Feasibility bound
12 
13 
14 Column Enter
15 ------------
16 theFrhs = &primRhs = -A_N x_N
17 theFvec = &primVec = B^-1 theFrhs
18 theCoPrhs = &dualRhs =
19 theCoPvec = theRPvec = &dualVec = B^-1 theCoPrhs
20 thePvec = theCPvec = &addVec = dualVec * A
21 theUbound = &theUCbound = SPxLP::upper() // Upper Column Feasibility bound
22 theLbound = &theLCbound = SPxLP::lower() // Lower Column Feasibility bound
23 theCoUbound = &theURbound = -lhs() // Upper Row Feasibility bound
24 theCoLbound = &theLRbound = -rhs() // Lower Row Feasibility bound
25 theUBbound = -lhs()/upper()/infinity
26 theLBbound = -rhs()/lower()/-infinity
27 
28 
29 Column Leave
30 ------------
31 theFrhs = &primRhs = -A_N x_N
32 theFvec = &primVec
33 theCoPrhs = &dualRhs
34 theCoPvec = theRPvec = &dualVec
35 thePvec = theCPvec = &addVec = dualVec * A
36 theUbound = &theUCbound = +/-infinity/-maxobj // Upper Column Feasibility bound
37 theLbound = &theLCbound = +/-infinity/-maxobj // Lower Column Feasibility bound
38 theCoUbound = &theURbound = +/-infinity/0 // Upper Row Feasibility bound
39 theCoLbound = &theLRbound = +/-infinity/0 // Lower Row Feasibility bound
40 theUBbound = 0/infinity/-lhs()/upper()
41 theLBbound = 0/-infinity/-rhs()/lower()
42 
43 Row Enter
44 ---------
45 theFrhs = &dualRhs
46 theFvec = &dualVec
47 theCoPrhs = &primRhs
48 theCoPvec = theCPvec = &primVec
49 thePvec = theRPvec = &addVec = primVec * A
50 theUbound = &theURbound = +/-infinity/0 // Upper Row Feasibility bound
51 theLbound = &theLRbound = +/-infinity/0 // Lower Row Feasibility bound
52 theCoUbound = &theUCbound = +/-infinity/0 // Upper Column Feasibility bound
53 theCoLbound = &theLCbound = +/-infinity/0 // Lower Column Feasibility bound
54 theUBbound = -lhs()/upper()/infinity
55 theLBbound = -rhs()/lower()/-infinity
56 
57 Row Leave
58 ---------
59 theFrhs = &dualRhs = maxObj()
60 theFvec = &dualVec
61 theCoPrhs = &primRhs
62 theCoPvec = theCPvec = &primVec
63 thePvec = theRPvec = &addVec = primVec * A
64 theUbound = &theURbound = rhs() // Upper Row Feasibility bound
65 theLbound = &theLRbound = lhs() // Lower Row Feasibility bound
66 theCoUbound = &theUCbound = SPxLP::upper() // Upper Column Feasibility bound
67 theCoLbound = &theLCbound = SPxLP::lower() // Lower Column Feasibility bound
68 theUBbound = 0/infinity/-lhs()/upper()
69 theLBbound = 0/-infinity/-rhs()/lower()
70 
71 
72 // Column Representation Row
73 colset() = thevectors = rowset()
74 rowset() = thecovectors = colset()
75 &primRhs = theFrhs = &dualRhs
76 &primVec = theFvec = &dualVec
77 &dualRhs = theCoPrhs = &primRhs
78 &dualVec = theCoPvec = &primVec
79 &addVec = thePvec = &addVec
80 theCoPvec = theRPvec = thePvec
81 thePVec = theCPvec = theCoPvec
82 &theUCbound = theUbound = &theURbound
83 &theLCbound = theLbound = &theLRbound
84 &theURbound = theCoUbound = &theUCbound
85 &theLRbound = theCoLbound = &theLCbound
86  theUBbound
87  theLBbound
88 
89 
90 theLBbound < theFvec = B^-1 theFrhs < theUBbound
91 theLbound < thePvec = A * theCoPvec < theUbound
92 theCoLbound < theCoPvec = B^-1 theCoPrhs < theCoUbound
93 
94 
95 $x_B = A_B^{-1} b - A_B^{-1} A_N x_N$
96 
97 
98  In columnwise case, |theFvec| = $x_B = A_B^{-1} (- A_N x_N)$, where $x_N$
99  are either upper or lower bounds for the nonbasic variables (depending on
100  the variables |Status|). If these values remain unchanged throughout the
101  simplex algorithm, they may be taken directly from LP. However, in the
102  entering type algorith they are changed and, hence, retreived from the
103  column or row upper or lower bound vectors.
104 
105  In rowwise case, |theFvec| = $\pi^T_B = (c^T - 0^T A_N) A_B^{-1}$. However,
106  this applies only to leaving type algorithm, where no bounds on dual
107  variables are altered. In entering type algorithm they are changed and,
108  hence, retreived from the column or row upper or lower bound vectors.
109 
110 
111 
112 theFvec = $x_B = A_B^{-1} ( - A_N x_N$ ) // Column
113  = $\pi^T_B = (c^T - 0^T A_N) A_B^{-1}$ // Row
114 
115 
116 theUCbound = upper
117 theLCbound = lower
118 
119 // Column Row
120 - lhs = theURbound = rhs
121 - rhs = theLRbound = lhs
122 
123 
124 
125 
126 
127 */
128 
129 
130 
131 
132 
133 
134 
135 
136 
137 
138 
139 
140 
141