Exemple #1
0
// callback for keyboard events
void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
{
    if (key == GLFW_KEY_R && action == GLFW_PRESS){
        // reset all the instances
        std::list<ModelInstance>::iterator it;
        for(it = gInstances.begin(); it != gInstances.end(); ++it){
            (*it).transform = random_transform();
        }
    }
}
Exemple #2
0
transform_model* evolve_transform(
    const language_model* model,
    const char* text,
    int (*controller) (
        int iteration, transform_model* transform,
        const char* better_output, unsigned long score)){

    const int population_count = POPULATION_SIZE;
    transform_model* population[population_count];

    // Initial population
    {
        int i;
        for (i = 0; i < population_count; i++){
            population[i] = random_transform();
        }
    }


    long iteration;
    int done = 0;
    for (iteration = 0;!done;iteration++){
        {
            int i;
            for (i = 0; i < population_count; i++){
                char* out = process(population[i], text, model);
                free(out);
            }
        }


        qsort(&population, population_count, sizeof(transform_model*),
              inv_language_score_cmp);



        {
            transform_model* winner = population[0];
            char* better = process(winner, text, model);

            int action = controller(iteration, winner, better, winner->score);

            if ((iteration % SHOW_INTERVAL) == 0) {

                int limit = strlen(better);
                // Make the “better” string readable
                if (limit > 50){
                    strcpy(&better[40],
                           "\x1b[7m%\x1b[0m");

                    limit = 40;
                }

                int i;
                for (i = 0; i < limit; i++){
                    if ((!isalnum(better[i])) && (!ispunct(better[i])) && (better[i] != ' ')){

                        better[i] = '.';
                    }
                }

                printf("Iteration (%5li) [%5li | %3li]: |\x1b[1m%s\x1b[0m|\n",
                       iteration, winner->score,
                       winner->output_size, better);
            }

            free(better);
            switch(action){
            case EVOLVE_SHAKE:
                shake(population);

            case EVOLVE_CONTINUE:
                cross(population, iteration, text);
                break;

            case EVOLVE_DONE:
                done = 1;
                break;

            default:
                printf("Unknown action code: %i\n", action);
            }
        }
    }

    // Free population
    {
        int i;
        for (i = 1; i < population_count; i++){
            free_transform_model(population[i]);
        }
    }

    return population[0];
}
Exemple #3
0
// convenience function that returns a random generated instance
static void CreateRandomInstance() {
    ModelInstance instance;
    instance.asset = &gBox;
    instance.transform = random_transform();
    gInstances.push_back(instance);
}