Heuristic Fittex Algoritmu f'C++- Spjegazzjoni, Eżempju u Kodiċi

Heuristic It-tfittxija hija approċċ algoritmiku qawwi użat biex jinstabu soluzzjonijiet fi spazji problematiċi kumplessi billi jittieħdu deċiżjonijiet infurmati bbażati fuq euristiċi jew regoli ġenerali. Huwa partikolarment utli meta tfittxija eżawrjenti ma tkunx prattika minħabba l-ispazju kbir tat-tiftix.

Kif taħdem

  1. Heuristic Evalwazzjoni: L-algoritmu jevalwa kull stat fl-ispazju tal-problema billi juża heuristic funzjoni. Din il-funzjoni tistma l-"promisingness" ta 'kull stat f'termini tal-qrubija tiegħu għall-istat mira.
  2. Strateġija tat-Tiftix: L-algoritmu jagħżel l-iktar stat promettenti abbażi tal- heuristic evalwazzjoni. Juża strateġija ta’ tfittxija bħal Best-First Fittex, Fittex A* jew Greedy Fittex.
  3. Espansjoni tal-Istat: L-istat magħżul huwa estiż billi jiġġenera l-istati ġirien tiegħu. Dawn huma kandidati potenzjali għall-pass li jmiss.
  4. Irrepeti: Il-proċess huwa ripetut b'mod iterattiv, billi jintgħażlu u jespandu stati sakemm jinstab l-istat tal-għan jew tintlaħaq kundizzjoni ta 'terminazzjoni.

Eżempju: Problema ta' Salesman li jivvjaġġa(TSP)

Ikkunsidra l-Problema tal-Bejjiegħ Vjaġġar, fejn bejjiegħ jeħtieġ li jżur sett ta 'bliet u jirritorna lejn il-belt tal-bidu filwaqt li jimminimizza d-distanza totali vvjaġġata. Approċċ heuristic jista' jkun l-Algoritmu tal-Eqreb Ġar:

  1. Ibda f'belt każwali.
  2. F'kull pass, agħżel l-eqreb belt mhux miżjura bħala d-destinazzjoni li jmiss.
  3. Irrepeti sakemm iżuru l-bliet kollha, imbagħad erġa lura lejn il-belt tal-bidu.

Eżempju ta' Kodiċi f'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;  
}  

F'dan l-eżempju, l-Algoritmu tal-Eqreb Ġar jintuża biex issolvi l-Problema tal-Bejjiegħ li Jivvjaġġa. Huwa heuristic approċċ li jagħżel l-eqreb belt mhux miżjura f'kull pass, li jirriżulta f'soluzzjoni li ħafna drabi tkun qrib l-aħjar.