Prohledávání stavového prostoru

Autor textu: Petr Benda
Úprava: Tibor Strašrybka

Toto cvičení předpokládá základní znalost Javy a NetBeans IDE.

Část A

Zadání

Implementujte algoritmy prohledávání stavového prostoru do šířky a do hloubky. Implementujte je pomocí seznamů OPEN a CLOSED, pak se oba algoritmy liší minimálně.
Výstupem algoritmu bude první nalezená cesta mezi počátečním a koncovým uzlem, které zadá uživatel. Použijte připravené knihovny uživatelského rozhraní. Prohledávaný prostor je definován planárním grafem.

Pokyny k vypracování

  1. Stáhněte si ze stránky předmětu SW nástroj pro studenty. V NetBeans IDE otevřete projekt z místa, kam jste jej rozbalili.
  2. V Netbeans IDE otevřete zdrojový soubor BFS.java. Tento soubor modifikujte.
  3. Váš Program spustíte např. pomocí předpřipravené konfigurace bfs. V případě, že máte potíže s používáním projektu na svém domácím počítači, následujte instrukce na stránce řešení problémů s nastavením, která bude průběžně aktualizována. Systém lze také spustit v konzoli za použití parametru noVisio (viz soubor runBFS_noviso.bat), což může být vhodné pro ladění.

Poznámky k implementaci

try {
    Thread.sleep(10); // 10 ms
}
catch (InterruptedException ex) {
    ex.printStackTrace();
}

Ovládání vizualizačního nástroje

Nastavení počátečního a koncového uzlu v grafu provedete kliknutím levého tlačítka myši, přiblížení a oddálení kolečkem myši. Pokud držíte pravé tlačítko myši, můžete pohybovat s mapou. Barva expandované hrany určuje dobu, kdy byla expandována. Nejstarší expandované hrany jsou zelené, následují modré, fialové, červené a nejmladší jsou žluté.
Zadání nového hledání cesty je možné po stisknutí klávesy r.

Část B

Zadání

Implementujte algoritmus A*. Výstupem algoritmu bude nejkratší cesta mezi počátečním a koncovým uzlem, které zadá uživatel. Navrhněte a použijte heuristickou funkci. Použijte připravené knihovny uživatelského rozhraní. Prohledávaný prostor je definován planárním grafem.

Pokyny k vypracování

  1. V projektu si otevřete soubor AStar.java. Tato třída implementuje rozhraní InformedSearchingAlgorithm. Oproti předchozí úloze metoda findWay() obdrží jak startovní, tak i koncový uzel.
  2. Přepněte spouštěcí konfiguraci na astar (klikněte na šipečku combo boxu pro výběr konfigurace a vyberte astar).

Poznámky k implementaci

Nevytvářejte žádné další soubory, všechen potřebný kód umístěte do AStar.java.

Otázky

Jak odevzdávat?

  1. Všechny tři úlohy (BFS, DFS, A*) se odevzdávají na příštím laboratorním cvičení.
  2. Do systému se odevzdávají dvě úlohy. Prohledávání do šířky a prohledávání pomocí A*. Vyučujícímu se odevzdává navíc prohledávání do hloubky.
  3. Vytvořte zip archiv, který bude obsahovat adresář kui a v něm budou soubory BFS.java a AStar.java (v archivu může být i jen jeden soubor, automatický test se provede. Nicméně je potřeba, abyste nakonec odevzdali oba soubory!). Vkládání jiných souborů a souborů s jinými jmény není přípustné.
  4. Ve Vašich třídách nesmí být žádný kód pro zpomalení.
  5. Zip archiv vložte do Upload systému CourseWare. Na jménu zip archivu nezáleží.
  6. Bude proveden automatický test (test může trvat maximálně asi 30 s, výsledky si můžete prohlédnout).
  7. Zip archiv můžete nahrávat do upload systému kolikrát chcete.

Bodování úlohy

algoritmus prezentace kódu automatické vyhodnocení na serveru bonus
BFS/DFS 2 b 2 b 1 b
A* 4 b 2 b 1 b
Celkem: 12 b