Kanuni ya Utafutaji wa Wingu ni mbinu ya utafutaji inayojumuisha kutoa seti kubwa ya suluhu za nasibu, ambazo mara nyingi hujulikana kama "wingu," na kisha kutafuta suluhu bora zaidi ndani ya seti hii. Njia hii hutumiwa kwa kawaida kupata suluhu za takriban za matatizo changamano wakati hakuna mwongozo maalum unaopatikana.
Inavyofanya kazi
- Uanzishaji wa Wingu: Unda seti kubwa ya suluhu za nasibu(wingu).
- Tathmini: Tathmini ubora wa kila suluhisho katika wingu kulingana na utendakazi lengwa au vigezo vya tathmini.
- Uteuzi: Chagua kikundi kidogo cha suluhu bora zaidi kutoka kwa wingu kulingana na uwezekano au vigezo vya uteuzi.
- Uboreshaji: Boresha ubora wa suluhu katika wingu kwa kutumia mabadiliko au uboreshaji.
- Kurudia: Rudia hatua ya 2 hadi 4 hadi matokeo ya kuridhisha yapatikane au idadi iliyobainishwa ya marudio ifikiwe.
Mfano: Utafutaji wa Wingu kwa Tatizo la Muuzaji Anayesafiri
Fikiria Tatizo la Wafanyabiashara wa Kusafiri(TSP), ambapo lengo ni kupata mzunguko mfupi zaidi wa Hamilton ambao hutembelea miji yote. Mbinu ya Utafutaji wa Wingu inaweza kuzalisha idadi kubwa ya mizunguko isiyo ya kawaida ya Hamiltonian, kisha uchague mzunguko kwa gharama ya chini zaidi.
Mfano wa Msimbo katika 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;
}
Katika mfano huu, tunatumia mbinu ya Utafutaji wa Wingu kutatua TSP. Tunatengeneza idadi kubwa ya mizunguko ya Kihamiltoni nasibu kwa kuchanganya miji nasibu, kisha kukokotoa gharama kwa kila mzunguko na kuchagua mzunguko kwa gharama ya chini zaidi.