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 Vector dualRhs; ///< rhs vector for computing the dual vector
5 UpdateVector dualVec; ///< dual vector
6 UpdateVector addVec; ///< storage for thePvec = &addVec
7
8 Vector theURbound; ///< Upper Row Feasibility bound
9 Vector theLRbound; ///< Lower Row Feasibility bound
10 Vector theUCbound; ///< Upper Column Feasibility bound
11 Vector theLCbound; ///< Lower Column Feasibility bound
12
13
14Column Enter
15------------
16theFrhs = &primRhs = -A_N x_N
17theFvec = &primVec = B^-1 theFrhs
18theCoPrhs = &dualRhs =
19theCoPvec = theRPvec = &dualVec = B^-1 theCoPrhs
20thePvec = theCPvec = &addVec = dualVec * A
21theUbound = &theUCbound = SPxLP::upper() // Upper Column Feasibility bound
22theLbound = &theLCbound = SPxLP::lower() // Lower Column Feasibility bound
23theCoUbound = &theURbound = -lhs() // Upper Row Feasibility bound
24theCoLbound = &theLRbound = -rhs() // Lower Row Feasibility bound
25theUBbound = -lhs()/upper()/infinity
26theLBbound = -rhs()/lower()/-infinity
27
28
29Column Leave
30------------
31theFrhs = &primRhs = -A_N x_N
32theFvec = &primVec
33theCoPrhs = &dualRhs
34theCoPvec = theRPvec = &dualVec
35thePvec = theCPvec = &addVec = dualVec * A
36theUbound = &theUCbound = +/-infinity/-maxobj // Upper Column Feasibility bound
37theLbound = &theLCbound = +/-infinity/-maxobj // Lower Column Feasibility bound
38theCoUbound = &theURbound = +/-infinity/0 // Upper Row Feasibility bound
39theCoLbound = &theLRbound = +/-infinity/0 // Lower Row Feasibility bound
40theUBbound = 0/infinity/-lhs()/upper()
41theLBbound = 0/-infinity/-rhs()/lower()
42
43Row Enter
44---------
45theFrhs = &dualRhs
46theFvec = &dualVec
47theCoPrhs = &primRhs
48theCoPvec = theCPvec = &primVec
49thePvec = theRPvec = &addVec = primVec * A
50theUbound = &theURbound = +/-infinity/0 // Upper Row Feasibility bound
51theLbound = &theLRbound = +/-infinity/0 // Lower Row Feasibility bound
52theCoUbound = &theUCbound = +/-infinity/0 // Upper Column Feasibility bound
53theCoLbound = &theLCbound = +/-infinity/0 // Lower Column Feasibility bound
54theUBbound = -lhs()/upper()/infinity
55theLBbound = -rhs()/lower()/-infinity
56
57Row Leave
58---------
59theFrhs = &dualRhs = maxObj()
60theFvec = &dualVec
61theCoPrhs = &primRhs
62theCoPvec = theCPvec = &primVec
63thePvec = theRPvec = &addVec = primVec * A
64theUbound = &theURbound = rhs() // Upper Row Feasibility bound
65theLbound = &theLRbound = lhs() // Lower Row Feasibility bound
66theCoUbound = &theUCbound = SPxLP::upper() // Upper Column Feasibility bound
67theCoLbound = &theLCbound = SPxLP::lower() // Lower Column Feasibility bound
68theUBbound = 0/infinity/-lhs()/upper()
69theLBbound = 0/-infinity/-rhs()/lower()
70
71
72// Column Representation Row
73colset() = thevectors = rowset()
74rowset() = thecovectors = colset()
75&primRhs = theFrhs = &dualRhs
76&primVec = theFvec = &dualVec
77&dualRhs = theCoPrhs = &primRhs
78&dualVec = theCoPvec = &primVec
79&addVec = thePvec = &addVec
80theCoPvec = theRPvec = thePvec
81thePVec = theCPvec = theCoPvec
82&theUCbound = theUbound = &theURbound
83&theLCbound = theLbound = &theLRbound
84&theURbound = theCoUbound = &theUCbound
85&theLRbound = theCoLbound = &theLCbound
86 theUBbound
87 theLBbound
88
89
90theLBbound < theFvec = B^-1 theFrhs < theUBbound
91theLbound < thePvec = A * theCoPvec < theUbound
92theCoLbound < 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
112theFvec = $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
116theUCbound = upper
117theLCbound = 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