Cloud Search (Cloud Search) -algoritme in C++- uitleg, voorbeeld en code

Het Cloud Search-algoritme is een zoekmethode waarbij een grote set willekeurige oplossingen wordt gegenereerd, vaak de 'cloud' genoemd, en vervolgens wordt gezocht naar de beste oplossingen binnen deze set. Deze benadering wordt vaak gebruikt om benaderende oplossingen te vinden voor complexe problemen wanneer er geen specifieke begeleiding beschikbaar is.

Hoe het werkt

  1. Cloud-initialisatie: creëer een grote set willekeurige oplossingen(de cloud).
  2. Evaluatie: Evalueer de kwaliteit van elke oplossing in de cloud op basis van de objectieve functie of evaluatiecriteria.
  3. Selectie: Selecteer een subset van de beste oplossingen uit de cloud op basis van kansen of selectiecriteria.
  4. Verbetering: Verbeter de kwaliteit van oplossingen in de cloud door transformaties of optimalisaties toe te passen.
  5. Iteratie: Herhaal stap 2 tot en met 4 totdat een bevredigend resultaat is bereikt of een vooraf bepaald aantal iteraties is bereikt.

Voorbeeld: Cloud Search voor het handelsreizigersprobleem

Overweeg het Traveling Salesman Problem(TSP), waarbij het doel is om de kortste Hamiltoniaanse cyclus te vinden die alle steden aandoet. De Cloud Search-methode kan een groot aantal willekeurige Hamiltoniaanse cycli genereren en vervolgens de cyclus met de laagste kosten selecteren.

Codevoorbeeld in 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;  
}  

In dit voorbeeld gebruiken we de Cloud Search-methode om de TSP op te lossen. We genereren een groot aantal willekeurige Hamiltoniaanse cycli door de steden willekeurig te schudden, berekenen vervolgens de kosten voor elke cyclus en selecteren de cyclus met de laagste kosten.