Jak zobrazit Alfa Beta prořezávání výsledek algoritmu?

hlasů
8

aktualizace

Aktualizace 1

Snažil jsem se tento (2. řádek): Přidal jsem mění barvu uzel jako první instrukce v alphabeta funkci. Jsem dostat tento výsledek :

Výsledek

Zelené uzly jsou navštěvovány uzly. Vypadá to, že algoritmus bude házet uzly správně, že jo? Ale jak se výstup správné hodnoty v uzlech - I Také je potřeba udělat? Minimální dětských hodnot, maximální hodnoty pro děti (s výjimkou prořezávat větve).

Aktualizace 2

jsem se snažil výstupní alfa a beta na uzly stromu a nedostal správný výsledek. Toto je kód (řádek 18 a bylo přidáno 31). To je výsledek kód:

výstup

Na tomto obrázku jsem ukázat podivné místa:

chyby

První šíp: proč minimálně 7 a 6 5? Druhá šipka: proč maximálně 4, 3 a 2 je 5? Zvláštní. To je důvod, proč si myslím, že je nyní pracuje správně.

stará otázka

Kdysi jsem tady vytvořil podobnou otázku. Bylo to jako: „Proč mám tuto chybu?“. Umožňuje odvolání a vytvořil nový. Tato otázka bude: „Jak zobrazit Alfa Beta prořezávání výsledek algoritmus?“

Zjistil jsem, pseudocode tohoto algoritmu na wiki. To lze nalézt zde .

Moje realizace je dole (to je na JavaScriptu, ale nemyslím si, že odpověď na tuto otázku, musíte vědět, JS nebo Java nebo C ++ atd.) Otázkou je, jak se na výstupu výsledek tohoto algoritmu v grafu (ve stromové struktuře)? Na startu jsem tuto stromovou strukturu:

Úkol,

Poznámka: Mám stromovou strukturu (nějaké množství spojeného nodes), na který budu používat alfa beta algoritmu prořezávání a mám další stromovou strukturu (pro zobrazení výsledků, nechává říkat „graf“). Uzly stromu, které mohu použít k zobrazení grafu jsou spojeny s uzly, které mohu použít k nalezení výsledku algoritmu.

Takže kód alfa beta prořezávání algroithm je uveden níže. Můžete si vyjasnit, co a kde musím výstup pro správné zobrazení procesních / výsledky algoritmu, prosím?

Můj předpoklad je, aby výstupní alfa a beta, ale myslím, že je to špatně. Zkoušel jsem to, ale to nefunguje.

Chci zobrazit prořezávky a vyplnit všechny uzly ve stromě se správnými hodnotami.

To je můj realizace minimax s alfa beta prořezávání:

function alphabeta(node, depth, alpha, beta, isMax, g) {
    if((depth == 0) || (node.isTerminal == true)) {
        return node.value;
    }
    if(isMax) {
        console.log('maximizing');
        for (var i in node.children) {
            var child = node.children[i];
            console.log(child);
            alpha = Math.max(alpha, alphabeta(child, depth-1, alpha, beta, false, g));
            if(beta <= alpha) {
                console.log('beta '+beta+' alpha '+alpha);
                break;
            }
        }

        return alpha;
    } else {
        console.log('minimizing');
        for (var i in node.children) {
            console.log('1 child');
            var child = node.children[i];
            console.log(child);
            beta = Math.min(beta, alphabeta(child, depth-1, alpha, beta, true, g));
            if (beta <= alpha) {
                console.log('beta '+beta+' alpha '+alpha);
                break;
            }
        }

        return beta;
    }
}
Položena 20/05/2014 v 14:13
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
4

Proč ne jen uložit uzly, které jsou skutečně na, a obarvit ty uzly červeně. Pak uvidíte, které uzly dostal hodnocena v porovnání k celému stromu. Např

zadejte popis obrázku zde

Po dlouhé diskusi v komentářích, myslím, že teď může vrhnout světlo na toto téma. Vzhledem k tomu, alfa beta jde kolem stromu, má tři hodnoty, při provozu na daném uzlu, má alfa a beta, které byly provedeny až na to od mateřské uzlu, a pak to nejlepší hodnota se doposud nalezeno , Pokud zjistí, hodnotu mimo okno alfa-beta, okamžitě švestky, protože ví, že tento uzel není optimální tah, bez ohledu na jeho hodnotě. Tak pro některé uzly alfa beta nikdy vyjde „skutečnou hodnotu“ uzlu.

Tak, když budete vyzváni k zobrazení „výsledek“ alfa beta, jsem mylně myslel, že jste měl na mysli okna alfa-beta, jelikož „skutečná hodnota“ nikdy nutně vyhodnocen.

Budete muset napsat samostatný kód pro tisk „skutečné hodnoty uzlu“. Myslím si, že algoritmus minimax to udělá za vás.

Také být vědomi při porovnávání rukou, že pokud používáte „soubor“ uzlů, jejichž seznam iterator není zaručeno vrátit uzly v předvídatelném pořadí, takže pokud uvnitř uzly používáte sady namísto seznamů, můžete zjistíme, že je těžké řídit ručně. Seznam iterátory vrátil v objednávce. Set iterators nemá předvídatelný iterátor.

Odpovězeno 28/05/2014 v 10:35
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more