Guest girlpower Postado Maio 31, 2006 Denunciar Share Postado Maio 31, 2006 Olá, algué pode me ajudar a implementar o método simplex? beijos Girlpower Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Fashion Postado Agosto 30, 2007 Denunciar Share Postado Agosto 30, 2007 /* 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 3double 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 } Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Guest girlpower
Olá, algué pode me ajudar a implementar o método simplex?
beijos
Girlpower
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
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.