Different solutions across solvers/versions/ small changes in data

There are several reasons for observing different solutions across different solvers, or different versions of solvers, or with respect to small changes in data.
Critical optimality tolerance
The default value of the relative optimality tolerance (optcr)is 0.0001. This means that, unless otherwise specified, the solver will stop when it finds a feasible integer solution within 0.01% of the global optimum. Different solutions can fall in this gap. The user can override this and force the solver to find the global optimum by setting the optcr option to 0.0 using the statement

option optcr = 0.0 ;

before the solve statement.
Local optimum
For nonlinear nonconvex problems, any local solver finds an optimum which is better than all the neighboring points but maybe worse than a distant point. In such a case, the optimal solution depends on the starting point and the path taken by the solver, which can vary because of numerical differences in data, initial values, and bounds. A global solver or a local solver with multi-start feature should be used to find a global optimum. Solvers like GAMS/BARON and GAMS/Lindo will find the global optimum if they can solve the model at all. We also have related multi-start solvers like GAMS/MSNLP that will resolve the model from a variety of starting points to build confidence that the global optimum has been found. With those solvers, you get no proof, but investing more time in solving from more starting points will make it very likely that you have found the global optimum. MSNLP can solve relatively large problems but solving the model multiple times translates to longer run times.
Different versions of NLP algorithms can give different results if the model has more than one solution. If the region near the optimum is flat, then one may observe large differences in primal values for small differences in the objective. A small change caused by new ordering methods or small round-off errors early in the computation can change the whole iteration path and lead to different solutions if there are multiple optima. Example: variables X1 and X2 have mathematically the same reduced cost in the initial point. In one version of the algorithm X1 will be selected to enter the basis because it is first. In another version, the variables have been sorted according to some criteria, and X2 appears to be first, and it will be selected. From there on, everything is different.
Resource limit exceeded
If the time limit is exceeded before the solve is complete, the solver reports an intermediate solution with the solve status being ‘normal completion’. This solution does not provide any optimization guarantees, and as a result, the solution can be different for different solvers or within different optimization runs. The time limit can be adjusted with option reslim.