Atualmente, estou trabalhando em uma solução para um problema para o qual (após um pouco de pesquisa) o uso de uma escalada e, mais especificamente, uma idéia algorítmica de escalada de espingarda (ou reinício aleatório ) parece ser a melhor opção, como eu não tenho idéia de como o melhor valor inicial pode ser encontrado.
Mas não há muita informação sobre esse tipo de algoritmo, exceto a idéia rudimentar por trás dele:
A escalada [espingarda] é um meta-algoritmo construído sobre o algoritmo de escalada. Faz iterativamente escaladas, sempre com uma condição inicial aleatória . O melhor é mantido: se uma nova corrida de subida produz um melhor que o estado armazenado, ele substitui o estado armazenado.
Se eu entendi isso corretamente, isso significa algo assim (assumindo a maximização):
x = -infinity;
for ( i = 1 .. N ) {
x = max(x, hill_climbing(random_solution()));
}
return x;
Mas como você pode tornar isso realmente eficaz, melhor do que a subida normal? É difícil acreditar que o uso de valores iniciais aleatórios ajude muito, especialmente em grandes espaços de pesquisa. Mais precisamente, eu me pergunto:
- Existe uma boa estratégia para escolher o (que está sendo implementado ), em especial o conhecimento (intermediário) dos resultados de iterações anteriores?
random_solution
- Como escolher , ou seja, quantas iterações são necessárias para garantir que a solução perfeita não seja perdida (por muito)?