/* Iterates the bat */ void iterate_bat(Game *game) { switch(game->bat->type) { case BAT_WIDE : case BAT_DEFAULT : move_bat(game); break; case BAT_LASER : move_bat(game); iterate_bat_laser(game); break; default : g_assert_not_reached(); } }
int main() { srand(time(NULL)); data dat; readfile(dat, "../../data/ks_19_0"); int items = dat[0].value; population *pop, popalpha; initialize_population(popalpha, items); pop = &popalpha; //print(*pop); bat best = get_best(*pop); int iterations = 200; while(iterations > 0){ new_solutions(*pop,dat); calc_fitness(*pop, dat); if(getrand()> 0.5){ best = get_best(*pop); move_bat(best, rand()%5, dat); // amplitude is 2 } if(fitness(best, dat) > fitness((*pop).best, dat)) (*pop).best = best; iterations--; } print(*pop); }
void new_solutions(population &pop, data dat) { int items = pop.items; for(int i = 0; i < items; i++) { pop.freq[i] = freq_min + (freq_max - freq_min)*getrand(); pop.velocity[i] = (int)distance(pop.bats[i], pop.bats[0], items)*pop.freq[i]; move_bat(pop.bats[i], pop.velocity[i], dat); pop.rate[i] = 0.5; } }
/* When the mouse moves, move the bat. */ void handle_mouse_event(nbstate *state, GR_EVENT_MOUSE *ev) { move_bat(state, ev->x - state->winx); }