This morning I stumbled across Microsoft Solver Foundation, optimization software developed in C#. The site only mentions a free “express edition.” Sounds like they’re releasing a free version first and may sell an upgrade in the future.
Here are the details of the algorithms supported.
- Revised, Simplex Linear and Mixed Integer Programming (Primal and Dual Simplex)
- Interior Point Method Linear and Quadratic Programming
- Constraint Programming with Exhaustive Tree Search, Local Search, and Metaheuristic Techniques
- Compact, Quasi-Newton (L-BFGS), Unconstrained Nonlinear Programming
Microsoft is inconsistent in its support for numerical computing. For example, Visual Studio’s math.h implementation does not include the mathematical functions that are included in POSIX systems. And their implementation of C++ TR1 does not yet include the specified mathematical functions. On the other hand, they have produced products like Windows HPC Server and Solver Foundation. Clearly some people at Microsoft care about numerical computing.

{ 5 comments… read them below or add one }
gappy 01.22.09 at 08:06
I haven’t tried these routines. The modeling language could be interesting and novel. I would still try to use COIN-OR, or lp_solve, since a lot of the code has been around for some time, is optimized and bug-free.
Danny 01.22.09 at 15:51
I’ve been extremely satisfied with the free optimization you can get with Python.
My set of tools:
CVX OPT for convex optimization.
scipy.optimize for general constrained and unconstrained numerical optimization (BFGS, Conjugate Gradients, etc.)
SymPy for symbolic math, which can be useful either to automatically compute derivative functions to give to numerical methods, or to symbolically solve for an update that is repeated frequently.
Is the purpose of this package just to give tools to people who are developing in C# already, or is it a suggestion that people who do a lot of optimization should consider using C# (at some point in the future) as their development environment?
John 01.22.09 at 18:06
Danny,
I’m not sure the purpose of the Solver Foundation software. I suppose seamless integration with .NET is the draw.
Another option would be to use IronPython as a bridge between the Python tools you mention and .NET, though this might require some tedious marshaling code.
Nitish Shukla 12.23.09 at 17:32
Hi,
I found CVXOPT amazing for my optimization needs but developing an entire application around it proved very very tedious – i.e. the rest of the Python code for UI. Then I tried plugging CVXOPT to C# from IPY, and it was the most painful programming experience ever. And it didn’t work. In the end I shelved the idea.
With SF I am trying it again. I am only downloading it but there are already signs that it might not work out, again. http://code.msdn.microsoft.com/solverfoundation/Thread/View.aspx?ThreadId=1450
John 12.23.09 at 17:34
Nitish, hopefully Solver Foundation will work. If not, maybe Ironclad could help your experience using Iron Python with other Python code.