66 lines
2.3 KiB
Markdown
66 lines
2.3 KiB
Markdown
|
# 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`.
|
||
|
|
||
|
`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.
|
||
|
```javascript
|
||
|
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`
|
||
|
```javascript
|
||
|
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ą
|
||
|
```javascript
|
||
|
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
|