GLPK is giving wrong results on a simple script. This happens with the currently stable 4.45 and the recently added 4.57. The trigger seems to be the number 200000... if I use 199999 it seems to work. There may be some sort of numerical problem related to rescaling the model. If I use the set containing two items, it incorrectly calculates ad[1] as "0" (it should be "2"). If I use the alternate form with the separate variables ad0 and ad1, ad1 is correctly calculated as "2". ---------- var answer, integer, >= 2; var ad{p in 0..1}, integer; var ad0, integer; var ad1, integer; s.t. lolwut: answer = 2e5 * ad[0] + ad[1]; #answer = 2e5 * ad0 + ad1; solve; display answer; display ad; display ad0; display ad1; end; Reproducible: Always Steps to Reproduce: Run given script. Actual Results: Display statement at line 12 answer.val = 2 Display statement at line 13 ad[1].val = 0 ad[0].val = 0 Expected Results: Display statement at line 12 answer.val = 2 Display statement at line 13 ad[1].val = 2 <---------------------- ad[0].val = 0 Portage 2.2.26 (python 3.3.5-final-0, default/linux/amd64/13.0, gcc-4.9.3, glibc-2.21-r1, 3.10.87 x86_64) ================================================================= System uname: Linux-3.10.87-x86_64-AMD_Phenom-tm-_II_X3_705e_Processor-with-gentoo-2.2 KiB Mem: 8167552 total, 3421848 free KiB Swap: 0 total, 0 free Timestamp of repository gentoo: Sun, 17 Jan 2016 01:30:01 +0000 sh bash 4.3_p42-r1 ld GNU ld (Gentoo 2.25.1 p1.1) 2.25.1 app-shells/bash: 4.3_p42-r1::gentoo dev-java/java-config: 2.2.0::gentoo dev-lang/perl: 5.20.2::gentoo dev-lang/python: 2.7.10-r1::gentoo, 3.3.5-r2::gentoo, 3.4.3-r1::gentoo dev-util/cmake: 3.3.1-r1::gentoo dev-util/pkgconfig: 0.28-r2::gentoo sys-apps/baselayout: 2.2::gentoo sys-apps/openrc: 0.18.4::gentoo sys-apps/sandbox: 2.10-r1::gentoo sys-devel/autoconf: 2.13::gentoo, 2.69::gentoo sys-devel/automake: 1.11.6-r1::gentoo, 1.13.4::gentoo, 1.14.1::gentoo, 1.15::gentoo sys-devel/binutils: 2.25.1-r1::gentoo sys-devel/gcc: 4.8.5::gentoo, 4.9.3::gentoo sys-devel/gcc-config: 1.7.3::gentoo sys-devel/libtool: 2.4.6::gentoo sys-devel/make: 4.1-r1::gentoo sys-kernel/linux-headers: 4.3::gentoo (virtual/os-headers) sys-libs/glibc: 2.21-r1::gentoo Repositories: gentoo location: /usr/portage sync-type: rsync sync-uri: rsync://rsync.gentoo.org/gentoo-portage priority: -1000 sync-rsync-extra-opts: --exclude-from=/etc/portage/rsync_excludes gentoo_local location: /root/portage_overlay masters: gentoo priority: 0 ACCEPT_KEYWORDS="amd64" ACCEPT_LICENSE="* -@EULA dlj-1.1 AdobeFlash-10.3 AdobeFlash-11.x" CBUILD="x86_64-pc-linux-gnu" CFLAGS="-O2 -march=amdfam10 -fomit-frame-pointer" CHOST="x86_64-pc-linux-gnu" CONFIG_PROTECT="/etc /usr/lib64/libreoffice/program/sofficerc /usr/share/gnupg/qualified.txt" CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/dconf /etc/env.d /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/revdep-rebuild /etc/sandbox.d /etc/terminfo" CXXFLAGS="-O2 -march=amdfam10 -fomit-frame-pointer" DISTDIR="/usr/portage/distfiles" FCFLAGS="-O2 -pipe" FEATURES="assume-digests binpkg-logs distlocks ebuild-locks fixlafiles merge-sync news parallel-fetch parallel-install preserve-libs protect-owned sandbox sfperms strict unknown-features-warn unmerge-logs unmerge-orphans userfetch userpriv usersandbox usersync xattr" FFLAGS="-O2 -pipe" GENTOO_MIRRORS=" http://gentoo.gossamerhost.com http://mirror.iawnet.sandia.gov/gentoo/ " LANG="en_US.UTF-8" LDFLAGS="-Wl,-O1 -Wl,--as-needed" MAKEOPTS="-j3" PKGDIR="/usr/portage/packages" PORTAGE_CONFIGROOT="/" PORTAGE_RSYNC_EXTRA_OPTS="--exclude-from=/etc/portage/rsync_excludes" PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --omit-dir-times --compress --force --whole-file --delete --stats --human-readable --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages" PORTAGE_TMPDIR="/work" USE="3dnow 3dnowext X acl alsa amd64 bash-completion berkdb bzip2 cjk cli cracklib crypt cups cxx dbus dri exif fam flac gdbm gnutls gstreamer iconv jpeg libnotify lvm lzma mmx mmxext modules multilib ncurses nls nptl ogg opengl openmp pam pcre png readline seccomp session sse sse2 sse3 ssl svg tcpd tiff udev udisks unicode upower usb vim-syntax vorbis xattr zlib" ABI_X86="64" ALSA_CARDS="ali5451 als4000 atiixp atiixp-modem bt87x ca0106 cmipci emu10k1x ens1370 ens1371 es1938 es1968 fm801 hda-intel intel8x0 intel8x0m maestro3 trident usb-audio via82xx via82xx-modem ymfpci" APACHE2_MODULES="authn_core authz_core socache_shmcb unixd actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias" CALLIGRA_FEATURES="kexi words flow plan sheets stage tables krita karbon braindump author" CAMERAS="ptp2" COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog" CPU_FLAGS_X86="3dnow 3dnowext mmx mmxext popcnt sse sse2 sse3 sse4a" DRACUT_MODULES="lvm" ELIBC="glibc" FOO2ZJS_DEVICES="km2300" GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf superstar2 timing tsip tripmate tnt ublox ubx" INPUT_DEVICES="evdev" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer" LINGUAS="en jp" OFFICE_IMPLEMENTATION="libreoffice" PHP_TARGETS="php5-5" PYTHON_SINGLE_TARGET="python2_7" PYTHON_TARGETS="python2_7 python3_3 python3_4" RUBY_TARGETS="ruby20 ruby21" SANE_BACKENDS="hp3900" USERLAND="GNU" VIDEO_CARDS="r600 radeon vesa" XTABLES_ADDONS="quota2 psd pknock lscan length2 ipv4options ipset ipp2p iface geoip fuzzy condition tee tarpit sysrq steal rawnat logmark ipmark dhcpmac delude chaos account" Unset: CC, CPPFLAGS, CTARGET, CXX, EMERGE_DEFAULT_OPTS, INSTALL_MASK, LC_ALL, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, USE_PYTHON
Interestingly, if I set the --nointopt flag on the command line, the exact opposite behavior happens for me: The ad[1] set-based approach now works and the separate variable ad1 now fails.
I noticed/remembered that I was using the GMP library, and my CFLAGS were set to -O2 -march=amdfam10 -fomit-frame-pointer. I reemerged it with USE="-gmp" CFLAGS="-O0 -fomit-frame-pointer" and got the same results.
Is this Gentoo specific, or maybe a bug in GLPK? In this case, please contact upstream.
(In reply to Thomas Kahle (RETIRED) from comment #3) > Is this Gentoo specific, or maybe a bug in GLPK? In this case, please > contact upstream. Given there is no response, I suggest closing this as UPSTREAM.
Given that the problem exists with GCC optimizations turned off, we're looking at an upstream bug in either GLPK or GCC, with my money firmly on GLPK, and probably a printing bug, not a solving bug. Notice how the non-array form is printed correctly, but the array form is printed as zeros. Here's an easier representation for the next person to see ==== foo.sol var answer1, integer, >= 2; var answer2, integer, >= 2; var ad{p in 0..1}, integer; var ad0, integer; var ad1, integer; s.t. lolwut1: answer1 = 2e5 * ad[0] + ad[1]; s.t. lolwut2: answer2 = 2e5 * ad0 + ad1; solve; display answer1; display answer2; display ad; display ad0; display ad1; end; ==== $ glpsol --math foo.sol GLPSOL: GLPK LP/MIP Solver, v4.61 Parameter(s) specified in the command line: --math foo.sol Reading model section from foo.sol... 23 lines were read Generating lolwut1... Generating lolwut2... Model has been successfully generated GLPK Integer Optimizer, v4.61 2 rows, 6 columns, 6 non-zeros 6 integer variables, none of which are binary Preprocessing... 2 rows, 6 columns, 6 non-zeros 6 integer variables, none of which are binary Scaling... A: min|aij| = 1.000e+00 max|aij| = 2.000e+05 ratio = 2.000e+05 GM: min|aij| = 1.000e+00 max|aij| = 1.000e+00 ratio = 1.000e+00 EQ: min|aij| = 1.000e+00 max|aij| = 1.000e+00 ratio = 1.000e+00 2N: min|aij| = 7.629e-01 max|aij| = 1.000e+00 ratio = 1.311e+00 Constructing initial basis... Size of triangular part is 2 Solving LP relaxation... GLPK Simplex Optimizer, v4.61 2 rows, 6 columns, 6 non-zeros * 0: obj = 0.000000000e+00 inf = 0.000e+00 (0) OPTIMAL LP SOLUTION FOUND Integer optimization begins... + 0: mip = not found yet >= -inf (1; 0) + 0: >>>>> 0.000000000e+00 >= 0.000000000e+00 0.0% (1; 0) + 0: mip = 0.000000000e+00 >= tree is empty 0.0% (0; 1) INTEGER OPTIMAL SOLUTION FOUND Time used: 0.0 secs Memory used: 0.1 Mb (119072 bytes) Display statement at line 16 answer1.val = 2 Display statement at line 17 answer2.val = 2 Display statement at line 18 ad[1].val = 0 ad[0].val = 0 Display statement at line 19 ad0.val = 0 Display statement at line 20 ad1.val = 2 Model has been successfully processed ====