Difference between revisions of "Connect Four"

From CSE231 Wiki
Jump to navigation Jump to search
Line 48: Line 48:
 
[https://docs.oracle.com/javase/8/docs/api/java/util/function/IntPredicate.html interface IntPredicate]
 
[https://docs.oracle.com/javase/8/docs/api/java/util/function/IntPredicate.html interface IntPredicate]
 
: [https://docs.oracle.com/javase/8/docs/api/java/util/function/IntPredicate.html#test-int- test(value)]
 
: [https://docs.oracle.com/javase/8/docs/api/java/util/function/IntPredicate.html#test-int- test(value)]
 +
 +
=Mistakes To Avoid=
 +
{{Warning|Do NOT be lured in be [https://docs.oracle.com/javase/8/docs/api/java/lang/Double.html#MIN_VALUE Double.MIN_VALUE].  Use [https://docs.oracle.com/javase/8/docs/api/java/lang/Double.html#NEGATIVE_INFINITY Double.NEGATIVE_INFINITY] instead.}}
  
 
=Code To Implement=
 
=Code To Implement=
 +
NOTE: While you should defer to the IntPredicate searchAtDepth for when to continue to search (test returns true) or when to return an evaluation (test returns false), it is up to you to decide when to search in parallel and when to fall back to sequential search.
 
==Negamax==
 
==Negamax==
 
{{CodeToImplement|ConnectFour|negamaxKernel<br>selectNextColumn|connectfour.studio}}
 
{{CodeToImplement|ConnectFour|negamaxKernel<br>selectNextColumn|connectfour.studio}}

Revision as of 05:44, 26 February 2020

credit for this assignment: Finn Voichick and Dennis Cosgrove

Motivation

Minimax is an important concept in game theory and search.

Negamax is a variant which relies on

While this technique is applicable to Chess (as Deep Blue employed to defeat Kasparov), we choose Connect Four as our context since it has a simpler game mechanic.

While the core part of searches like Minimax may be easy to parallelize, critical aspects such as alpha-beta pruning are more challenging.

Background

Video

Tutorial

Solving Connect Four

Wikipedia

Minimax

Negamax

The Core Questions

  • What are the tasks?
  • What is the data?
  • Is the data mutable?
  • If so, how is it shared?

Code To Use

connectfour.core

interface Board

isDone()
getWinner()
getCurrentPlayer()
getTurnsPlayed()
createNextBoard(int column)

java.util

class Optional<T>

java.util.function

interface ToDoubleFunction<T>

applyAsDouble(value)

interface IntPredicate

test(value)

Mistakes To Avoid

Attention niels epting.svg Warning:Do NOT be lured in be Double.MIN_VALUE. Use Double.NEGATIVE_INFINITY instead.

Code To Implement

NOTE: While you should defer to the IntPredicate searchAtDepth for when to continue to search (test returns true) or when to return an evaluation (test returns false), it is up to you to decide when to search in parallel and when to fall back to sequential search.

Negamax

class: ConnectFour.java Java.png
methods: negamaxKernel
selectNextColumn
package: connectfour.studio
source folder: student/src/main/java

method: private static double negamaxKernel(Board board, ToDoubleFunction<Board> heuristic, IntPredicate searchAtDepth, int currentDepth) Parallel.svg (parallel implementation required)

method: public static Optional<Integer> selectNextColumn(Board board, ToDoubleFunction<Board> heuristic, IntPredicate searchAtDepth) Parallel.svg (parallel implementation required)

Win or Lose Heuristic

class: WinOrLoseHeuristic.java Java.png
methods: applyAsDouble
package: connectfour.studio
source folder: student/src/main/java

method: public double applyAsDouble(Board board) Sequential.svg (sequential implementation only)

Evaluate the current state of the Board. You should return a negative number if you have lost. You should return less negative numbers for losses that occur later.

OpenEndedHeuristic (Optional)

class: OpenEndedHeuristic.java Java.png
methods: applyAsDouble
package: connectfour.challenge
source folder: student/src/main/java

method: public double applyAsDouble(Board board) Sequential.svg (sequential implementation only)

Testing Your Solution

Correctness

class: ConnectFourTestSuite.java Junit.png
package: connnectfour.studio
source folder: testing/src/test/java

Visualization

class: ConnectFourViz.java VIZ
package: connnectfour.viz.game
source folder: student/src//java

ConnectFourViz.png