The Operations Research and Optimization team at Google develops both general purpose optimization tools and solutions for internal optimization problems. We will describe the tools – most of which are available at http://code.google. com/p/or-tools – and present a few applications, for example in the area of assigning jobs to machines. Furthermore, we will discuss our usage of Constraint Programming in greater detail, and how it fits into the general usage of Operations Research at Google. Finally, we will also share our future plans.
Download: [odp presentation]
Constraint Programming (CP) is a general technique for solving combinatorial optimization problems. Real world problems are quite complex and solving them requires to divide work into di.erent parts. Mainly, there are: the abstraction of interesting and relevant subparts, the de.nition of benchmarks and design of a global model and the application of a particular search strategy. We propose to identify for each of these parts some common pitfalls and to discuss them. We will successively consider undivided model, rigid search, biased benchmarking and wrong abstraction.
Download: [pdf presentation]
Constraint satisfaction problems arise in many diverse areas including software and hardware verification, type inference, static program analysis, test-case generation, scheduling, planning and graph problems. These areas share a common trait, they include a core component using logical formulas for describing states and transformations between them. The most well-known constraint satisfaction problem is propositional satisfiability, SAT, where the goal is to decide whether a formula over Boolean variables, formed using logical connectives can be made true by choosing true/false values for its variables. Some problems are more naturally described using richer languages, such as arithmetic. A supporting theory (of arithmetic) is then required to capture the meaning of these formulas. Solvers for such formulations are commonly called Satisfiability Modulo Theories (SMT) solvers.
Software analysis and model-based tools are increasingly complex and multi-faceted software systems. However, at their core is invariably a component using logical formulas for describing states and transformations between system states. In a nutshell, symbolic logic is the calculus of computation. The state-of-the art SMT solver, Z3, developed at Microsoft Research, can be used to check the satisfiability of logical formulas over one or more theories. SMT solvers offer a compelling match for software tools, since several common software constructs map directly into supported theories.
Z3 comprises of a collection of symbolic reasoning engines. These engines are combined to address the requirements of each application domain. In this talk, we describe the main challenges in orchestrating the different engines, and the main application domains within Microsoft.
Download: [pdf presentation]