Algoritmi i Kërkimit Lokal (Local Search) në Java

Algoritmi i Kërkimit Lokal është një teknikë kërkimi në Java programim që fokusohet në optimizimin e zgjidhjeve duke kërkuar në një afërsi të zgjidhjes aktuale. Në vend që të kërkojë të gjithë hapësirën e zgjidhjes, algoritmi përqendrohet në gjetjen e zgjidhjeve në një "lagje" më të vogël.

Si funksionon algoritmi i kërkimit lokal

Algoritmi fillon nga një zgjidhje fillestare dhe vazhdimisht përpiqet ta përmirësojë atë duke kërkuar zgjidhje më të mira në afërsi. Algoritmi përsëritet përmes zgjidhjeve të afërta dhe zgjedh zgjidhjen më të mirë midis tyre.

Avantazhet dhe disavantazhet e Algoritmit të Kërkimit Lokal

Përparësitë:

  • Efikasiteti: Algoritmi shpesh funksionon më shpejt në hapësira më të mëdha problemore duke kërkuar për gjendjet e afërta në vend të të gjithë hapësirës.
  • Integrimi: Mund të kombinohet me metoda të tjera për të përmirësuar performancën e kërkimit.

Disavantazhet:

  • Optima lokale: Algoritmi mund të konvergojë në një pikë optimale lokale pa gjetur zgjidhjen globale.

Shembull dhe Shpjegim

Një shembull i vërtetë i Algoritmit të Kërkimit Lokal është optimizimi i një rruge trafiku. Le të shohim se si funksionon ky algoritëm:

import java.util.*;  
  
public class LocalSearchExample {  
    static double evaluateSolution(double[] solution) {  
        // Function to evaluate the quality of a solution  
        // Lower value indicates a better solution  
        return 1.0 /(1.0 + solution[0] + solution[1]);  
    }  
  
    static double[] localSearch(double[] initialSolution, double stepSize, int maxIterations) {  
        double[] currentSolution = Arrays.copyOf(initialSolution, initialSolution.length);  
        double currentEvaluation = evaluateSolution(currentSolution);  
  
        for(int i = 0; i < maxIterations; i++) {  
            double[] nextSolution = Arrays.copyOf(currentSolution, currentSolution.length);  
            nextSolution[0] += stepSize;  
            double nextEvaluation = evaluateSolution(nextSolution);  
  
            if(nextEvaluation < currentEvaluation) {  
                currentSolution = nextSolution;  
                currentEvaluation = nextEvaluation;  
            } else {  
                stepSize /= 2;  
            }  
        }  
  
        return currentSolution;  
    }  
}  

Në shembullin e mësipërm, ne përdorim Algoritmin e Kërkimit Lokal për të optimizuar një zgjidhje numerike. Algoritmi kërkon në një afërsi të zgjidhjes aktuale duke ndryshuar një hap fiks dhe kontrollon nëse zgjidhja e re është më e mirë. Rezultati është se algoritmi në mënyrë progresive gjen një zgjidhje më të mirë me kalimin e kohës.