Q: Using Cplex to solve my QCP model returns a slightly different solution (e.g. 256.949847) than the one I get back from MINOS (e.g. 256.949789699778700). Is this just a matter of cplex using smaller precision internally and therefore having a slightly different answer? I've noticed that it probably only uses 6 or 7 decimal places of precision whereas the same problem formulated as an nlp and solved in MINOS has a much higher precision, say 15 decimal places.
All of GAMS solvers, and GAMS/Base itself, work internally with double precision values. However, using these values it is not in general possible to compute function values to this amount of accuracy. For example, the difference of two large number that are nearly equal can be stored in a double but the result will not have 15 digits of accuracy. For this reason, solvers only get feasible with respect to some tolerance, say 1e-5. They can sometimes do much better, but they are content to solve things to within the feasibility tolerance. In your case MINOS, which is a pivotal method, was giving a much more precise answer than the interior point method used by CPLEX.
Try using this CPLEX option file (cplex.opt):
barqcpepcomp = 1e-9
optfile=1 on the command line or in the parameter window of the IDE.
This should increase the iterations CPLEX takes just a bit (the default value of 1e-7 is achieved more quickly) and give a more accurate solution. You can push down even more but eventually CPLEX will not be able to achieve what you specify.
You may also try solving the model first with CPLEX to get a solution, then solving with PATHNLP to clean up the solution. This also works with the solvers CONOPT and MINOS - all of these are pivotal methods that return more accurate solutions in this case. And none of the “cleanup” solves take very long when they start with the CPLEX solution as their initial point.