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.

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.

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?

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.

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

Nitish, hopefully Solver Foundation will work. If not, maybe Ironclad could help your experience using Iron Python with other Python code.

I use IronPython with Ironclad so that I can use openopt (which has a numpy dependancy) for my numerical optimizations. However, I found it to be so slow that I just switched back to CPython altogether.