1+ class matrizMin {
2+ constructor ( rows , cols ) {
3+ this . rows = rows ;
4+ this . cols = cols ;
5+
6+ this . data = [ ] ;
7+
8+ for ( var i = 0 ; i < rows ; i ++ ) {
9+ var arr = [ ] ;
10+ for ( var j = 0 ; j < cols ; j ++ ) {
11+ arr . push ( 0 ) ;
12+ }
13+ this . data . push ( arr ) ;
14+ }
15+ }
16+
17+ print ( ) {
18+ console . table ( this . data ) ;
19+ }
20+
21+ getEnterColumn ( ) {
22+ var colBigNegative = - 1 ;
23+ var bigNegative = 0 ;
24+ for ( var i = 0 ; i < this . cols ; i ++ ) {
25+ if ( bigNegative > this . data [ this . rows - 2 ] [ i ] ) {
26+ bigNegative = this . data [ this . rows - 2 ] [ i ] ;
27+ colBigNegative = i ;
28+ }
29+ }
30+ return colBigNegative ;
31+ }
32+
33+ getExitRow ( ) {
34+ var arr = [ ] ;
35+ var rowSmallPositive = - 1 ;
36+ var column = this . getEnterColumn ( ) ;
37+ //#region Foi alterado de -1 para 1, para poder resolver o simplex de minimizar
38+ if ( column == 1 ) {
39+ return 1 ;
40+ }
41+ for ( var i = 0 ; i < this . rows - 2 ; i ++ ) {
42+ arr . push ( this . data [ i ] [ this . cols - 2 ] / this . data [ i ] [ column ] ) ;
43+ }
44+ if ( arr . length <= 0 ) {
45+ return - 1 ;
46+ }
47+ var smallPositive = arr [ 0 ] ;
48+ for ( var i = 0 ; i < arr . length ; i ++ ) {
49+ if ( smallPositive > arr [ i ] ) {
50+ smallPositive = arr [ i ] ;
51+ rowSmallPositive = i ;
52+ }
53+ if ( i == arr . length - 1 && rowSmallPositive == - 1 && arr [ 0 ] == smallPositive )
54+ rowSmallPositive = 0 ;
55+ }
56+ return rowSmallPositive ;
57+ }
58+
59+ getPivo ( ) {
60+ return this . getExitRow ( ) != - 1 && this . getEnterColumn ( ) != - 1 ? this . data [ this . getExitRow ( ) ] [ this . getEnterColumn ( ) ] : - 1 ;
61+ }
62+
63+ addInput ( arr , column ) {
64+ for ( var i = 0 ; i < arr . length ; i ++ )
65+ this . data [ column ] [ i ] = arr [ i ] ;
66+ }
67+
68+ addRow ( arr , row ) {
69+ for ( var i = 0 ; i < arr . length ; i ++ )
70+ this . data [ row ] [ i ] = arr [ i ] ;
71+ }
72+
73+ checkRowZ ( ) {
74+ for ( var i = 0 ; i < this . cols - 1 ; i ++ ) {
75+ if ( this . data [ this . rows - 2 ] [ i ] < 0 ) {
76+ return true ;
77+ }
78+ }
79+ return false ;
80+ }
81+
82+ static generateSimplexFrame ( matriz ) {
83+ var frame = new matrizMin ( matriz . rows + 1 , matriz . rows + matriz . cols ) ;
84+ // Adiciona os valores iniciais
85+ for ( var i = 0 ; i < frame . rows - 1 ; i ++ ) {
86+ for ( var j = 0 ; j < matriz . cols - 1 ; j ++ ) {
87+ frame . data [ i ] [ j ] = matriz . data [ i ] [ j ] ;
88+ }
89+ }
90+ // Adiciona as variáveis de folga
91+ for ( var i = 0 ; i < frame . rows - 2 ; i ++ ) {
92+ for ( var j = matriz . cols - 1 ; j < frame . cols - 1 ; j ++ ) {
93+ if ( i == ( j - ( matriz . cols - 1 ) ) ) {
94+ frame . data [ i ] [ j ] = 1 ;
95+ }
96+ }
97+ }
98+ // Adiciona as retrições
99+ for ( var i = 0 ; i < matriz . rows - 1 ; i ++ )
100+ frame . data [ i ] [ frame . cols - 2 ] = matriz . data [ i ] [ matriz . cols - 1 ] ;
101+ // Adiciona tags para identificação da tabela
102+ for ( var i = 0 ; i < frame . rows - 1 ; i ++ ) {
103+ if ( i < matriz . rows - 1 )
104+ {
105+ frame . data [ i ] [ frame . cols - 1 ] = "F" + ( i + 1 )
106+ }
107+ else
108+ frame . data [ i ] [ frame . cols - 1 ] = "-Z" ;
109+ }
110+ for ( var i = 0 ; i < frame . cols - 1 ; i ++ ) {
111+ if ( i < matriz . cols - 1 )
112+ frame . data [ frame . rows - 1 ] [ i ] = "X" + ( i + 1 ) ;
113+ else if ( i < frame . cols - 2 )
114+ frame . data [ frame . rows - 1 ] [ i ] = "F" + ( ( i + 1 ) - 2 ) ;
115+ else
116+ frame . data [ frame . rows - 1 ] [ i ] = "B" ;
117+ }
118+ frame . data [ frame . rows - 1 ] [ frame . cols - 1 ] = "DLLN" ;
119+ return frame ;
120+ }
121+
122+ static generateNewSimplexFrame ( simplex ) {
123+ var frame = new matrizMin ( simplex . rows , simplex . cols ) ;
124+ var pivoRow = simplex . getExitRow ( ) ;
125+ if ( pivoRow == - 1 ) {
126+ return frame ;
127+ }
128+ var pivoColumn = simplex . getEnterColumn ( ) ;
129+ if ( pivoColumn == - 1 ) {
130+ return frame ;
131+ }
132+ var pivoValue = simplex . getPivo ( ) ;
133+ if ( pivoValue == - 1 ) {
134+ return frame ;
135+ }
136+
137+ var baseRow = [ ] ;
138+ for ( var i = 0 ; i < simplex . cols ; i ++ ) {
139+ baseRow . push ( simplex . data [ pivoRow ] [ i ] ) ;
140+ }
141+ //Daqui para baixo não esta pegando o código
142+ for ( var i = 0 ; i < baseRow . length - 1 ; i ++ ) {
143+ baseRow [ i ] = baseRow [ i ] / pivoValue ;
144+ }
145+ baseRow [ baseRow . length - 1 ] = simplex . data [ simplex . rows - 1 ] [ pivoColumn ] ;
146+ frame . addRow ( baseRow , pivoRow ) ;
147+
148+ for ( var i = 0 ; i < simplex . rows - 1 ; i ++ ) {
149+ if ( i != pivoRow ) {
150+ var newRow = [ ] ;
151+ for ( var j = 0 ; j < simplex . cols - 1 ; j ++ ) {
152+ newRow . push ( baseRow [ j ] * - simplex . data [ i ] [ pivoColumn ] + simplex . data [ i ] [ j ] ) ;
153+ }
154+ newRow . push ( simplex . data [ i ] [ simplex . cols - 1 ] ) ;
155+ frame . addRow ( newRow , i ) ;
156+ }
157+ }
158+
159+ for ( var i = 0 ; i < simplex . cols ; i ++ )
160+ frame . data [ frame . rows - 1 ] [ i ] = simplex . data [ simplex . rows - 1 ] [ i ] ;
161+ return frame ;
162+ }
163+ }
164+
165+ module . exports = matrizMin ;
0 commit comments