Capítulo 5. O sistema AutoDynAgents e o módulo de Auto-Optimização
5.3. Módulo de Auto-Optimização
5.3.1.3. Fase de Reutilização
minmaxCmaxOptCmaxOpt1, CmaxOptY
1, CmaxOptY , CmaxOpt1≥ 0 e CmaxOptY≥ 0 0, CmaxOpt1< 0 tY< 0
K (22)
5.3.1.3. Fase de Reutilização
Na fase de Reutilização é seleccionado, da lista de casos devolvida pela fase anterior, um caso dos mais similares com o novo caso, sendo a respectiva solução sugerida como uma possível solução para a resolução do mesmo. Assim, a Meta-heurística e os respectivos parâmetros usados para a resolução desse caso muito similar são copiados para a resolução do novo caso.
O algoritmo da fase de Reutilização (Tabela 16) tem a lista de casos devolvida pela fase de Recuperação como parâmetro de entrada e devolve uma Meta-heurística, com respectiva parametrização, como parâmetro de saída. Inicialmente são inicializadas cinco variáveis, nomeadamente uma variável para guardar o melhor caso (MelhorCaso), a variável para devolver a Meta-heurística com os parâmetros (MetaHeuristica), uma variável para servir de comparação para se determinar se dois casos são muito similares (SimMuitoSimilares), uma variável para guardar a lista de melhores casos presentes na ListaCasos (ListaMelhoresCasos), e uma variável para servir de comparação na determinação dos melhores casos (RazaoMinima). Mais à frente é melhor explicado o uso da variável SimMuitoSimilares e da variável RazaoMinima.
Tabela 16 – Algoritmo da fase de Reutilização Entrada: ListaCasos
Saída: MetaHeuristica // Variável para guardar a Meta-heurística e respectivos parâmetros a retornar
1 MelhorCaso ← ({},0); // Variável para guardar o melhor caso
2 MetaHeuristica ← {};
3 SimMuitoSimilares ← 0.95; // Similaridade para a qual dois casos são considerados muito similares
4 ListaMelhoresCasos ←{}; // Lista de melhores casos
5 RazaoMinima ←0.75; // Razão mínima entre o CmaxOpt e o Cmax, para que um caso possa ser
6 Se ListaCasos = ∅ Então
7 // Se ListaCasos estiver vazia, aplicar parâmetros pré-definidos pelo utilizador
8 MetaHeuristica = AplicaParametrosPreDefinidos();
9 Senão
10 // Senão, percorrer os casos da ListaCasos
11 Para cada Casoi∈ ListaCasos Faz
12 //Para cada caso comparar a respectiva similaridade com a melhor até ao momento
13 Se ComparaSims(Casoi,MelhorCaso) >= SimMuitoSimilares Então
14 RazaoCasoi ← Casoi.CmaxOpt / Casoi.Cmax;
15 // Perante casos muito similares comparar a razão entre CmaxOpt e Cmax com a RazaoMinima
16 Se RazaoCasoi >= RazaoMinima Então
17 // Adicionar o Casoi à ListaMelhoresCasos se a razão entre o seu CmaxOpt e o Cmax for superior ou igual à RazaoMinima
18 ListaMelhoresCasos.Adicionar(Casoi);
19 Senão
20 // Calcular a razão entre o CmaxOpt e o Cmax do MelhorCaso
21 RazaoMelhor ← MelhorCaso.CmaxOpt / MelhorCaso.Cmax;
22 // Comparar as duas razões, para se determinar o melhor caso
23 Se RazaoCasoi = RazaoMelhor Então
24 // Razoes iguais, necessário comparar tempos de
execução
25 Se Casoi.TimeExec< MelhorCaso.TimeExec Então
26 // Caso mais eficiente, actualizar MelhorCaso
27 MelhorCaso ← Casoi;
28 Fim
29 Senão
30 Se RazaoCasoi > RazaoMelhor Então
31 // Caso mais eficaz, actualizar MelhorCaso
32 MelhorCaso ← Casoi;
33 Fim
34 Fim
35 Fim
36 Senão
37 // Casos não são muito similares, comparar as similaridades directamente
38 Se Casoi.Sim > MelhorCaso.Sim Então
39 // Caso mais similar, actualizar MelhorCaso
40 MelhorCaso ← Casoi;
41 Fim
42 Fim
43 // Verificar se a ListaMelhoresCasos tem elementos
44 Se ListaMelhoresCasos <> ∅ Então
45 // Se a ListaMelhoresCasos não estiver vazia, selecciona um caso aleatoriamente para ser considerado como melhor caso
46 Indice ← aleatório(0,ListaMelhoresCasos.Tamanho) Então
47 MelhorCaso ← ListaMelhoresCasos.Retorna(Indice);
48 Fim
49 // Se a ListaMelhoresCasos estiver vazia, o MelhorCaso é o caso mais similar ou é o caso mais eficaz-eficiente de entre os casos mais similares
50 Fim
51 // Devolver a solução usada pelo MelhorCaso
52 MetaHeuristica ←DevolverSolucao(MelhorCaso);
53 Fim
54 Devolver MetaHeuristica;
A primeira verificação a efectuar é se a lista de casos recuperados está ou não vazia. Se estiver vazia, então não existem casos com similaridade superior à superioridade mínima especificada na fase de Recuperação. Isto significa que serão usados os parâmetros pré-definidos pelo utilizador/perito na Interface Gráfica, funcionando como ponto de partida para a resolução de casos futuros com os atributos similares ao novo caso.
Se a lista tiver elementos, então a mesma é percorrida para se seleccionar os casos mais eficazes ou, em contra partida o caso mais similar, se não houver casos suficientemente eficazes. Dentro deste ciclo são efectuadas algumas verificações de modo a determinar se existem casos bastante similares entre si, para, em caso positivo, ser então possível a selecção dos melhores casos ou a selecção do caso mais eficaz-eficiente, através da comparação por tempo de conclusão e tempo de execução. Assim, a verificação dos casos bastante similares é efectuada com recurso à equação (23), comparando-se o valor resultante com a variável de similaridade usada para o efeito (SimMuitoSimilares). Para esta variável considerou-se o valor de 0.95, o que significa que dois casos são bastante similares se a razão entre as suas similaridades com o novo caso for superior a 95%.
ComparaSimsCaso1, Caso2 =maxSimminSimq>Go1, Simq>GoY
q>Go1, Simq>GoY (23)
Quando existem casos bastante similares, é necessário calcular a razão (equação (24)) entre CmaxOpt e o Cmax de cada caso, para se proceder à sua comparação com a RazaoMinima. Esta variável indica que um caso é considerado como um dos melhores se a razão do seu CmaxOpt pelo seu Cmax for igual ou superior a 0.75. Quando isso acontece, o caso é adicionado na ListaMelhoresCasos.
RazaoCaso`=CmaxOptCmax q>Go`
q>Go` (24)
Quando a razão de um caso não é superior à RazaoMinima é necessário calcular a razão entre o CmaxOpt e o Cmax do melhor caso até dado momento, para ser possível efectuar a comparação na
determinação do melhor caso. No caso da razão do Casoi ser igual à razão do MelhorCaso (equação (25)), então os dois casos são igualmente eficazes, sendo necessário comparar os tempos de execução. Se o tempo de execução do Casoi for inferior ao do MelhorCaso em dado momento, então o MelhorCaso passará a ser o Casoi, pois é um caso mais eficiente. Senão, quando a razão do Casoi
é superior à razão do MelhorCaso, então o MelhorCaso passará a ser o Casoi, pois é um caso mais eficaz. Assim, com o valor da razão entre o CmaxOpt e o Cmax juntamente com o valor do tempo de execução é possível pesar correctamente o binómio eficiência-eficácia.
RazaoMelhorCaso =CmaxOptCmax zu@to<q>Go
zu@to<q>Go (25)
Quando não existem casos muito similares, a escolha do melhor caso é efectuada através de comparação directa entre as similaridades dos vários casos da lista.
Após a ListaCasos ter sido toda percorrida, e se a ListaMelhoresCasos não estiver vazia, então é seleccionado aleatoriamente um dos melhores casos. Deste modo garante-se a escolha de um dos melhores casos como MelhorCaso, e não o melhor de todos. Isto revela-se importante para evitar estagnação e para evitar a escolha do mesmo caso demasiadas vezes, que desse modo não permitiria a evolução do sistema. Se fosse seleccionado o melhor caso de entre todos, sempre que um novo caso fosse bastante similar seria continuamente seleccionado o mesmo caso anterior, a não ser que os novos casos obtivessem sempre novos resultados, o que não acontece devido à aleatoriedade subjacente às Meta-heurísticas.
Se a ListaMelhoresCasos estiver vazia, o MelhorCaso é aquele que se revelou mais similar ou então é o caso mais eficaz-eficiente de entre os casos mais similares.
No final é devolvida a solução na variável MetaHeuristica, seja esta a solução do melhor caso ou os parâmetros pré-definidos na Interface Gráfica.