Skip to content

feliperafael/Machine-Task-Scheduler

Repository files navigation

GeneticAlgorithm

Genetic algorithm implemented in C++ object-oriented
Project uses IDE codeblocks
Requirements: Need C++ 11 or higher
How to compile? Open a window in the terminal and execute the make command
How to run? ./bin/Release/GeneticAlgorithm input/input_file MAX_TIME SEED
How is the code organized?

The /src is where all the basic source codes of the genetic algorithm are, including abstract classes and default implementations.

The /input is where the input files are dependent on the problem being solved

In the /include folder should be all files added to the basic source code /src or all derived classes implemented

The algorithm implementation is being used to address the traveling thief problem, however the code can be adapted to solve any problem. Simply extend the classes and make the necessary adaptations

How to adapt the code to a new problem?


Como está organizado o código?
Configures.h Contém todas configurações e parâmetros necessários no código. Pode ser acessado de qualquer classe.

Crossover.h
Classe abstrata responsável pelo cruzamento dos indivíduos. Você deve estender essa classe e implementar sua função de cruzamento, a qual recebe um vetor de indivíduos e seu tamanho.

void cross(Individual ** vec_individuos, int num_individuos);

Database.h Classe abstrata de dados responsável pelos dados utilizados pelo AG. caso você use leitura de arquivos diferentes do formato padrão você deve estender a função loadBase conforme sua necessidade.

void loadBase(string base_name);

onde base_name é o nome do arquivo de entrada

Individual.h
Classe abstrata com a representação do indivíduo. Possui atributo aptidão, o qual indica o quão apto está minha solução/individuo. Essa classe deve ser estendida conforme a necessidade do problema a ser resolvido.

IndividualBuilder.h
Classe abstrata responsável pela criação de um indivíduo. Quando criado um novo indivíduo também deve ser criado um individuoBuilder responsável pela sua geração.

Individual * generateIndividuo();

IndividualSelector.h
Classe abstrata responsável pela seleção dos indivíduos da população para cruzamento e mutação.

Individual * selects(Individual ** pop);

LocalSearch.h
Classe abstrata responsável por realizar busca local/ ajuste de parâmetros em um dado indivíduo. Deve ser estendida conforme o tipo de indivíduo do problema.

Mutation.h

Classe abstrata responsável pela mutação de um dado indivíduo. Deve ser estendida conforme o tipo de indivíduo do problema.

Parser.h
Classe abstrata responsável por avaliar a qualidade de uma solução/individuo. Também deve ser estendida conforme o tipo de indivíduo do problema.

PopulationReplacement.h
Classe abstrata responsável pela junção dos indivíduos da antiga população com a nova população do AG. Pode ser estendida conforme características do problema.

SearchEngine.h
Parte central do Algoritmo Genético, essa classe é responsável por fazer as chamadas dos operadores genéticos e por guiar todo o processo de busca.O método void Evolve(); é responsável por evoluir uma população de soluções com as características setadas em SearchEngine e com os parâmetros setados no arquivo de configuração Configures.h. Essa classe possui diversos métodos sets para setar classes que foram estendidas segundo características do problema:

void setCrossover(Crossover * opCrossover);
void setMutation(Mutation * opMutation);
void setIndividualBuilder(IndividualBuilder * indBuilder);
void setPopulationReplace(PopulationReplacement * popReplace);
void setParser(Parser * parser);
void setSelection(IndividualSelector * seletor);
void setLocalSearch(LocalSearch * localSearch);

About

Genetic algorithm for task scheduler problem

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published