void randomico_descida(int n, int *s, int *p, int *w, int b, int penalidade, int *peso_objetos, int *fo, int maxIter) { int delta, melhor_delta, melhor_posicao, iter; int v = 0; delta = INT_MAX; iter = 0; while(delta > 0 || iter <= maxIter) //while1 { v = random(n); troca_bit(s, v); delta = (-p[v]*!s[v] + p[v]*s[v] + penalidade*MAX(0, *peso_objetos - b) - penalidade*MAX(0, *peso_objetos - w[v]*!s[v] + w[v]*s[v] - b)); troca_bit(s, v ); printf("\niter = %d | delta = %d",iter,delta); if (delta > 0) //if 1 { *fo = *fo + delta; troca_bit(s, v); // s <-- sī *peso_objetos += -w[v] * !s[v] + w[v] * s[v]; iter = 0; }//if 1 else iter++; } //while2 printf("-------------------------------------------------\n"); printf("Melhor solucao encontrada pelo Metodo da Randomico de descida:\n"); printf("Funcao objetivo: %d\n", *fo); printf("Peso da mochila: %d Inviabilidade = %d \n", *peso_objetos, MAX(0,*peso_objetos - b)); printf("-------------------------------------------------\n"); }//randomico_descida