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; }