Example #1
0
int main(int argc, char * argv[]){



    srand(time(NULL));


    //exactTest(11,200);
            int n1 = 0;
            instance_t* t = instanceCreer(10,"test");
            instanceInit(t); 
            instanceRandNC(t);
            
            //instanceAfficher(t);
          	//instance_t* johnlogn = johnsonnlogn(t,0);
	        //instanceAfficher(johnlogn);
          
            instance_t * sol = branch_bound(t,&n1);
          
            //printf("Solution finale :");
            //instanceAfficher(sol);
            
            instanceDetruire(sol);
             instanceDetruire(t);
    
    return EXIT_SUCCESS;
}
Example #2
0
void exactTest(int instMax,int loop){
    float c1 = 0.0;
    float c2 = 0.0;
    float c3 = 0.0;
    int n1 = 0;
    int n2 = 0;
    int n3 = 0;
    
    chrono();
    for(int i = 0;i<instMax;i++){
        for(int j = 0;j<loop;j++){
            instance_t* t = instanceCreer(i,"test");
            instanceInit(t); 
            instanceRandNC(t);
            
            //instanceAfficher(t);
          	//instance_t* johnlogn = johnsonnlogn(t,0);
	        //instanceAfficher(johnlogn);
          
            instance_t * sol = branch_bound(t,&n1);
          
            //printf("Solution finale :");
            //instanceAfficher(sol);
            
            instanceDetruire(sol);
            

            c1 += chrono();
            
            instanceRandDE(t);                      
            sol = branch_bound(t,&n2);                      
            instanceDetruire(sol);
            c2 += chrono();
            
            instanceRandM(t);                      
            sol = branch_bound(t,&n3);                      
            instanceDetruire(sol);
            c3 += chrono();
            
            
            instanceDetruire(t);
            
        }
        printf("%i %.5f %.5f %.5f %i %i %i\n",i,c1/loop,c2/loop,c3/loop,n1/loop,n2/loop,n3/loop);
    }

}
Example #3
0
void iniciar_branch_bound(Graph *graph) {
    No_Cidade_Ponteiro no_inicial;
    no_inicial = (No_Cidade_Ponteiro) malloc(sizeof(struct No_Cidade));
    no_inicial->id_cidade =0;
    no_inicial->cidades_visitadas = 1;
    no_inicial->custo = 0;
    no_inicial->profundidade =0;
    no_inicial->no_pai =NULL;
    printf("\n\n#### Branch and Bound ####\n");
    branch_bound(graph, no_inicial);
    printf("\nQuantidade de Podas: %d\n", qtde_podas);
}
Example #4
0
void branch_bound(Graph *graph, No_Cidade_Ponteiro no_temporario)
{
    int i,pos_cidade, custo;
    No_Cidade_Ponteiro no;

    if (no_temporario->profundidade == graph->numero_vertices - 1)
    {
        if (no_temporario->custo + graph->matriz_adjacencia[no_temporario->id_cidade][0] < melhor_custo)
        {
            melhor_custo = no_temporario->custo + graph->matriz_adjacencia[no_temporario->id_cidade][0];
            printf("\nNova Solucao Melhor:\n");
            imprimir_caminho(no_temporario);
            printf("-> %d", maior_id+1);
            printf("\nCusto Total: %d\n", maior_custo+graph->matriz_adjacencia[maior_id][no_temporario->id_cidade]);
            maior_custo = 0;
        }
        free(no_temporario);
        return;
    }
    for (i=1;i<graph->numero_vertices;++i)
    {
        pos_cidade = (int) pow(2,i);
        if ((no_temporario->cidades_visitadas & pos_cidade) != 0)
            continue;

        custo = no_temporario->custo + graph->matriz_adjacencia[no_temporario->id_cidade][i];
        if (custo > melhor_custo) {
            if (custo < INFINITO) 
                qtde_podas++;
        }
        else {
            no = (No_Cidade_Ponteiro) malloc(sizeof(struct No_Cidade));
            no->id_cidade = i;
            no->cidades_visitadas = no_temporario->cidades_visitadas | pos_cidade;
            no->custo = custo;
            no->profundidade = no_temporario->profundidade +1;
            no->no_pai = no_temporario;
            branch_bound(graph, no);
        }
    }
    if (no_temporario) 
        free(no_temporario);
    return;   
}