Exemple #1
0
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;
	}
}
Exemple #2
0
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");
}