Heuristic Search Algorithm in Java

Kanuni ya Utafutaji wa Heuristic ni mbinu ya akili ya utafutaji katika Java upangaji programu ambayo inategemea kutumia taarifa iliyokadiriwa(maarifa) ili kuongoza mchakato wa utafutaji. Heuristics ni njia ya kukadiria ya utatuzi wa matatizo kulingana na ujuzi usio kamili na makadirio ya taarifa kuhusu hali ya sasa ya tatizo.

Jinsi Heuristic Search Algorithm inavyofanya kazi

Kanuni ya Utafutaji wa Heuristic hutumia utendaji wa kiheuristic ili kutathmini "ukaribu" wa hali kwa lengo. Wakati wa kila marudio ya utafutaji, algoriti huchagua mwelekeo wa utafutaji kulingana na maadili ya urithi wa majimbo yanayoweza kutokea. Lengo ni kuongeza thamani ya heuristic, na kusababisha suluhu ya takriban ya tatizo.

Manufaa na Hasara za Algorithm ya Utafutaji wa Heuristic

Manufaa:

  • Utafutaji wa akili: Kanuni hutumia maarifa yaliyokadiriwa kuongoza utafutaji, kuboresha muda na rasilimali.
  • Utumikaji mpana: Heuristics unaweza kutumika kwa uboreshaji na matatizo mbalimbali ya utafutaji katika hali za ulimwengu halisi.

Hasara:

  • Usahihi unaowezekana: Heuristics tegemea makadirio na habari inayoweza kuwa si sahihi, na kusababisha suluhu zisizo kamilifu.

Mfano na Ufafanuzi

Mfano wa kawaida wa algoriti ya Utafutaji wa Heuristic ni algoriti ya A*, inayotumika kutafuta njia fupi zaidi kwenye ramani. Wacha tuone jinsi algorithm hii inavyofanya kazi:

import java.util.*;  
  
class Node {  
    int x, y;  
    int cost, heuristic;  
  
    Node(int x, int y, int cost, int heuristic) {  
        this.x = x;  
        this.y = y;  
        this.cost = cost;  
        this.heuristic = heuristic;  
    }  
}  
  
public class HeuristicSearchExample {  
    static int heuristic(int x, int y, int targetX, int targetY) {  
        return Math.abs(targetX- x) + Math.abs(targetY- y);  
    }  
  
    static void heuristicSearch(int[][] grid, int startX, int startY, int targetX, int targetY) {  
        PriorityQueue<Node> pq = new PriorityQueue<>((a, b) ->(a.cost + a.heuristic)-(b.cost + b.heuristic));  
        pq.offer(new Node(startX, startY, 0, heuristic(startX, startY, targetX, targetY)));  
  
        while(!pq.isEmpty()) {  
            Node current = pq.poll();  
            int x = current.x;  
            int y = current.y;  
  
            if(x == targetX && y == targetY) {  
                System.out.println("Found target at(" + x + ", " + y + ")");  
                return;  
            }  
  
            // Explore neighboring nodes and add to the priority queue  
            // based on total cost and heuristic  
            // ...  
        }  
    }  
}  

Katika mfano ulio hapo juu, tunatumia algoriti ya A* kutafuta njia fupi zaidi kwenye ramani. Nodi za jirani huchunguzwa kulingana na gharama ya jumla ya nodi ya sasa na makadirio ya heuristic. Matokeo yake ni kutafuta njia fupi zaidi kutoka mahali pa kuanzia hadi mahali lengwa.