Vietinės paieškos (Local Search) algoritmas Java

Vietinės paieškos algoritmas yra paieškos technika programuojant Java, kuri orientuota į sprendimų optimizavimą ieškant šalia esamo sprendimo. Užuot ieškojęs visoje sprendimų erdvėje, algoritmas sutelkia dėmesį į sprendimų paiešką mažesnėje „kaimynystėje“.

Kaip veikia vietinės paieškos algoritmas

Algoritmas pradedamas nuo pradinio sprendimo ir nuolat bando jį tobulinti, ieškodamas geresnių sprendimų netoliese. Algoritmas kartoja netoliese esančius sprendimus ir iš jų parenka geriausią sprendimą.

Vietinės paieškos algoritmo privalumai ir trūkumai

Privalumai:

  • Efektyvumas: Algoritmas dažnai veikia greičiau didesnėse probleminėse erdvėse, ieškodamas šalia esančių būsenų, o ne visos erdvės.
  • Integravimas: gali būti derinamas su kitais metodais, siekiant pagerinti paieškos našumą.

Trūkumai:

  • Vietinis optimalus: algoritmas gali susiartinti su vietiniu optimaliu tašku nerasdamas visuotinio sprendimo.

Pavyzdys ir paaiškinimas

Realus vietinės paieškos algoritmo pavyzdys yra eismo maršruto optimizavimas. Pažiūrėkime, kaip veikia šis algoritmas:

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;  
    }  
}  

Aukščiau pateiktame pavyzdyje naudojame vietinės paieškos algoritmą, kad optimizuotume skaitinį sprendimą. Algoritmas ieško šalia esamo sprendimo, pakeisdamas fiksuotą žingsnį ir patikrina, ar naujas sprendimas yra geresnis. Rezultatas yra tai, kad algoritmas laikui bėgant randa geresnį sprendimą.