TrabalhosGratuitos.com - Trabalhos, Monografias, Artigos, Exames, Resumos de livros, Dissertações
Pesquisar

O Algoritmo Simplex em C

Por:   •  10/7/2019  •  Abstract  •  368 Palavras (2 Páginas)  •  156 Visualizações

Página 1 de 2

void

simplex_melhorSolucao() //Achará a melhor solução.

{

int NumLinhas_coeficiente, NumColunas_coeficiente, NumLinhas_lim, NumLinhas_inversa;

double **coeficientes;

double **inversa;

double *custo, *limitante;

double *atual;

double objetivo = 0.0;

int i,j, k, l, flag;

double auxiliar = 0.0;

int aux = 0.0, min = 1000000, iteracoes, aux2;

double *vetor_auxiliar;

double pivo, elemento_a_zerar;

int linha_pivo;

double *interm, res = 0.0, custo_relativo = 0.0, menor_custo_relativo=10000000;

int NroVNB, NroVB;

int *IndicesBasicos, *IndicesNaoBasicos;

int IndiceQueEntraBase, IndiceQueSaiBase;

int posEntra, posSai;

coeficientes = (double **) malloc(NumLinhas_coeficiente*sizeof(double *));

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

coeficientes[i] = (double *) malloc(NumColunas_coeficiente*sizeof(double));

limitante = (double*) malloc(NumLinhas_inversa*sizeof(double));

custo = (double*) malloc(NumLinhas_lim*sizeof(double));

NroVNB = NumColunas_coeficiente - NumLinhas_coeficiente;

NroVB= NumLinhas_coeficiente;

IndicesBasicos = (int *) malloc(NroVB*sizeof(int));

IndicesNaoBasicos = (int *) malloc(NroVNB*sizeof(int));

inversa = (double **) malloc(NroVB*sizeof(double *));

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

inversa[i] = (double *) malloc(NroVB*sizeof(double));

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

for(j=0;j<NroVB; j++){

inversa[i][j] = coeficientes[i][IndicesBasicos[j]];

}}

atual = (double *) malloc(NumLinhas_lim*sizeof(double));

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

atual[i] = 0.0;

atual[i] = limitante[i];

}

flag = 1; iteracoes = 0;

interm = (double *) malloc(NumLinhas_coeficiente*sizeof(double));

vetor_auxiliar = (double *) malloc(NroVB*sizeof(double));

while( (flag == 1 ) ){

objetivo= 0.0;

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

objetivo += custo[IndicesBasicos[i]] * atual[i];

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

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

interm[j] = 0.0;

for(j=0; j<NroVB; j++){

for(k=0; k<NroVB; k++){

interm[j] += inversa[j][k] * coeficientes[k][IndicesNaoBasicos[i]];}}

res = 0.0;

for(l=0; l<NroVB; l++){

res += custo[IndicesBasicos[l]] * interm[l];

}

custo_relativo = custo[IndicesNaoBasicos[i]] - res;

if(custo_relativo < menor_custo_relativo){

menor_custo_relativo = custo_relativo;

IndiceQueEntraBase = IndicesNaoBasicos[i];

posEntra = i;

}}

if(menor_custo_relativo >= 0)

break;

for(i=0; i<NroVB; i++) vetor_auxiliar[i] = 0.0;

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

for(j=0; j<NroVB; j++){

vetor_auxiliar[i] += inversa[i][j]*coeficientes[j][IndiceQueEntraBase];

}}

for(i=0; i<NroVB; i++) coeficientes[i][IndiceQueEntraBase]

...

Baixar como (para membros premium)  txt (4.2 Kb)   pdf (33.3 Kb)   docx (9.1 Kb)  
Continuar por mais 1 página »
Disponível apenas no TrabalhosGratuitos.com