Heuristic Is cur chuige cumhachtach algartamach é cuardach a úsáidtear chun réitigh a aimsiú i spásanna casta fadhbanna trí chinntí eolasacha a dhéanamh bunaithe ar heorastaíocht nó ar rialacha ordóige. Tá sé úsáideach go háirithe nuair nach mbíonn cuardach uileghabhálach praiticiúil mar gheall ar an spás cuardaigh mór.
Conas a oibríonn sé
- Heuristic Meastóireacht: Déanann an t-algartam measúnú ar gach staid sa spás fadhbanna ag baint úsáide as heuristic feidhm. Déanann an fheidhm seo meastachán ar "gealltanas" gach stáit i dtéarmaí a chóngaraí atá sé don spriocstát.
- Straitéis Chuardaigh: Roghnaíonn an algartam an stát is bisiúla bunaithe ar an heuristic meastóireacht. Úsáideann sé straitéis chuardaigh cosúil le Best-First Cuardach, Cuardach A*, nó Greedy Cuardach.
- Leathnú Stáit: Déantar an stát roghnaithe a leathnú trí na stáit chomharsanachta a ghiniúint. Is iarrthóirí ionchasacha iad seo don chéad chéim eile.
- Déan: Déantar an próiseas arís agus arís eile, ag roghnú agus ag leathnú stáit go dtí go bhfaightear an sprioc-staid nó go gcomhlíontar coinníoll foirceanta.
Sampla: Fadhb Díoltóra Taistil(TSP)
Smaoinigh ar Fhadhb an Díoltóra Taistil, áit a gcaithfidh díoltóir cuairt a thabhairt ar shraith cathracha agus filleadh ar an gcathair thosaigh agus an fad iomlán a thaistiltear a íoslaghdú. D’fhéadfadh cur heuristic chuige a bheith san Algartam Comharsanachta is gaire:
- Tosaigh ag cathair randamach.
- Ag gach céim, roghnaigh an chathair is gaire gan cuairt mar an chéad cheann scríbe eile.
- Déan arís go dtí go dtugtar cuairt ar na cathracha go léir, ansin ar ais go dtí an chathair tosaigh.
Sampla Cód i C++
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
struct City {
int x, y;
};
double distance(const City& city1, const City& city2) {
return std::sqrt(std::pow(city1.x- city2.x, 2) + std::pow(city1.y- city2.y, 2));
}
std::vector<int> nearestNeighbor(const std::vector<City>& cities) {
int numCities = cities.size();
std::vector<int> path(numCities);
std::vector<bool> visited(numCities, false);
path[0] = 0;
visited[0] = true;
for(int i = 1; i < numCities; ++i) {
int currentCity = path[i- 1];
double minDist = std::numeric_limits<double>::max();
int nextCity = -1;
for(int j = 0; j < numCities; ++j) {
if(!visited[j]) {
double dist = distance(cities[currentCity], cities[j]);
if(dist < minDist) {
minDist = dist;
nextCity = j;
}
}
}
path[i] = nextCity;
visited[nextCity] = true;
}
path.push_back(0); // Return to the starting city
return path;
}
int main() {
std::vector<City> cities = {{0, 0}, {1, 3}, {4, 2}, {3, 6}, {7, 1}};
std::vector<int> path = nearestNeighbor(cities);
std::cout << "Traveling Salesman Path: ";
for(int city: path) {
std::cout << city << ";
}
std::cout << std::endl;
return 0;
}
Sa sampla seo, úsáidtear an Algartam Comharsanachta is gaire chun Fadhb an Díoltóra Taistil a réiteach. Is heuristic cur chuige é a roghnaíonn an chathair is gaire gan cuairt ag gach céim, agus mar thoradh air sin tá réiteach atá gar don bharrmhaith.