Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 572402 - sci-mathematics/glpk: Wrong results
Summary: sci-mathematics/glpk: Wrong results
Status: RESOLVED UPSTREAM
Alias: None
Product: Gentoo Linux
Classification: Unclassified
Component: Current packages (show other bugs)
Hardware: AMD64 Linux
: Normal major (vote)
Assignee: Robin Johnson
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2016-01-20 00:46 UTC by Jason Bucata
Modified: 2017-07-26 17:55 UTC (History)
1 user (show)

See Also:
Package list:
Runtime testing required: ---


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Jason Bucata 2016-01-20 00:46:01 UTC
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
Comment 1 Jason Bucata 2016-01-20 00:47:23 UTC
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.
Comment 2 Jason Bucata 2016-01-20 01:32:07 UTC
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.
Comment 3 Thomas Kahle (RETIRED) gentoo-dev 2016-01-22 12:22:05 UTC
Is this Gentoo specific, or maybe a bug in GLPK? In this case, please contact upstream.
Comment 4 Erik Quaeghebeur 2017-07-26 09:37:26 UTC
(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.
Comment 5 Robin Johnson archtester Gentoo Infrastructure gentoo-dev Security 2017-07-26 17:55:05 UTC
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
====