0% encontró este documento útil (0 votos)
97 vistas7 páginas

Definición de Máximo en C

Este documento describe un algoritmo para resolver problemas de programación lineal mediante el método simplex. Define constantes para el tamaño máximo de la función y restricciones. Lee los datos de la función objetivo y restricciones de un problema de optimización lineal, y crea la tabla inicial del simplex. Luego, iterativamente encuentra la variable de holgura que sale de la base y la variable básica que entra hasta llegar a una solución óptima.

Cargado por

Hilton Calderon
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
97 vistas7 páginas

Definición de Máximo en C

Este documento describe un algoritmo para resolver problemas de programación lineal mediante el método simplex. Define constantes para el tamaño máximo de la función y restricciones. Lee los datos de la función objetivo y restricciones de un problema de optimización lineal, y crea la tabla inicial del simplex. Luego, iterativamente encuentra la variable de holgura que sale de la base y la variable básica que entra hasta llegar a una solución óptima.

Cargado por

Hilton Calderon
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

#define MAX 10

#define RESTRICCION 3

double función[MAX],restricciones[MAX+1][MAX+RESTRICCION];

double independiente[RESTRICCION];

int leeDatos(int*var){

int rest,c,i;

printf(“FUNCION A OPTIMIZAR\nNumero de variables: “);

scanf(“%d”,var);

printf(“\nRecuerda:c1.X1+c2.X2+….cn.Xn=b\n\n”);

for(c=0;c<*var;c++)

printf(“c%d:”,c+1);
scanf(“%|f”,&funcion[c]);

fflush(stdin);

}
printf(“\nNumero de restricciones:”);
scanf(“%d”,&rest);
fflush(stdin);
for(i=0;i<rest;i++)
{
printf (“Restriccion %d\n”,i+1);
for(c=0;c<*var;c++)
{
printf(“c%d:”,c+1);

scanf(“%|f”,&restricciones[i][c]);

fflush(stdin);

Printf8”termino independiente”);

scanf(“%|f”,&independiente[i]);

fflush(stdin);

return rest;

}
int main(void)

int rest,var,ni;

int i,j,k,columna,renglon,count,cuenta;

double maximo =0,menor,aux,mult,temp;

rest=leeDatos(&var);

//crear table inicial simplex

for(i=0;i<rest;i++)

for(j=0;j<rest;j++)

if(i==j)

restricciones[i][var+j]=1;

else

restricciones[i][var+j]=0;

for(i=0;i<rest;i++)

restricciones[i][var+rest]=independiente[i];

for(j=0,j<var;j++)

restrincciones[rest][j]=funcion[j]*-1;

for(j=var;j<rest+var;j++)

restricciones[rest][j]=0;

ni=1;
printf(“\n----------------------------------------------------“);

printf(“\n ITERACION %d”,ni);

printf(“\n------------------------------------------------\n”);

ni++;

for(i=0;i<=rest;i++){

for(j=0;j<=rest+var;j++)

printf(“%.2If\t”,restricciones[i][j]);

printf(“\n”);

//encontrar la variable de decision que entra a la base

// y la de holgura que saldrá de la base

do
{
//encontrar la variable de //decisió n que entrara a la base
maximo=abs(restricciones[rest][0]);
columna=0;
for(j=0;j<rest+var;j++)
{
if(restricciones[rest][j]<0)
{
temp=-1*restricciones[rest][j];
if(maximo<temp)
{
maximo=temp;
columna=j;
}
}
else
continue;
}
count=0;
aux=1e20;
menor =1e20;
for(i=0;i<rest;i++){
if(restricciones[i][columna]>0)
aux=restricciones[i][rest+var]/restricciones[i][columna];
else
count++;
if(menor>aux){
menor=aux;
renglon=i;
}
}
if(count==rest){
printf(“Solucion no acotada”);
exit(1);
}
printf(“\nPivote: %.2If, rengló n %d columna %d”;restricciones[renglon]
[columna],renglon,columna);
//encontrar los coeficientes de la nueva tabla
aux =restricciones [renglon][columna];
for(j=0;j<=(rest+var);j++);
restricciones[renglon][j]=restricciones[renglon][j]/aux;
for(i=0;i<=rest;i++){
if(i==renglon)

continue;
else{
aux=restricciones[i][columna]*-1;
for(k=0;k<=rest+var;k++){
restricciones[i][k]=(aux*restricciones[renglon][k]+
restricciones[i][k];
}
}
}
printf(“\n---------------------------------------------“);
printf(“\n ITERACION %d”,ni);
printd(“\n---------------------------------------\n”);
ni++;
for(i=0;i<=rest;i++){
for(j=0;j<=rest+var,j++)
printf(“ %.2If\t”,restricciones[i][j]);
printf(“\n”);
}
cuenta=0;
for(j=0,j<rest+var;j++)
if(restricciones[rest][j]>=0)
cuenta++;
if(cuenta==rest+var)
break;
} while (cuenta);
printf(“----->”);
getch();
}

También podría gustarte