diff --git a/content/main/assignments/1.md b/content/main/assignments/1.md index 30ba227..5b867ba 100644 --- a/content/main/assignments/1.md +++ b/content/main/assignments/1.md @@ -6,4 +6,32 @@ weight: 1 # Assignment 1: Backward Induction -Create a generic solver and an implementation for for N to 0 by S. +Due date: 09/04/2024 + +--- + +**Task:** Create a generic recursive solver and an implementation for the game ({{< katex >}} n \in \mathbb{N} {{< /katex >}})-to-0 with move options in {{< katex >}} S \subseteq \mathbb{N_{n}\setminus\{0\}} {{< /katex >}}. + +**Provided:** + +* High-level steps and hints in this web page. +* A correct implementation of this game (as a separate binary, perhaps `nova`). +* A rough testing framework in the form of a script, replicating the autograding setup. +* Python skeleton code including an abstract `game` interface in a multi-file structure and basic utilities for parsing arguments from `stdin` (e.g., game parameters) and for writing to `stdout` (e.g., a memo-table analyzer, used in Assignments 2 and 3). + +**Metrics:** After executing the python program with the adequate arguments, `stdout` should match the output of the provided game implementation on arbitrary (but within the bounds of a non-memoized solution) inputs of {{< katex >}} n {{< /katex >}} and {{< katex >}} S {{< /katex >}}. The specific inputs on which it will be evaluated is not provided. For this assignment, output should be the categorical "game value," `WIN`, `LOSE`, or `TIE`. + +--- + +**Learning objectives:** + +* Internalize the "API" of a finite extensive-form game via generic programming. +* Begin getting comfortable writing parameterized game implementations. +* Fundamentally understand the method of backward induction. +* Get used to testing and software organization. + +{{< hint info >}} + +**Note:** Participants can use any language as long as they can package it into a stand-alone program that they can submit for testing. The source code is provided through a public GitHub repository, and `nova` can be installed with the Rust toolchain. + +{{< /hint >}} diff --git a/content/main/assignments/2.md b/content/main/assignments/2.md index c9302fa..21131e1 100644 --- a/content/main/assignments/2.md +++ b/content/main/assignments/2.md @@ -6,4 +6,32 @@ weight: 2 # Assignment 2: Solving Efficiency -Upgrade the existing generic solver with memoization and iterative solving. Implement the game sum N from S, creating a hashing function for it in the process. +Due date: 09/13/2024 + +--- + +**Task:** Upgrade the existing generic solver with a memo table and an iterative solving algorithm. Implement the game of Number Scrabble for an arbitrary sum of {{< katex >}} n \in \mathbb{N}^{+} {{< /katex >}} from a set {{< katex >}} S \subseteq \mathbb{N}_{n} {{< /katex >}}, creating a hashing function for it in the process. + +**Provided:** + +* No additional skeleton code or utilities. +* High-level explanations, steps, and hints in this web page. +* A symbolic representation of the iterative solving algorithm. +* The binary they installed in Assignment 1 also includes a correct solution for this assignment, and the same testing framework still works. + +**Metrics:** After executing the python program, `stdout` should match the output of the provided game implementation on arbitrary inputs of {{< katex >}} n {{< /katex >}} and {{< katex >}} S {{< /katex >}} (within the now extended bounds of an iterative and memoized solution). The specific inputs on which it will be evaluated is not provided. This output should now be a breakdown of the number of winning, losing, and tying positions in the game (which they can print via the provided analysis utilities). + +--- + +**Learning objectives:** + +* Overcome the difficulty of a more complicated implementation of the `game` interface. +* Understand the added efficiency of iterative and memoized solving algorithms. +* Become familiarized with creating injective state hashing functions. +* Ease into being able to create a new game module from scratch. + +{{< hint info >}} + +**Note:** Participants did not need to create a hashing function for the first assignment, as it is not generally necessary for N-to-0. No additional downloads or installations are necessary for this assignment. They should be able to just pass in the memo table they populate with their solving algorithm to the utility functions (which will provide a specific API). + +{{< /hint >}} diff --git a/content/main/assignments/3.md b/content/main/assignments/3.md index f0e04cd..422b53f 100644 --- a/content/main/assignments/3.md +++ b/content/main/assignments/3.md @@ -6,4 +6,32 @@ weight: 3 # Assignment 3: Hidden Symmetry -Implement N-sided Tic-Tac-Toe with a symmetry removal flag. Implement "symmetry removal" for certain cases of sum N from S. +Due date: 09/23/2024 + +--- + +**Task:** Implement {{< katex >}}(n \in \mathbb{N}^{+}){{< /katex >}}-sided Tic-Tac-Toe (win in {{< katex >}}n{{< /katex >}}) with a symmetry removal flag. Add symmetry removal for certain cases (probably just the 3x3 magic square case) of Number Scrabble by taking inspiration on their isomorphic Tic-Tac-Toe counterparts, also under a flag argument. Modify solving algorithm to also store remoteness values. + +**Provided:** + +* No additional skeleton code. +* Tips on generating symmetric positions for Tic-Tac-Toe cleanly. +* An explanation of the correspondence between TTT and Number Scrabble. +* The binary they installed in Assignment 1 also includes a correct solution for this assignment, and the same testing framework still works. + +**Metrics:** After executing the python program, `stdout` should match the output of the provided game implementation on arbitrary inputs of {{< katex >}} n {{< /katex >}} and {{< katex >}} S {{< /katex >}} (within the now extended bounds of an iterative and memoized solution). The specific inputs on which it will be evaluated is not provided. This output should now be a breakdown of the number of winning, losing, and tying positions in the game grouped by remoteness (which they can print via the provided analysis utilities). + +--- + +**Learning objectives:** + +* Learn the technique of symmetry removal intuitively via TTT's square board. +* Continue the trend of generic code / parameterization to symmetry removal. +* Get practice for writing state hash functions for physical board games. +* Gain an overall understanding of games as algebraic objects. + +{{< hint info >}} + +**Note:** This assignment should be very guided. While participants will practice hashing and the implementation of the game interface in this assignment, its purpose is ultimately to get them thinking about the mathematical structure of games, and to use this understanding to motivate something useful (symmetry removal on a game that has no obvious spatial "symmetry"). + +{{< /hint >}} diff --git a/content/main/assignments/4.md b/content/main/assignments/4.md index 149fe41..889d464 100644 --- a/content/main/assignments/4.md +++ b/content/main/assignments/4.md @@ -1,9 +1,29 @@ --- -title: 4. Persistence is Key +title: 4. Theoretical Potpourri type: docs weight: 4 --- -# Assignment 4: Persistence is Key +# Assignment 4: Theoretical Potpourri -Implement a partition enumeration function for all games. Implement a couple small modules of a very rudimentary database: The eviction policy and encoding/decoding. Show reduction in peak memory usage. +Due date: 10/02/2024 + +--- + +**Task:** Answer the following questions. + +1. For the following game, write two algorithms in pseudocode that take a game state as input and output a number, effectively partitioning the space of states. Make sure that one of the algorithms induces a meta-graph that is a DAG, and the other a linked list. [...] +2. For the following game, write the tightest possible upper bound on its number of states, and estimate an average number of possible moves for any state. Provide a justification. [...] +3. In the worst case, can a weak solution take as much space as a strong solution to a game? Explain why. +5. Provide an example of a game in reduced graph form with regular states, 2 pure-draw levels, and at least one non-pure draw cluster. +6. [...] + +**Provided:** + +* Perhaps a {{< katex >}} \LaTeX {{< /katex >}} template for the deranged. + +**Metrics:** Nothing, really. Just good effort. + +--- + +**Learning objectives:** Reinforce and confirm the theoretical knowledge covered during the first third of the semester (see [course roadmap](/)). diff --git a/content/main/assignments/5.md b/content/main/assignments/5.md index 7c92dc5..e797c04 100644 --- a/content/main/assignments/5.md +++ b/content/main/assignments/5.md @@ -6,4 +6,22 @@ weight: 5 # Assignment 5: Design Specification -Select the project that you like best from a pool of entry-level projects, and create a design specification which the project's owner will review. +Due date: 10/11/2024 + +--- + +**Task:** Select the project that you like best from a pool of entry-level projects created by veterans throughout the start of the semester, form a team with the people interested in the same project, and create a design specification which the project's creator(s) will review with you in-person. See [course roadmap](/) for how this plays out chronologically. + +--- + +**Learning objectives:** + +* Become acquainted with one of our main systems, while respecting individual interests. +* Gain the ability to integrate a new feature from scratch. +* Understand how collaboration works in software. + +{{< hint info >}} + +**Note:** This intentionally coincides with a few sessions that go over the architecture of our systems (see the [course roadmap](/)). There is a lot of logistics to work out here, but I wanted to remark on only allowing up to a certain amount of individuals per project (maybe 2 or 3). + +{{< /hint >}} diff --git a/content/main/assignments/6.md b/content/main/assignments/6.md index ba6cf8d..e4fc39b 100644 --- a/content/main/assignments/6.md +++ b/content/main/assignments/6.md @@ -6,4 +6,8 @@ weight: 6 # Assignment 6: Team Presentation -Present the results of your project during session with your collaborators. +Due date: 11/01/2024 + +--- + +Present the results of your project during session with your collaborators. This can happen over a couple days. diff --git a/content/main/assignments/_index.md b/content/main/assignments/_index.md index cafffda..58c50aa 100644 --- a/content/main/assignments/_index.md +++ b/content/main/assignments/_index.md @@ -5,3 +5,11 @@ weight: 10 bookCollapseSection: true bookFlatSection: true --- + +# Overview of Assignments + +--- + +1. The first three assignments involve the implementation of three games within a Python-based system for which we provide significant resources, `GamesmanNewbie`. They are an introduction to the most important techniques we use. +2. The fourth assignment is written, and covers partitioning, parallel solving, and other elements that are impractical to leave to implementation. +3. The fifth and sixth assignments are a group project. The fifth is a project specification, and the sixth is a presentation. Please see the [course outline](/) for how this plays out chronologically. diff --git a/content/main/notes/example.md b/content/main/notes/example.md new file mode 100644 index 0000000..83692db --- /dev/null +++ b/content/main/notes/example.md @@ -0,0 +1,15 @@ +--- +title: Example Topic +type: docs +weight: 0 +--- + +# Example Topic + +--- + +{{< katex display >}} + +\int_{0}^{\infty} \frac{1}{x^2} \; dx = \; ? + +{{< /katex >}} diff --git a/content/main/notes/game_theory/1_games.md b/content/main/notes/game_theory/1_games.md deleted file mode 100644 index ba0a15b..0000000 --- a/content/main/notes/game_theory/1_games.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: 1. Games and Solutions -type: docs -weight: 1 ---- - -> TODO diff --git a/content/main/notes/game_theory/2_strategic.md b/content/main/notes/game_theory/2_strategic.md deleted file mode 100644 index 1875f47..0000000 --- a/content/main/notes/game_theory/2_strategic.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: 2. Strategic Games -type: docs -weight: 2 ---- - -> TODO diff --git a/content/main/notes/game_theory/3_equilibrium.md b/content/main/notes/game_theory/3_equilibrium.md deleted file mode 100644 index 93b332f..0000000 --- a/content/main/notes/game_theory/3_equilibrium.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: 3. Equilibrium Concepts -type: docs -weight: 3 ---- - -> TODO diff --git a/content/main/notes/game_theory/4_extensive.md b/content/main/notes/game_theory/4_extensive.md deleted file mode 100644 index a240109..0000000 --- a/content/main/notes/game_theory/4_extensive.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: 4. Extensive-Form Games -type: docs -weight: 4 ---- - -> TODO diff --git a/content/main/notes/game_theory/5_subgame.md b/content/main/notes/game_theory/5_subgame.md deleted file mode 100644 index 6d8c73f..0000000 --- a/content/main/notes/game_theory/5_subgame.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: 5. Subgame-Perfect NE -type: docs -weight: 5 ---- - -> TODO diff --git a/content/main/notes/game_theory/6_collaborative.md b/content/main/notes/game_theory/6_collaborative.md deleted file mode 100644 index 1e0d425..0000000 --- a/content/main/notes/game_theory/6_collaborative.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: 6. Collaborative Game Theory -type: docs -weight: 6 ---- - -> TODO diff --git a/content/main/notes/game_theory/_index.md b/content/main/notes/game_theory/_index.md deleted file mode 100644 index f1de641..0000000 --- a/content/main/notes/game_theory/_index.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Game Theory -type: docs -weight: 1 ---- diff --git a/content/main/notes/mathematics/1_fundamentals.md b/content/main/notes/mathematics/1_fundamentals.md deleted file mode 100644 index 64bc03c..0000000 --- a/content/main/notes/mathematics/1_fundamentals.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: 1. Fundamentals -type: docs -weight: 1 ---- - -> TODO diff --git a/content/main/notes/mathematics/2_combinatorics.md b/content/main/notes/mathematics/2_combinatorics.md deleted file mode 100644 index f78047b..0000000 --- a/content/main/notes/mathematics/2_combinatorics.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: 2. Combinatorics -type: docs -weight: 1 ---- - -> TODO diff --git a/content/main/notes/mathematics/3_algorithms.md b/content/main/notes/mathematics/3_algorithms.md deleted file mode 100644 index 088d8ee..0000000 --- a/content/main/notes/mathematics/3_algorithms.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: 3. Algorithms -type: docs -weight: 1 ---- - -> TODO diff --git a/content/main/notes/mathematics/4_complexity.md b/content/main/notes/mathematics/4_complexity.md deleted file mode 100644 index 71e0d64..0000000 --- a/content/main/notes/mathematics/4_complexity.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: 4. Complexity -type: docs -weight: 1 ---- - -> TODO diff --git a/content/main/notes/mathematics/5_groups.md b/content/main/notes/mathematics/5_groups.md deleted file mode 100644 index ab3acee..0000000 --- a/content/main/notes/mathematics/5_groups.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: 5. Group Theory -type: docs -weight: 1 ---- - -> TODO diff --git a/content/main/notes/mathematics/_index.md b/content/main/notes/mathematics/_index.md deleted file mode 100644 index 8eec0b2..0000000 --- a/content/main/notes/mathematics/_index.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Mathematics -type: docs -weight: 2 ---- diff --git a/content/main/notes/techniques/1_hashing.md b/content/main/notes/techniques/1_hashing.md deleted file mode 100644 index 773863c..0000000 --- a/content/main/notes/techniques/1_hashing.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: 1. State Hashing -type: docs -weight: 1 ---- - -> TODO diff --git a/content/main/notes/techniques/2_backward_induction.md b/content/main/notes/techniques/2_backward_induction.md deleted file mode 100644 index b100cbd..0000000 --- a/content/main/notes/techniques/2_backward_induction.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: 2. Backward Induction -type: docs -weight: 2 ---- - -> TODO diff --git a/content/main/notes/techniques/3_memoization.md b/content/main/notes/techniques/3_memoization.md deleted file mode 100644 index 2d2c167..0000000 --- a/content/main/notes/techniques/3_memoization.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: 3. Memoization -type: docs -weight: 3 ---- - -> TODO diff --git a/content/main/notes/techniques/4_symmetry_removal.md b/content/main/notes/techniques/4_symmetry_removal.md deleted file mode 100644 index 438a904..0000000 --- a/content/main/notes/techniques/4_symmetry_removal.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: 4. Symmetry Removal -type: docs -weight: 4 ---- - -> TODO diff --git a/content/main/notes/techniques/5_partitioning.md b/content/main/notes/techniques/5_partitioning.md deleted file mode 100644 index 75a4b0c..0000000 --- a/content/main/notes/techniques/5_partitioning.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: 5. State Partitioning -type: docs -weight: 5 ---- - -> TODO diff --git a/content/main/notes/techniques/6_parallelization.md b/content/main/notes/techniques/6_parallelization.md deleted file mode 100644 index e93ec6d..0000000 --- a/content/main/notes/techniques/6_parallelization.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: 6. Parallelization -type: docs -weight: 6 ---- - -# Math example - -{{< katex display >}} -f(x) = \int_{-\infty}^\infty\hat f(\xi)\,e^{2 \pi i \xi x}\,d\xi -{{< /katex >}} diff --git a/content/main/notes/techniques/_index.md b/content/main/notes/techniques/_index.md deleted file mode 100644 index 47145fa..0000000 --- a/content/main/notes/techniques/_index.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Techniques -type: docs -weight: 3 ----