Cyclopts

This is a PR of the current changes to Cyclus required for my present work (I wanted to get one in before it got too large). This PR is largely comprised of:

* updating the OSI header files from an errant sed 's/model/agent/g'
* fixed a bug in exchange graph translation that did not account for the exclusivity flag
* all solvers now return objective values
* the calculation of costs associated with unmet demand are now shared by all solvers through the ExchangeSolver API
* the prog solver now uses a cbc CLI-like solve (it's much faster)
* the greedy solver now copies any state of exchange graph that it mutates
I consider the unreachable class a feature.  Matt realized that it would be
beneficial to separate this code out into a unit, but also recognized that
this was an internal implementation detail.  The separated class assists
kernel developers in maintaining and understanding the code, while its
unreachableness retains flexibility in adjusting implementation details
without breaking users.  Keeping the API surface smaller is better.  It is
easier to keep promises when you have fewer of them.  I have never heard of
this best practice anywhere (nested classes for unreachability while
preventing accidental unreachable public API) - and am skeptical of its
being believed/endorsed by any more than a very small minority of c++ devs.
 Small surface area on API's is a good thing generally IMO.


On Fri, Aug 1, 2014 at 1:24 PM, Anthony Scopatz <notifications@github.com>
wrote:

> In src/solver_factory.cc:
>
> >  #include "error.h"
> >
> >  namespace cyclus {
> >
> > -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> > -SolverFactory::SolverFactory(std::string t) : t_(t) { }
> > +/// An event handler that records the time that a better solution is found
> > +class ObjValueHandler: public CbcEventHandler {
>
> @rwcarlsen <https://github.com/rwcarlsen> - I'll give you that is a bit
> of a kludge. But really want I am saying @gidden
> <https://github.com/gidden> is that I don't think that we should have
> unreachable classes. It creates a part of libcyclus that cannot be accessed
> by (normal) users (unwilling to write there own header). This runs the long
> term risk, in my opinion, of accidentally creating public APIs that rely on
> the unreachable class and are thus unusable. I file this under a general
> best practice like you said, though it isn't part of the style guide.
>
> —
> Reply to this email directly or view it on GitHub
> <https://github.com/cyclus/cyclus/pull/978/files#r15711011>.
>