Skip to content

Commit 80aa31f

Browse files
committed
commit inicial, subindo codigo
1 parent e444867 commit 80aa31f

1 file changed

Lines changed: 179 additions & 0 deletions

File tree

index.js

Lines changed: 179 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,179 @@
1+
//Escrevendo o script com valores fixos para facilitar
2+
3+
//1º passo -> Escrever as variaveis da funcao objetiva invertidas
4+
5+
var z = [
6+
{var: 'x1', val: -10, col: 'z'},
7+
{var: 'x2', val: -20, col: 'z'},
8+
{var: 'x3', val: -30, col: 'z'},
9+
{var: 'f1', val: 0, col: 'z'},
10+
{var: 'f2', val: 0, col: 'z'},
11+
{var: 'f3', val: 0, col: 'z'},
12+
{var: 'f4', val: 0, col: 'z'},
13+
{var: 'base', val: 0, col: 'z'}
14+
]
15+
16+
//2º passo -> Definir as restricoes e transformar desigualdades em igualdades acrescentando variáveis de folga.
17+
18+
var sa1 = [
19+
{var: 'x1', val: 2, col: 'f1'},
20+
{var: 'x2', val: 2, col: 'f1'},
21+
{var: 'x3', val: 4, col: 'f1'},
22+
{var: 'f1', val: 1, col: 'f1'},
23+
{var: 'f2', val: 0, col: 'f1'},
24+
{var: 'f3', val: 0, col: 'f1'},
25+
{var: 'f4', val: 0, col: 'f1'},
26+
{var: 'base', val: 300, col: 'f1'}
27+
]
28+
29+
var sa2 = [
30+
{var: 'x1', val: 0, col: 'f2'},
31+
{var: 'x2', val: 4, col: 'f2'},
32+
{var: 'x3', val: 3, col: 'f2'},
33+
{var: 'f1', val: 0, col: 'f2'},
34+
{var: 'f2', val: 1, col: 'f2'},
35+
{var: 'f3', val: 0, col: 'f2'},
36+
{var: 'f4', val: 0, col: 'f2'},
37+
{var: 'base', val: 200, col: 'f2'}
38+
]
39+
40+
var sa3 = [
41+
{var: 'x1', val: 1, col: 'f3'},
42+
{var: 'x2', val: 0, col: 'f3'},
43+
{var: 'x3', val: 0, col: 'f3'},
44+
{var: 'f1', val: 0, col: 'f3'},
45+
{var: 'f2', val: 0, col: 'f3'},
46+
{var: 'f3', val: 1, col: 'f3'},
47+
{var: 'f4', val: 0, col: 'f3'},
48+
{var: 'base', val: 20, col: 'f3'}
49+
]
50+
51+
var sa4 = [
52+
{var: 'x1', val: 4, col: 'f4'},
53+
{var: 'x2', val: 3, col: 'f4'},
54+
{var: 'x3', val: 0, col: 'f4'},
55+
{var: 'f1', val: 0, col: 'f4'},
56+
{var: 'f2', val: 0, col: 'f4'},
57+
{var: 'f3', val: 0, col: 'f4'},
58+
{var: 'f4', val: 1, col: 'f4'},
59+
{var: 'base', val: 50, col: 'f4'}
60+
]
61+
62+
//3º passo -> Preencher a tabela SIMPLEX com os dados das equacoes
63+
64+
var simplex = [
65+
{name: 'z', data: z},
66+
{name: 'f1', data: sa1},
67+
{name: 'f2', data: sa2},
68+
{name: 'f3', data: sa3},
69+
{name: 'f4', data: sa4}
70+
]
71+
72+
for(var i = 0; i < simplex.length; i++) {
73+
//console.log(simplex[i]);
74+
}
75+
76+
//4º passo -> Escolher a coluna pivô: Olhar na linha Z qual eh o numero + negativo
77+
78+
var valuesZ = z.map((item) => {return item.val})
79+
80+
var minZ = Math.min(...valuesZ);
81+
82+
var minElement = z.filter((item) => {return item.val === minZ})
83+
84+
//posicao da coluna pivo (usarei mais tarde para pegar o numero pivo)
85+
var posCP = valuesZ.indexOf(minZ)
86+
87+
//variavel que vai entrar na base
88+
var varIn = minElement[0].var;
89+
90+
91+
//5º passo -> Escolher a linha pivô: Menor resultado para base/coluna pivô (com excessao da linha z)
92+
93+
var results = [];
94+
95+
//comecando no 1 porque a linha Z nao conta
96+
for(var i = 1; i < simplex.length; i++) {
97+
let dataCP = simplex[i].data.filter((item) => {return item.var === varIn})
98+
let dataBASE = simplex[i].data.filter((item) => {return item.var === 'base'})
99+
100+
if(dataBASE[0].val != 0 && dataCP[0].val != 0){
101+
results.push({val:dataBASE[0].val / dataCP[0].val, col: simplex[i].name});
102+
}
103+
else{
104+
results.push({val: 0, col: simplex[i].name})
105+
}
106+
}
107+
108+
//console.log(results)
109+
110+
var removeNegatives = results.filter((item) => {return item.val > 0})
111+
112+
var onlyNumbers = removeNegatives.map((item) => {return item.val})
113+
var minRow = Math.min(...onlyNumbers)
114+
115+
var outElement = removeNegatives.filter((item) => {return item.val === minRow})
116+
117+
var varOut = outElement[0].col;
118+
119+
console.log(varIn)
120+
console.log(varOut)
121+
122+
//Dividir linha pivo pelo numero pivo e o resultado vai para nova var que vai entrar
123+
124+
var varEntrada = [];
125+
126+
var linhaPivo = simplex.filter((item) => {return item.name === varOut});
127+
linhaPivo = linhaPivo[0].data;
128+
129+
//pegando a interscecao da linha pivo com coluna pivo
130+
var pivo = linhaPivo[posCP].val;
131+
132+
for(var i = 0; i < linhaPivo.length; i++) {
133+
let newValue = 0;
134+
if(linhaPivo[i].val != 0 && pivo != 0) {
135+
newValue = (linhaPivo[i].val / pivo).toFixed(2);
136+
}
137+
varEntrada.push({var: linhaPivo[i].var, val: parseFloat(newValue), col: varIn})
138+
}
139+
140+
//console.log(varEntrada);
141+
142+
//Passo 7 -> Para cada nova linha preenchida, pegar linha antiga e subtrair o coeficiente da coluna pivo multiplicando pela nova linha pivo.
143+
// -(coeficiente da linha) x coeficiente da coluna pivo - valor a ser substituido
144+
145+
var numbersEntrada = varEntrada.map((item) => {return item.val})
146+
147+
for(var i = 0; i < simplex.length; i++) {
148+
if(simplex[i].name != varOut) {
149+
var numbers = simplex[i].data.map((item) => {return item.val})
150+
151+
//pegando coeficiente linha e invertendo o sinal
152+
var coeficienteLinha = 0;
153+
if(numbers[posCP] != 0) {
154+
coeficienteLinha = numbers[posCP] * -1;
155+
}
156+
157+
for(j = 0; j < numbersEntrada.length; j++) {
158+
159+
if(coeficienteLinha != 0 && numbersEntrada[j] != 0){
160+
var valueLinha = Math.round((coeficienteLinha * numbersEntrada[j]));
161+
}
162+
else {
163+
var valueLinha = 0;
164+
}
165+
166+
if(numbers[j] < 0) {
167+
//valueLinha += numbers[j]
168+
}
169+
else {
170+
//valueLinha -= numbers[j]
171+
}
172+
173+
console.log(valueLinha)
174+
}
175+
176+
console.log("------")
177+
}
178+
}
179+

0 commit comments

Comments
 (0)