There is a fairly deep issue when comparing GDX files if one of the GDX files has the following properties:
- It is produced by GDXDUMP
- It contains Equation records
The following illustrates the problem:
C:\projects\tmp>gamslib indus89 Copy ASCII: indus89.gms C:\projects\tmp>gams indus89 lo=0 gdx=1 C:\projects\tmp>gdxdump 1.gdx output=2.gms * GDX dump of 1.gdx * Library in use : C:\PROGRA~1\GAMS23.7 * Library version: GDX Library BETA 8Jun11 23.7.0 WEX 25828.25830 WEI x86_64/MS Windows * File version : GDX Library BETA 8Jun11 23.7.0 WEX 25828.25830 WEI x86_64/MS Windows * Producer : GAMS Base Module BETA 8Jun11 23.7.0 WEX 25828.25830 WEI x86_64/MS Windows * File format : 7 * Compression : 0 * Symbols : 281 * Unique Elements: 245 C:\projects\tmp>gams 2.gms lo=0 gdx=2 C:\projects\tmp>gdxdiff 1.gdx 2.gdx eps=1.0e-6 GDXDIFF BETA 8Jun11 23.7.0 WEX 25828.25830 WEI x86_64/MS Windows File1 : 1.gdx File2 : 2.gdx Summary of differences: bdraft Data are different brepco Data are different ccombal Data are different consbal Data are different cost Data are different demnat Data are different divcnlsea Data are different divsea Data are different fodder Data are different grnfdr Data are different laborc Data are different nbal Data are different nwfpalc Data are different objn Data are different objnn Data are different objz Data are different objzn Data are different protein Data are different prseaw Data are different qcombal Data are different subirrc Data are different tdraft Data are different watalcpro Data are different watalcsea Data are different watalcz Data are different waterbaln Data are different Output: diffile.gdx GDXDiff finished C:\projects\tmp>gdxdump diffile.gdx Symbols * GDX dump of diffile.gdx * Library in use : C:\PROGRA~1\GAMS23.7 * Library version: GDX Library BETA 8Jun11 23.7.0 WEX 25828.25830 WEI x86_64/MS Windows * File version : GDX Library BETA 8Jun11 23.7.0 WEX 25828.25830 WEI x86_64/MS Windows * Producer : GDXDIFF * File format : 7 * Compression : 0 * Symbols : 26 * Unique Elements: 249 Symbol Dim Type Explanatory text 1 bdraft 4 Equ Differences 2 brepco 3 Equ Differences 3 ccombal 4 Equ Differences 4 consbal 4 Equ Differences 5 cost 3 Equ Differences 6 demnat 3 Equ Differences 7 divcnlsea 3 Equ Differences 8 divsea 2 Equ Differences 9 fodder 4 Equ Differences 10 grnfdr 4 Equ Differences 11 laborc 4 Equ Differences 12 nbal 3 Equ Differences 13 nwfpalc 2 Equ Differences 14 objn 1 Equ Differences 15 objnn 1 Equ Differences 16 objz 1 Equ Differences 17 objzn 1 Equ Differences 18 protein 4 Equ Differences 19 prseaw 3 Equ Differences 20 qcombal 4 Equ Differences 21 subirrc 4 Equ Differences 22 tdraft 4 Equ Differences 23 watalcpro 3 Equ Differences 24 watalcsea 3 Equ Differences 25 watalcz 4 Equ Differences 26 waterbaln 4 Equ Differences C:\projects\tmp> |
Apart from a small bug related to $ONEMPTY, it turns out that the way GDXDUMP exports equations records, it looses information about the equation type. This leads to the above results. Luckily in practice this will not be an issue, as equations are not often part of such an exercise.
Background.
During a course I taught about GAMS I was asked if it is possible to edit GDX files. The answer is: GDXDUMP will give you a GAMS representation of a GDX file which you can edit. Using the call:
GAMS gmsfile gdx=newgdxfile
you can make a new GDX file with the changes incorporated. The tool GDXDIFF will allow you to monitor the changes.
Although this is correct, I chose the INDUS89 example as illustration. That was unfortunate, as that failed because of the exotic Equation problem.