Operations Research (2016/2017)

Course code
Name of lecturer
Romeo Rizzi
Romeo Rizzi
Number of ECTS credits allocated
Academic sector
Language of instruction
II sem. dal Mar 1, 2017 al Jun 9, 2017.

Lesson timetable

II sem.
Day Time Type Place Note
Tuesday 4:30 PM - 6:30 PM lesson Lecture Hall G  
Thursday 1:30 PM - 3:30 PM lesson Lecture Hall G from Mar 9, 2017  to Jun 9, 2017

Learning outcomes

The student of mathematics (L40, Verona) will encounter in concrete the concepts of: problems, models, formulations of operations research, but also of instances, algorithms, reductions and mappings among problems of the computer science field. The course will propose some models of operations research, at least the following: linear programming (LP), integer linear programming (ILP), max-flows and min-cuts, bipartite matchings and node covers, minimum spanning trees, shortest paths, Eulerian paths, and some models resorting on dynamic programming among which some knapsack variants. For all these models/problems, except PLI, the student will learn the solving algorithms, the properties on which they hinge, and how to conduct their execution.
However, besides and beyond this, the course aims at building a good and active relationship, practice, and acquaintance, with general mathematical methodologies and techniques (more typical of discrete math and for this reason not yet fully assimilated from our students) and some basic underpinnings of computer science. In particular, we insist on the dialog with problems and with the art/technique of conjecturing, no occasion is lost to spotlight where invariants and monovariants play a role in proofs, algorithms and data structures. We build up confidence with mathematical induction as an active tool for problem solving, and introducing the dialects of induction most voted to efficiency (divide et impera, recursion with memoization, dynamic programming). Some basic principles of informatics are underlined, like coding, algorithms, data structures, recursion as a counterpart of mathematical induction and of computability. (In some editions of the course first scratch introductions to numerability and computability have been offered). Coming to efficiency, our central perspective, the use of asymptotic notation is justified and adopted, the classes P, NP, coNP are introduced, and the concepts of good characterizations, good conjectures and good theorems are illustrated in length and complexity theory is advertised as a lively source of new methodologies in the art of facing problems and enquiry their intrinsic structural properties. Several aspects of the role and importance of the art of reducing one problem to another are discussed and clarified. The life cycle of a good conjecture, the workflow linking good conjectures and algorithms, the production and interpretation of counterexamples as a means of dialog with the problem, and the possible use of them in obtaining NP-completeness proofs, are all discussed, investigated and exemplified in action.
Explicit emphasis is constantly given to the role and use of certificates. Meanwhile these transversal and high competences of methodological interest and imprinting are delivered, the students is asked to learn and develop several concrete procedural competences, in particular within LP, and in an algorithmic treatment of graph theory, introduced as a versatile model and an intuitive and expressive language for the formulation of problems.
For a complete and detailed list of all these procedural competences delivered and requested, see the past exams and corrections over the various editions of the course.


Operations Research offers quantitative methods and models for the optimal management of resources, and optimization of profits, services, strategies, procedures.
This course of Operations Research gets to Mathematical Programming
moving from Algorithmics and Computational Complexity.
After revisiting mathematical induction, recursion, divide et impera, with a curiosity driven problem solving approach, we insist on dynamic programming thinking which gets then exemplified in a few classical models of Operations Research and Computational Biology.
With emphasis on method and techniques, we get involved in formulating, encoding and modeling problems, conjecturing about them, reducing one to the other,
and well characterizing them.
The course offers an in-depth introduction to linear programming.
Following the historical path, we introduce graphs as for modeling,
and explore the basic fundamental results in combinatorial optimization and graph theory.


1. Basic Notions

2. Introduction to Algorithms and Complexity
analysis of a few algorithms
design techniques (recursion, divede et impera, recursion with memoization, dynamic programming, greedy)
complexity theory (P, NP, co-NP, good characterizations, good conjectures, examples of NP-completeness proofs)

3. Combinatorial Optimization Models
knapsack problems
Problems on sequences
Problems on DAGs

4. Introduction to Graph Theory
graphs and digraphs as models
a few good characterizations (bipartite, Eulerian, acyclic, planar graphs)
a few NP-hard models (Hamilton cycles, cliques, colorability)
shortest paths
minimum spanning trees
maximum flows
bipartite matchings

5. Linear Programming (LP)
the LP and the ILP models (definition, motivations, complexity, role)
geometric method and view (feasibility space,
pivot, duality, dual variables, degeneracy, complementary slackness)
standard and canonical form
simplex method
duality theory
complementary slackness
economic interpretation of the dual variables
sensitivity analysis

Reference books
Author Title Publisher Year ISBN Note
T. Cormen, C. Leiserson, R. Rivest Introduction to algorithms (Edizione 1) MIT Press 1990 0262031418
Robert J. Vanderbei Linear Programming: Foundations and Extensions (Edizione 4) Springer 2001 978-1-4614-7630-6 DOI: 10.1007/978-1-4614-7630-6 eBook ISBN: 978-1-4614-7630-6 Hardcover ISBN: 978-1-4614-7629-0 Softcover ISBN: 978-1-4899-7376-4

Assessment methods and criteria

At the end of the course, a written exam with various types of exercises and questions, and several opportunities to gather points to test and prove your preparation.
In preparing yourself for this exam,
take profit of the material (text and correction for each previous exam) available at the website of the course:


Testing your preparation on these tasks and comparing your solutions against the ones given as reference (pay attention not only to the answers but also to the way you offer them to the examiner/verifier, to the quality of your certificates) will allow you to check your comprehension of the topics covered and of the algorithms and methodologies illustrated during the course. Furthermore, it will help
you in tuning your preparation to the exam and refine your procedures and approaches, making clear what kinds of evidences the examiner is expecting you to produce with clarity.

During the exam, be prepared to work for 4 or more hours to what I call "a paper chromatography test". I hope it serves the purpose to recognize in reasonable enough confidence the amount of work you have put in and how much you got for yourself from the course. And make a mark proposal out of it.
There are far more points available than needed to go in saturation. Indeed, your goal should be to prove the competences you have collected: what counts is what you know and/or can solve, not what you don't.
Rather, pay attention to this: only the answers given with clarity, providing the due certificates, count.
All the rest is of null measure to my correction.
In this, the spirit of the correction is in line with the methodologies from computational complexity advertised by the course.