30509  COMPUTER PROGRAMMING
Department of Decision Sciences
CARLO BALDASSI
Lezioni della classe erogate in presenza
Suggested background knowledge
Mission & Content Summary
MISSION
CONTENT SUMMARY

Introduction to Python's Numerical and Scientific libraries (numpy, scipy, matplotlib...). This is a must for reallife data analysis and numerical computing in Python.

Randomized algorithms: Monte Carlo methods for sampling and numerical integration, and the Simulated Annealing optimization algorithm. This is a simple but deep optimization strategy with wide applicability. Also allows the demonstration of the interface programming pattern.

Nonlinear programming: Basic techniques for continuous optimization in the nonlinear case: first and secondorder methods in one dimension, later extended to the multidimensional case. The "gradient descent" strategy is of particular importance in modernday machine learning. Also, it allows the demonstration of the use of multidimensional tensors in efficient numerical programming, and familiarizes the students with the use of libraries.

Dynamic programming: A wide range of discrete problems can be solved elegantly and efficiently by this "implicit enumeration" general scheme. This is an algorithmic pattern, and students learn from examples to recognize the applicability of this technique. This is a valuable general skill, and this particular case is extremely useful in practical settings. The coding techniques involved offer many opportunities to demonstrate how to write efficient numerical algorithms, and how to implement a general pattern adapting it to a particular situation.
Intended Learning Outcomes (ILO)
KNOWLEDGE AND UNDERSTANDING
 Recognize discrete/continuous optimization problems and their class.
 Express algorithms in vectorized form, e.g. leveraging numpy's broadcasting mechanism.
 Master some intermediate programming patterns and paradigms, like interfaces and some functional programming.
APPLYING KNOWLEDGE AND UNDERSTANDING
 Translate an optimization problem in mathematical terms.
 Having identified the most suitable solution technique among the ones presented during the course, write the corresponding code.
 Identify suitable parameters for heuristic optimization algorithms, based on the knowledge of their properties and exploratory analysis.
Teaching methods
 Facetoface lectures
 Exercises (exercises, database, software etc.)
DETAILS
Programming exercises are used after each practical session to guide the students into:
 Autonomously extending the code functionality and/or adapting it to modified situations.
 Exploration of the properties of heuristic solvers.
Assessment methods
Continuous assessment  Partial exams  General exam  


x 
ATTENDING AND NOT ATTENDING STUDENTS
The exam is held in the computer rooms. It has two separate parts:
 A theory part, written with openended questions, intended to assess all the theoretical learning objectives of the course.
 A programming part, consisting in a series of programming assignments, intended to assess all the practical learning objectives of the course.
The exam takes place in a single session and the students can allocate the time between the two parts as they prefer. The theory part is worth 10 points and the programming part is worth 21 points. The sum of the two parts gives the final grade, with votes exceeding 30 corresponding to "30 cum laude".
Teaching materials
ATTENDING AND NOT ATTENDING STUDENTS
Textbook:
 CORMEN, et al., Introduction to algorithms and datastructures, McGraw Hill.
Other references:
 NOCEDAL, Wright, Numerical optimization, Springer.
 FISHMAN, Monte Carlo: concepts, algorithms and applications, Springer.
 KRAUTH, Statistical Mechanics: Algorithms and Computations, Oxford
 Handouts, slides, example code and exercises are provided.