The recent alpha releases have featured solvers that interface with the cloud-based NEOS servers to solve the model. NEOS is a free service for solving optimisation problems and can run a large range of solvers. By interacting with NEOS, we gain access to these solvers from anywhere without needing to install them on the computer running OpenSolver.
In order to interact with NEOS, we create an AMPL file that describes the entire model and send this to NEOS for solving. Once NEOS solves the model, it sends back the optimal values, and these are loaded into Excel by OpenSolver.
OpenSolver already fully supports linear programs, and so when a linear solver on NEOS is requested, we can use the existing OpenSolver linear model algorithm to create the AMPL file we need. This algorithm exploits the fact that the model has linear equations, and determines the coefficients by the equations by modifying each decision variable in turn and observing the resulting change (a process that requires many spreadsheet recalculations, and so can be slow). This approach does not work for non-linear models.
Instead, what we do for non-linear models is parse the formulae on the spreadsheet to construct an AMPL model that contains all of the non-linear constraints and/or objectives that we need. We need to convert all of the non-linear Excel formulae into forms that AMPL can understand, allowing us to send the problem to NEOS.
To handle a variety of non-linear models in this way, we need to be able to convert individual Excel functions into valid AMPL code. This is currently handled for some common functions, but others like IF(), MIN() and MAX() have not been implemented yet.
Please try out the NEOS integration for both linear (CBC) and non-linear (Couenne and Bonmin) solvers and let us know how it goes. We welcome any feedback, especially about errors, that will help us improve the translation of complex OpenSolver models into AMPL files.