Robert Fourer, Jun Ma, Kipp Martin Optimization Services Instance Language (OSiL), Solvers, and...
-
Upload
warren-hall -
Category
Documents
-
view
221 -
download
0
Transcript of Robert Fourer, Jun Ma, Kipp Martin Optimization Services Instance Language (OSiL), Solvers, and...
![Page 1: Robert Fourer, Jun Ma, Kipp Martin Optimization Services Instance Language (OSiL), Solvers, and Modeling Languages Kipp Martin University of Chicago kipp.martin@chicagogsb.edu.](https://reader030.fdocuments.net/reader030/viewer/2022032803/56649e235503460f94b11851/html5/thumbnails/1.jpg)
Robert Fourer, Jun Ma, Kipp Martin
Optimization Services Instance Language (OSiL), Solvers, and
Modeling Languages
Kipp MartinUniversity of Chicago
Robert Fourer
Jun Ma
Northwestern University
Kipp Martin
University of Chicago
![Page 2: Robert Fourer, Jun Ma, Kipp Martin Optimization Services Instance Language (OSiL), Solvers, and Modeling Languages Kipp Martin University of Chicago kipp.martin@chicagogsb.edu.](https://reader030.fdocuments.net/reader030/viewer/2022032803/56649e235503460f94b11851/html5/thumbnails/2.jpg)
Robert Fourer, Jun Ma, Kipp Martin2
Outline
1. Motivation and problem description
2. Instance and solver communication (APIs)
3. OSiLHandler and OSiLReader classes
4. Solver Interfaces
5. Concluding Remarks
![Page 3: Robert Fourer, Jun Ma, Kipp Martin Optimization Services Instance Language (OSiL), Solvers, and Modeling Languages Kipp Martin University of Chicago kipp.martin@chicagogsb.edu.](https://reader030.fdocuments.net/reader030/viewer/2022032803/56649e235503460f94b11851/html5/thumbnails/3.jpg)
Robert Fourer, Jun Ma, Kipp Martin3
The Problem
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
This talk
![Page 4: Robert Fourer, Jun Ma, Kipp Martin Optimization Services Instance Language (OSiL), Solvers, and Modeling Languages Kipp Martin University of Chicago kipp.martin@chicagogsb.edu.](https://reader030.fdocuments.net/reader030/viewer/2022032803/56649e235503460f94b11851/html5/thumbnails/4.jpg)
Robert Fourer, Jun Ma, Kipp Martin4
The Problem
Brief Review:
OSiL: Optimization Services instance Language. This isan XML based format for representing a wide variety ofoptimization problems.
OSrL: Optimization Services result Language. An XML basedformat for representing the solution to optimization problems.
![Page 5: Robert Fourer, Jun Ma, Kipp Martin Optimization Services Instance Language (OSiL), Solvers, and Modeling Languages Kipp Martin University of Chicago kipp.martin@chicagogsb.edu.](https://reader030.fdocuments.net/reader030/viewer/2022032803/56649e235503460f94b11851/html5/thumbnails/5.jpg)
Robert Fourer, Jun Ma, Kipp Martin5
The Problem
We are in a loosely-coupled environment.
Solver and modeling language are separate process, possibly on separate machines.
There are lots of solvers, both linear and nonlinear.
Given a common instance format (OSiL), how do we communicate the instance format to solvers?
![Page 6: Robert Fourer, Jun Ma, Kipp Martin Optimization Services Instance Language (OSiL), Solvers, and Modeling Languages Kipp Martin University of Chicago kipp.martin@chicagogsb.edu.](https://reader030.fdocuments.net/reader030/viewer/2022032803/56649e235503460f94b11851/html5/thumbnails/6.jpg)
Robert Fourer, Jun Ma, Kipp Martin6
The Problem
How is communication done?
Through an Application Program Interface (API)
Think of an API as a specification for methods.
The methods then interact with an underlying data structure.
In the case of OSiL it is our OSExpressionTree
![Page 7: Robert Fourer, Jun Ma, Kipp Martin Optimization Services Instance Language (OSiL), Solvers, and Modeling Languages Kipp Martin University of Chicago kipp.martin@chicagogsb.edu.](https://reader030.fdocuments.net/reader030/viewer/2022032803/56649e235503460f94b11851/html5/thumbnails/7.jpg)
Robert Fourer, Jun Ma, Kipp Martin7
The Problem
Our Focus - the solverside API
![Page 8: Robert Fourer, Jun Ma, Kipp Martin Optimization Services Instance Language (OSiL), Solvers, and Modeling Languages Kipp Martin University of Chicago kipp.martin@chicagogsb.edu.](https://reader030.fdocuments.net/reader030/viewer/2022032803/56649e235503460f94b11851/html5/thumbnails/8.jpg)
Robert Fourer, Jun Ma, Kipp Martin8
Instance and Solver Communication
![Page 9: Robert Fourer, Jun Ma, Kipp Martin Optimization Services Instance Language (OSiL), Solvers, and Modeling Languages Kipp Martin University of Chicago kipp.martin@chicagogsb.edu.](https://reader030.fdocuments.net/reader030/viewer/2022032803/56649e235503460f94b11851/html5/thumbnails/9.jpg)
Robert Fourer, Jun Ma, Kipp Martin9
Instance and Solver Communication
Related work: “Simple C-API Windows DLL ImplementationOf CLP, CBS, and CGL” by Bjarni Kristjannon (TD-14)
We also provide libraries with the following features:
1. Our libraries designed to read OSiL(replacing LPFML)
2. Not Windows based (Windows, Linux, and Mac)
3. Designed for a loosely-coupled environment
4. We provide libraries to read the instance and the solver specific interface libraries.
![Page 10: Robert Fourer, Jun Ma, Kipp Martin Optimization Services Instance Language (OSiL), Solvers, and Modeling Languages Kipp Martin University of Chicago kipp.martin@chicagogsb.edu.](https://reader030.fdocuments.net/reader030/viewer/2022032803/56649e235503460f94b11851/html5/thumbnails/10.jpg)
Robert Fourer, Jun Ma, Kipp Martin10
Key Library Components
OSiLHandler and OSiLReader are the key solver independent classes.
OSiLHandler -- a class that is designed to parse the XMLOSiL file. The solver never sees this. The solver does notneed to know anything about XML or OSiL.
OSiLReader -- a class that creates the necessarydata structures and provides the API for thesolver specific interface library.
![Page 11: Robert Fourer, Jun Ma, Kipp Martin Optimization Services Instance Language (OSiL), Solvers, and Modeling Languages Kipp Martin University of Chicago kipp.martin@chicagogsb.edu.](https://reader030.fdocuments.net/reader030/viewer/2022032803/56649e235503460f94b11851/html5/thumbnails/11.jpg)
Robert Fourer, Jun Ma, Kipp Martin11
The OSiLHandler Class
The OSiLHandler Class is designed to parse the XML.
There are two philosophies for this: SAX and DOM
SAX -- event based (data does not persist)
DOM -- tree based (data persists)
We have a C++ SAX based implementation for linear OSiLand a Java based DOM implementation for general OSiL
Our implementations uses the Apache Xerces libraries
![Page 12: Robert Fourer, Jun Ma, Kipp Martin Optimization Services Instance Language (OSiL), Solvers, and Modeling Languages Kipp Martin University of Chicago kipp.martin@chicagogsb.edu.](https://reader030.fdocuments.net/reader030/viewer/2022032803/56649e235503460f94b11851/html5/thumbnails/12.jpg)
Robert Fourer, Jun Ma, Kipp Martin12
The SAX OSiLHandler Class
SAX is event based. For example:
Reading the start of an XML element
Reading the end of an XML element
Reading character data in an XML element
Reading XML attributes
The Xerces parser has a default handler thatdoes nothing when these events are fired. The OSiLHadlerextends the Xerces base class and actually does something.
![Page 13: Robert Fourer, Jun Ma, Kipp Martin Optimization Services Instance Language (OSiL), Solvers, and Modeling Languages Kipp Martin University of Chicago kipp.martin@chicagogsb.edu.](https://reader030.fdocuments.net/reader030/viewer/2022032803/56649e235503460f94b11851/html5/thumbnails/13.jpg)
Robert Fourer, Jun Ma, Kipp Martin13
The SAX OSiLHandler Class
void OSiLHandler::startElement( a bunch of parameters)
case var: processVar(attributes);
break;
processVar(attributes) get the information about theVariable, e.g. name, type, ub, lb and puts into a vector --again the library user never sees this
After the last var element is read, <variables> processed
<variables number="2"><var name="x1" type="C" lb="0.0"/><var name="x2" type="C" lb="0.0"/>
</variables>
![Page 14: Robert Fourer, Jun Ma, Kipp Martin Optimization Services Instance Language (OSiL), Solvers, and Modeling Languages Kipp Martin University of Chicago kipp.martin@chicagogsb.edu.](https://reader030.fdocuments.net/reader030/viewer/2022032803/56649e235503460f94b11851/html5/thumbnails/14.jpg)
Robert Fourer, Jun Ma, Kipp Martin14
OSiLReader Class
Two key functions:
1. Use the OSiLHandler to create the data structures
2. Provide the methods that constitute the API
![Page 15: Robert Fourer, Jun Ma, Kipp Martin Optimization Services Instance Language (OSiL), Solvers, and Modeling Languages Kipp Martin University of Chicago kipp.martin@chicagogsb.edu.](https://reader030.fdocuments.net/reader030/viewer/2022032803/56649e235503460f94b11851/html5/thumbnails/15.jpg)
Robert Fourer, Jun Ma, Kipp Martin15
OSiLReader Data Structures
Linear part of model: arrays for the constraint matrix, e.g.
double* m_mdValueCoefMatrix;int* m_miStartCoefMatrix; int* m_miIdxCoefMatrix;
Nonlinear part of model: an expression tree
Arrays for variable and row information (e.g. lbs and ubs)
![Page 16: Robert Fourer, Jun Ma, Kipp Martin Optimization Services Instance Language (OSiL), Solvers, and Modeling Languages Kipp Martin University of Chicago kipp.martin@chicagogsb.edu.](https://reader030.fdocuments.net/reader030/viewer/2022032803/56649e235503460f94b11851/html5/thumbnails/16.jpg)
Robert Fourer, Jun Ma, Kipp Martin16
OSiLReader OSExpression Tree
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
€
100(x1 − x02)2 + (1− x0)2 + 9 * x1
![Page 17: Robert Fourer, Jun Ma, Kipp Martin Optimization Services Instance Language (OSiL), Solvers, and Modeling Languages Kipp Martin University of Chicago kipp.martin@chicagogsb.edu.](https://reader030.fdocuments.net/reader030/viewer/2022032803/56649e235503460f94b11851/html5/thumbnails/17.jpg)
Robert Fourer, Jun Ma, Kipp Martin17
OSExpressionTree (Parsing)
We take an object oriented approach, every node inthe expression tree is an instance in the OSnLNode class
OSnLNode nlNode = null; String sNodeName = "";try{ sNodeName = ele.getLocalName(); String sNlNodeClass = m\_sPackageName + "." + m\_sNlNodeStartString +] sNodeName.substring(0, 1).toUpperCase() + sNodeName.substring(1); Class nlNodeClass = Class.forName(sNlNodeClass); nlNode = (OSnLNode)nlNodeClass.newInstance();} // now process attributes
“OSnLNodeTimes”An instance of OSnLNode which isan OSnLNodeTimes
![Page 18: Robert Fourer, Jun Ma, Kipp Martin Optimization Services Instance Language (OSiL), Solvers, and Modeling Languages Kipp Martin University of Chicago kipp.martin@chicagogsb.edu.](https://reader030.fdocuments.net/reader030/viewer/2022032803/56649e235503460f94b11851/html5/thumbnails/18.jpg)
Robert Fourer, Jun Ma, Kipp Martin18
OSiLReader C++ API
void OSiLHandler::endElement( a bunch of parameters)
case variables: osilreader_->onVariables(variables_,lb_,ub_,colDomain_)
<variables number="2"><var name="x1" type="C" lb="0.0"/><var name="x2" type="C" lb="0.0"/>
</variables>
The OSiLHandler instantiates an osilreader objectand calls OSiLReader “on” methods when certain events “fire”
![Page 19: Robert Fourer, Jun Ma, Kipp Martin Optimization Services Instance Language (OSiL), Solvers, and Modeling Languages Kipp Martin University of Chicago kipp.martin@chicagogsb.edu.](https://reader030.fdocuments.net/reader030/viewer/2022032803/56649e235503460f94b11851/html5/thumbnails/19.jpg)
Robert Fourer, Jun Ma, Kipp Martin19
OSiLReader API
The C++ OSiLReader is very flexible and provides two APIs
There are two strategies for the API:
Strategy I -- a pull strategy with get() methods
Strategy II -- an event based strategy that re-implements thebase case “on” methods
![Page 20: Robert Fourer, Jun Ma, Kipp Martin Optimization Services Instance Language (OSiL), Solvers, and Modeling Languages Kipp Martin University of Chicago kipp.martin@chicagogsb.edu.](https://reader030.fdocuments.net/reader030/viewer/2022032803/56649e235503460f94b11851/html5/thumbnails/20.jpg)
Robert Fourer, Jun Ma, Kipp Martin20
OSiLReader C++ API Strategy 1 - Pull
int OSiLReader::onVariables( parameters -- data from OSiLHandler){
m_mdVarLB = new double[m_iNumberVariables];m_mdVarUB = new double[m_iNumberVariables];/* code to fill in the arrays */}
double* OSiLReader::getVariableUBs(){return m_mdVarUB;}
So the API with Strategy I is a bunch of get() methods.e.g., getVariableLBs(), getConstraintUBs(),getMatrixNonzeroValues(), etc
![Page 21: Robert Fourer, Jun Ma, Kipp Martin Optimization Services Instance Language (OSiL), Solvers, and Modeling Languages Kipp Martin University of Chicago kipp.martin@chicagogsb.edu.](https://reader030.fdocuments.net/reader030/viewer/2022032803/56649e235503460f94b11851/html5/thumbnails/21.jpg)
Robert Fourer, Jun Ma, Kipp Martin21
OSiLReader C++ API Strategy 1 - Pull
![Page 22: Robert Fourer, Jun Ma, Kipp Martin Optimization Services Instance Language (OSiL), Solvers, and Modeling Languages Kipp Martin University of Chicago kipp.martin@chicagogsb.edu.](https://reader030.fdocuments.net/reader030/viewer/2022032803/56649e235503460f94b11851/html5/thumbnails/22.jpg)
Robert Fourer, Jun Ma, Kipp Martin22
OSiLReader C++ API Strategy 1 - Pull
![Page 23: Robert Fourer, Jun Ma, Kipp Martin Optimization Services Instance Language (OSiL), Solvers, and Modeling Languages Kipp Martin University of Chicago kipp.martin@chicagogsb.edu.](https://reader030.fdocuments.net/reader030/viewer/2022032803/56649e235503460f94b11851/html5/thumbnails/23.jpg)
Robert Fourer, Jun Ma, Kipp Martin23
OSiLReader C++ API Strategy 1 - Pull
OSiLReader() osilreader;
m_mdVarLB = osilreader.getVariableLBs(); m_mdVarUB = osilreader.getVariableUBs();
solver_->assignProblem(m_, m_mdVarLB, m_mdVarUB, m_mmdObjDenseCoefValue, m_mdConLB, m_mdConUB);
Either a glpk or clp solver determined by the user at runtime.
We do a similar thing for the LINDO solver
![Page 24: Robert Fourer, Jun Ma, Kipp Martin Optimization Services Instance Language (OSiL), Solvers, and Modeling Languages Kipp Martin University of Chicago kipp.martin@chicagogsb.edu.](https://reader030.fdocuments.net/reader030/viewer/2022032803/56649e235503460f94b11851/html5/thumbnails/24.jpg)
Robert Fourer, Jun Ma, Kipp Martin24
OSiLReader C++ API Strategy 2 - Event
The on methods in OSiLReader are virtual. DefineA class that derives from this base clase with a newImplementation of the on methods.
int OSiLOSIParser::onVariables( a bunch of parameters) {lb_ = new double[nVars_];ub_ = new double[nVars_];std::copy(lb.begin(), lb.end(), lb_);std::copy(ub.begin(), ub.end(), ub_);
solver_->assignProblem(m_, lb_, ub_, obj_, lhs_, rhs_);
![Page 25: Robert Fourer, Jun Ma, Kipp Martin Optimization Services Instance Language (OSiL), Solvers, and Modeling Languages Kipp Martin University of Chicago kipp.martin@chicagogsb.edu.](https://reader030.fdocuments.net/reader030/viewer/2022032803/56649e235503460f94b11851/html5/thumbnails/25.jpg)
Robert Fourer, Jun Ma, Kipp Martin25
OSiLReader Java ImplementationBased on OSExpressionTree
This is pull oriented. A set of get() and calculate() methods.
getNonlinearPostfix(int rowIdx)getNonlinearPrefix(int rowIdx)getNonlinearInfix(int rowIdx)
calculateFunction(int rowIdx, double x[])calculateNonlinearDerivatives(int rowIdx, double x[], boolean functionEvaluated)
getConstraintLBs()getFirstObjectiveMaxOrMin()getMatrixNonzeroIndexes()
![Page 26: Robert Fourer, Jun Ma, Kipp Martin Optimization Services Instance Language (OSiL), Solvers, and Modeling Languages Kipp Martin University of Chicago kipp.martin@chicagogsb.edu.](https://reader030.fdocuments.net/reader030/viewer/2022032803/56649e235503460f94b11851/html5/thumbnails/26.jpg)
Robert Fourer, Jun Ma, Kipp Martin26
OSiLReader Java API
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
![Page 27: Robert Fourer, Jun Ma, Kipp Martin Optimization Services Instance Language (OSiL), Solvers, and Modeling Languages Kipp Martin University of Chicago kipp.martin@chicagogsb.edu.](https://reader030.fdocuments.net/reader030/viewer/2022032803/56649e235503460f94b11851/html5/thumbnails/27.jpg)
Robert Fourer, Jun Ma, Kipp Martin27
OSiLReader Java API
<nl idx="1"> <plus> <plus> <ln> <times> <var coef="1.0" idx="1"/> <var coef="1.0" idx="0"/> </times> </ln> <var coef="7.0" idx="1"/> </plus> <var coef="5.0" idx="0"/> </plus> </nl>
€
ln(x0x1) + 7* x0 + 5 * x1 ≥10
![Page 28: Robert Fourer, Jun Ma, Kipp Martin Optimization Services Instance Language (OSiL), Solvers, and Modeling Languages Kipp Martin University of Chicago kipp.martin@chicagogsb.edu.](https://reader030.fdocuments.net/reader030/viewer/2022032803/56649e235503460f94b11851/html5/thumbnails/28.jpg)
Robert Fourer, Jun Ma, Kipp Martin28
OSiLReader Java API
postfix: [X1, X0, times, ln, 7.0, X1, times, plus, 5.0, X0, times, plus, 10, minus]
1063 1 1063 0 1003 1021 1062 16 1063 1 1003 1001 1062 17 1063 0 1003 1001
Call getNonlinearPostfix( 0)
This methods uses our OSExpressionTree data structure
The Lindo Interface converts the postfix to a Lindoinstruction list.
![Page 29: Robert Fourer, Jun Ma, Kipp Martin Optimization Services Instance Language (OSiL), Solvers, and Modeling Languages Kipp Martin University of Chicago kipp.martin@chicagogsb.edu.](https://reader030.fdocuments.net/reader030/viewer/2022032803/56649e235503460f94b11851/html5/thumbnails/29.jpg)
Robert Fourer, Jun Ma, Kipp Martin29
OSiLReader Java API
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
![Page 30: Robert Fourer, Jun Ma, Kipp Martin Optimization Services Instance Language (OSiL), Solvers, and Modeling Languages Kipp Martin University of Chicago kipp.martin@chicagogsb.edu.](https://reader030.fdocuments.net/reader030/viewer/2022032803/56649e235503460f94b11851/html5/thumbnails/30.jpg)
Robert Fourer, Jun Ma, Kipp Martin30
Supported Platforms
Modeling Languages that can generate OSiL (or LPFML):
AMPL (linear OSiL -- LPFML)OSmL (native) POAMS (native linear OSiL)
Solvers:
CLP - through COIN OSIFORTMP - LPFMLGLPK - through COIN OSIIMPACT - native supportKNITRO - using function callbackLINDO - using instruction list format
![Page 31: Robert Fourer, Jun Ma, Kipp Martin Optimization Services Instance Language (OSiL), Solvers, and Modeling Languages Kipp Martin University of Chicago kipp.martin@chicagogsb.edu.](https://reader030.fdocuments.net/reader030/viewer/2022032803/56649e235503460f94b11851/html5/thumbnails/31.jpg)
Robert Fourer, Jun Ma, Kipp Martin31
An Ideal World
![Page 32: Robert Fourer, Jun Ma, Kipp Martin Optimization Services Instance Language (OSiL), Solvers, and Modeling Languages Kipp Martin University of Chicago kipp.martin@chicagogsb.edu.](https://reader030.fdocuments.net/reader030/viewer/2022032803/56649e235503460f94b11851/html5/thumbnails/32.jpg)
Robert Fourer, Jun Ma, Kipp Martin32
http://www.optimizationservices.org
QUESTIONS?