Skip to content

Commit 7951969

Browse files
committed
preenchendo a tabela com a classe Matriz
2 parents dc8a2d9 + d4f80c7 commit 7951969

2 files changed

Lines changed: 153 additions & 14 deletions

File tree

app/models/matriz.js

Lines changed: 108 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,41 +18,138 @@ class Matriz {
1818
console.table(this.data);
1919
}
2020

21-
getEnterLine()
22-
{
23-
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+
if (column == -1) {
38+
return -1;
39+
}
40+
for (var i = 0; i < this.rows - 2; i++) {
41+
arr.push(this.data[i][this.cols - 2] / this.data[i][column]);
42+
}
43+
if (arr.length <= 0) {
44+
return -1;
45+
}
46+
var smallPositive = arr[0];
47+
for (var i = 0; i < arr.length; i++) {
48+
if (smallPositive > arr[i]) {
49+
smallPositive = arr[i];
50+
rowSmallPositive = i;
51+
}
52+
if (i == arr.length - 1 && rowSmallPositive == -1 && arr[0] == smallPositive)
53+
rowSmallPositive = 0;
54+
}
55+
return rowSmallPositive;
56+
}
57+
58+
getPivo() {
59+
return this.getExitRow() != -1 && this.getEnterColumn() != -1 ? this.data[this.getExitRow()][this.getEnterColumn()] : -1;
2460
}
2561

2662
addInput(arr, column) {
2763
for (var i = 0; i < arr.length; i++)
2864
this.data[column][i] = arr[i];
2965
}
3066

31-
static generateSimplexFrame(matriz) {
32-
var frame = new Matriz(matriz.rows, (matriz.rows + matriz.cols) - 1);
67+
addRow(arr, row) {
68+
for (var i = 0; i < arr.length; i++)
69+
this.data[row][i] = arr[i];
70+
}
3371

72+
checkRowZ() {
73+
for (var i = 0; i < this.cols - 1; i++) {
74+
if (this.data[this.rows - 2][i] < 0) {
75+
return true;
76+
}
77+
}
78+
return false;
79+
}
80+
81+
static generateSimplexFrame(matriz) {
82+
var frame = new Matriz(matriz.rows + 1, matriz.rows + matriz.cols);
3483
// Adiciona os valores iniciais
35-
for (var i = 0; i < frame.rows; i++) {
84+
for (var i = 0; i < frame.rows - 1; i++) {
3685
for (var j = 0; j < matriz.cols - 1; j++) {
3786
frame.data[i][j] = matriz.data[i][j];
3887
}
3988
}
40-
4189
// Adiciona as variáveis de folga
42-
for (var i = 0; i < frame.rows - 1; i++) {
90+
for (var i = 0; i < frame.rows - 2; i++) {
4391
for (var j = matriz.cols - 1; j < frame.cols - 1; j++) {
4492
if (i == (j - (matriz.cols - 1))) {
4593
frame.data[i][j] = 1;
4694
}
4795
}
4896
}
49-
5097
// Adiciona as retrições
5198
for (var i = 0; i < matriz.rows - 1; i++)
52-
frame.data[i][frame.cols - 1] = matriz.data[i][matriz.cols - 1];
53-
99+
frame.data[i][frame.cols - 2] = matriz.data[i][matriz.cols - 1];
100+
// Adiciona tags para identificação da tabela
101+
for (var i = 0; i < frame.rows - 1; i++) {
102+
if (i < matriz.rows - 1)
103+
frame.data[i][frame.cols - 1] = "F" + (i + 1);
104+
else
105+
frame.data[i][frame.cols - 1] = "Z";
106+
}
107+
for (var i = 0; i < frame.cols - 1; i++) {
108+
if (i < matriz.cols - 1)
109+
frame.data[frame.rows - 1][i] = "X" + (i + 1);
110+
else if (i < frame.cols - 2)
111+
frame.data[frame.rows - 1][i] = "F" + ((i + 1) - 2);
112+
else
113+
frame.data[frame.rows - 1][i] = "B";
114+
}
115+
frame.data[frame.rows - 1][frame.cols - 1] = "DLLN";
54116
return frame;
55117
}
118+
119+
static generateNewSimplexFrame(simplex) {
120+
var frame = new Matriz(simplex.rows, simplex.cols);
121+
var pivoRow = simplex.getExitRow();
122+
if (pivoRow == -1)
123+
return frame;
124+
var pivoColumn = simplex.getEnterColumn();
125+
if (pivoColumn == -1)
126+
return frame;
127+
var pivoValue = simplex.getPivo();
128+
if (pivoValue == -1)
129+
return frame;
130+
var baseRow = [];
131+
for (var i = 0; i < simplex.cols; i++) {
132+
baseRow.push(simplex.data[pivoRow][i]);
133+
}
134+
for (var i = 0; i < baseRow.length - 1; i++) {
135+
baseRow[i] = baseRow[i] / pivoValue;
136+
}
137+
baseRow[baseRow.length - 1] = simplex.data[simplex.rows - 1][pivoColumn];
138+
frame.addRow(baseRow, pivoRow);
139+
for (var i = 0; i < simplex.rows - 1; i++) {
140+
if (i != pivoRow) {
141+
var newRow = [];
142+
for (var j = 0; j < simplex.cols - 1; j++) {
143+
newRow.push(baseRow[j] * -simplex.data[i][pivoColumn] + simplex.data[i][j]);
144+
}
145+
newRow.push(simplex.data[i][simplex.cols - 1]);
146+
frame.addRow(newRow, i);
147+
}
148+
}
149+
for (var i = 0; i < simplex.cols; i++)
150+
frame.data[frame.rows - 1][i] = simplex.data[simplex.rows - 1][i];
151+
return frame;
152+
}
56153
}
57154

58155
module.exports = Matriz;

server.js

Lines changed: 45 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
const Matriz = require('./app/models/matriz');
22

3-
var numDecisionVar = 2; // Quantidade de variáveis de decisão
4-
var numConstraintVar = 4; // Quantidade de variáveis de restrição
3+
var numDecisionVar = 3; // Quantidade de variáveis de decisão
4+
var numConstraintVar = 3; // Quantidade de variáveis de restrição
55

66
var matriz = new Matriz(numConstraintVar + 1, numDecisionVar + 1);
77

8+
/*
89
var line1 = [7/10, 1, 630];
910
var line2 = [1/2, 5/6, 600];
1011
var line3 = [1, 2/3, 700];
@@ -31,8 +32,49 @@ for (var i = 0; i < numConstraintVar + 1; i++)
3132
matriz.addInput(line5, i);
3233
break;
3334
}
35+
}*/
36+
37+
var line1 = [1, 1, 1, 100];
38+
var line2 = [10, 4, 5, 600];
39+
var line3 = [2, 2, 6, 300];
40+
var line4 = [-10, -6, -4];
41+
42+
for (var i = 0; i < numConstraintVar + 1; i++)
43+
{
44+
switch (i)
45+
{
46+
case 0:
47+
matriz.addInput(line1, i);
48+
break;
49+
case 1:
50+
matriz.addInput(line2, i);
51+
break;
52+
case 2:
53+
matriz.addInput(line3, i);
54+
break;
55+
case 3:
56+
matriz.addInput(line4, i);
57+
break;
58+
}
3459
}
3560

61+
matriz.print();
62+
3663
var simplexFrame = Matriz.generateSimplexFrame(matriz);
3764

38-
simplexFrame.print();
65+
simplexFrame.print();
66+
67+
var iteratorCount = 0;
68+
69+
while (true)
70+
{
71+
if (simplexFrame.checkRowZ() == true) {
72+
iteratorCount++;
73+
simplexFrame = Matriz.generateNewSimplexFrame(simplexFrame);
74+
simplexFrame.print();
75+
}
76+
else
77+
break;
78+
}
79+
80+
console.log("Total de Iterações: " + iteratorCount);

0 commit comments

Comments
 (0)