The student 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.
The notions from computational complexity introduced in the course, and the attention to the languages of the certificates, will lead the student to recognize with more awareness the structure of a sound proof.
Dealing with instances, problems, models, both from the perspective of algorithms and of models and formulations, will enforce the attitude and competence in casting simple problems from the applications into mathematical models. The knowledge of the paradigmatic results of linear programming theory (duality, complementary slackness, economic interpretation, sensitivity analysis) will provide the student with important tools in obtaining non-trivial insights on the practical problem from the model.