2
0
forked from s444420/AL-2020
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