Algoritmus Cloud Search je metoda vyhledávání, která zahrnuje generování velké sady náhodných řešení, často označovaných jako „cloud“, a následné hledání nejlepších řešení v rámci této sady. Tento přístup se běžně používá k nalezení přibližných řešení složitých problémů, když nejsou k dispozici žádné konkrétní pokyny.
Jak to funguje
- Inicializace cloudu: Vytvořte velkou sadu náhodných řešení(cloud).
- Hodnocení: Vyhodnoťte kvalitu každého řešení v cloudu na základě objektivní funkce nebo hodnotících kritérií.
- Výběr: Vyberte podmnožinu nejlepších řešení z cloudu na základě pravděpodobností nebo kritérií výběru.
- Zlepšení: Zlepšete kvalitu řešení v cloudu použitím transformací nebo optimalizací.
- Iterace: Opakujte kroky 2 až 4, dokud nedosáhnete uspokojivého výsledku nebo předdefinovaného počtu iterací.
Příklad: Cloud Search pro problém cestujícího obchodníka
Zvažte problém Travelling Salesman(TSP), kde je cílem najít nejkratší hamiltonovský cyklus, který navštíví všechna města. Metoda Cloud Search může generovat velké množství náhodných hamiltonovských cyklů a poté vybrat cyklus s nejnižšími náklady.
Příklad kódu v C++
#include <iostream>
#include <vector>
#include <algorithm>
#include <ctime>
#include <cstdlib>
struct City {
int x;
int y;
};
double calculateDistance(const City& city1, const City& city2) {
return std::sqrt((city1.x- city2.x)*(city1.x- city2.x) +(city1.y- city2.y)*(city1.y- city2.y));
}
double cloudSearchTSP(std::vector<City>& cities, int maxIterations) {
int numCities = cities.size();
double bestDistance = std::numeric_limits<double>::max();
srand(time(0));
for(int i = 0; i < maxIterations; ++i) {
std::random_shuffle(cities.begin(), cities.end());
double totalDistance = 0.0;
for(int j = 0; j < numCities- 1; ++j) {
totalDistance += calculateDistance(cities[j], cities[j + 1]);
}
totalDistance += calculateDistance(cities[numCities- 1], cities[0]);
bestDistance = std::min(bestDistance, totalDistance);
}
return bestDistance;
}
int main() {
std::vector<City> cities = {{0, 0}, {1, 2}, {3, 1}, {4, 3}, {2, 4}};
int maxIterations = 1000;
double shortestDistance = cloudSearchTSP(cities, maxIterations);
std::cout << "Shortest distance in TSP: " << shortestDistance << std::endl;
return 0;
}
V tomto příkladu používáme k řešení TSP metodu Cloud Search. Vygenerujeme velké množství náhodných hamiltonovských cyklů náhodným promícháním měst, pak vypočítáme náklady na každý cyklus a vybereme cyklus s nejnižšími náklady.