Skip to content

Commit c78ed4a

Browse files
committed
Simplex de minimizar
Foi criado temporariamente os arquivos matrizMin.js e simplexMin.js
1 parent bd18265 commit c78ed4a

5 files changed

Lines changed: 327 additions & 12 deletions

File tree

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
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

Comments
 (0)