• Nenhum resultado encontrado

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

‹

Œminmax CmaxOpt CmaxOpt1, 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%.

ComparaSims Caso1, Caso2 =max Simmin Simq>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.