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]); } }