O Algoritmo Simplex em C
Por: Thalia Rodrigues • 10/7/2019 • Abstract • 368 Palavras (2 Páginas) • 180 Visualizações
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]
...