Entrada de dados como Strings: O usuário pode inserir os dados em
formato de texto, separados por vírgulas e ponto e vírgula (por exemplo, para A
pode-se usar "1,2,3;4,5,6" para representar uma matriz 2x3).
Entrada de dados via strings: A entrada dos dados A, B, e C são
agora passadas como strings formatadas. Cada uma das entradas pode ser
separada por vírgulas e ponto e vírgula para representar as matrizes e os
vetores. Isso facilita a entrada de dados pelo usuário no Niotron IDE ou MIT
App Inventor.
Exemplo:
A (matriz de coeficientes das restrições): "1,2; 3,4; 5,6"
B (vetor das constantes): "7,8,9"
C (vetor da função objetivo): "10,11"
Funções de parsing: parse2DArray converte a string A_str em uma
matriz 2D e parseArray converte as strings B_str e C_str em vetores 1D.
Como usar:
1. O usuário insere os dados no formato de strings (por exemplo, utilizando
componentes TextBox no Niotron ou App Inventor).
2. O método SolveSimplex recebe essas entradas e resolve o problema de
programação linear.
Se você tiver dúvidas ou precisar de mais detalhes sobre como integrar
isso com a interface gráfica, estou à disposição! 😊
Como o Simplex Funciona:
O algoritmo Simplex é utilizado para resolver problemas de
programação linear, onde o objetivo é encontrar os valores ótimos de
variáveis (decisão) que minimizem ou maximizem uma função linear,
sujeita a um conjunto de restrições lineares. O algoritmo percorre a
solução a partir de um ponto inicial viável (geralmente um vértice da
região viável) e vai movendo-se até que a solução ótima seja encontrada.
A forma geral do problema de programação linear para
minimização é:
Minimizar: Z=c1x1+c2x2+...+cnxnZ = c_1 x_1 + c_2 x_2 + ... + c_n
x_nZ=c1x1+c2x2+...+cnxn
Sujeito a:
a11x1+a12x2+...+a1nxn≤b1a21x1+a22x2+...
+a2nxn≤b2...am1x1+am2x2+...+amnxn≤bmx1,x2,...,xn≥0\begin{align*}
a_{11} x_1 + a_{12} x_2 + ... + a_{1n} x_n &\leq b_1 \\ a_{21} x_1 + a_{22}
x_2 + ... + a_{2n} x_n &\leq b_2 \\ ... \\ a_{m1} x_1 + a_{m2} x_2 + ... +
a_{mn} x_n &\leq b_m \\ x_1, x_2, ..., x_n &\geq 0 \end{align*}a11x1+a12x2
+...+a1nxna21x1+a22x2+...+a2nxn...am1x1+am2x2+...+amnxnx1,x2,...,xn
≤b1≤b2≤bm≥0
Onde:
ZZZ é a função objetivo que queremos minimizar.
x1,x2,...,xnx_1, x_2, ..., x_nx1,x2,...,xn são as variáveis de decisão.
aija_{ij}aij são os coeficientes das restrições.
b1,b2,...,bmb_1, b_2, ..., b_mb1,b2,...,bm são os limites das
restrições.
Exemplo Prático de Formulação:
Considere o seguinte problema de minimização:
Minimizar: Z=4x1+3x2Z = 4x_1 + 3x_2Z=4x1+3x2
Sujeito a:
2x1+x2≥4x1+2x2≥5x1,x2≥0\begin{align*} 2x_1 + x_2 &\geq 4 \\ x_1 +
2x_2 &\geq 5 \\ x_1, x_2 &\geq 0 \end{align*}2x1+x2x1+2x2x1,x2≥4≥5≥0
Passos para Resolver:
1. Reformulação das restrições:
Para usar o método Simplex, as desigualdades precisam ser
transformadas em igualdades. Para isso, adicionamos variáveis de folga
s1s_1s1 e s2s_2s2 para as restrições ≥\geq≥, transformando-as em ≤\leq≤.
As restrições passam a ser:
2x1+x2−s1=4x1+2x2−s2=5x1,x2,s1,s2≥0\begin{align*} 2x_1 + x_2 -
s_1 &= 4 \\ x_1 + 2x_2 - s_2 &= 5 \\ x_1, x_2, s_1, s_2 &\geq 0 \
end{align*}2x1+x2−s1x1+2x2−s2x1,x2,s1,s2=4=5≥0
2. Função Objetivo:
A função objetivo para a minimização permanece como
Z=4x1+3x2Z = 4x_1 + 3x_2Z=4x1+3x2. No algoritmo Simplex, os
coeficientes da função objetivo serão usados diretamente.
3. Tabela Simplex Inicial:
A tabela Simplex inicial seria montada da seguinte forma, com as
variáveis de decisão x1,x2x_1, x_2x1,x2, as variáveis de folga s1,s2s_1,
s_2s1,s2 e a função objetivo.
Bási x1x_ x2x_ s1s_ s2s_ La
ca 1x1 2x2 1s1 2s2 do Direito
s1s_
2 1 1 0 4
1s1
s2s_
1 2 0 1 5
2s2
ZZZ -4 -3 0 0 0
Aqui:
A função objetivo ZZZ tem coeficientes negativos porque é uma
minimização.
As variáveis s1s_1s1 e s2s_2s2 são introduzidas para transformar
as desigualdades em igualdades.
4. Resolução com o Método Simplex:
O algoritmo Simplex é executado iterativamente, realizando
pivoteamento até encontrar a solução ótima. Durante cada iteração, a
tabela é atualizada, e as variáveis básicas são alteradas até que a solução
ótima seja atingida.
No caso deste exemplo, após realizar as iterações, a solução
ótima será encontrada e os valores de x1x_1x1 e x2x_2x2 que minimizam
a função objetivo serão apresentados.
Como o Código Funciona:
No código fornecido, você pode fornecer os coeficientes AAA
(matriz das restrições), BBB (lado direito das restrições) e CCC
(coeficientes da função objetivo) como strings para o método
SolveSimplex. O método, então, resolve o problema de minimização
utilizando o algoritmo Simplex.
Exemplo de Entrada para o Método SolveSimplex:
Se quisermos resolver o exemplo acima, os valores para AAA,
BBB, e CCC seriam:
A="2,1;1,2"A = "2,1;1,2"A="2,1;1,2"
B="4,5"B = "4,5"B="4,5"
C="4,3"C = "4,3"C="4,3"
A chamada para o método seria:
java
CopiarEditar
String resultado = [Link]("2,1;1,2", "4,5", "4,3");
E o retorno seria algo como:
csharp
CopiarEditar
[1.0, 2.0]
Isso indica que a solução ótima ocorre quando x1=1x_1 = 1x1=1 e
x2=2x_2 = 2x2=2, e você pode calcular o valor de ZZZ substituindo esses
valores na função objetivo:
Z=4(1)+3(2)=4+6=10Z = 4(1) + 3(2) = 4 + 6 = 10Z=4(1)+3(2)=4+6=10
Portanto, a solução ótima é Z=10Z = 10Z=10, com x1=1x_1 = 1x1=1
e x2=2x_2 = 2x2=2.