O algoritmo Random Search é um método de busca baseado em selecionar aleatoriamente um conjunto de soluções do espaço de busca e verificar se elas podem resolver o problema. Essa abordagem é frequentemente utilizada quando não há informações ou estratégias específicas para orientar a busca.
Como funciona
- Inicialização: Comece com um conjunto gerado aleatoriamente de soluções iniciais.
- Avaliação: Avalie a qualidade de cada solução com base na função objetivo ou critérios de avaliação.
- Seleção: Selecione um subconjunto das melhores soluções do conjunto com base em probabilidades ou seleção aleatória.
- Teste: Testa se as soluções selecionadas são capazes de resolver o problema.
- Repetir: Repita as etapas 2 a 4 até que um resultado satisfatório seja alcançado ou um número predefinido de iterações seja alcançado.
Exemplo: Otimizando a Fibonacci Função
Considere o problema de otimização da Fibonacci função F(x) = F(x-1) + F(x-2) com F(0) = 0, F(1) = 1. Queremos encontrar o valor de x para o qual F(x) é maximizado. O método Random Search pode selecionar aleatoriamente valores de x, calcular o Fibonacci valor em cada x e escolher o valor de x correspondente ao maior Fibonacci valor obtido.
Exemplo de código em C++
#include <iostream>
#include <cstdlib>
#include <ctime>
int fibonacci(int n) {
if(n <= 0) return 0;
if(n == 1) return 1;
return fibonacci(n- 1) + fibonacci(n- 2);
}
int randomSearchFibonacci(int maxIterations) {
int bestX = 0;
int bestValue = 0;
srand(time(0));
for(int i = 0; i < maxIterations; ++i) {
int x = rand() % maxIterations;
int value = fibonacci(x);
if(value > bestValue) {
bestValue = value;
bestX = x;
}
}
return bestX;
}
int main() {
int maxIterations = 20;
int result = randomSearchFibonacci(maxIterations);
std::cout << "Optimal x for maximum Fibonacci value: " << result << std::endl;
return 0;
}
Neste exemplo, usamos o método Random Search para otimizar a Fibonacci função. Selecionamos valores de x aleatoriamente, calculamos o Fibonacci valor em cada x e, em seguida, escolhemos o valor de x correspondente ao Fibonacci valor mais alto que calculamos.