Escolar Documentos
Profissional Documentos
Cultura Documentos
1.
Clase Ecuaciones
Ecuaciones
entra
sale
varDecision
restr
tableroPrincipal
Vb
C,A,b,B,Bn,Cb
fil
col
interaccion
DefinirNumeroDeciRestri
DefinirTama
noTablero
IngresarDatosTablero1
DefinirVectorC
EscribirC
DefinirVectorA
EscribirA
DefinirVectorb
Escribirb
InicializarVb
DEfinirVectorB
InicializarB
DefinirVectorCb
InicializarCb
DefinirVectorBn
InicializarBn
DefinirVarriableEntrante
DefinirVarriableSaliente
ActualizarVb
ActualizarB
ActualizarCb
determinante
SubMatriz
AdjuntaMatriz
TranspuestaMatriz
InverzaB
Multiplicacion
restaMatrices
BnA
CbBn
CbBnb
Bnb
CbBnAMenosC
ActualizarTablero
VerificaParada
Respuestas
1.1.
DefinirNumeroDeciRestri
1.2.
DefinirTama
noTablero
IngresarDatosTablero1
System.out.println(Funcion Objetivo-);
for(int i=0;i=0;i++)
{
for(int j=0;jvarDecision;j++)
{
System.out.println(Ingrese el coeficiente de x-(j+1));
tableroPrincipal[i][j]=e.nextInt();
tableroPrincipal[i][j]=tableroPrincipal[i][j]*-1;
}
}
Este fragmento de c
odigo lo que le indica al programa es que pida los coeficientes de la funci
on objetivo y los almacene en el tablero. Hay que tener en
cuenta que la funci
on objetivo se registra estando igualada a cero, es por ello
que se multiplica al dato por -1.
System.out.println(Restricciones-);
for(int i=1;ifil;i++)
{
System.out.println();
System.out.println(Restriccion -i);
System.out.println();
for(int j=0;jvarDecision;j++)
{
System.out.println(Ingrese el coeficiente de x-(j+1));
tableroPrincipal[i][j]=e.nextDouble();
tableroIterativo[i][j]=tableroPrincipal[i][j];
}
}
Por otra parte, para registrar el valor de los coeficientes de las restricciones
en el tablero se usa este fragmento de codigo. Teniendo en cuenta que el primer
rengl
on del tablero corresponde a la funcion objetivo se hace necesario indicarle
que parta desde i = 1 y que termine en fil-1. Hay que recordar que en la mayora de los lenguajes de programacion las posiciones de las matrices o arreglos
se manejan desde 0; es decir que la columna 1 para el lenguaje seria la columna 0.
int interaccion;
int antej=varDecision-1;
for(int i=1;ifil;i++)
{ interaccion=0;
for(int j=varDecision;jcol;j++)
{
if(interaccion==0 && jantej)
{ tableroPrincipal[i][j]=1;
interaccion++;
antej=j;
}
}
}
Como cada restricci
on tiene una variable de holgura con coeficiente 1 tambien es necesario registrar esto en el tablero y para ello se hace uso de este codigo.
for(int i=1;ifil;i++) {
System.out.println();
System.out.println(Resultado de la Restriccion -i);
System.out.println();
System.out.println(Ingrese el resultado );
tableroPrincipal[i][j]=e.nextInt();
}
Igual que en el caso de los coeficientes de las restricciones se hace necesario
que ciclo for parta desde i = 1 para ingresar el resultado de las mismas. Hay que
notar que el tablero siempre se mantiene en la u
ltima columna y lo que vara
1.3.
DefinirVectorC
1.4.
EscribirC
1.5.
DefinirVectorA
}
La matriz A hace referencia a los coeficientes de las variables de decision en
las restricciones. Este fragmento de codigo crea una matriz con una cantidad
de columnas igual a la cantidad de variables de decision y una cantidad de filas
igual a la cantidad de restricciones.
1.6.
EscribirA
1.7.
DefinirVectorb
1.8.
Escribirb
1.9.
InicializarVb
int i=restr-1;
int j=col-2;
while(i=0 && j=varDecision)
{
Vb[i]=j;
i;
j;
}
}
Aunque en el metodo Simplex Revisado no figura ning
un vector Vb este
se declara y se usa con el fin de almacenar los identificadores de las variables
b
asicas en el tablero principal; es decir, se usa para guardar la posicion de las
variables b
asicas y es actualizado cada vez que una sale y otra entra.
1.10.
DEfinirVectorB
1.11.
InicializarB
1.12.
InicializarCb
1.13.
DefinirVectorBn
1.14.
InicializarBn
1.15.
DefinirVarriableEntrante
System.out.println();
System.out.println(Variable que entra es x-(entra+1));
}
La variable que entra siempre sera la mas negativa en el renglon que corresponde a la funci
on objetivo en el tablero principal. Para ello se hace un recorrido
por todo el rengl
on almacenando en la variable llamada neg el valor 0 que se
encuentre. De igual forma por medio del condicional if se verifica si el valor
actual es menor al que se encuentra almacenado en neg, de ser as el valor de
neg es reemplazado por este nuevo dato. Cada vez que sucede esto es guardada
en la variable entra dicha posicion.
1.16.
DefinirVarriableSaliente
1.17.
ActualizarVb
}
Como ya se explic
o el vector Vb almacena la posicion de las variables basicas.
Ya definidas la variable entrante y la saliente es necesario actualizarlo y para
ello se aprovecha que el vector local control es de la misma dimension. En la
posici
on sale de Vb se ingresa el valor de la variable entra. Hay que recordar
que en este momento entra almacena la posicion e la variable entrante.
1.18.
ActualizarB
1.19.
ActualizarCb
1.20.
{
deter = matriz[0][0]*matriz[1][1];
deter=deter-matriz[0][1]*matriz[1][0];
}
else
{
for(int j=0;jmatriz.length;j++)
{
double [][] temp =this.SubMatriz(i,j,matriz);
deter=deter+Math.pow(-1, i+j)*matriz[i][j]*this.determinante(i, temp);
}
}
return deter;
}
private double [][]SubMatriz(int i, int j, double [][] matriz)
{
double [][] temp = new double [matriz.length-1] [matriz.length-1];
int count1=0,count2=0;
for(int k=0;kmatriz.length;k++)
{
if(k!=i)
{
count2=0;
for (int l=0;lmatriz.length;l++)
{
if(l!=j)
{
temp[count1][count2]=matriz[k][l];
count2++; }
}
count1++;
}
}
return temp;
}
Para hallar la matriz adjunta:
public double[][] AdjuntaMatriz(double[][] matriz)[2]
{
double [][] tempAdjunta = new double [matriz.length][matriz.length];
if(matriz.length==2)
{
tempAdjunta[0][0]=matriz[1][1];
tempAdjunta[1][1]=matriz[0][0];
tempAdjunta[0][1]=matriz[0][1];
tempAdjunta[1][0]=matriz[1][0];
}
else
11
{
for(int i=0;itempAdjunta.length;i++)
{
for(int j=0;jtempAdjunta.length;j++)
{
double [][] temp= this.SubMatriz(i,j,matriz);
double elementoAdjunto =Math.pow(-1, i+j)*this.determinante(0, temp);
tempAdjunta[i][j]=elementoAdjunto; }
}
}
return tempAdjunta;
}
Para hallar la traspuesta de la adjunta:
1.21.
InverzaB
12
}
Para actualizar a Bn se crean una variable y dos matrices locales que almacenaran los datos retornados por los cuatro metodos anteriores. Se llaman
estos metodos y se envan como parametros a B y a la matriz Adjunta con el
fin de hallar todos los elementos necesarios para llevar a cabo el metodo por
Determinantes.
1.22.
Multiplicacion
1.23.
restaMatrices
13
1.24.
BnA,CbBn,CbBnb,Bnb,CbBnAMenosC
El c
odigo presentado a continuacion permite realizar las operaciones correspondientes entra las distintas matrices haciendo uso de los metodos Multiplicaci
on y Resta.
public double [][] BnA (double [][] a,double [][]b)
{
double [][] BnA= Multiplicacion(a,b);
return BnA;
}
public double [][] CbBn (double [][] a,double [][]b)
{
double [][] CbBn= Multiplicacion(a,b);
return CbBn;
}
public double [][] CbBnb (double [][] a,double [][]b,double [][]c)
{
double [][] Asosiativa = CbBn(a,b);
double [][] CbBnb= Multiplicacion(Asosiativa,c);
return CbBnb;
}
public double [][] Bnb (double [][] a,double [][]b) {
double [][] Bnb= Multiplicacion(a,b);
return Bnb;
}
public double [][] CbBnAMenosC (double [][] a,double [][]b,double [][] c,double
[][]d)
{
double [][] CbBnnA= CbBnb(a,b,c);
double [][] resul= restaMatrices(CbBnnA,d);
return resul; }
1.25.
ActualizarTablero
Este metodo actualiza paso por paso el tablero principal dejandolo listo para
una nueva verificaci
on y si es necesario otra iteracion. Se crean matrices locales que tomaran el valor retornado por los metodos encargados de hacer las
operaciones correspondientes. Son estas matrices las que se usan para dicha actualizaci
on.
public void ActualizarTablero ()
fil=restr+1; col=((restr+varDecision)+1);
double [][] CbBnAMenosCAct = CbBnAMenosC(Cb,Bn,A,C);
double [][] BnAAct = BnA(Bn,A);
double [][] CbBnAct = CbBn(Cb,Bn);
14
}
}
}
1.26.
VerificaParada
1.27.
Respuestas
16
2.
Clase Ejecucion
Ejecucion
d
r
intera
parada
System.out.println();
System.out.println();
System.out.println(Interaccion -intera+);
objEcua.DefinirVarriableEntrante(); // variable que entra
objEcua.DefinirVarriableSaliente();
objEcua.ActualizarVb();
objEcua.ActualizarB();
objEcua.ActualizarCb();
objEcua.InverzaB();
//objEcua.Control();
objEcua.ActualizarTablero();
parada=objEcua.VerificaParada(); }
//System.out.println(.Ejercicio resuelto.);
objEcua.Respuestas();
}
}
Referencias
[1] Rland
terrazaDeterminante
matriz
nxn
https://www.youtube.com/watch?v=a4Nt6MCjoLc. 2014.
en
java
[2] Rland
terrazaInversa
matriz
nxn
https://www.youtube.com/watch?v=PeT-vaIkw. 2014.
en
java
[3] Rland
terrazaInversa
matriz
nxn
https://www.youtube.com/watch?v=PeT-vaIkw. 2014.
en
java
18