Wednesday's meeting at the Cincinnati Programmers' Guild was an example of what I find most valuable about the Programmers' Guild; I saw a presentation I am unlikely to see anywhere else. Kipp Martin gave a presentation titled Optimization Services: A Framework for Distributed Optimization. Kipp is a professor of Operations Research and Computing Technology at the University of Chicago and is currently a visiting professor at the University of Cincinnati. He has several degrees from UC, including a BS in Mathematics, an MBA., and a PhD in Quantitative Analysis.
His presentation was about Optimization Services, which is an open source (Common Public License) framework for distributed optimization systems. The basic function of Optimization Services is mathematical optimization, which is to find the optimal solution for a mathematical problem given a set of constraints. The business applications of mathematical optimization are quite broad and include: portfolio optimization, supply chain management and inventory control, logistics, scheduling, routing, blending, and revenue management. For example, you might use this service to find the best route for your trucks to deliver widgets to all of your customers. Or you might use mathematical optimization to determine the best way to blend crude oils in creating gasoline.
One key characteristics of these mathematical optimization problems is that they are typically large; there can be millions of variables and constraints to be considered for a problem, which makes their solution require lots of CPU and memory. Because of these characteristics, it is a great match for a distributed computing solution where you can send a problem to be solved on a computer with lots of CPU and memory.
The Optimization Services project is a framework to solve these problems in a distributed architecture, leveraging SOAP web services. The Optimization Services project is itself a child project of COIN-OR (COmputational INfrastructure for Operations Research). COIN-OR has many projects in addition to Optimization Services.
The Optimization Services project both defines and implements standards. Many of the standards define protocols, which are divided into two major groups. Representation protocols define XML schemas to represent the problem instances (OSiL), results (OSrL), options (OSoL), queries (OSqL), etc. Communication protocols define ways to discover and invoke solvers, and are WSDL formats. Solvers are the software components that perform the actual optimization. There can be many solvers for different types of problems. Solvers are the real "content" of the optimization system.
Beyond the standards themselves, the Optimization Services project has several software components that implement the standards. One component is a command line solver service which accepts a problem instance to solve and returns the solution to that problem. Another component is a library to create problem instances. There are utilities that convert other problem formats into the optimization services standard, OSiL. There is also server software written in Java that runs on Apache Tomcat and Apache Axis that serves as a middleware between remote clients and solvers on the server. There are many other software components identified in the user's manual.
The software itself is written in C++ and Java. It is cross platform and compiles on Linux, Windows and Mac. It is available both in binary and source format. The source is also available via Subversion. The developer site is home to all the source and developer documentation.
In spite of the sparse attendance, it was a good meeting and an excellent example of the interesting presentations I've come to expect at the Programmers' Guild. I hope to see you at a future meeting.