void Smooth() { int imember; /* current member */ int i, j, igene; /* counters */ int begin, end; /* limit the operator */ static double *Vector_Aux; static int first=1; if (first) { Vector_Aux = (double *) calloc((unsigned) Genes, sizeof(double)); if (Vector_Aux == NULL) Error("Allocation failed for Vector_Aux"); first = 0; } /* For all the members of the current population */ if (verbose) fprintf(stderr,"\nSubpopulation %d smoothing trial solutions\n", instance); for (imember = 0; imember < Popsize; imember++) { Unpack(New[imember].Gene, Bitstring, Length); FloatRep(Bitstring, Vector, Genes); for (igene = 0, Vector_Aux[igene] = 0.; igene < NSOURCES + NRECEIVERS; igene++, Vector_Aux[igene] = 0.) { if (igene < NSOURCES) { /* no smooth of source statics */ Vector_Aux[igene] = Vector[igene]; } else { i = to_filter[igene - NSOURCES][0]; j = to_filter[igene - NSOURCES][1]; if (to_filter[igene - NSOURCES][2] == 2) Vector_Aux[igene] = (Vector[i] + Vector[j]) / 2.; else Vector_Aux[igene] = (Vector[i] + Vector[igene] + Vector[j]) / 3.; } } /* Packing */ StringRep(Vector_Aux, Bitstring, Genes); Pack(Bitstring, New[imember].Gene, Length); New[imember].Needs_evaluation = 1; } }
Evaluate() { register double performance; register int i; register how_many; /* # of models to evaluate */ int idebug; /* DEBUG */ Trace("Evaluate entered"); Dtrace("evaluate"); for (how_many=0, i=0; i<Popsize; i++) { if ( New[i].Needs_evaluation ) { Unpack(New[i].Gene, Bitstring, Length); if (Floatflag) { FloatRep(Bitstring, to_be_calculated[how_many], Genes); how_many++; } } } eval(how_many, Genes); for (how_many=0, i=0; i < Popsize; i++) { if ( New[i].Needs_evaluation ) { New[i].Perf = eval_returned[how_many]; how_many++; performance = New[i].Perf; New[i].Needs_evaluation = 0; Trials++; TrialTotal++; Spin = 0; /* we're making progress */ if (Savesize) Savebest(i); if (Trials == 1) Best = performance; if (BETTER(performance, Best)) { Best = performance; } Onsum += performance; Offsum += Best; } } Trace("Evaluate completed"); }