#include #include #include #include #define MAXTIME (500) #define NPATCH (3) #define ALPHA 0.05 #define KK 1.0 #define CONFRAC 0.1 #define MOVECOST 0.1 #define TIMECOST 0.01 #define STAYTIME (10) struct patch_def { double k; double alpha; double size; } patches[NPATCH]; struct con_def { double beta; int staytime; struct patch_def *patch; double time; double lunch; double inrate; } consumer; void InitSeed(void); void InitCon(struct con_def *); void InitPatch(struct patch_def *); void GrowPatch(struct patch_def *); void Feed(struct con_def *); void Move(struct con_def *); int main(void) { int ipat, ttt; InitSeed(); InitCon(&consumer); for(ipat=0;ipattm_sec+1)*(preztime->tm_min+1)* (preztime->tm_hour+1)*(preztime->tm_year)*(preztime->tm_year)); if(seed%2==0) seed++; srand48(seed); } void InitCon(struct con_def *con) { (*con).beta = CONFRAC; con->staytime = STAYTIME; con->patch = &patches[0]; con->time = 0.0; con->lunch = -MOVECOST; con->inrate = 0.0; } void InitPatch(struct patch_def *pat) { pat->k = KK; pat->alpha = ALPHA; pat->size = KK; } void GrowPatch(struct patch_def *pat) { pat->size += pat->alpha * pat->size * (1.0-pat->size/pat->k); if(pat->size>pat->k) pat->size = pat->k; } void Feed(struct con_def *con) { double eaten; eaten = con->beta * con->patch->size; con->patch->size -= eaten; con->lunch += eaten; con->time += 1.0; } void Move(struct con_def *con) { if(con->time>=con->staytime) { con->lunch -= TIMECOST*con->time; con->inrate = con->lunch/con->time; con->time = 0.0; /* must appear here; misplaced in book */ con->lunch = -MOVECOST; con->patch = &patches[(int)(drand48()*NPATCH)]; } }