अनुमानी खोज एल्गोरिदम में Java

ह्यूरिस्टिक सर्च एल्गोरिदम प्रोग्रामिंग में एक बुद्धिमान खोज विधि है Java जो खोज प्रक्रिया को निर्देशित करने के लिए अनुमानित जानकारी(ज्ञान) का उपयोग करने पर निर्भर करती है। Heuristics समस्या की वर्तमान स्थिति के बारे में अपूर्ण ज्ञान और अनुमानित जानकारी के आधार पर समस्या-समाधान की एक अनुमानित विधि है।

अनुमानी खोज एल्गोरिथम कैसे काम करता है

अनुमानी खोज एल्गोरिथ्म लक्ष्य के लिए किसी राज्य की "निकटता" का मूल्यांकन करने के लिए अनुमानी कार्यों को नियोजित करता है। प्रत्येक खोज पुनरावृत्ति के दौरान, एल्गोरिदम संभावित राज्यों के अनुमानी मूल्यों के आधार पर एक खोज दिशा का चयन करता है। लक्ष्य अनुमानी मूल्य को अनुकूलित करना है, जिससे समस्या का अनुमानित समाधान प्राप्त हो सके।

अनुमानी खोज एल्गोरिथम के फायदे और नुकसान

लाभ:

  • बुद्धिमान खोज: एल्गोरिदम खोज को निर्देशित करने, समय और संसाधनों को अनुकूलित करने के लिए अनुमानित ज्ञान का उपयोग करता है।
  • व्यापक प्रयोज्यता: Heuristics वास्तविक दुनिया के परिदृश्यों में विभिन्न अनुकूलन और खोज समस्याओं पर लागू किया जा सकता है।

नुकसान:

  • संभावित अशुद्धि: Heuristics अनुमान और संभावित रूप से गलत जानकारी पर भरोसा करें, जिसके परिणामस्वरूप अपूर्ण समाधान होंगे।

उदाहरण एवं स्पष्टीकरण

ह्यूरिस्टिक सर्च एल्गोरिदम का एक सामान्य उदाहरण A* एल्गोरिदम है, जिसका उपयोग मानचित्र पर सबसे छोटा रास्ता खोजने के लिए किया जाता है। आइए देखें कि यह एल्गोरिदम कैसे काम करता है:

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  
            // ...  
        }  
    }  
}  

उपरोक्त उदाहरण में, हम मानचित्र पर सबसे छोटा रास्ता खोजने के लिए A* एल्गोरिदम का उपयोग करते हैं। वर्तमान नोड की कुल लागत और अनुमानी अनुमान के आधार पर पड़ोसी नोड्स का पता लगाया जाता है। परिणाम प्रारंभिक बिंदु से लक्ष्य बिंदु तक सबसे छोटा रास्ता ढूंढना है।