AL-2020/route-planning.md

2.4 KiB

Raport 2

Definicja pętli głownej strategi przeszukiwania

Naszą główną funkcją jest funkcja aStar(startField, goalField), przyjmuje ona dwa argumenty: startField - pole z którego wyrusza agent goalField - cel drogi agenta. Zwraca ona ścieszkę z startField do goalField.

Opis

closedSet - lista zawierająca sprawdzane i sprawdzone pola z listy openSet

openSet - lista zawierająca pola do sprawdzenia

path - lista zawierająca pola tworzące ścieszkę do wybranego celu


  • Dodajemy pierwszy element który będziemy sprawdzać do listy openSet: addToOpenSet(openSet, startField)
  • Dopuki lista openSet nie bedzie pusta sprawdzamy jej elementy: while(openSet.length > 0)
  • Wybieramy najbardziej obiecujący element z zbioru openSet: let current = findLowestFScore(openSet, goalField)
  • Jeśli pole current okaże się naszym celem tworzymy ścieszkę z punktu startowego do naszego celu.
if(current === goalField){
    path = []
    var temp = current;
    path.push(temp);
    while(temp.previous){
    path.push(temp.previous);
    temp = temp.previous
}
  • Następnie kolorujemy tą ścieszkę i kończymy funkcję zwracając ścieszkę path
for(var i = 0; i < path.length; i++){
    colorYellow(path[i]);
}
return path
  • Jeśli pole current nie jest naszym celem, to usuwamy je z listy openSet i dodajemy do listy closedSet
removeFromSet(openSet, current);
addToClosedSet(closedSet, current);
  • Pobieramy sąsiadów pola current: var neighbors = current.neighbors;
  • Dla każdego sąsiada obliczamy koszt dotarcia do niego z punktu początkowego najlepszą ścieszką.
for(var i = 0; i < neighbors.length; i++){
    var neighbor = neighbors[i];
    if(!closedSet.includes(neighbor)){
        var tempG = current.gScore + neighbor.costOfTravel;
        if(openSet.includes(neighbor)){
            if(tempG < neighbor.gScore){
                neighbor.gScore = tempG;
            }
        } else {
            neighbor.gScore = tempG;
            addToOpenSet(openSet, neighbor);
        }
  • Po przypisaniu kosztu do sąsiada dodajemy jego odległość do celu:
    neighbor.heuristic = getDistance(neighbor, goalField);,

  • ??????????: neighbor.f = neighbor.gScore + neighbor.heuristic;

  • oraz jego poprzednika: neighbor.previous = current;

Definicja funkcji następnika

Definicja przyjętej heurystyki