See the schedule for topics by week and links to the homework.

Instructor

Ben Young, he/they. bjy@uoregon.edu, 211 Fenton. Office hours are, tentatively, 1pm Tue/Thu.

Topics

First part of the class: Combinatorial enumeration and iteration.

  • combinatorial enumeration, iteration;
  • partitions, posets, trees, graphs, etc
  • dimer model, spanning tree, nonintersecting lattice path, ising model.
  • standard algorithms for working with these objects.
  • generating functions and combinatorial statistics

Second part of the class: random generation and random sampling.

  • discrete probability, random sampling and random generation
  • markov chains, markov growth rules.
  • coupling from the past, simulated annealing

Throughout the class: computation and computer algebra.

  • basics of writing python covered by “language immersion”
  • effective computation; code optimization, profiling.
  • Refactoring code, object-oriented programming, test driven development

Course Goals

By end of class, students should be able to:

  • write code to generate large random combinatorial objects of the above types
  • prove theoretical results about these objects
  • fluently write scientific code
  • develop conjectures and proofs with the help of computational experiment

Prerequisites:

Experience with programming similar to an undergraduate course (preferably in python). Familiarity with probability, random variables, and linear algebra at an undergraduate level.

Course structure

Three hours of lecture (including computer demonstration and chalkboard exposition).

Homework and assessment

I will assign roughly 8 weekly homeworks - to be due all weeks except Week 1 (the first week of term) and Week 6 (midterm week). Assignments are due in Canvas on Tuesdays, at 11:59pm. There’s a late penalty of 10 percent per day, so please submit on time. I’ll drop the lowest assignment grade.

These assignments will consist of a mix of theoretical problems and computational exercises. Homework will be turned in as jupyter notebooks, allowing integration of programming, simulation results, and LaTeX into a single document.

Grading

Mathematics graduate classes now have 2 separate “heavy load” and “light load” grading schemes. This is to allow Ph.D. students (who have significant other responsibilities) to continue to take classes throughout their program.

  • Heavy load grading scheme
    • 25% midterm, 50% final exam, 25% homework
    • Tests are pen-and-paper, no computer (I’ll ask about math and pseudocode)
  • Light load grading scheme
    • 100% homework, scaled so that a grade of B+ corresponds to getting passing grade on about half the assignments.
    • If you have an alternative suggestion for how you would like to be evaluated (e.g. a relevant research project) let me know

Whether you are taking the “light load” or “heavy load” version of this class largely depends on your status in the program.

  • Math undergrads and pre-Ph.D. students: heavy load grading scheme.
  • Math Ph.D. students: light load grading scheme.
  • Students from other departments: heavy load grading scheme.

If you feel that an exception to the above should be made, please discuss with me and with your advisor.

Software

We will use python for this class.

To install python, together with everything you need for this class, I suggest installing miniconda. Miniconda is a python distribution that is commonly used in data science and scientific computing. We will need the following packages:

  • jupyter
  • numpy
  • sympy
  • matplotlib

In my own work, I also use Sage, a computer algebra system based on python. Sage can also be installed through miniconda, and indeed this is probably the easiest way to install sage at the moment. However, for continuity with future classes in the applied math sequence, I’m going to try not to use Sage.

Books

We will not follow a single text, but students who would like additional reading might find these useful:

  • Bollobas, Modern Graph Theory nicely covers the graph theory topics we will cover (and more).
  • Richard Stanley, Enumerative Combinatorics is the standard reference.
  • Donald E. Knuth, The Art of Computer Programming Vol. 4a is a great text on combinatorial algorithms.

Inclusion and accessibility

We take seriously our responsibility to create inclusive learning environments. Please notify us if there are aspects of the instruction or design of this course that result in barriers to your participation! You are also encouraged to contact the Accessible Education Center in 164 Oregon Hall at 541-346-1155 or uoaec@uoregon.edu.