示例#1
0
BistablePoint makeBistable(int n, int p,double* iv, int maxIter, int popSz, void (*odefnc)(double,double*,double*,void*))
{
   //ODEflags(1);
   int popsz1, i;
   BistablePoint ans;
   Parameters * param;
   GApopulation pop;
   
   _U0 = malloc( n * sizeof(double));
   _U = malloc( n * sizeof(double));
   ODE_FNC = odefnc;
   popsz1 = popSz/5;
   INIT_VALUE = iv;

   GAinit(&deleteGAindividual,&clone,&fitness,&crossover,&mutate,0);
   pop = GArun((void**)initGApopulation(popSz,n,p),popSz,popsz1,maxIter,&callbackf);
   
   param = pop[0];
 
   for (i=1; i < popsz1; ++i) deleteGAindividual(pop[i]);
   free(pop);
   
   ans.param = 0;
   ans.unstable = ans.stable1 = ans.stable2 = 0;

   if (fitness((void*)param) < 1)
   {
       deleteGAindividual(param);
       return ans;
   }

   ans.param = param;
   ans.unstable = ans.stable1 = ans.stable2 = 0;

   //double ** ys = findTwoSteadyStates(param);
   // if (ys)
   if (UNSTABLE_PT)
       ans.unstable = UNSTABLE_PT;

   if (STABLE_PT)
       ans.stable1 = STABLE_PT;

   free(_U0);
   free(_U);
   deleteBadParams();
   return ans;
}
GApopulation evolveNetworks(int sz0,int sz1,int maxIter, GAFitnessFnc fitness, GACallbackFnc callbackFunc)
{
	GApopulation P;

	if (!fitness) return 0;

	_MAX_ITER = maxIter;
	GAsetFitnessFunction(fitness);
	GAsetCallbackFunction(callbackFunc);

	TRACK_NETWORK_PARENTS = GAisLineageTrackingOn();

	if (LOGFILE)
	{
		USER_CALLBACK_FNC = callbackFunc;
		callbackFunc = &callBackWithLogKeeping;
	}

	if (!MTrandHasBeenInitialized())
		initMTrand();

	P = randomNetworks(sz0);

	GAinit(&deleteNetwork, &cloneNetwork ,GAgetFitnessFunction(), &crossoverNetwork, &mutateNetwork, GAgetSelectionFunction(), callbackFunc);

	P = GArun(P,sz0,sz1,maxIter);

	/*if (LOGFILE)
	{
		USER_CALLBACK_FNC = 0;
		finalCallBackWithLogKepping(maxIter,P,sz1);
	}*/

	if (LOGFILE)
		fclose(LOGFILE);

	return P;
}