0% encontró este documento útil (0 votos)
7 vistas6 páginas

Implementación de Simplex en Java

Este documento describe un programa Java que implementa el método simplex para resolver problemas de programación lineal con restricciones de desigualdad. El programa solicita al usuario el número de variables y restricciones, luego recopila los coeficientes de la función objetivo y restricciones para construir una matriz. Aplica el método simplex iterativamente para encontrar una solución óptima mediante pivoteo de filas y columnas, y registra las soluciones en un vector. Finalmente, imprime las soluciones encontradas y el valor óptimo de la función objetivo.
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
7 vistas6 páginas

Implementación de Simplex en Java

Este documento describe un programa Java que implementa el método simplex para resolver problemas de programación lineal con restricciones de desigualdad. El programa solicita al usuario el número de variables y restricciones, luego recopila los coeficientes de la función objetivo y restricciones para construir una matriz. Aplica el método simplex iterativamente para encontrar una solución óptima mediante pivoteo de filas y columnas, y registra las soluciones en un vector. Finalmente, imprime las soluciones encontradas y el valor óptimo de la función objetivo.
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd

import [Link].

*; public class Simplex extends JApplet{ public static void imprimir(double[][] s)//Recibe los valores de la matriz "s" { for(int i=0;i<[Link];i++) { for(int j=0;j<s[0].length;j++) [Link]("%f\t",s[i][j]);//Recorre todas las posiciones de la matriz s y las imprime [Link](); } } public static void imprimirv(double[] fo) { [Link]("\t\t "+fo[0]); for(int i=1;i<[Link];i++) [Link]("\t\t "+fo[i]); [Link]("\t\t"); } public static double sumashelp(double[][]s,int i)//Recibe la matriz "s" y el numero de la columna que sumara { double x=0; for(int j=0;j<[Link]-1;j++) x=x+s[j][0]*s[j][i];//se va acumulando el resultado de cada columna en la variable "x" y retorna el resultado return x; } public static void sumas(double[][]s, double[] fo)//Recibe los parametros matriz "A" y vecttor fo { for(int i=1;i<s[0].length;i++)//realiza un recorrido en la fila 0 de la matriz "A" s[[Link]-1][i]=sumashelp(s,i)-fo[i-1];//se guarda el resultado de la suma de las columnas } public static boolean negativo(double[][] s)//recibe la matriz { boolean w=false; //se crea una variable W que es FALSE for(int i=2;i<s[0].length;i++)//Recorre la matriz desde la posicion 2 h asta lacantidad de columnas que tiene if(s[[Link]-1][i]<0)//Si: algun elemento de la ultima fila es meno r a 0 retorna TRUE {w=true; brea ;} return w;//Retorna w } public static int columnaPivote(double[][] s)//Recibe la matriz "s" { double aux=0;//Crea la variable aux int x=0;//Crea la variable x for(int i=2;i<s[0].length;i++)//Recorre las columnas de de ma matriz "s

" if(s[[Link]-1][i]<aux) //Si: algun elemento es menor a el valor au xiliar {aux=s[[Link]-1][i];//entonces el nuevo valor de aux es dado por e se elemento x=i;//se guarda la posicion (columna) del nuevo columna pivote } return x;//Retorna el valor de la columna seleccionada } public static int filaPivote(double[][] s, int columna)//Recibe la matriz y la columna con la que se realizaran los ratios { double aux=10000;//Se crea una variable aux int x=0; for(int i=0;i<[Link]-1;i++)// if((double)(s[i][1]/s[i][columna])<aux && (double)(s[i][1]/s[i][colu mna])>0)//Si: { x=i; aux=(double)(s[i][1]/s[i][columna]); } return x;//Retorna con el valor de la fila para el nuevo pivote }

public static void main(String[] args)throws IOException { BufferedReader in=new BufferedReader(new InputStreamReader([Link])); [Link]("Bienvenido !!!!!!! \n"); [Link](">>Este programa Resuelve problemas de maximizacion\n Con restricciones de menor-igual"); [Link]("\nNumero de incognitas: ");//ingresa la cantidad de i ncognitas del programa int inc=[Link]([Link]()); [Link]("Numero de restricciones: ");//ingresa la cantidad de restricciones del problema int res=[Link]([Link]()); double[][] s=new double[res+1][inc+res+2];//se crea el objeto matriz "s " identidad double[] fo=new double[inc+res+1];//se crea el vector para la funcion o bjetivo "fo" double[] fo2=new double[inc+res+1];//se crea el vector para la funcion objetivo "fo2", para guardar el verdadero vector de la FO double[] solucion=new double[inc];//se crea el vector para introducir l as soluciones [Link]("\nMaximizacion?? Y=1/N=2:\n"); int r=[Link]([Link]()); [Link]("\nIngrese las constantes de la F.O.:\n"); for(int i=0;i<inc;i++) { [Link]("Constante de la incognita %d: ",i+1); fo[i+1]=[Link]([Link]()).doubleValue();//Recibe los val ores del vector de la fo } imprimirv(fo); //Guardando la fo en otro vector

for(int i=0;i<inc;i++){ fo2[i+1]=fo[i+1]; } //Poniendo los coeficientes en 0 for(int i=0;i<inc;i++){ fo[i+1]=0; } //Modificando la FO, de acuerdo a Maximizacin o Minimizacion if(r==2){ for(int i=0;i<inc;i++){ fo[i+1]=fo[i+1]*(-1); } } for(int i=0;i<res;i++) { for(int j=0;j<inc;j++) { [Link]("Constante [%d] de la restriccion [%d]: ",j+1,i +1); s[i][j+2]=[Link]([Link]()).doubleValue();//Recibe la matriz los coeficientes de las restricciones p/c/fila } [Link]("Solucion de la restriccion [%d]: ",i+1); s[i][1]=[Link]([Link]()).doubleValue();//Recibe los val ores del vector solucion } //identidad for(int i=0;i<res;i++) s[i][i+4]=1;//Se crea la matriz identidad con la cantidad de restric ciones [Link]("\nPRIMERA FASE\n"); [Link]("C_(B)\t\tSolucion\tX_(1)\t\tX_(2)\t\tS_(1)\t\t S_(2)\n"); sumas(s,fo);//Se manda al metodo "sumas" los parametros s y fo, es deci r, la matriz "A" y la func. objetivo imprimirv(fo); imprimir(s);//Imprime la matriz s int fpiv=0,cpiv=0;

while(s[[Link]-1][1]!=0)//Se manda el parametro s al metodo negativo( ), donde si este regresa TRUE se sigue efectuando en procedimiento { [Link]("..................."); cpiv=columnaPivote(s);//Se manda la matriz "s" al metodo columnaPivo te() y recibe el nuevo valor de la columna pivote fpiv=filaPivote(s,cpiv);//Se manda la matriz "s" al metodo filaPivot e() y retorna el valor de fila pivote s[fpiv][0]=fo[cpiv-1];//Se guarda el valor que se cambiara de la fo double aux=s[fpiv][cpiv];//Se cra una variable, con el valor del nue

vo pivote for(int i=1;i<s[0].length;i++)//Se "pivotea" a la fila estandar s[fpiv][i]=(double)(s[fpiv][i]/aux); //Se divide a toda la fila c on el valor del pivote [Link](); imprimir(s);//Se muestra la matriz modificada double red=0;//Se crea una variable "red" for(int i=0;i<[Link]-1;i++)//Avanza las filas de la matriz s { if(i!=fpiv)//Ignora la fila pivoteada { red=s[i][cpiv];//Se guarda el valor del elemento de la matriz "s" en "red" for(int j=1;j<s[0].length;j++)//Avanza las columnas de la matr iz "s" s[i][j]=s[i][j]+(s[fpiv][j]*-red);//Se guarda los nuevos va lores obtenidos para el pivoteo } } //puntero para las soluciones if(cpiv<=inc+1) solucion[cpiv-2]=fpiv; [Link](); imprimir(s); [Link]("------------------------------"); sumas(s,fo); imprimir(s); } [Link]("\nZ="+s[[Link]-1][1]+"\n.....Entonces:..."); if(s[[Link]-1][1]>=0) [Link]("\nSEGUNDA FASE\n"); [Link]("C_(B)\t\tSolucion\tX_(1)\t\tX_(2)\t\tS_(1)\t\t S_(2)\n"); //Renovando la fo con el vector auxiliar fo2 for(int i=0;i<inc;i++){ fo[i+1]=fo2[i+1]; } //identidad for(int i=0;i<res;i++) s[i][i+4]=1;//Se crea la matriz identidad con la cantidad de restric ciones sumas(s,fo); imprimirv(fo); imprimir(s); fpiv=0;

cpiv=0; while(negativo(s)) { [Link]("..............."); cpiv=columnaPivote(s);//Se manda la matriz "s" al metodo columnaPivo te() y recibe el nuevo valor de la columna pivote fpiv=filaPivote(s,cpiv);//Se manda la matriz "s" al metodo filaPivot e() y retorna el valor de fila pivote //[Link](fpiv+" "+cpiv); s[fpiv][0]=fo[cpiv-1];//Se guarda el valor que se cambiara de la fo double aux=s[fpiv][cpiv];//Se cra una variable, con el valor del nue vo pivote //dividir el pivote para q sea 1 for(int i=1;i<s[0].length;i++)//Se "pivotea" a la fila estandar s[fpiv][i]=(double)(s[fpiv][i]/aux); //Se divide a toda la fila c on el valor del pivote [Link](); imprimir(s);//Se muestra la matriz modificada //reduccion x renglones double red=0;//Se crea una variable "red" for(int i=0;i<[Link]-1;i++)//Avanza las filas de la matriz s { if(i!=fpiv)//Ignora la fila pivoteada { red=s[i][cpiv];//Se guarda el valor del elemento de la matriz "s" en "red" for(int j=1;j<s[0].length;j++)//Avanza las columnas de la matr iz "s" s[i][j]=s[i][j]+(s[fpiv][j]*-red);//Se guarda los nuevos va lores obtenidos para el pivoteo } } if(cpiv<=inc+1) solucion[cpiv-2]=fpiv; [Link](); imprimir(s); [Link]("------------------------------"); sumas(s,fo); imprimir(s); }

for(int i=0;i<[Link];i++) solucion[i]=s[(int)solucion[i]][1]; [Link]("SOLUCIONES"); for(int i=0;i<[Link];i++) [Link]("x[%d]=%f ",i+1,solucion[i]);

[Link](); [Link]("Z="+s[[Link]-1][1]); } }

También podría gustarte