Kezdőoldal » Számítástechnika » Programozás » NegaMax algoritmust hogyan...

NegaMax algoritmust hogyan kell használni Sakkozó ágens írásához?

Figyelt kérdés

Egy ilyen pszeudo kód alapján egyszerűen nem látom át az algoritmus működését (annak ellenére, hogy "papíron egy példán" keresztül értem...

[link]

-----------------

Az egész algoritmus a végén egy INT értékkel tér vissza, ez alapján honnan tudom, hogy minek kéne lenni a következő lépésnek, amit lépni szeretnék?


Az a "return evaluate();" lenne az adott lépésnek a (valamilyen módszer alapján meghatározott) "értéke", azaz hogy mennyire jó az a lépés?


De a fő kérdés: azzal, hogy a végén egy INT értéket visszaad, mit kezdjek, vagy hogyan kellene ezt megvalósítani?

Valaki ezt el tudná magyarázni?


köszi! :)


2015. nov. 15. 13:59
 1/1 anonim ***** válasza:

Pontosan alatta, a "How to Use NegaMax" bekezdés megválaszolja az összes kérdésed.


Tárold hogy a "max = score;" sornál azt is hogy melyik lépést lépted meg éppen és azt is add vissza valahogy.


Az evaluate() függvény az adott állapothoz tartozó pontszámot számítja ki és figyelembe veszi azt is hogy ki lép éppen. Van rá egy egyszerű példa is a linkelt oldalon.


Az oldal csak az algoritmushoz ír kódot, neked kell kiegészítened úgy, hogy passzoljon a programod struktúrájához. Az hogy a te programod hogy működik és hogy az evaluate() függvényt hogy milyen bonyolultsággal és hogy számolod ki, az már egy teljesen más kérdés.


Itt egy példa hogy egy programban nagyjából hogy nézne ki az algoritmus kiegészítve, de tényleg csak a te programod felépítésétől függ:


Move getNextMove(State currentState) {

. . Move move;

. . negaMax(6, currentState, &move);

. . return move;

}


int evaluate(State state) {

. . score = materialWeight * (numWhitePieces - numBlackPieces) * who2move;

. . return score;

}


int negaMax(int depth, State state, Move* bestMove ) {

. . if ( depth == 0 ) return evaluate(state);

. . int max = -oo;

. . for ( all moves) {

. . . . State newState = makeAMove(move);

. . . . score = -negaMax( depth - 1, newState, null );

. . . . if( score > max ) {

. . . . . . max = score;

. . . . . . if(bestMove)

. . . . . . . . *bestMove = move;

. . . . }

. . }

. . return max;

}

2015. nov. 15. 16:53
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!