Warcaby angielskie - środowisko badania heurystyk

API funkcji oceny


Przykładowa heurystyka

Implementacja heurystycznej funkcji oceny musi być napisana w języku Java zgodnie z poniższym przykładem:


package checkers; // Ten pakiet jest wymagany - nie usuwaj go
public class EvaluatePosition // Ta klasa jest wymagana - nie usuwaj jej
{
    static private final int WIN=Integer.MAX_VALUE/2;
    static private final int LOSE=Integer.MIN_VALUE/2;
    static private boolean _color// To pole jest wymagane - nie usuwaj go
    static public void changeColor(boolean color) // Ta metoda jest wymagana - nie zmieniaj jej
    {
        _color=color;
    }
    static public boolean getColor() // Ta metoda jest wymagana - nie zmieniaj jej
    {
        return _color;
    }
    static public int evaluatePosition(AIBoard board)
    // Ta metoda jest wymagana. Jest to główna metoda heurystyki - umieść swój kod tutaj
    {
        int myRating=0;
        int opponentsRating=0;
        int size=board.getSize();
        for (int i=0;i<size;i++)
        {
            for (int j=(i+1)%2;j<size;j+=2)
            {
                if (!board._board[i][j].empty// pole nie jest puste
                {
                    if (board._board[i][j].white==getColor()) // to jest moj pionek
                    {
                        if (board._board[i][j].king) myRating+=5; // to jest moja damka
                        else myRating+=1; // to jest moj pionek
                    }
                    else
                    {
                        if (board._board[i][j].king) opponentsRating+=5; // to jest damka przeciwnika
                        else opponentsRating+=1;
                    }
                }
            }
        }
        //Judge.updateLog("Tutaj wpisz swoją wiadomość - zobaczysz ją w oknie log\n");
        if (myRating==0) return LOSE; // przegrana
        else if (opponentsRating==0) return WIN; // wygrana
        else return myRating-opponentsRating;
    }
}


Pakiet checkers

package checkers;

Implementacja heurystycznej funkcji oceny musi dostarczać pakiet checkers zawierający opisane niżej elementy.

Są one niezbędne do poprawnego działania heurystyki w programie.


Klasa EvaluatePosition

public class EvaluatePosition

Pakiet checkers musi zawierać kompletną implementację klasy EvaluatePosition.

Klasa zawiera implementację wszelkich metod i pól niezbędnych dla poprawnego działania funkcji heurystycznej. Można modyfikować i rozszerzać jej treść, z uwzględnieniem wymagań na niżej wymienione metody i pola.


Wymagane pola klasy EvaluatePosition

static private boolean_color;

UWAGA! Tego pola nie należy w żaden sposób modyfikować!

Pole przechowuje informację, które pionki należą do gracza bieżącego. Możliwe wartości:


Wymagane metody klasy EvaluatePosition

void changeColor(boolean color)

UWAGA! Tej metody nie można wywoływać ani w żaden sposób modyfikować!

Metoda pozwala na zdefiniowaniowanie, które pionki gracz bieżący ma uważać za swoje. Jeżeli jako argument metoda otrzyma wartość:


boolean getColor()

UWAGA! Tej metody nie należy w żaden sposób modyfikować!

Metoda określa, które pionki należą do gracza bieżącego. Wartości zwracane:


int evaluatePosition(AIBoard board)

UWAGA! To jest główna metoda heurystyki! Nie należy jej usuwać ale można modyfikować jej treść.

Metoda pozwala na analizę stanu planszy.
Metoda jako argument przyjmuje planszę do oceny typu AIBoard (opisanego niżej).
Metoda zwraca wartość int funkcji oceny dla danej planszy.


Dodatkowe uwagi dotyczące klasy EvaluatePosition

Przy pisaniu własnej implementacji funkcji heurystycznej należy pamiętać o niżej wymienionych ograniczeniach: Dozwolone jest wzbogacanie implementacji o dodatkowe metody, pola oraz klasy.

Klasa AIBoard

Przechowuje reprezentację planszy: jej rozmiar, informację do którego z graczy należy ruch i rozmieszczenie pionków.

Dostępne pola - objaśnienia

Piece [][] _board

Tablica dwuwymiarowa przechowująca reprezentację pól planszy (klasy Piece).

Pierwszy indeks oznacza wiersz a drugi indeks kolumnę planszy, numerowane od [0][0] (lewy górny róg planszy), do [getSize()-1][getSize()-1] (prawy dolny róg planszy).

Tablica jest określona tylko dla elementów, które odpowiadają czarnym (aktywnym) polom planszy. Odwołanie się to elementu tablicy odpowiadającemy białemu (nieaktywnemu) polu planszy daje wynik nieokreślony.


Dostępne metody - objaśnienia

boolean getMovesWhite()

Metoda określa, do którego z graczy należy ruch.


int getSize()

Metoda zwraca wartość int określającą długość boku planszy.


Klasa Piece

Przechowuje reprezentację pola planszy: informację czy zawiera pionka, jakiego koloru, oraz czy jest damką.

Dostępne pola - objaśnienia

boolean empty;

Pole określa czy pionek istnieje w danym polu. Przyjmuje wartość:


boolean king;

Pole określa czy dany pionek w danym polu jest damką. Jeżeli przyjmuje wartość:


boolean white;

Pole określa do którego z graczy należy pionek w danym polu. Jeżeli przyjmuje wartość:


Przydatne strony

- instrukcja programu Checkers
- strona Wikipedii warcabów angielskich