• Aucun résultat trouvé

Intubation en dehors d’un contexte traumatique

O ITI para operações com uma precedente é definido na equação (7.4).

(7.4)

O intervalo de tempo de início para operações com mais do que uma precedente é a interceção dos intervalos de tempo de início de todas as operações precedentes correlacionadas pelos respetivos tempos de processamento (equação (7.5)).

(7.5)

7.3.2. Implementação das Meta-heurísticas

Nesta subsecção são descritos alguns detalhes da implementação das várias Meta- heurísticas. A Pesquisa Tabu e os Algoritmos Genéticos foram importados do sistema MASDScheGATS.

Na implementação da Pesquisa Tabu e dos Algoritmos Genéticos foi considerado o conceito de afastamento máximo na geração de vizinhanças/populações (Madureira, 2003). Uma vez que se utiliza permutações de tarefas, é possível definir um afastamento máximo para que se possa restringir algumas soluções que podem levar a planos não exequíveis. Por exemplo, poderá não fazer sentido trocar a primeira tarefa com a última. Assim sendo, com o conceito de afastamento máximo, o espaço de soluções é menor, o que possibilita uma maior eficiência na procura de soluções. O afastamento máximo é representado através de uma percentagem do número de tarefas do problema (e.g., com um afastamento

137 máximo de 25% num problema de 20 tarefas, cada tarefa poderá trocar com um dos seus 5 vizinhos à direita ou à esquerda).

Foram também consideradas algumas das regras de prioridade descritas na secção 2.4, para a geração da solução inicial, nomeadamente a EDD, SPT, REDD, RND, e SeqNivel.

7.3.2.1. Pesquisa Tabu

A implementação da Pesquisa Tabu foi desenvolvida com recurso a uma framework desenvolvida em Java por Robert Harder, designada OpenTS5, que suporta o paradigma de programação orientada a objetos.

Uma vez que esta framework foi desenvolvida para funcionar para qualquer tipo de problemas, foi necessária a implementação de algumas classes, nomeadamente para lidar com a estrutura das soluções, para calcular a função objetivo, para efetuar o movimento de troca de soluções, e para gerar todos os movimentos possíveis em cada iteração. Nesta última classe foi implementado o mecanismo de geração de vizinhanças anteriormente descrito.

A utilização desta framework revelou algumas vantagens pois segue o algoritmo original e, além de ser eficaz e eficiente, lida automaticamente com alguns mecanismos próprios do algoritmo, salientando-se o facto de percorrer a vizinhança de soluções, selecionar a melhor solução, e gerir a lista tabu, duma forma transparente para o programador.

Os parâmetros desta Meta-heurística são:

Critério de Paragem – número de iterações que o algoritmo efetua;

Afastamento máximo – percentagem de geração de vizinhança, dependendo do tamanho do problema;

Subvizinhança – percentagem do tamanho da vizinhança usada ao longo da execução;

Lista Tabu – tamanho da lista tabu.

5

138

7.3.2.2. Simulated Annealing

Esta Meta-heurística foi implementada diretamente a partir do algoritmo original, descrito na subsecção 3.2.3. Os parâmetros do algoritmo são:

Critério de Paragem – número de iterações que o algoritmo efetua;

Número de iterações k – número de iterações à mesma temperatura;

Temperatura Inicial – temperatura com que o algoritmo começa a processar;

Alpha – representa o fator de redução de temperatura, definido no intervalo ]0-1[.

A única alteração realizada no algoritmo de modo a aumentar a eficiência foi utilizar um método de geração de vizinhança ligeiramente diferente. Normalmente é gerada a vizinhança sendo depois escolhido um vizinho aleatoriamente. No entanto, é necessário gerar e guardar a totalidade da vizinhança em todas as iterações, o que se revela pouco eficiente. Para tentar incrementar a eficiência, considerou-se uma seleção aleatória do índice do vizinho a selecionar antes da geração da vizinhança, para que o método retorne quando encontrar o vizinho selecionado, em vez de se gerar a totalidade da vizinhança e só depois selecionar um vizinho aleatoriamente. Desta forma não é necessário guardar a vizinhança e, apenas no pior caso, é percorrida a totalidade da vizinhança, melhorando a eficiência. De modo a ser possível saber o número total de vizinhos, para proceder à seleção aleatória de um vizinho, utilizou-se a fórmula da equação (7.6).

(7.6)

com n igual ao número de tarefas e k igual ao número máximo de posições a trocar.

7.3.2.3. Algoritmos Genéticos

Esta Meta-heurística foi implementada com recurso a uma framework externa, a WATCHMAKER6, desenvolvida por Daniel W. Dyer. Esta é uma framework orientada a objetos para Computação Evolucionária, desenvolvida em Java.

Assim como na framework da Pesquisa Tabu, também esta necessitou do desenvolvimento de algumas classes específicas ao problema de escalonamento, nomeadamente para cálculo da função objetivo, para geração de populações (onde se

6

139 implementou o mecanismo de geração de populações descrito anteriormente), e para cada operador usado (cruzamento, mutação e seleção).

O algoritmo é seguido com total transparência para o programador, e sem que este necessite de se preocupar com o desenvolvimento, evoluindo automaticamente, e retornando o melhor indivíduo da população.

Os parâmetros dos Algoritmos Genéticos são:

Número de gerações – número de gerações que o algoritmo realiza;

Geração da população inicial – percentagem de geração da população inicial, vulgo afastamento máximo;

Tamanho da população – percentagem do tamanho da população usada ao longo da execução;

Taxa de cruzamento – taxa de cruzamento de indivíduos;

Taxa de mutação – taxa de mutação de indivíduos.

7.3.2.4. Otimização por Colónia de Formigas

Na implementação desta Meta-heurística tentou usar-se uma aplicação o mais direta possível do algoritmo original, descrito na subsecção 3.2.5, embora com algumas adaptações. Considera-se um caminho composto por vários ramos, sendo cada um desses ramos um par de tarefas (por exemplo, A->B, E->C, etc.).

Os parâmetros de entrada são:

Número de iterações – número de iterações máximo por colónia;

Número de formigas – número de formigas por colónia;

Número de colónias – número de colónias existentes. Foi dado suporte para múltiplas colónias;

Taxa de evaporação – taxa de evaporação de feromona;

Alpha – importância do valor heurístico;

Beta – importância da feromona.

Foi dado suporte para múltiplas colónias, tendo cada colónia a sua lista de formigas. Cada formiga tem um caminho atual a percorrer e uma lista de caminhos já percorridos. Sempre que tenta mudar de caminho, cada formiga verifica se o caminho já está na lista e só permite a mudança se este ainda não estiver incluído na mesma. Cada caminho tem uma

140

solução de tarefas e o respetivo valor objetivo, sendo a construção dos caminhos feita ramo a ramo. Cada colónia estagna quando todas as formigas estão a percorrer o mesmo caminho.

Em cada colónia existe uma matriz que guarda a feromona dos ramos e em cada célula desta matriz é armazenada a feromona existente no ramo i->j. Uma particularidade da matriz é o facto dos campos em que i=j, ou seja, as diagonais da matriz, corresponderem ao caso de um nó i ser a primeira tarefa da solução. Inicialmente todos os campos da matriz são inicializados a -1.

Para uma melhor compreensão, considere-se, a título de exemplo, duas formigas num problema de 5 tarefas, cada uma a percorrer um caminho diferente (BCEAD e ECBDA). Cada formiga deposita a feromona nos ramos, de forma a depositar tanto mais feromona quanto melhor for a qualidade do caminho.

Tabela 7.3 – Exemplo de matriz de feromona

j i A B C D E A -1 -1 -1 0.5 -1 B -1 0.5 0.5 0.2 -1 C -1 0.2 -1 -1 0.5 D 0.2 -1 -1 -1 -1 E 0.5 -1 0.2 -1 0.2

Na Tabela 7.3 é apresentada a matriz de feromona no fim de uma iteração. É possível verificar claramente as diferenças de feromona nos ramos, sendo a feromona de um caminho igual a 0.2 e a feromona do outro igual a 0.5.

Em cada iteração, enquanto as formigas constroem os caminhos, a escolha de cada ramo funciona como uma probabilidade, i.e. poderá ser escolhido um ramo que deteriora a solução, não sendo sempre garantida uma escolha dos melhores ramos, embora estes tenham, obviamente, uma maior probabilidade de serem escolhidos.

O valor heurístico da fórmula de escolha dos caminhos (equação (3.3), página 36) é calculado em tempo real, na construção de um caminho, ou seja, vai sendo aplicada a função objetivo na construção iterativa de um caminho. Isto permite saber o quanto um caminho é bom em dado momento. Foi usada esta abordagem devido ao facto da função objetivo poder variar consoante a parametrização escolhida.

141 Depois de um novo caminho estar construído, este é comparado com o caminho atual que a formiga está a percorrer e só é feita uma mudança de caminho se o novo caminho for melhor que o atual. Esta restrição foi colocada para não permitir que a formiga esteja, no pior caso, sempre a mudar de caminho, impedindo a estagnação da colónia, evitando-se que uma formiga esteja a percorrer um bom caminho e mude para um pior. Com base nos testes efetuados, foi possível verificar que os resultados obtidos melhoram sensivelmente.

No final, quando uma colónia estagna ou quando atinge o número máximo de iterações, o caminho com mais feromona é devolvido.

7.3.2.5. Particle Swarm Optimization

À semelhança das outras Meta-heurísticas, também o Particle Swarm Optimization foi implementado tentando ser o mais fiel possível ao algoritmo inicial. No entanto, foram introduzidas algumas adaptações.

O Particle Swarm Optimization é um algoritmo bastante simples e com toda a lógica do seu funcionamento nas suas funções de cálculo de velocidade e posição para cada partícula. Na aplicação a problemas de Escalonamento, essa sua simplicidade de compreensão na implementação e funcionamento é agravada, podendo até tornar-se um pouco confusa.

Inicialmente o algoritmo foi pensado para lidar com um certo número de dimensões lógicas. Cada uma dessas dimensões diz respeito a uma coordenada num referencial independente. Com o conjunto dessas coordenadas tem-se a posição da partícula em cada um desses referenciais (e.g. um referencial de 3 dimensões corresponde a um referencial xyz).

Assim sendo, o algoritmo é constituído por partículas, cada uma com as suas dimensões, por uma melhor solução encontrada (ótimo local), e por um valor de fitness atual da partícula. Considerando que esse conjunto de partículas diz respeito a uma população, existe uma forma de guardar a melhor solução encontrada desde o início de funcionamento do algoritmo (melhor solução global).

Juntando estes componentes, não se encontra uma forma fácil e com lógica para adaptá-lo ao problema de escalonamento. A forma encontrada e usada para essa adaptação passa por fazer corresponder as dimensões ao número de tarefas. E é aqui que

142

tudo fica mais complexo. Ou seja, se a cada dimensão corresponder uma tarefa, e se considerarmos um problema com 40 tarefas, iremos colocar o algoritmo em funcionamento com N partículas, contendo cada uma, 40 dimensões.

Os cálculos de velocidade e posicionamento são efetuados para cada uma dessas dimensões de cada partícula. O seu valor de fitness é calculado após ordenar as dimensões por ordem crescente (minimização) e guardado no fitness atual de cada uma. O valor do ótimo local será substituído sempre que a ordenação das dimensões dessa partícula resultar num valor de fitness com mais qualidade que o anterior.

Relativamente ao valor da melhor solução global, como descrito na literatura, este é obtido após apuramento da solução com mais qualidade encontrada entre os ótimos locais. Foi preciso ter em atenção que, quando as dimensões de cada partícula são ordenadas para cálculo do fitness, essa ordenação é temporária, efetuada apenas para esse cálculo.

Utilizou-se uma classe responsável por armazenar a informação referente a cada partícula, nomeadamente o ótimo local, o fitness da solução, o fitness da melhor solução global, e a estrutura de dados referente aos valores para cada dimensão. Nessa estrutura de dados para as dimensões, é possível guardar os atributos relativos às tarefas, bem como a velocidade e a posição. Embora a velocidade e posição não façam parte da informação de entrada do problema a tratar, foram incluídos em conjunto com os atributos de entrada das tarefas, visto que o seu nível de dependência e hierarquia em relação às partículas e às suas dimensões era igual.

Os parâmetros desta Meta-heurística são:

Número de iterações – critério de paragem do algoritmo;

Número de partículas – número de partículas;

Velocidade mínima – velocidade mínima das partículas;

Velocidade máxima – velocidade máxima das partículas;

Inércia mínima – inércia mínima usada pelo algoritmo;

Inércia máxima – inércia máxima usada pelo algoritmo;

C1 – componente cognitiva;

C2 – componente social;

Limite inferior – limite inferior da partícula usado pelo algoritmo;

143

7.3.2.6. Colónia de Abelhas Artificiais

Na implementação desta Meta-heurística usou-se um algoritmo ligeiramente modificado, pois o algoritmo original foi proposto inicialmente para problemas sem restrições. Esta versão modificada foi proposta por (Karaboga e Akay, 2011) para obter melhor desempenho em problemas de otimização com restrições, que é o caso do problema de escalonamento.

De forma geral, as principais mudanças no algoritmo consistiram em incorporar mais parâmetros de controlo de modo a melhorar a sua capacidade de convergência para problemas de otimização com restrições. Outra alteração passou pelo uso de uma abordagem de seleção baseada nas regras de seleção de Deb (2000) em vez de uma seleção gananciosa. Para além disso, por permitir soluções inviáveis na população, de modo a garantir alguma diversidade, o algoritmo atribui valores probabilísticos às soluções inviáveis que são inversamente proporcionais às suas violações de restrições, o que lhes dá hipóteses de serem selecionadas no processo de seleção de abelhas espectadoras (Karaboga e Akay, 2011).

Através da aplicação das regras de seleção de Deb (2000), as abelhas mantêm a posição ou memorizam a nova posição através do esquecimento da posição antiga. O método de Deb (2000) utiliza um operador de seleção por torneios, onde duas soluções são comparadas em cada instante através da aplicação dos seguintes critérios:

 Qualquer solução viável é preferida a qualquer solução inviável;

 Entre duas soluções viáveis, é preferida aquela que tem melhor valor na função objetivo;

 Entre duas soluções inviáveis, é preferida aquela que viola menos restrições;

Com base nestes critérios, as probabilidades para as abelhas espectadoras são calculadas através da equação (7.7), que substitui a equação (3.7) da página 43.

(7.7)

onde representa a penalização da solução i e representa o valor da função objetivo da solução i, o qual é proporcional à quantidade de néctar da fonte de comida. O valor de fitness é determinado pela equação (7.8).

144

(7.8)

onde é o valor de custo da solução i. Os parâmetros desta Meta-heurística são:

Tamanho da população – número de abelhas na colónia;

Insucesso máximo – número máximo de ciclos permitidos para tentar melhorar uma solução;

Número de ciclos – critério de paragem do algoritmo;