[Os-project-managers] May 19 Agenda
R. Kipp Martin
kmartin at chicagobooth.edu
Thu May 19 04:03:03 EDT 2011
Here are some possible agenda items.
1) Gus -- report and discuss timing issues.
2) Server update -- on Wednesday I signed an agreement with Comcast
Cable for their Business Class Internet service. I am frustrated with
dealing with the University and I am going to run a dedicated OS server
out of my Condo. This machine will do nothing but act as a dedicated OS
server. As part of this service agreement I purchased a (actually five)
dedicated IP addresses. Right now we only need one for the dedicated
server, but we might want to experiment with calling several servers in
the future. We will be able to give this IP address to anyone (for
example the GAMS people, Mike Steglich, the Python modeling language
developers, etc.) wishing to test our remote service.
3) The fun one -- OSCoinSolver. Our OSCoinSolver communicates with the
linear continuous and linear integer COIN-OR solvers. These are Clp,
Cbc, DyLP, Vol, and SYMPHONY. These solvers build by default with
OSCoinSolver. You can also build OS with Glpk and Cplex and communicate
with these through OSCoinSolver. We communicate with these solvers
through the Osi interface. Unfortunately, there is a serious problem
with the Osi interface. In particular, with regard to setting options.
The Osi interface attempts to enumerate all of the options a linear
integer solver might use. Of course this is a hopeless task and is in
stark contrast to what we do with our OSoL (as an aside I think 1) we
really need to lobby Matt and Lou who are working on Osi II to use our
OSoL/OSOption, and 2) we should think about writing a paper this summer
on solver options and results and discuss what we have learned).
Because the Osi options are relatively limited there is for example no
way to tell an LP solver to use a barrier/interior point algorithm. You
cannot tell an IP solver which classes of Cgl cutting planes to use. You
cannot solve a quadratic program with a linear solver such as Clp that
supports this. The list goes on. I have seen numerous complaints and
requests on various mailing lists about this.
Indeed, we currently treat Cbc differently than the other solvers
because solving an IP takes far more time than necessary if you go
through Osi. I strongly feel we need to treat Clp differently so we can
tell Clp to do barrier, solve QPs, take advantage of pure networks, etc.
The task is (was) easier with Cbc because Cbc provides a method which is
equivalent to its command line option parser. This allows us to create a
char** and pass options to Cbc that way. Not so with Clp. It will be
more complicated. Clp provides NO option API. I have spent a fair amount
of time studying Clp source code and think we can still do what we need
to do. Please look at
ApplicationTemplates/template.cpp
I want to use this as a basis for our discussion. You will see for
example code such as
ClpSolve solveOptions;
ClpSolve::SolveType method;
method = ClpSolve::useBarrier;
//or primal simplex
method = ClpSolve::usePrimal;
solveOptions.setSolveType( method);
where you can set the solution method. There is also a class
CbcOrClpParam parameters[CBCMAXPARAMETERS];
with for example
parameters[whichParam(CBC_PARAM_ACTION_DIRMIPLIB, numberParameters,
parameters)].setStringValue(dirMiplib);
parameters[whichParam(CLP_PARAM_DBL_DUALBOUND, numberParameters,
parameters)].setDoubleValue(models->dualBound());
parameters[whichParam(CLP_PARAM_DBL_DUALTOLERANCE, numberParameters,
parameters)].setDoubleValue(models->dualTolerance());parameters[whichParam(CLP_PARAM_ACTION_EXPORT,
numberParameters, parameters)].setStringValue(exportFile);
You can use parameters to set options like this
parameters[ whichParam(CLP_PARAM_INT_SOLVERLOGLEVEL, numberParameters,
parameters)].setIntParameter(qpClpModel, 0);
parameters[ whichParam(CLP_PARAM_INT_MAXITERATION, numberParameters,
parameters)].setIntParameter(qpClpModel, 10);
So I suggest we support the current options that Clp supports at the
command line which are
Clp:?
In argument list keywords have leading - , -stdin or just - switches to
stdin
One command per line (and no -)
abcd? gives list of possibilities, if only one + explanation
abcd?? adds explanation, if only one fuller help
abcd without value (where expected) gives current value
abcd value sets value
Commands are:
Double parameters:
dualB(ound) dualT(olerance) preT(olerance) primalT(olerance)
primalW(eight)
sec(onds) zeroT(olerance)
Int parameters:
idiot(Crash) log(Level) maxF(actor) maxIt(erations) output(Format)
sprint(Crash)
Keyword parameters:
allC(ommands) chol(esky) crash cross(over) direction error(sAllowed)
fact(orization) keepN(ames) mess(ages) perturb(ation) presolve
printi(ngOptions) scal(ing) timeM(ode)
Actions or string parameters:
allS(lack) barr(ier) basisI(n) basisO(ut) directory dualS(implex)
either(Simplex) end exit export gsolu(tion) help import max(imize)
min(imize)
para(metrics) primalS(implex) printM(ask) quit saveS(olution) solu(tion)
solv(e) stat(istics) stop
we then map these into the parameters class and then set them.
I would like to keep one OSCoinSolver but somehow break up or overload the
setSolverOptions()
method for Clp, Cbc, and other Osi solvers. Something like
setSolverOptions(){
if(sSolverName == "cbc") setSolverOptions( CbcModel *model);
elseif (sSolverName == "cbc") setSolverOptions(ClpSolve* solveOptions);
else setSolverOptions(OsiSolverInterface *si);
}
I think by function overloading we can keep everything still within
OSCoinSolver as opposed to OSCbcSolver, OSClpSolver, etc. This way we
can avoid changing the OSSolverService and cause as little interruption
as possible to the system. We can discuss in more detail in our meeting.
Cheers
--
Kipp Martin
Professor of Operations Research
and Computing Technology
Booth School of Business
University of Chicago
5807 South Woodlawn Avenue
Chicago, IL 60637
773-702-7456
kmartin at chicagobooth.edu
http://www.chicagobooth.edu/faculty/bio.aspx?person_id=12825325568
http://projects.coin-or.org/OS
More information about the Os-project-managers
mailing list