Monday, July 1, 2019

Ten Years Professing

Ten years ago today I moved from Massachusetts to Ohio to teach at Wittenberg University.  I was recently hooded, affianced, and ready for my shiny new job.  I realized quickly that I always needed more time to prepare my teaching materials.  A gentle disillusionment that explained why my professors were always so harried.  Somehow keeping up hadn't been too difficult in grad school when I taught three courses over three semesters (instead of 3-4 courses each semester) and had other grad students to handle my grading. 

In the past ten years, the race-against-the-clock to implement new course materials continues.  Luckily, the payoff in appreciation from students is tremendous.  That positive attention from teaching is a fuel that first lent me it's energy in 2001 as an undergrad.  I realized how much I wanted to teach then, a feeling reaffirmed when I taught in grad school at BU from 2007 to 2009.

Being a good teacher does not require your own creation of course materials, however.  I hope my work is actually reusable.  If just one other person gets a jump start because they don't have to create all their own content, that would be worth all the extra effort to make it accessible.

I can't make everything publicly available, because then students can just copy answers and solutions.  Still, I've got student versions of my lecture notes, a LaTeX package for writing lecture notes, publicly-available course pages (with assignments), an automated Python (3) grader, and a Python-to-Java tutorial

Ten years has changed a lot.  I'm divorced, a parent, tenured, and have switched schools twice.  As of today, I'm our department chair at Plymouth State.  (This last bit is definitely not going to help me prepare my course materials.)  I've seen a bunch of different students, but I'm still dedicated to their learning.

I got my copy of Games of No Chance 5, which has my Neighboring Nim paper.  (I'm finally published in a GONC!)  Neighboring Nim was something I proved hard back in July 2009, right after that big move to Ohio at the very start of my career.

Summer Software Engineering Reflections

My summer course just ended last week.  I taught Software Engineering, a senior-level course--which is against-the-norm for the summer.  The class was kept intentionally small because I was ramping up a new project and using the very new style of grading I've been going with since last fall.  (I was working on my own project solution concurrently with the students.)

Without revealing too much to my students this fall, here's the DAG for Project 0:

The basic idea behind this is that students can't get points for completing something until they complete the stuff coming before it.  They get the points by showing off their code to me in meetings.  This both lets them redo stuff if it isn't really finished and breaks up the grading so I don't have to find a block of time to get them all done at once.

I also like this because there are extra parts that are not necessary for moving on that students can do to exercise their creative sides.  I can also let students propose new goals to add to the project DAG, then make that available to everyone in the course.

The summer course went really well!  The projects were all really great, and they were each very different even though we were all working in close proximity.  I just barely finished my own version on the last day of class.  (Pedagogically, this is upsetting; realistically, it's rarely feasible for me to complete all my assignments before the students see them on the first run.  Ten years in and I still can't stay far enough ahead.)  These students did amazing work, despite me lagging behind!

Perhaps most important: this is the first time I got all of the students to really implement OO design patterns.  This crop best knows what's going on here.

It took nine tries to get this course right, but I really hope that this means everything will go smoothly starting this fall with the 10th iteration.  (We'll be doing Photo Albums then too, but hopefully they won't get too much of a jump start from this post.)

My current plan is to have the students program some Combinatorial Games again in the Fall of 2020.

I have really good plans for the lecture notes for this course, but that's a ways down the line.

Saturday, April 6, 2019

Sprouts 2019 Talks

Sprouts 2019 was yesterday and we had some excellent talks.  Here are my little summaries of them!

Nick Paolini: "Machine Learning in Combinatorial Games"

Nick gave an intro to Machine Learning as a subcategory of AI, including explaining historic data, models, objective functions, and some optimization.  He described Erik Jarlberg's recent work on Nim  (This explored a question I've been really curious about for years!)  Erik's work found that learning players can figure out how to make correct moves in Nim even when trained on a random player.  Nick also talked about developments with AlphaZero, an AI player for Go, Chess, and Shogi.  Nick then talked about his interest in trying to calculate NimSums via machine learning.

Nathan Mozinski: "Displaying Col Moves Online"

Nate showed the current progress on his senior project: displaying the moves in an active Col game being played between two Java players.  That initial code is code I created for my Data Structures class.  He's modified it to write the state of the game to a text file after each move.  He then added a JavaScript-powered webpage to display that game:  Right now it displays the current board, the previous board, and the win-loss records of the two players in the on-going match.

Craig Tennenhouse: "Towards an Impartial Short Tafl Variant"

Craig talked about Hnefetafl and some impartial variants he's been exploring.  In his rulesets, there is a King and one or more soldiers (who may or may not be attempting a coup).  To make it short, the King can only move North and West and the game ends when it cannot move.  The different rulesets are each based on a different rule for the movement of the soldiers.  Surprisingly, even with only one soldier and a ruleset such as "The soldier must move closer to the king", P-positions appear in very unexpected places!  For the rule "The soldier can only move south or east and can't go past the king", Craig seems to have solved for all the P-positions. 

Thursday, January 24, 2019

CGTC3 Talks: Day Three

More great talks on the final day of CGTC3!  Here are my summaries.

Tomoaki Abuku: "On Nim-like Games Played on Graphs"

Tomoaki investigated NimG with heaps on the edges.  Fukuyama proved a bunch of results about these in 2003.  Tomoaki's team used groups of independent zero-sum-valued vertices to find new results, including for many bipartite graphs.

Svenja Huntemann: "Enumerating Domineering"

Svenja build off work by Oh and Lee that counted independent sets on grids (accidentally) counting Kayles positions--as well as Col.  By considering each square as falling into one of five categories, Svenja and her team found a formula for the number of positions on an m x n board.  Even more complicated is enumerating the maximal positions--in order to build the polynomials, 3x3 matrices are needed instead of 2x2.

Valentin Gledel: "Maker-Breaker Domination Number"

Valentin and his team extended previous work on the Maker-Breaker Domination game.  In the game, the Dominator tries to build a dominating set while the Staller chooses vertices to exclude.  This new work investigates the number of moves the Dominator needs to win; a pair with each case of each player going first.  They found graphs that work for any pair of numbers!

Ravi Kant Rai: "Optimal Play in Duidoku Game"

Ravi found Duidoku--a two-player game based on Sudoku that I had been playing back in 2011 (though under another name).  Ravi found a set of permutation strategies for the second player to never lose (so either win or draw) from the initial position.  Ravi generalizes this to grids of any size, showing that Player two has the advantage exactly when n is even.

Hironori Kiya: "Two Player Tanhinmin and its Extension"

Kiya introduces Tanhinmin as a combinatorial version of a Japanese card game, Daihinmin.  In this game, players play increasing cards (or pass) until one player has emptied their hand (they then win).  Kiya's team found a linear-time algorithm to determine winnability (assuming the cards are already in sorted order).  Kiya extended this to show that it also works when you add in the 8-cut rule from Daihinmin.

Matt Ferland: "Computational Properties of Slimetrail"

Matt presented work he completed with me while an undergraduate at Plymouth State!  Slimetrail is one of the games used by Ludus in their tournaments all across Portugal.  Matt proved that a generalized version (on graphs) is PSPACE-complete.  Matt showed the gadgets in the reduction from QBF.

CGTC3 Talks: Day Two

The second day of talks at CGTC3 were also excellent!  Here are short summaries.

Yuki Irie: "p-Saturations of Welter's Game and the Irreducible Representations of Symmetric Groups"

Yuki confirmed a long-standing conjecture by Mikio Sato (from the 70's!) stating that Welter's Game is related to the representations of groups.  Yuki made the connection by generalizing Welter's game using p-Saturations.  In these versions, the nimber values can be found via a formula using addition without carry in base p and Young diagrams!

Thane Plambeck: "Shotgun Wedding: EGT & CGT"

Thane showed a new potential method for combining EGT and CGT.  In this, he considers some repeatable economic game where players have a set of options to choose from each round.  The application of CGT comes from adding an alternating-turn game to generate those option sets.  Thane's method of choosing includes switches, creating a first-mover advantage situation.

Alda Carvalho: "Combinatorics of Jenga"

Alda and her team considered perfect play in Jenga as a combinatorial game.  Each row low enough in the tower (meaning, it has at least one full row above it) acts as a *2 component.  The total value is not just a simple sum, however, because blocks are added to the top, revealing a new *2 pile after every three moves.  Alda generalized this concept as Clock Nim, then found nimbers by considering it as a type of subtraction game.

Koki Suetsugu: "On a Wythoff-type Extension of the General Subtraction Game"

Koki and his team defined a variant of Cyclic Nimhoff ("Restricted Cyclic Nimhoff") where you can only take up to some given q sticks from a pile.  Like Cyclic Nimhoff, they found a closed-form expression to find the nimber.  He then generalized this further by defining separate subtraction-style sets for each of single-heap-removal moves.  In this game, the nimber evaluation uses the Grundy evaluation functions of the corresponding subtraction games whenever the Grundy sequence is a p-stair.

Fionn McInerney: "The Orthogonal Colouring Game"

Fionn and his group have worked on some cool scoring games using two copies of a graph.  Players can color vertices on either copy, but must adhere to an additional orthogonality restraint: the ordered pair of colors for any vertex and its copy cannot be repeated.  Each graph "belongs" to a single player, but they can color in either; the score is determined by the number of vertices that get painted in the game.  Fionn shows that Player 2 can always force a tie when there's a strictly-matched involution, but determining whether the involution exists can be NP-hard.

Urban Larsson: "Cumulative Games"

Urban took a different tack with combining EGT and CGT using subtraction games.  Similar to Candy Nim, you keep track of how many total elements you've subtracted, hoping to collect more than your opponents.  Unlike Candy Nim, you ignore who gets to play last; you're just concerned about the total collected.  In this way, Urban's team was able to connect to extensive form games in EGT.  To generalize this for other combinatorial games, a reward function is needed on the moves, along with an outcome function for n-player games.

Melissa Huggan: "The Index: a Measure of Equality"

Melissa delivered an update on her team's progress on simultaneous games.  A lot has happened since I last saw this in Lyon.  Here a game called Subtraction Squares is used, where players remove a number of squares from a strip.  A removal can be made from either end.  If we play a continued conjuctive sum, then the index, I(G), is a pair, (x, y), where x is the probability Left can win with a good mixed strategy and y is the same for Right.  They can then show that equality of games happens exactly when the indices are the same.

Tuesday, January 22, 2019

CGTC3 Talks: Day One

It's so exciting to be back in Lisbon for CGTC3.  Especially after missing it two years ago.

The first day (Tuesday, January 22) started off with some great talks.  Here are some very brief summaries.

Richard Nowakowski: "What's happening in CGT (since 2010)"

Richard opened the meeting by speaking about new branches of CGT that have appeared this decade.  His survey included explaining Misere and Scoring play, simultaneous moves, ties, placement games, and more.  It was best summarized by his statement: "What did they [BCG] not think about because they didn't need to?"

Antoine Dailly: "Connected Subtraction Games on Graphs"

Antoine described a new game inspired by subtraction games.  CSG(S) is a game on a graph where you may remove k connected vertices from G where k is in S and the resulting graph is still connected.  His team has shown some nice periodicity results when appending paths to an initial graph.

Mike Fisher: "Beatty Games Big and Small"

Mike explained Beatty sequences, then talked about some new Beatty-based games, including two partizan subtraction games, octal games, and even infinite octal games.  The talk name is from these subtraction games: big values occur if the subtraction sets are exactly the Beatty sequences and small values happen if you include 1 to both sets.

Carlos Pereira dos Santos: "Extended CGT"

Carlos considers adding infinity and negative infinity to the set of game options as terminal moves: infinity is an automatic win for left (and vice versa), no matter what else is going on in other parts of a game sum.  (He motivated this by Atari Go.)  He calls these types of game Race Games.

Marc Heinrich: "Partizan Subtraction Games"

Marc and his team made nice progress on partizan subtraction games.  I did not know that outcome classes are periodic here, though values are not always!  Marc showed that the sizes of the sets can be much less important that the size of the numbers in the set.

Bernhard von Stengel: "Computational Progress on the Catch-Up Game"

Bernhard described Catch-Up, a kind of scoring game that doesn't use alternating play; instead, whomever has the LOWER score gets to take the next turn.  Bernhard showed a really cool method he found to solve this for big games, using the representation of prior choices as a binary address for the table of values being generated.

Sunday, March 11, 2018

Sprouts 2018 Announcement

Sprouts 2018 is happening Friday April 13 and Saturday April 14 at Plymouth State!  Sprouts is a combinatorial games conference for undergraduate research.

Here's the conference page, complete with directions, a draft of the schedule, and other notes:

Craig is bringing his contingent from University of New England, and it looks like we're going to have a bunch of Tafl talks!

I'm going to try to put together a computer tournament so attendees can submit a player.  If possible, I'm going to reuse my code from Data Structures.  We'll see how far along I get in that process.