Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Evaluation function #3

Open
ErinvanderVeen opened this issue Apr 4, 2019 · 2 comments
Open

Evaluation function #3

ErinvanderVeen opened this issue Apr 4, 2019 · 2 comments
Assignees
Labels
enhancement New feature or request help wanted Extra attention is needed High This issue has a high priority question Further information is requested

Comments

@ErinvanderVeen
Copy link
Owner

An important part of the minimax algorithm is a good evaluation function. How should we go about this? I reckon we should look at existing literature to devise a good weighted function, and then use simulated annealing to get optimal weights. We can make the program play itself for this purpose.

@ErinvanderVeen ErinvanderVeen added enhancement New feature or request help wanted Extra attention is needed question Further information is requested labels Apr 4, 2019
@emwestin
Copy link
Collaborator

emwestin commented Apr 4, 2019

I would also assume that using existing literature is the way to go in order to get a good weighted function.
For example, in the paper "Performance and energy efficiency analysis of a Reversi player for FPGAs and General Purpose Processors" by J. Olivito et al., they describe the following metrics:

  • Mobility. It refers to the number of legal moves of a player. This is a very important strategic concept of the game. A good player tries to maximize its mobility while limiting the opponent’s one. This usually forces the opponent to make undesirable movements."
  • Stable discs. Stable discs are those that once they are placed, they cannot be flipped anymore. They are generally desirable because they allow dominating its surrounding squares and definitely contribute to the final score.
  • Corners and x-squares. Corners are considered valuable squares because they are stable and they are the key to get more stable discs around the corner. On the contrary, xsquares (corners adjacent squares placed on the major diagonals) are generally undesirable squares because they facilitate the opponent to reach the corners. Note that this applies only when the corresponding corner is empty
  • Number of discs. This metric evaluates end-game boards.

Some or all of these should probably be included in our evaluation function since they are often mentioned in the strategies used by professional players.

@ErinvanderVeen
Copy link
Owner Author

The development of a world class Othello program is also a good paper that lists a bunch of things we should consider in the evaluation function.

@ErinvanderVeen ErinvanderVeen added the High This issue has a high priority label Apr 12, 2019
emwestin added a commit that referenced this issue Apr 26, 2019
* Makes use of the Dumb7Fill algorithm (does not include Erins' bug fix, add again if needed).

* Added Negamax with alpha-beta pruning replacing Minimax. Should allow for easier parallelization [#29]

* Added iterative deepening [#31]

* Added a rough evaluation function. Far from good [#3]

* Simplified how the "main" file plays the game. Should be much simpler now.
emwestin added a commit that referenced this issue Apr 26, 2019
* Refactored the code.

* Added Negamax with alpha-beta pruning replacing Minimax. Should allow for easier parallelization [#29]

* Added iterative deepening [#31]

* Added a rough evaluation function. Far from good [#3]

* Simplified how the "main" file plays the game. Should be much simpler now.
@emwestin emwestin removed their assignment May 3, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request help wanted Extra attention is needed High This issue has a high priority question Further information is requested
Projects
None yet
Development

No branches or pull requests

2 participants