Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
fp:homework04 [2022/05/03 18:10]
pdmatei
fp:homework04 [2023/05/09 15:27] (current)
pdmatei
Line 1: Line 1:
-===== H04Final homework ​=====+===== Homework 4Five in a row AI =====
  
-For the final homework, you **may** choose between two options: +Homework ​4 consists in developing ​complete five-in-a-row gametogether with an AI and very basic interface
-  * **A. Lab homework (0.5p)**. All students which **did not submit** ​Homework ​3, (submitted ​solution which did not compile or got under 30p)may choose this homework. The **maximum** number of points that may be achieved is 0.5p. See details below. +
-  * **(B) Tic Tac Toe part 2 (1p)**. All students which **submitted** Homework 3 or consistent part of it may choose this homework. See details below.+
  
 +  * For this stage, you will decide on the structure of your project, as well as write tests to guide your implementation.
 +  * There are three parts of this homework, which will be evaluated independently;​
 +  * **The evaluation will take into account your working code, AS WELL AS THE TESTS THAT YOU WRITE** (If you write insufficient tests, an otherwise working code may not be graded).
 +  * There will be no other partial points, other than those mentioned explicitly in the statement.
  
-===== ALab homework ​(0.5p=====+==== 4.1. Board analysis ​(0.2p) ====
  
-The lab homework consists in providing **complete** solutions ​to labs [[fp:​lab04|4]][[fp:lab05|5]][[fp:​lab06|6]][[fp:​lab07|9]] and [[fp:​lab08|10]]except for exercises marked with **(!)**.  +For this part, you need to implement a function ''​sequences''​that returns a map of the form''​(5,a)(4,b), (3,c), (2,​d)''​ where: 
-  * **Each completed lab will be graded with 0.1p**  +  * ''​a''​ is the number sequences of length 5 that the player has established (on lines, columns or diagonals)
-  * **There will be no partial points for partially solved labs** ​each lab has to be entirely complete to be graded. +  * ''​b''​ is the number of sequences of length 4 **which can be filled-out in order to achieve a 5-sequence**. For example: ''​XX XX''​ is such a sequence for player ''​One'',​ however ''​XX0XX''​ is not, since this cannot ​be filled-out in order to achieve a 5-sequence
-  ​* **Solutions will be presented live and graded during lab** no solutions sent by email or MS Teams will be graded+  * ''​c''​ (resp''​d''​) is the number of sequences ​of length 3 (resp. 2) which can be filled-out in order to achieve a 5-sequence.
-  * **Solutions should be solved 100% individually**If some exercises or **parts** ​of them are taken from other sources, the **entire homework** will not be graded. +
-  * Deadline: **Friday 27 May**+
  
 +  * Proper testing is **essential** for this function, as the AI will take decisions based on it. It will be harder to spot problems with ''​sequences''​ in a later stage of the project.
 +  * You can replace the implementation of ''​winner''​ with a call to this function, to make the code more compact and avoid partial re-implementations.
  
-===== B. Tic Tac Toe part 2 (1p) =====+<code scala> 
 +def sequences(p: Player)(b: Board): Map[Int,​Int] ​??? 
 +</​code>​
  
-==== B.1Board analysis ​(0.3p) ====+==== 4.2Functionality ​(0.35p) ==== 
  
-==== B.2. Functionality ​(0.3p==== +For this part, you need to implement a functional project which consists of a running loop: 
 +  * Asks for the player to supply a move (expressed as a pair (x,yof coordinates to play, or in any other manner that you prefer). 
 +  * Plays the opponent move via the AI 
 +  * Displays the board, and repeats, until either player wins.
  
-==== B.3. Game AI (0.4p) ==== +More details will be available during lecture.
  
-0.2p bonus for the best AI.+** For this particular part, tests are not necessary**. 
 + 
 +==== 4.3. Game AI (0.45p) ====  
 + 
 +This part is at the very core of the project, and essentially consists of a function ''​play'',​ which implements the AIs decision of selecting a move. 
 +<code scala> 
 +def play(p: Player, b: Board): Board = ??? 
 +</​code>​  
 + 
 +**You may slightly change the signature of this function**, to accommodate your project. 
 + 
 +You may start with a very basic (trivial) implementation,​ which will allow you to move on with **4.2.** and then refine it after **B.2.** is complete. 
 + 
 +We offer no guidelines about how this function should be implemented,​ this is entirely up to you, but you may consider: 
 + 
 +**Possible strategies:​** 
 +  * You may implement ''​play''​ by simply evaluating the sequences that are available in the current play, as well as those of the opponent. This **local** strategy may become complicated,​ require a lot of code, as the game may unfold in different ways. It is also important to have a good strategy ​for starting the game (e.g. a play in either corner of the board is a bad way to start). 
 + 
 +  * The //​standard//​ approach, is to implement a [[https://​en.wikipedia.org/​wiki/​Minimax|Minimax Tree]] which allows you to inspect the game unfolding for a few moves in advance (e.g. 3 moves). More details will be given during lecture. 
 + 
 +  * Very basic, but functional AI: **0.1p** 
 +  * Intermediate AI (which may win in some cases): **0.2p** 
 +  * Minimax-based AI **0.45p** 
 + 
 +==== 4.4. Bonus (0.2p) ==== 
 + 
 +During the last lecture, we will play a tournament of Five-in-a-row,​ in which all your AI programs will compete. 
 + 
 +**The author ​the best AI implementations will be awarded a bonus of 0.2p**. 
 + 
 +** The winner of the tournament will receive a maximal grade of 10 for the entire lecture (no attendance to the exam will be necessary)**.