## CooCoo: Combinatorial and Convex Optimization

**NEW!**Video lectures: Start here- The data on OIS is outdated. Actual syllabus is here

### Overview

This course teaches the optimization tools that computer scientists need. On the practical side, these are:

- Learn to recognize an optimization problem when you see one.
- Learn to determine what type of optimization problem it is.
- Learn to decide which type of algorithm you need to solve it.
- Learn to use the software libraries solving optimization problems.

For really understanding what is going on, to handle more difficult optimization models, and if you're a Theorist, more Theory is necessary:

- Optimality conditions
- Lagrange duality (including LP duality)
- Algorithms based on Linear Programming and Semidefinite Programming; Sums of Squares.

The **focus** of the course is on **practical examples**.

### What Students Say

What students taking the course in Spring '15 replied to the question, What would you say about the course to future students?

- ``The practical tasks were really interesting.''
- ``Interesting material, interactive teacher, and cool applications.''
- ``Fun one, go for it. ''
- ``The tasks given are fun in the sense of them having a real-world background or twist. ''

### Practical Info

- All students attend:
**Tue 12:00-13:00 lecture**,**Mon 11:00-14:00 software project** - "Proofs Branch" students attend:
**Tue 13:00-14:00 lecture**,**Mon 10:00-11:00 practice** - "No-Proofs Branch" students attend:
**Tue 13:00-14:00 + Mon 10:00-11:00 labs**(getting started with software libraries etc) - Software projects are solved in groups, groups compete :)
- Software projects are started in the software project session, then continued/finished as homework.
- (No other homework.)

### Branches

NEW! To better adapt to students' individual backgrounds and tastes, from this year on, the participants of the course can choose one of two branches:

- Proofs Branch
- No-Proofs Branch

The main difference between the branches is, obviously, that the Proofs Branch has proofs, whereas the No-Proofs Branch doesn't. The Proofs Branch also looks at some of the mathematics which is required to understand how the algorithms work, whereas the No-Proofs Branch is focused entirely on implementing the optimization models. On the other side, the No-Proofs branch gets to do some of the more technical stuff (learning the programming language Julia, working with the guts of the software libraries).

### Syllabus Is Here

### Additional Reading

*Convex Optimization for Big Data.*Cevher, Becker, Schmidt