Coursera has a great course on discrete optimization [1] where I have learned and used or-tools. They are rather nice, but the documentation is half done (basically code is the best documentation) and some interfaces are not compatible with others. I ended up forking or-tools for my own use and tweaking many unexposed internals. I guess it's extremely difficult to implement generic optimization solver, so I won't complain, but be prepared it's not out-of-the-box thing (I doubt there is any).
The literature and documentation in
operations research optimization is
enormous, going back to the 1950s. The
best of that literature is quite well
written.
For combinatorial optimization, there is
George L. Nemhauser and Laurence A.
Wolsey, 'Integer and Combinatorial
Optimization', ISBN 0-471-35943-2, John
Wiley & Sons, Inc., New York, 1999.
The details of optimization are not always
trivial, and several fairly challenging
graduate applied math courses, complete
with non-trivial theorems and proofs, can
be needed for much depth in the subject.
I've had four such courses and taught one.
> I guess it's extremely difficult to
implement generic optimization solver,
A "solver"? Would be nice to have a
"solver". Lots of people talk about
giving a problem to a "solver". For
linear programming, maybe usually can do
that.
Otherwise my experience is that asking for
a general purpose solver is, for now,
hopeless.
Instead, for the real problems I've had
success with, have to look carefully at
the problem and exploit special
structure particular to that problem.
Typically part of the work involves doing
some derivations using the math of
optimization.
I wanted to love that course but found that despite his entertaining style the lecturer could be quite hard to understand in places. What I mean is he'd be giving a description of a problem and I actually wouldn't understand what he was saying. No biggie if you were in a real lecture as you'd just put your hand up but on Coursera you're left with looking at the transcript (which didn't help) or asking in forums (which in case of this course were a ghost town).
Just wanted to mention that the or-tools constraint solver is absolutely top notch. It has been winning top3 places in the minizinc competition ever since it entered a few years ago, and placed first in 3 out of 4 categories last year. I've used it quite a bit, and with a few exceptions I've found its completeness relative to the Global Constraint Catalog to be excellent, especially so for open source software. Now if only they had a functional 3 dimensional Geost constraint :)
You may be interested in a previous discussion of Optimisation / Operations Research in the context of FedEx. graycat's comments were particularly interesting:
While the documentation is a bit sparse (on the web, there are better docs buried in the source code), I found this library to be much easier to work with then the alternatives - which are mostly from academia and have a heavy emphasis on matrix operations. There are still some rough edges, but I was able to get the Python bindings installed and used it to write an optimizer for fantasy basketball[1].
I think the domain of solving problems by defining the constraints is super interesting. In my fantasy basketball example, I define the constraints for a valid roster (simple), then define how to score a roster, and less than a second later, I've got the optimal picks.
One other neat feature of this library is that you can use it directly from Google Sheets - you can read inputs from your spreadsheets, run the optimizer code (javascript) on Google's boxes, and then write output back to your spreadsheet.
Basically it solves NP-complete problems that are solvable because of small set size and some clever constant optimizations. There are industries where it's a useful thing for scheduling, for example. Or you may want to solve travelling salesman when planning a trip.
Anybody familiar with this know if it has a good implementation of Levenberg–Marquardt algorithm? Or know of one somewhere else? I can't find anything in their docs about non-linear function solving which seems like something google must do a lot of.
Is there a reason why you're looking for Levenberg-Marquardt over a trust-region Newton solver? In general, properly preconditioned matrix-free trust-region Newton solvers will give superior performance to Levenberg-Marquardt. Something like Optizelle
The docs and interface look great, and it's nice that each one comes with a sort of mini-walkthrough.
If any Google devs read this, I do have one request: it would be awesome to see runtime analysis based on the theory / design of the provided code, with perhaps some explanation of why certain design decisions were made in the solution.
It's already an excellent educational tool, and this seems like an easy way to make it even better.
The most surprising thing to me is how fast the page was able to load. Not really much faster than any regular web page, but a lot faster than most google pages with the material design. When they first started rolling out the new designs/code on google drive and trends I was lucky if the page even loaded. I'm impressed.
That's the new skin on developers.google.com, glad you like it! I think you'll find the whole thing is pretty snappy, it's rendered 99% on the server side besides a few presentational JS pieces.
[+] [-] fridek|10 years ago|reply
[1] https://www.coursera.org/course/optimization
[+] [-] graycat|10 years ago|reply
The literature and documentation in operations research optimization is enormous, going back to the 1950s. The best of that literature is quite well written.
For combinatorial optimization, there is
George L. Nemhauser and Laurence A. Wolsey, 'Integer and Combinatorial Optimization', ISBN 0-471-35943-2, John Wiley & Sons, Inc., New York, 1999.
The details of optimization are not always trivial, and several fairly challenging graduate applied math courses, complete with non-trivial theorems and proofs, can be needed for much depth in the subject.
I've had four such courses and taught one.
> I guess it's extremely difficult to implement generic optimization solver,
A "solver"? Would be nice to have a "solver". Lots of people talk about giving a problem to a "solver". For linear programming, maybe usually can do that.
Otherwise my experience is that asking for a general purpose solver is, for now, hopeless.
Instead, for the real problems I've had success with, have to look carefully at the problem and exploit special structure particular to that problem.
Typically part of the work involves doing some derivations using the math of optimization.
[+] [-] colin_jack|10 years ago|reply
Pity as it seemed like an excellent course.
[+] [-] tunnuz|10 years ago|reply
[+] [-] mandeepj|10 years ago|reply
[+] [-] saosebastiao|10 years ago|reply
[+] [-] tunnuz|10 years ago|reply
[+] [-] philip1209|10 years ago|reply
http://www.juliaopt.org/
[+] [-] peterwaller|10 years ago|reply
[+] [-] cornstalks|10 years ago|reply
[+] [-] shoo|10 years ago|reply
https://news.ycombinator.com/item?id=9281466
[+] [-] rurban|10 years ago|reply
[+] [-] swanson|10 years ago|reply
I think the domain of solving problems by defining the constraints is super interesting. In my fantasy basketball example, I define the constraints for a valid roster (simple), then define how to score a roster, and less than a second later, I've got the optimal picks.
One other neat feature of this library is that you can use it directly from Google Sheets - you can read inputs from your spreadsheets, run the optimizer code (javascript) on Google's boxes, and then write output back to your spreadsheet.
[1]: https://github.com/swanson/degenerate
[+] [-] shockzzz|10 years ago|reply
[+] [-] fridek|10 years ago|reply
[+] [-] bitL|10 years ago|reply
[+] [-] santaclaus|10 years ago|reply
[+] [-] imh|10 years ago|reply
[+] [-] chuckcode|10 years ago|reply
[+] [-] argomez|10 years ago|reply
[+] [-] kxyvr|10 years ago|reply
http://www.optimojoe.com/products/optizelle
can do that and is BSD licensed.
[+] [-] ovis|10 years ago|reply
There are numerous free implementations listed here: https://en.wikipedia.org/wiki/Levenberg%E2%80%93Marquardt_al...
Was there something special you needed?
[+] [-] bhilburn|10 years ago|reply
If any Google devs read this, I do have one request: it would be awesome to see runtime analysis based on the theory / design of the provided code, with perhaps some explanation of why certain design decisions were made in the solution.
It's already an excellent educational tool, and this seems like an easy way to make it even better.
[+] [-] jlhonora|10 years ago|reply
[+] [-] bitL|10 years ago|reply
[+] [-] amelius|10 years ago|reply
[+] [-] zxcvcxz|10 years ago|reply
[+] [-] habosa|10 years ago|reply
[+] [-] xudafeng|10 years ago|reply
[+] [-] hartator|10 years ago|reply
Translated: Hey guys! We might do something that might get shutdown next year but we are still cool!
[+] [-] sogen|10 years ago|reply