Ir para conteúdo
Fórum Script Brasil
  • 0

Método Simplex


Guest girlpower

Pergunta

1 resposta a esta questão

Posts Recomendados

  • 0

/* METODO SIMPLEX

*/

#include <stdlib.h>

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

//Lo maximo que pueden alcanzar las variables y restricciones

#define MAX 10

#define RESTRICCION 3

double funcion[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("%lf",&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("%lf",&restricciones[c]);

fflush(stdin);

}

printf("Termino independiente ");

scanf("%lf", &independiente);

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 tabla inicial simplex

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

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

if (i == j)

restricciones[var+j]=1;

else

restricciones[var+j]=0;

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

restricciones[var+rest] = independiente;

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

restricciones[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(" %.2lf \t", restricciones[j]);

printf("\n");

}

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

//y la de holgura que saldra de la base

do {

//Encontrar la variable de decision 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[columna] > 0)

aux = restricciones[rest+var] / restricciones[columna];

else

count++;

if( menor > aux ) {

menor = aux;

renglon = i;

}

}

if(count == rest) {

printf("Soluci� no acotada");

exit(1);

}

printf("\nPivote: %.2lf, renglon %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[columna] * -1;

for(k=0; k <= rest+var; k++) {

restricciones[k] = (aux * restricciones[renglon][k]) +

restricciones[k];

}

}

}

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(" %.2lf \t", restricciones[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();//Elimina esta linea si copilas en linux o con gcc

}

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...