There are many modeling languages and APIs around. One or more per solver, plus many that target multiple solvers: AMPL, GAMS, PuLP, JuMP, Pyomo...
Among all these possibilities, why did you pick a given modeling tool? Which criteria did you apply? In general, which features do you like to have?
Possible factors
Some of the reasons I can think of:
- More user friendly language or API
- Independence from the underlying solver
- Commercial support, price
- Better interface to your programming language and datasources
- Availability of analysis and visualization tools
- Reformulation features (linearization, branch-and-price, ...), or abstraction around a barebone solver (automated differentiation, ...)
- ...
In my personal experience, for example, ease of integration with the existing environment has often been a determining factor to pick the underlying optimization software. But there are so many different situations in OR that a single point of view is quite anecdotal. So, what is your opinion?
Context
I am writing a modeling API. Although the overall architecture is built to suit my needs - concrete modeling with simple reformulations, multi-solver and multi-language - I'd like to broaden my view about modelers in general for future developments.