### Lecture 1: Introduction, Simulation in Python, Crude Monte Carlo, Importance Sampling, Exponential Tilting

- Lecture: slides
- Code demos: pdf, notebook
- Simulating random variables in Python (13 mins)
- Basic plotting in Python (8 mins)
- Crude Monte Carlo (15 mins)

- Lecture: slides
- Code demos: pdf, notebook
- Importance sampling (7 mins)
- Siegmund's algorithm (16 mins)

- Assignment 1: pdf, notebook
- Assignment 1 Solution: pdf, notebook

### Lecture 2: Improved Cross-Entropy and Original Cross-Entropy method, Markov Chain Monte Carlo

- Lecture: slides
- Code demos: pdf, notebook
- Improved cross-entropy and original cross-entropy methods (6 mins)
- Cross-entropy compared to Crude Monte Carlo (4 mins)
- Cross entropy method actuarial example (7 mins)
- Markov chain Monte Carlo (5 mins)
- MCMC starting point (7 mins)
- MCMC dependence (14 mins)

- Assignment 2: pdf, notebook
- Assignment 2 Solution: pdf, notebook

### Lecture 3: Sequential Monte Carlo and PyMC3

- Code demos:
- Sequential Monte Carlo (11 mins) [slides]
- MCMC with PyMC3 (10 mins) [pdf, notebook]
- High-performance Python (18 mins) [pdf, notebook]

- Other resources:
- Sequential Monte Carlo: the original paper, and there are some videos on SMC in general (not just the version for rare events which is much simpler) like this simple animation or the recording from this French workshop
- MCMC with PyMC3: a great presentation from the creator of PyMC3, an online book/course "for hackers", and a paper
- High-performance Python: a great screencast introducing Numba and a conference presentation covering Numba and more general performance guidlines at a more advanced level.

- Assignment 3: pdf, notebook

Course materials from 2019.