diff -Nru coinor-osi-0.102.3/BuildTools/coin.m4 coinor-osi-0.103.0/BuildTools/coin.m4 --- coinor-osi-0.102.3/BuildTools/coin.m4 2009-07-16 16:00:50.000000000 +0000 +++ coinor-osi-0.103.0/BuildTools/coin.m4 2010-07-04 23:43:59.000000000 +0000 @@ -2,7 +2,7 @@ # All Rights Reserved. # This file is distributed under the Common Public License. # -## $Id: coin.m4 1331 2009-07-16 16:00:50Z andreasw $ +## $Id: coin.m4 1591 2010-07-04 23:43:59Z lou $ # # Author: Andreas Wachter IBM 2006-04-14 @@ -308,6 +308,19 @@ # We set the following variable so that we know later in AC_COIN_FINALIZE # that we are in a project main directory coin_projectdir=yes + +# Set the project's version number. Use m4_ifval here to avoid defining +# _VERSION when the user has not supplied a parameter. +m4_ifval([$1], + [ # temporary hack to avoid breaking lapack 1.0.20; + # do not propagate to BuildTools trunk! --lh, 100615-- + if expr "$1" : '.*:.*' >/dev/null 2>&1 ; then + coin_libversion="$1" + else + AC_DEFINE_UNQUOTED(m4_toupper($1_VERSION), ["$PACKAGE_VERSION"], + [Version number of project]) + fi + ],[]) ]) # AC_COIN_PROJECTDIR_INIT ########################################################################### diff -Nru coinor-osi-0.102.3/BuildTools/commit_new_release coinor-osi-0.103.0/BuildTools/commit_new_release --- coinor-osi-0.102.3/BuildTools/commit_new_release 2010-04-25 16:33:17.000000000 +0000 +++ coinor-osi-0.103.0/BuildTools/commit_new_release 2009-04-24 16:33:02.000000000 +0000 @@ -5,7 +5,7 @@ # This file is distributed under the Common Public License. # It is part of the BuildTools project in COIN-OR (www.coin-or.org) # -## $Id: commit_new_release 1518 2010-04-25 16:33:17Z tkr $ +## $Id: commit_new_release 1272 2009-04-24 16:33:02Z andreasw $ # # Author: Andreas Waechter IBM 2007-06-21 # Modified by: Lou Hafer SFU 2008-04-17 @@ -90,7 +90,7 @@ echo '' echo "===> Restoring version number (${stableBranch}stable) in configure.ac files" for i in $conf_ac_files; do - sed -e "s|AC_INIT\(.*\)\[[0-9\.]*\],\(.*\)|AC_INIT\1[${stableBranch}],\2|" $i > bla + sed -e "s|AC_INIT\(.*\)\[[0-9\.]*\],\(.*\)|AC_INIT\1[${stableBranch}stable],\2|" $i > bla mv bla $i svn di $i done diff -Nru coinor-osi-0.102.3/BuildTools/set_externals coinor-osi-0.103.0/BuildTools/set_externals --- coinor-osi-0.102.3/BuildTools/set_externals 2010-04-25 16:34:01.000000000 +0000 +++ coinor-osi-0.103.0/BuildTools/set_externals 2009-08-13 18:16:48.000000000 +0000 @@ -106,9 +106,9 @@ if test $printHelp = 0 && test $exitValue = 0; then - if test -r $Dependencies; then + rm -f Externals - rm -f Externals + if test -r $Dependencies; then echo '' echo '===> Creating new externals file with pointers to releases...' @@ -170,7 +170,7 @@ svn pset svn:externals -F Externals . - #Leave the new externals file there for now + #Leave the new externals file there for no #rm -f Externals else # if test -r Externals diff -Nru coinor-osi-0.102.3/configure coinor-osi-0.103.0/configure --- coinor-osi-0.102.3/configure 2010-05-08 23:48:25.000000000 +0000 +++ coinor-osi-0.103.0/configure 2010-07-05 02:29:03.000000000 +0000 @@ -1,7 +1,7 @@ #! /bin/sh # From configure.ac 0.9. # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.59 for Osi 0.102.3. +# Generated by GNU Autoconf 2.59 for Osi 0.103.0. # # Report bugs to . # @@ -430,8 +430,8 @@ # Identity of this package. PACKAGE_NAME='Osi' PACKAGE_TARNAME='osi' -PACKAGE_VERSION='0.102.3' -PACKAGE_STRING='Osi 0.102.3' +PACKAGE_VERSION='0.103.0' +PACKAGE_STRING='Osi 0.103.0' PACKAGE_BUGREPORT='coin-osi@lists.coin-or.org' ac_unique_file="configure.ac" @@ -1035,7 +1035,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures Osi 0.102.3 to adapt to many kinds of systems. +\`configure' configures Osi 0.103.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1101,7 +1101,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of Osi 0.102.3:";; + short | recursive ) echo "Configuration of Osi 0.103.0:";; esac cat <<\_ACEOF @@ -1268,7 +1268,7 @@ test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF -Osi configure 0.102.3 +Osi configure 0.103.0 generated by GNU Autoconf 2.59 Copyright (C) 2003 Free Software Foundation, Inc. @@ -1288,7 +1288,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by Osi $as_me 0.102.3, which was +It was created by Osi $as_me 0.103.0, which was generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ @@ -5126,7 +5126,7 @@ # Define the identity of the package. PACKAGE='osi' - VERSION='0.102.3' + VERSION='0.103.0' cat >>confdefs.h <<_ACEOF @@ -21790,7 +21790,7 @@ } >&5 cat >&5 <<_CSEOF -This file was extended by Osi $as_me 0.102.3, which was +This file was extended by Osi $as_me 0.103.0, which was generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -21848,7 +21848,7 @@ cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ -Osi config.status 0.102.3 +Osi config.status 0.103.0 configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" diff -Nru coinor-osi-0.102.3/configure.ac coinor-osi-0.103.0/configure.ac --- coinor-osi-0.102.3/configure.ac 2010-05-08 23:48:25.000000000 +0000 +++ coinor-osi-0.103.0/configure.ac 2010-07-05 02:29:03.000000000 +0000 @@ -2,7 +2,7 @@ # All Rights Reserved. # This file is distributed under the Common Public License. -## $Id: configure.ac 1501 2010-05-08 23:48:25Z tkr $ +## $Id: configure.ac 1533 2010-07-05 02:29:03Z lou $ # Author: Andreas Waechter IBM 2006-04-13 @@ -12,7 +12,7 @@ AC_PREREQ(2.59) -AC_INIT([Osi],[0.102.3],[coin-osi@lists.coin-or.org]) +AC_INIT([Osi],[0.103.0],[coin-osi@lists.coin-or.org]) AC_COPYRIGHT([ Copyright 2006 International Business Machines and others. diff -Nru coinor-osi-0.102.3/debian/changelog coinor-osi-0.103.0/debian/changelog --- coinor-osi-0.102.3/debian/changelog 2010-05-17 16:12:03.000000000 +0000 +++ coinor-osi-0.103.0/debian/changelog 2010-07-10 07:15:46.000000000 +0000 @@ -1,3 +1,11 @@ +coinor-osi (0.103.0-1) unstable; urgency=low + + * New upstream version. + - Bump Standards-Version (no changes needed). + - Build depend on clp >= 1.12.0 and dylp >= 1.6.0. + + -- Soeren Sonnenburg Sat, 10 Jul 2010 09:10:08 +0200 + coinor-osi (0.102.3-1) unstable; urgency=low * New upstream version. diff -Nru coinor-osi-0.102.3/debian/control coinor-osi-0.103.0/debian/control --- coinor-osi-0.102.3/debian/control 2010-04-11 07:15:48.000000000 +0000 +++ coinor-osi-0.103.0/debian/control 2010-07-10 07:15:46.000000000 +0000 @@ -4,9 +4,9 @@ Maintainer: Aramian Wasielak Uploaders: Soeren Sonnenburg Build-Depends: cdbs, debhelper (>= 5), doxygen, graphviz, - coinor-libcoinutils-dev (>= 2.6.0-2), coinor-libclp-dev (>= 1.11.0), - coinor-libdylp-dev (>= 1.5.0) , coinor-libvol-dev (>= 1.1.7) -Standards-Version: 3.8.4 + coinor-libcoinutils-dev (>= 2.6.0-2), coinor-libclp-dev (>= 1.12.0), + coinor-libdylp-dev (>= 1.6.0) , coinor-libvol-dev (>= 1.1.7) +Standards-Version: 3.9.0 Homepage: https://projects.coin-or.org/Osi Vcs-Svn: http://bollin.googlecode.com/svn/coinor-osi/trunk/ Vcs-Browser: http://bollin.googlecode.com/svn/coinor-osi/trunk/ diff -Nru coinor-osi-0.102.3/Dependencies coinor-osi-0.103.0/Dependencies --- coinor-osi-0.102.3/Dependencies 1970-01-01 00:00:00.000000000 +0000 +++ coinor-osi-0.103.0/Dependencies 2010-07-05 02:29:03.000000000 +0000 @@ -0,0 +1,9 @@ +BuildTools https://projects.coin-or.org/svn/BuildTools/releases/0.5.30/ +ThirdParty/Blas https://projects.coin-or.org/svn/BuildTools/ThirdParty/Blas/releases/1.0.14/ +ThirdParty/Lapack https://projects.coin-or.org/svn/BuildTools/ThirdParty/Lapack/releases/1.1.0/ +ThirdParty/Glpk https://projects.coin-or.org/svn/BuildTools/ThirdParty/Glpk/releases/1.5.1/ +Data/Sample https://projects.coin-or.org/svn/Data/releases/1.0.7/Sample +CoinUtils https://projects.coin-or.org/svn/CoinUtils/releases/2.6.4/CoinUtils +Clp https://projects.coin-or.org/svn/Clp/releases/1.12.0/Clp +DyLP https://projects.coin-or.org/svn/DyLP/releases/1.6.0/DyLP +Vol https://projects.coin-or.org/svn/Vol/releases/1.1.7/Vol diff -Nru coinor-osi-0.102.3/Externals coinor-osi-0.103.0/Externals --- coinor-osi-0.102.3/Externals 2010-05-08 23:48:25.000000000 +0000 +++ coinor-osi-0.103.0/Externals 2010-07-05 01:00:57.000000000 +0000 @@ -1,9 +1,13 @@ -BuildTools https://projects.coin-or.org/svn/BuildTools/releases/0.5.29 -ThirdParty/Blas https://projects.coin-or.org/svn/BuildTools/ThirdParty/Blas/releases/1.0.14 -ThirdParty/Lapack https://projects.coin-or.org/svn/BuildTools/ThirdParty/Lapack/releases/1.0.20 -ThirdParty/Glpk https://projects.coin-or.org/svn/BuildTools/ThirdParty/Glpk/releases/1.5.1 -Data/Sample https://projects.coin-or.org/svn/Data/releases/1.0.7/Sample -CoinUtils https://projects.coin-or.org/svn/CoinUtils/releases/2.6.3/CoinUtils -Clp https://projects.coin-or.org/svn/Clp/releases/1.11.1/Clp -DyLP https://projects.coin-or.org/svn/DyLP/releases/1.5.0/DyLP -Vol https://projects.coin-or.org/svn/Vol/releases/1.1.7/Vol +BuildTools https://projects.coin-or.org/svn/BuildTools/stable/0.5 +ThirdParty/Blas https://projects.coin-or.org/svn/BuildTools/ThirdParty/Blas/stable/1.0 +ThirdParty/Lapack https://projects.coin-or.org/svn/BuildTools/ThirdParty/Lapack/stable/1.1 +ThirdParty/Glpk https://projects.coin-or.org/svn/BuildTools/ThirdParty/Glpk/stable/1.5 +Data/Netlib https://projects.coin-or.org/svn/Data/stable/1.0/Netlib +Data/Sample https://projects.coin-or.org/svn/Data/stable/1.0/Sample +CoinUtils https://projects.coin-or.org/svn/CoinUtils/stable/2.6/CoinUtils +Clp https://projects.coin-or.org/svn/Clp/stable/1.12/Clp +DyLP https://projects.coin-or.org/svn/DyLP/stable/1.6/DyLP +Vol https://projects.coin-or.org/svn/Vol/stable/1.1/Vol +Cgl https://projects.coin-or.org/svn/Cgl/stable/0.55/Cgl +Cbc https://projects.coin-or.org/svn/Cbc/trunk/Cbc +SYMPHONY https://projects.coin-or.org/svn/SYMPHONY/stable/5.2/SYMPHONY diff -Nru coinor-osi-0.102.3/Osi/configure coinor-osi-0.103.0/Osi/configure --- coinor-osi-0.102.3/Osi/configure 2010-05-08 23:48:25.000000000 +0000 +++ coinor-osi-0.103.0/Osi/configure 2010-07-05 02:29:03.000000000 +0000 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.59 for Osi 0.102.3. +# Generated by GNU Autoconf 2.59 for Osi 0.103.0. # # Report bugs to . # @@ -429,8 +429,8 @@ # Identity of this package. PACKAGE_NAME='Osi' PACKAGE_TARNAME='osi' -PACKAGE_VERSION='0.102.3' -PACKAGE_STRING='Osi 0.102.3' +PACKAGE_VERSION='0.103.0' +PACKAGE_STRING='Osi 0.103.0' PACKAGE_BUGREPORT='coin-osi@list.coin-or.org' ac_unique_file="src/OsiAuxInfo.cpp" @@ -1001,7 +1001,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures Osi 0.102.3 to adapt to many kinds of systems. +\`configure' configures Osi 0.103.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1067,7 +1067,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of Osi 0.102.3:";; + short | recursive ) echo "Configuration of Osi 0.103.0:";; esac cat <<\_ACEOF @@ -1278,7 +1278,7 @@ test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF -Osi configure 0.102.3 +Osi configure 0.103.0 generated by GNU Autoconf 2.59 Copyright (C) 2003 Free Software Foundation, Inc. @@ -1298,7 +1298,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by Osi $as_me 0.102.3, which was +It was created by Osi $as_me 0.103.0, which was generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ @@ -1740,6 +1740,21 @@ # that we are in a project main directory coin_projectdir=yes +# Set the project's version number. Use m4_ifval here to avoid defining +# _VERSION when the user has not supplied a parameter. + # temporary hack to avoid breaking lapack 1.0.20; + # do not propagate to BuildTools trunk! --lh, 100615-- + if expr "Osi" : '.*:.*' >/dev/null 2>&1 ; then + coin_libversion="Osi" + else + +cat >>confdefs.h <<_ACEOF +#define OSI_VERSION "$PACKAGE_VERSION" +_ACEOF + + fi + + # Check if user wants to produce debugging code @@ -4523,7 +4538,7 @@ # Define the identity of the package. PACKAGE='osi' - VERSION='0.102.3' + VERSION='0.103.0' cat >>confdefs.h <<_ACEOF @@ -5825,7 +5840,7 @@ ;; *-*-irix6*) # Find out which ABI we are using. - echo '#line 5828 "configure"' > conftest.$ac_ext + echo '#line 5843 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? @@ -6959,7 +6974,7 @@ # Provide some information about the compiler. -echo "$as_me:6962:" \ +echo "$as_me:6977:" \ "checking for Fortran 77 compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 @@ -8026,11 +8041,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:8029: $lt_compile\"" >&5) + (eval echo "\"\$as_me:8044: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:8033: \$? = $ac_status" >&5 + echo "$as_me:8048: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -8294,11 +8309,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:8297: $lt_compile\"" >&5) + (eval echo "\"\$as_me:8312: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:8301: \$? = $ac_status" >&5 + echo "$as_me:8316: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -8398,11 +8413,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:8401: $lt_compile\"" >&5) + (eval echo "\"\$as_me:8416: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:8405: \$? = $ac_status" >&5 + echo "$as_me:8420: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -10743,7 +10758,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < conftest.$ac_ext <&5) + (eval echo "\"\$as_me:13205: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:13194: \$? = $ac_status" >&5 + echo "$as_me:13209: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -13291,11 +13306,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:13294: $lt_compile\"" >&5) + (eval echo "\"\$as_me:13309: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:13298: \$? = $ac_status" >&5 + echo "$as_me:13313: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -14861,11 +14876,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:14864: $lt_compile\"" >&5) + (eval echo "\"\$as_me:14879: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:14868: \$? = $ac_status" >&5 + echo "$as_me:14883: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -14965,11 +14980,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:14968: $lt_compile\"" >&5) + (eval echo "\"\$as_me:14983: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:14972: \$? = $ac_status" >&5 + echo "$as_me:14987: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -17172,11 +17187,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:17175: $lt_compile\"" >&5) + (eval echo "\"\$as_me:17190: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:17179: \$? = $ac_status" >&5 + echo "$as_me:17194: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -17440,11 +17455,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:17443: $lt_compile\"" >&5) + (eval echo "\"\$as_me:17458: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:17447: \$? = $ac_status" >&5 + echo "$as_me:17462: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -17544,11 +17559,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:17547: $lt_compile\"" >&5) + (eval echo "\"\$as_me:17562: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:17551: \$? = $ac_status" >&5 + echo "$as_me:17566: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -22481,11 +22496,6 @@ - -############################################################################# -# Capability Tests # -############################################################################# - ############################################################################# # Configuration options for individual OSIs # ############################################################################# @@ -23647,7 +23657,7 @@ } >&5 cat >&5 <<_CSEOF -This file was extended by Osi $as_me 0.102.3, which was +This file was extended by Osi $as_me 0.103.0, which was generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -23710,7 +23720,7 @@ cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ -Osi config.status 0.102.3 +Osi config.status 0.103.0 configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" diff -Nru coinor-osi-0.102.3/Osi/configure.ac coinor-osi-0.103.0/Osi/configure.ac --- coinor-osi-0.102.3/Osi/configure.ac 2010-05-08 23:48:25.000000000 +0000 +++ coinor-osi-0.103.0/Osi/configure.ac 2010-07-05 02:29:03.000000000 +0000 @@ -2,7 +2,7 @@ # All Rights Reserved. # This file is distributed under the Common Public License. -## $Id: configure.ac 1501 2010-05-08 23:48:25Z tkr $ +## $Id: configure.ac 1533 2010-07-05 02:29:03Z lou $ # Author: Andreas Waechter IBM 2006-04-13 @@ -12,7 +12,7 @@ AC_PREREQ(2.59) -AC_INIT([Osi],[0.102.3],[coin-osi@list.coin-or.org]) +AC_INIT([Osi],[0.103.0],[coin-osi@list.coin-or.org]) AC_COPYRIGHT([ Copyright 2006 International Business Machines and others. @@ -38,7 +38,7 @@ AC_CANONICAL_BUILD # A bit of initial setup (ADDLIBS, FADDLIBS) -AC_COIN_PROJECTDIR_INIT +AC_COIN_PROJECTDIR_INIT(Osi,9:0:9) # Check if user wants to produce debugging code AC_COIN_DEBUG_COMPILE(Osi) @@ -88,11 +88,6 @@ AC_COIN_HAS_ASL - -############################################################################# -# Capability Tests # -############################################################################# - ############################################################################# # Configuration options for individual OSIs # ############################################################################# diff -Nru coinor-osi-0.102.3/Osi/inc/config_osi.h.in coinor-osi-0.103.0/Osi/inc/config_osi.h.in --- coinor-osi-0.102.3/Osi/inc/config_osi.h.in 2009-10-07 10:12:30.000000000 +0000 +++ coinor-osi-0.103.0/Osi/inc/config_osi.h.in 2010-06-16 14:46:09.000000000 +0000 @@ -113,6 +113,9 @@ e.g., "OsiClpSolverInterface.hpp" (include quotes) */ #undef OSICBC_DFLT_SOLVER_HPP +/* Version number of project */ +#undef OSI_VERSION + /* Name of package */ #undef PACKAGE diff -Nru coinor-osi-0.102.3/Osi/Makefile.am coinor-osi-0.103.0/Osi/Makefile.am --- coinor-osi-0.102.3/Osi/Makefile.am 2008-02-14 22:30:58.000000000 +0000 +++ coinor-osi-0.103.0/Osi/Makefile.am 2010-02-07 16:25:01.000000000 +0000 @@ -2,7 +2,7 @@ # All Rights Reserved. # This file is distributed under the Common Public License. -## $Id: Makefile.am 1187 2008-02-14 22:30:58Z tkr $ +## $Id: Makefile.am 1464 2010-02-07 16:25:01Z stefan $ # Author: Andreas Waechter IBM 2006-04-13 @@ -29,7 +29,6 @@ # Here we need include all files that are not mentioned in other Makefiles EXTRA_DIST = \ - TODO \ examples/basic2.cpp \ examples/basic.cpp \ examples/build.cpp \ diff -Nru coinor-osi-0.102.3/Osi/Makefile.in coinor-osi-0.103.0/Osi/Makefile.in --- coinor-osi-0.102.3/Osi/Makefile.in 2009-10-07 10:12:30.000000000 +0000 +++ coinor-osi-0.103.0/Osi/Makefile.in 2010-02-07 16:25:01.000000000 +0000 @@ -63,7 +63,7 @@ $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/osi_addlibs.txt.in $(top_srcdir)/configure \ $(top_srcdir)/examples/Makefile.in \ - $(top_srcdir)/inc/config_osi.h.in AUTHORS TODO + $(top_srcdir)/inc/config_osi.h.in AUTHORS @HAVE_EXTERNALS_TRUE@am__append_2 = Externals @HAVE_EXTERNALS_TRUE@am__append_3 = .Externals-stamp subdir = . @@ -348,10 +348,10 @@ ######################################################################## # Here we need include all files that are not mentioned in other Makefiles -EXTRA_DIST = TODO examples/basic2.cpp examples/basic.cpp \ - examples/build.cpp examples/Makefile.in \ - examples/parameters.cpp examples/query.cpp examples/README \ - examples/specific.cpp $(am__append_2) +EXTRA_DIST = examples/basic2.cpp examples/basic.cpp examples/build.cpp \ + examples/Makefile.in examples/parameters.cpp \ + examples/query.cpp examples/README examples/specific.cpp \ + $(am__append_2) ######################################################################## # Installation of the addlibs file # diff -Nru coinor-osi-0.102.3/Osi/src/OsiCbc/Makefile.am coinor-osi-0.103.0/Osi/src/OsiCbc/Makefile.am --- coinor-osi-0.102.3/Osi/src/OsiCbc/Makefile.am 2008-01-17 00:12:48.000000000 +0000 +++ coinor-osi-0.103.0/Osi/src/OsiCbc/Makefile.am 2010-06-01 17:11:10.000000000 +0000 @@ -2,7 +2,7 @@ # All Rights Reserved. # This file is distributed under the Common Public License. -## $Id: Makefile.am 1176 2008-01-17 00:12:48Z lou $ +## $Id: Makefile.am 1509 2010-06-01 17:11:10Z lou $ # Author: Andreas Waechter IBM 2006-04-13 @@ -27,13 +27,16 @@ # "top_srcdir" refers to the basic directory for the main package that is # being compiled. -# Needed by any OsiCbc configuration. +# Needed by any OsiCbc configuration. Clp is inextricably wired into Cbc, +# hence OsiCbc always needs the Clp include directories. -- lh, 100601 -- AM_CPPFLAGS = \ -I`$(CYGPATH_W) $(COINUTILSSRCDIR)/src` \ -I`$(CYGPATH_W) $(COINUTILSOBJDIR)/inc` \ -I`$(CYGPATH_W) $(CBCSRCDIR)/src` \ -I`$(CYGPATH_W) $(CBCOBJDIR)/inc` \ + -I`$(CYGPATH_W) $(CLPSRCDIR)/src` \ + -I`$(CYGPATH_W) $(CLPOBJDIR)/inc` \ -I`$(CYGPATH_W) $(srcdir)/..` # Plus the appropriate include directories for the default solver. The diff -Nru coinor-osi-0.102.3/Osi/src/OsiCbc/Makefile.in coinor-osi-0.103.0/Osi/src/OsiCbc/Makefile.in --- coinor-osi-0.102.3/Osi/src/OsiCbc/Makefile.in 2009-10-07 10:12:30.000000000 +0000 +++ coinor-osi-0.103.0/Osi/src/OsiCbc/Makefile.in 2010-06-01 17:11:10.000000000 +0000 @@ -393,13 +393,16 @@ # "top_srcdir" refers to the basic directory for the main package that is # being compiled. -# Needed by any OsiCbc configuration. +# Needed by any OsiCbc configuration. Clp is inextricably wired into Cbc, +# hence OsiCbc always needs the Clp include directories. -- lh, 100601 -- AM_CPPFLAGS = -I`$(CYGPATH_W) $(COINUTILSSRCDIR)/src` -I`$(CYGPATH_W) \ $(COINUTILSOBJDIR)/inc` -I`$(CYGPATH_W) $(CBCSRCDIR)/src` \ -I`$(CYGPATH_W) $(CBCOBJDIR)/inc` -I`$(CYGPATH_W) \ - $(srcdir)/..` $(am__append_1) $(am__append_2) $(am__append_3) \ - $(am__append_4) $(am__append_5) $(am__append_6) \ - $(am__append_7) $(am__append_8) $(am__append_9) + $(CLPSRCDIR)/src` -I`$(CYGPATH_W) $(CLPOBJDIR)/inc` \ + -I`$(CYGPATH_W) $(srcdir)/..` $(am__append_1) $(am__append_2) \ + $(am__append_3) $(am__append_4) $(am__append_5) \ + $(am__append_6) $(am__append_7) $(am__append_8) \ + $(am__append_9) # This line is necessary to allow VPATH compilation with MS compilers # on Cygwin diff -Nru coinor-osi-0.102.3/Osi/src/OsiClp/OsiClpSolverInterface.cpp coinor-osi-0.103.0/Osi/src/OsiClp/OsiClpSolverInterface.cpp --- coinor-osi-0.102.3/Osi/src/OsiClp/OsiClpSolverInterface.cpp 2010-03-17 14:18:48.000000000 +0000 +++ coinor-osi-0.103.0/Osi/src/OsiClp/OsiClpSolverInterface.cpp 2010-02-24 10:28:19.000000000 +0000 @@ -13,7 +13,6 @@ #include "CoinModel.hpp" #include "CoinMpsIO.hpp" #include "CoinSort.hpp" -#include "ClpMessage.hpp" #include "ClpDualRowSteepest.hpp" #include "ClpPrimalColumnSteepest.hpp" #include "ClpPackedMatrix.hpp" @@ -5313,9 +5312,6 @@ int returnCode=modelPtr_->startup(0); assert (!returnCode||returnCode==2); #endif - // Reset objective if primal as may be a bit infeasible - if (modelPtr_->algorithm_>0&&modelPtr_->nonLinearCost_) - modelPtr_->objectiveValue_=modelPtr_->nonLinearCost_->feasibleCost(); modelPtr_->specialOptions_=saveOptions; modelPtr_->numberIterations_=saveIts; } @@ -7368,7 +7364,6 @@ int nRedundantUp2=0; int nRedundantDown2=0; OsiNodeSimple bestNode; - char generalPrint[300]; ////// Start main while of branch and bound // while until nothing on stack while (branchingTree.size()) { @@ -7670,22 +7665,18 @@ bestNode = node; // set cutoff (hard coded tolerance) setDblParam(OsiDualObjectiveLimit,(bestNode.objectiveValue_-1.0e-5)*direction); - sprintf(generalPrint,"Integer solution of %g found after %d iterations and %d nodes", - bestNode.objectiveValue_,numberIterations, - numberNodes); - CoinMessages generalMessages = modelPtr_->messages(); - modelPtr_->messageHandler()->message(CLP_GENERAL,generalMessages) - << generalPrint - <messages(); - modelPtr_->messageHandler()->message(CLP_GENERAL,generalMessages) - << generalPrint - <message(ODSI_FAILEDCALL,messages_) << rtnnme << "dy_dualRays" << CoinMessageEol ; @@ -5658,7 +5658,7 @@ */ int m = getNumRows() ; for (int v = 0 ; v < numRays ; v++) - { double *tmpVec = CoinCopyOfArray(INV_VEC(double,dylpRays[v]),m) ; + { double *tmpVec = CoinCopyOfArray(inv_vec(dylpRays[v]),m) ; dualRays.push_back(tmpVec) ; FREE(dylpRays[v]) ; } FREE(dylpRays) ; @@ -5710,14 +5710,13 @@ */ int m = getNumRows() ; for (int v = 0 ; v < numRays ; v++) - { double *tmpVec = CoinCopyOfArray(INV_VEC(double,dylpRays[v]),m) ; + { double *tmpVec = CoinCopyOfArray(inv_vec(dylpRays[v]),m) ; primalRays.push_back(tmpVec) ; FREE(dylpRays[v]) ; } FREE(dylpRays) ; return (primalRays) ; } - /*! dylp is strictly a simplex LP solver. */ diff -Nru coinor-osi-0.102.3/Osi/src/OsiGrb/OsiGrbSolverInterface.cpp coinor-osi-0.103.0/Osi/src/OsiGrb/OsiGrbSolverInterface.cpp --- coinor-osi-0.102.3/Osi/src/OsiGrb/OsiGrbSolverInterface.cpp 2010-02-25 12:05:41.000000000 +0000 +++ coinor-osi-0.103.0/Osi/src/OsiGrb/OsiGrbSolverInterface.cpp 2010-02-25 12:06:51.000000000 +0000 @@ -8,7 +8,7 @@ // Copyright (C) 2009 Humboldt University Berlin and others. // All Rights Reserved. -// $Id: OsiGrbSolverInterface.cpp 1475 2010-02-25 12:05:41Z stefan $ +// $Id: OsiGrbSolverInterface.cpp 1476 2010-02-25 12:06:51Z stefan $ #include #include diff -Nru coinor-osi-0.102.3/Osi/src/OsiPresolve.cpp coinor-osi-0.103.0/Osi/src/OsiPresolve.cpp --- coinor-osi-0.102.3/Osi/src/OsiPresolve.cpp 2010-04-02 17:14:19.000000000 +0000 +++ coinor-osi-0.103.0/Osi/src/OsiPresolve.cpp 2010-01-06 18:24:38.000000000 +0000 @@ -319,9 +319,9 @@ memcpy(originalRow_,prob.originalRow_,nrowsNow*sizeof(int)); delete [] prob.originalRow_; prob.originalRow_=NULL; - /* now clean up integer variables. This can modify original - Don't do if dupcol added columns together */ - if ((prob.presolveOptions_&0x80000000)==0) { + + // now clean up integer variables. This can modify original + { int numberChanges=0; const double * lower0 = originalModel_->getColLower(); const double * upper0 = originalModel_->getColUpper(); @@ -331,13 +331,10 @@ if (!presolvedModel_->isInteger(i)) continue; int iOriginal = originalColumn_[i]; - double lowerValue = ceil(lower[i]-1.0e-5); - double upperValue = floor(upper[i]+1.0e-5); - if (lowerValue==lower[i]&& - upperValue==upper[i]) - continue; // no point going round again double lowerValue0 = lower0[iOriginal]; double upperValue0 = upper0[iOriginal]; + double lowerValue = ceil(lower[i]-1.0e-5); + double upperValue = floor(upper[i]+1.0e-5); presolvedModel_->setColBounds(i,lowerValue,upperValue); if (lowerValue>upperValue) { numberChanges++; diff -Nru coinor-osi-0.102.3/Osi/src/OsiSolverInterface.cpp coinor-osi-0.103.0/Osi/src/OsiSolverInterface.cpp --- coinor-osi-0.102.3/Osi/src/OsiSolverInterface.cpp 2009-07-25 08:40:54.000000000 +0000 +++ coinor-osi-0.103.0/Osi/src/OsiSolverInterface.cpp 2010-06-02 01:19:32.000000000 +0000 @@ -1533,6 +1533,12 @@ void OsiSolverInterface::copyParameters(OsiSolverInterface & rhs) { + /* + We should think about this block of code. appData, rowCutDebugger, + and handler_ are not part of the standard parameter data. Arguably copy + actions for them belong in the base Osi.clone() or as separate methods. + -lh, 091021- + */ delete appDataEtc_; appDataEtc_ = rhs.appDataEtc_->clone(); delete rowCutDebugger_; @@ -1543,13 +1549,17 @@ if (defaultHandler_) { delete handler_; } + /* + Is this correct? Shouldn't we clone a non-default handler instead of + simply assigning the pointer? -lh, 091021- + */ defaultHandler_ = rhs.defaultHandler_; if (defaultHandler_) { handler_ = new CoinMessageHandler(*rhs.handler_); } else { handler_ = rhs.handler_; } - CoinDisjointCopyN(rhs.intParam_, OsiLastIntParam, intParam_); + CoinDisjointCopyN(rhs.intParam_, OsiLastIntParam, intParam_); CoinDisjointCopyN(rhs.dblParam_, OsiLastDblParam, dblParam_); CoinDisjointCopyN(rhs.strParam_, OsiLastStrParam, strParam_); CoinDisjointCopyN(rhs.hintParam_, OsiLastHintParam, hintParam_); diff -Nru coinor-osi-0.102.3/Osi/src/OsiSolverInterface.hpp coinor-osi-0.103.0/Osi/src/OsiSolverInterface.hpp --- coinor-osi-0.102.3/Osi/src/OsiSolverInterface.hpp 2009-07-25 08:40:54.000000000 +0000 +++ coinor-osi-0.103.0/Osi/src/OsiSolverInterface.hpp 2010-06-02 01:19:32.000000000 +0000 @@ -157,13 +157,21 @@ /// Solve initial LP relaxation virtual void initialSolve() = 0; - /// Resolve an LP relaxation after problem modification + /*! \brief Resolve an LP relaxation after problem modification + + Note the `re-' in `resolve'. initialSolve() should be used to solve the + problem for the first time. + */ virtual void resolve() = 0; /// Invoke solver's built-in enumeration algorithm virtual void branchAndBound() = 0; #ifdef CBC_NEXT_VERSION + /* + Would it make sense to collect all of these routines in a `MIP Helper' + section? It'd make it easier for users and implementors to find them. + */ /** Solve 2**N (N==depth) problems and return solutions and bases. There are N branches each of which changes bounds on both sides @@ -213,13 +221,12 @@ proper interface to and accurately reflect the capabilities of a specific solver. - The format for hints is slightly different in that the value is - boolean and there is an enum to show strength of hint. - There is also an optional void pointer to allow for any eventuality. + The format for hints is slightly different in that a boolean specifies + the sense of the hint and an enum specifies the strength of the hint. Hints should be initialised when a solver is instantiated. (See OsiSolverParameters.hpp for defined hint parameters and strength.) - A value of true means to work with the hint, false to work against it. - For example, + When specifying the sense of the hint, a value of true means to work with + the hint, false to work against it. For example,
  • \code setHintParam(OsiDoScale,true,OsiHintTry) \endcode is a mild suggestion to the solver to scale the constraint @@ -239,35 +246,46 @@ \note As with the other set/get methods, there is a default implementation - which maintains arrays in the base class for hint value and strength. - The default implementation does not store the void pointer, and always - throws an exception for strength \c OsiForceDo. Implementors of a solver - interface should overload these functions to provide the proper interface - to and accurately reflect the capabilities of a specific solver. + which maintains arrays in the base class for hint sense and strength. + The default implementation does not store the \c otherInformation + pointer, and always throws an exception for strength \c OsiForceDo. + Implementors of a solver interface should override these functions to + provide the proper interface to and accurately reflect the capabilities + of a specific solver. */ //@{ - // Set an integer parameter + //! Set an integer parameter virtual bool setIntParam(OsiIntParam key, int value) { if (key == OsiLastIntParam) return (false) ; intParam_[key] = value; return true; } - // Set an double parameter + //! Set a double parameter virtual bool setDblParam(OsiDblParam key, double value) { if (key == OsiLastDblParam) return (false) ; dblParam_[key] = value; return true; } - // Set an string parameter + //! Set a string parameter virtual bool setStrParam(OsiStrParam key, const std::string & value) { if (key == OsiLastStrParam) return (false) ; strParam_[key] = value; return true; } - // Set a hint parameter + /*! \brief Set a hint parameter + + The \c otherInformation parameter can be used to pass in an arbitrary + block of information which is interpreted by the OSI and the underlying + solver. Users are cautioned that this hook is solver-specific. + + Implementors: + The default implementation completely ignores \c otherInformation and + always throws an exception for OsiForceDo. This is almost certainly not + the behaviour you want; you really should override this method. + */ virtual bool setHintParam(OsiHintParam key, bool yesNo=true, OsiHintStrength strength=OsiHintTry, - void * =NULL) { + void *otherInformation = NULL) { if (key==OsiLastHintParam) return false; hintParam_[key] = yesNo; @@ -277,30 +295,33 @@ "setHintParam", "OsiSolverInterface"); return true; } - // Get an integer parameter + //! Get an integer parameter virtual bool getIntParam(OsiIntParam key, int& value) const { if (key == OsiLastIntParam) return (false) ; value = intParam_[key]; return true; } - // Get an double parameter + //! Get a double parameter virtual bool getDblParam(OsiDblParam key, double& value) const { if (key == OsiLastDblParam) return (false) ; value = dblParam_[key]; return true; } - /** We should be able to get an integer tolerance. - Until that time just use primal tolerance - */ - inline double getIntegerTolerance() const - { return dblParam_[OsiPrimalTolerance];} - // Get a string parameter + //! Get a string parameter virtual bool getStrParam(OsiStrParam key, std::string& value) const { if (key == OsiLastStrParam) return (false) ; value = strParam_[key]; return true; } - // get a hint parameter + /*! \brief Get a hint parameter (all information) + + Return all available information for the hint: sense, strength, + and any extra information associated with the hint. + + Implementors: The default implementation will always set + \c otherInformation to NULL. This is almost certainly not the + behaviour you want; you really should override this method. + */ virtual bool getHintParam(OsiHintParam key, bool& yesNo, OsiHintStrength& strength, void *& otherInformation) const { @@ -311,7 +332,10 @@ otherInformation=NULL; return true; } - // get a hint parameter (less information) + /*! \brief Get a hint parameter (sense and strength only) + + Return only the sense and strength of the hint. + */ virtual bool getHintParam(OsiHintParam key, bool& yesNo, OsiHintStrength& strength) const { if (key==OsiLastHintParam) @@ -320,15 +344,39 @@ strength = hintStrength_[key]; return true; } - // get a hint parameter (even less information) + /*! \brief Get a hint parameter (sense only) + + Return only the sense (true/false) of the hint. + */ virtual bool getHintParam(OsiHintParam key, bool& yesNo) const { if (key==OsiLastHintParam) return false; yesNo = hintParam_[key]; return true; } - // copy all parameters in this section from one solver to another + /*! \brief Copy all parameters in this section from one solver to another + + Note that the current implementation also copies the appData block, + message handler, and rowCutDebugger. Arguably these should have + independent copy methods. + */ void copyParameters(OsiSolverInterface & rhs); + + /** \brief Return the integrality tolerance of the underlying solver. + + We should be able to get an integrality tolerance, but + until that time just use the primal tolerance + + \todo + This method should be replaced; it's architecturally wrong. This + should be an honest dblParam with a keyword. Underlying solvers + that do not support integer variables should return false for set and + get on this parameter. Underlying solvers that support integrality + should add this to the parameters they support, using whatever + tolerance is appropriate. -lh, 091021- + */ + inline double getIntegerTolerance() const + { return dblParam_[OsiPrimalTolerance];} //@} //--------------------------------------------------------------------------- diff -Nru coinor-osi-0.102.3/Osi/src/OsiSpx/OsiSpxSolverInterface.cpp coinor-osi-0.103.0/Osi/src/OsiSpx/OsiSpxSolverInterface.cpp --- coinor-osi-0.102.3/Osi/src/OsiSpx/OsiSpxSolverInterface.cpp 2003-01-23 20:55:05.000000000 +0000 +++ coinor-osi-0.103.0/Osi/src/OsiSpx/OsiSpxSolverInterface.cpp 2010-06-13 18:13:22.000000000 +0000 @@ -1,13 +1,15 @@ -// LAST EDIT: Tue Nov 27 16:30:04 CET 2001 by Laszlo Ladanyi //----------------------------------------------------------------------------- -// name: OSI Interface for SOPLEX -// author: Tobias Pfender +// name: OSI Interface for SoPlex >= 1.4.2c +// authors: Tobias Pfender +// Ambros Gleixner +// Wei Huang // Konrad-Zuse-Zentrum Berlin (Germany) // email: pfender@zib.de // date: 01/16/2002 //----------------------------------------------------------------------------- // Copyright (C) 2002, Tobias Pfender, International Business Machines // Corporation and others. All Rights Reserved. +// Last edit: $Id: OsiSpxSolverInterface.cpp 1528 2010-06-13 18:13:22Z stefan $ #if defined(_MSC_VER) // Turn off compiler warning about long names @@ -15,6 +17,7 @@ #endif #include +#include #include #include #include @@ -71,25 +74,83 @@ void OsiSpxSolverInterface::initialSolve() { - if( spxsolver_.type() != soplex::SoPlex::ENTER ) - spxsolver_.setType( soplex::SoPlex::ENTER ); // switch to primal simplex - if( spxsolver_.rep() != soplex::SoPlex::COLUMN ) - spxsolver_.setRep( soplex::SoPlex::COLUMN ); - spxsolver_.solve(); + // by default we use dual simplex + bool dual = true; + + // unless we get the hint to use primal simplex + bool takeHint, gotHint; + OsiHintStrength strength; + gotHint = (getHintParam(OsiDoDualInInitial,takeHint,strength)); + assert (gotHint); + if (strength!=OsiHintIgnore) + dual = takeHint; + + // always use column representation + if( soplex_.rep() != soplex::SPxSolver::COLUMN ) + soplex_.setRep( soplex::SPxSolver::COLUMN ); + + // set algorithm type + if( dual ) + { + if( soplex_.type() != soplex::SPxSolver::LEAVE ) + soplex_.setType( soplex::SPxSolver::LEAVE ); + } + else + { + if( soplex_.type() != soplex::SPxSolver::ENTER ) + soplex_.setType( soplex::SPxSolver::ENTER ); + } + + // solve + try + { + soplex_.solve(); + } catch (soplex::SPxException e) { + std::cerr << "SoPlex initial solve failed with exception " << e.what() << std::endl; + } } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::resolve() { - if( spxsolver_.type() != soplex::SoPlex::LEAVE ) - spxsolver_.setType( soplex::SoPlex::LEAVE ); // switch to dual simplex - if( spxsolver_.rep() != soplex::SoPlex::COLUMN ) - spxsolver_.setRep( soplex::SoPlex::COLUMN ); - spxsolver_.solve(); + // by default we use dual simplex + bool dual = true; + + // unless we get the hint to use primal simplex + bool takeHint, gotHint; + OsiHintStrength strength; + gotHint = (getHintParam(OsiDoDualInResolve,takeHint,strength)); + assert (gotHint); + if (strength!=OsiHintIgnore) + dual = takeHint; + + // always use column representation + if( soplex_.rep() != soplex::SPxSolver::COLUMN ) + soplex_.setRep( soplex::SPxSolver::COLUMN ); + + // set algorithm type + if( dual ) + { + if( soplex_.type() != soplex::SPxSolver::LEAVE ) + soplex_.setType( soplex::SPxSolver::LEAVE ); + } + else + { + if( soplex_.type() != soplex::SPxSolver::ENTER ) + soplex_.setType( soplex::SPxSolver::ENTER ); + } + + // solve + try + { + soplex_.solve(); + } catch (soplex::SPxException e) { + std::cerr << "SoPlex resolve failed with exception " << e.what() << std::endl; + } } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::branchAndBound() { - throwSPXerror( "SOPLEX does not provide an internal branch and bound procedure", + throwSPXerror( "SoPlex does not provide an internal branch and bound procedure", "branchAndBound" ); } @@ -104,7 +165,7 @@ switch (key) { case OsiMaxNumIteration: - spxsolver_.setTerminationIter( value ); + soplex_.setTerminationIter( value ); retval = true; break; case OsiMaxNumIterationHotStart: @@ -119,6 +180,9 @@ case OsiLastIntParam: retval = false; break; + case OsiNameDiscipline: + retval = false; + break; } return retval; } @@ -132,29 +196,21 @@ switch (key) { case OsiDualObjectiveLimit: - // SOPLEX doesn't support different termination values for primal and dual simplex - // at the moment, setting a termination value is not supported in SOPLEX - // spxsolver_.setTerminationValue( value ); - // retval = true; - retval = false; + soplex_.setTerminationValue( value ); + retval = true; break; case OsiPrimalObjectiveLimit: - // SOPLEX doesn't support different termination values for primal and dual simplex - // at the moment, setting a termination value is not supported in SOPLEX - // spxsolver_.setTerminationValue( value ); - // retval = true; + // SoPlex doesn't support a primal objective limit retval = false; break; case OsiDualTolerance: - // ??? Is delta the correct SOPLEX equivalent of dual tolerance? - // SOPLEX doesn't support different deltas for primal and dual simplex - spxsolver_.setDelta( value ); + // SoPlex doesn't support different deltas for primal and dual + soplex_.setDelta( value ); retval = true; break; case OsiPrimalTolerance: - // ??? Is delta the correct SOPLEX equivalent of primal tolerance? - // SOPLEX doesn't support different deltas for primal and dual simplex - spxsolver_.setDelta( value ); + // SoPlex doesn't support different deltas for primal and dual + soplex_.setDelta( value ); retval = true; break; case OsiObjOffset: @@ -176,7 +232,7 @@ switch (key) { case OsiMaxNumIteration: - value = spxsolver_.terminationIter(); + value = soplex_.terminationIter(); retval = true; break; case OsiMaxNumIterationHotStart: @@ -186,6 +242,9 @@ case OsiLastIntParam: retval = false; break; + case OsiNameDiscipline: + retval = false; + break; } return retval; } @@ -199,23 +258,19 @@ switch (key) { case OsiDualObjectiveLimit: - // at the moment, setting a termination value is not supported in SOPLEX - // value = spxsolver_.terminationValue(); - // retval = true; - retval = false; + value = soplex_.terminationValue(); + retval = true; break; case OsiPrimalObjectiveLimit: - // at the moment, setting a termination value is not supported in SOPLEX - // value = spxsolver_.terminationValue(); - // retval = true; + // SoPlex doesn't support a primal objective limit retval = false; break; case OsiDualTolerance: - value = spxsolver_.delta(); + value = soplex_.delta(); retval = true; break; case OsiPrimalTolerance: - value = spxsolver_.delta(); + value = soplex_.delta(); retval = true; break; case OsiObjOffset: @@ -231,13 +286,15 @@ bool OsiSpxSolverInterface::getStrParam(OsiStrParam key, std::string & value) const { - bool retval = false; + bool retval = false; switch (key) { case OsiSolverName: - value = "soplex"; + value = "SoPlex"; break; case OsiLastStrParam: - return false; + case OsiProbName: + retval = false; + break; } return true; } @@ -248,46 +305,46 @@ bool OsiSpxSolverInterface::isAbandoned() const { - int stat = spxsolver_.status(); + int stat = soplex_.status(); - return ( stat == soplex::SoPlex::SINGULAR || - stat == soplex::SoPlex::ERROR ); + return ( stat == soplex::SPxSolver::SINGULAR || + stat == soplex::SPxSolver::ERROR ); } bool OsiSpxSolverInterface::isProvenOptimal() const { - int stat = spxsolver_.status(); - - return ( stat == soplex::SoPlex::OPTIMAL ); + int stat = soplex_.status(); + return ( stat == soplex::SPxSolver::OPTIMAL ); } bool OsiSpxSolverInterface::isProvenPrimalInfeasible() const { - int stat = spxsolver_.status(); + int stat = soplex_.status(); - return ( stat == soplex::SoPlex::INFEASIBLE ); + return ( stat == soplex::SPxSolver::INFEASIBLE ); } bool OsiSpxSolverInterface::isProvenDualInfeasible() const { - int stat = spxsolver_.status(); + int stat = soplex_.status(); - return ( stat == soplex::SoPlex::UNBOUNDED ); + return ( stat == soplex::SPxSolver::UNBOUNDED ); } bool OsiSpxSolverInterface::isPrimalObjectiveLimitReached() const { - return ( spxsolver_.status() == soplex::SoPlex::ABORT_VALUE ); + // SoPlex does not support a primal objective limit + return false; } bool OsiSpxSolverInterface::isDualObjectiveLimitReached() const { - return ( spxsolver_.status() == soplex::SoPlex::ABORT_VALUE ); + return ( soplex_.status() == soplex::SPxSolver::ABORT_VALUE ); } bool OsiSpxSolverInterface::isIterationLimitReached() const { - return ( spxsolver_.status() == soplex::SoPlex::ABORT_ITER ); + return ( soplex_.status() == soplex::SPxSolver::ABORT_ITER ); } //############################################################################# @@ -304,51 +361,56 @@ ws = new CoinWarmStartBasis(); ws->setSize( numcols, numrows ); + if( soplex_.status() <= soplex::SPxSolver::NO_PROBLEM ) + return ws; + + // The OSI standard assumes the artificial slack variables to have positive coefficients. SoPlex uses the convention + // Ax - s = 0, lhs <= s <= rhs, so we have to invert the ON_LOWER and ON_UPPER statuses. for( i = 0; i < numrows; ++i ) + { + switch( soplex_.getBasisRowStatus( i ) ) { - switch( spxsolver_.getBasisRowStatus( i ) ) - { - case soplex::SoPlex::BASIC: - ws->setArtifStatus( i, CoinWarmStartBasis::basic ); - break; - case soplex::SoPlex::FIXED: - case soplex::SoPlex::ON_LOWER: - ws->setArtifStatus( i, CoinWarmStartBasis::atLowerBound ); - break; - case soplex::SoPlex::ON_UPPER: - ws->setArtifStatus( i, CoinWarmStartBasis::atUpperBound ); - break; - case soplex::SoPlex::ZERO: - ws->setArtifStatus( i, CoinWarmStartBasis::isFree ); - break; - default: - throwSPXerror( "invalid row status", "getWarmStart" ); - break; - } + case soplex::SPxSolver::BASIC: + ws->setArtifStatus( i, CoinWarmStartBasis::basic ); + break; + case soplex::SPxSolver::FIXED: + case soplex::SPxSolver::ON_LOWER: + ws->setArtifStatus( i, CoinWarmStartBasis::atUpperBound ); + break; + case soplex::SPxSolver::ON_UPPER: + ws->setArtifStatus( i, CoinWarmStartBasis::atLowerBound ); + break; + case soplex::SPxSolver::ZERO: + ws->setArtifStatus( i, CoinWarmStartBasis::isFree ); + break; + default: + throwSPXerror( "invalid row status", "getWarmStart" ); + break; } + } for( i = 0; i < numcols; ++i ) + { + switch( soplex_.getBasisColStatus( i ) ) { - switch( spxsolver_.getBasisColStatus( i ) ) - { - case soplex::SoPlex::BASIC: - ws->setStructStatus( i, CoinWarmStartBasis::basic ); - break; - case soplex::SoPlex::FIXED: - case soplex::SoPlex::ON_LOWER: - ws->setStructStatus( i, CoinWarmStartBasis::atLowerBound ); - break; - case soplex::SoPlex::ON_UPPER: - ws->setStructStatus( i, CoinWarmStartBasis::atUpperBound ); - break; - case soplex::SoPlex::ZERO: - ws->setStructStatus( i, CoinWarmStartBasis::isFree ); - break; - default: - throwSPXerror( "invalid column status", "getWarmStart" ); - break; - } + case soplex::SPxSolver::BASIC: + ws->setStructStatus( i, CoinWarmStartBasis::basic ); + break; + case soplex::SPxSolver::FIXED: + case soplex::SPxSolver::ON_LOWER: + ws->setStructStatus( i, CoinWarmStartBasis::atLowerBound ); + break; + case soplex::SPxSolver::ON_UPPER: + ws->setStructStatus( i, CoinWarmStartBasis::atUpperBound ); + break; + case soplex::SPxSolver::ZERO: + ws->setStructStatus( i, CoinWarmStartBasis::isFree ); + break; + default: + throwSPXerror( "invalid column status", "getWarmStart" ); + break; } + } return ws; } @@ -359,7 +421,7 @@ { const CoinWarmStartBasis* ws = dynamic_cast(warmstart); int numcols, numrows, i; - soplex::SoPlex::VarStatus *cstat, *rstat; + soplex::SPxSolver::VarStatus *cstat, *rstat; bool retval = false; if( !ws ) @@ -371,24 +433,24 @@ if( numcols != getNumCols() || numrows != getNumRows() ) return false; - cstat = new soplex::SoPlex::VarStatus[numcols]; - rstat = new soplex::SoPlex::VarStatus[numrows]; + cstat = new soplex::SPxSolver::VarStatus[numcols]; + rstat = new soplex::SPxSolver::VarStatus[numrows]; for( i = 0; i < numrows; ++i ) { switch( ws->getArtifStatus( i ) ) { case CoinWarmStartBasis::basic: - rstat[i] = soplex::SoPlex::BASIC; + rstat[i] = soplex::SPxSolver::BASIC; break; case CoinWarmStartBasis::atLowerBound: - rstat[i] = soplex::SoPlex::ON_LOWER; + rstat[i] = soplex::SPxSolver::ON_LOWER; break; case CoinWarmStartBasis::atUpperBound: - rstat[i] = soplex::SoPlex::ON_UPPER; + rstat[i] = soplex::SPxSolver::ON_UPPER; break; case CoinWarmStartBasis::isFree: - rstat[i] = soplex::SoPlex::ZERO; + rstat[i] = soplex::SPxSolver::ZERO; break; default: // unknown row status retval = false; @@ -400,16 +462,16 @@ switch( ws->getStructStatus( i ) ) { case CoinWarmStartBasis::basic: - cstat[i] = soplex::SoPlex::BASIC; + cstat[i] = soplex::SPxSolver::BASIC; break; case CoinWarmStartBasis::atLowerBound: - cstat[i] = soplex::SoPlex::ON_LOWER; + cstat[i] = soplex::SPxSolver::ON_LOWER; break; case CoinWarmStartBasis::atUpperBound: - cstat[i] = soplex::SoPlex::ON_UPPER; + cstat[i] = soplex::SPxSolver::ON_UPPER; break; case CoinWarmStartBasis::isFree: - cstat[i] = soplex::SoPlex::ZERO; + cstat[i] = soplex::SPxSolver::ZERO; break; default: // unknown column status retval = false; @@ -417,7 +479,14 @@ } } - spxsolver_.setBasis( rstat, cstat ); + try + { + soplex_.setBasis( rstat, cstat ); + } catch (soplex::SPxException e) { + std::cerr << "SoPlex setting starting basis failed with exception " << e.what() << std::endl; + retval = false; + goto TERMINATE; + } retval = true; TERMINATE: @@ -440,15 +509,15 @@ { delete[] hotStartCStat_; hotStartCStatSize_ = static_cast( 1.2 * static_cast( numcols ) ); // get some extra space for future hot starts - hotStartCStat_ = new soplex::SoPlex::VarStatus[hotStartCStatSize_]; + hotStartCStat_ = new soplex::SPxSolver::VarStatus[hotStartCStatSize_]; } if( numrows > hotStartRStatSize_ ) { delete[] hotStartRStat_; hotStartRStatSize_ = static_cast( 1.2 * static_cast( numrows ) ); // get some extra space for future hot starts - hotStartRStat_ = new soplex::SoPlex::VarStatus[hotStartRStatSize_]; + hotStartRStat_ = new soplex::SPxSolver::VarStatus[hotStartRStatSize_]; } - spxsolver_.getBasis( hotStartRStat_, hotStartCStat_ ); + soplex_.getBasis( hotStartRStat_, hotStartCStat_ ); } void OsiSpxSolverInterface::solveFromHotStart() @@ -458,14 +527,14 @@ assert( getNumCols() <= hotStartCStatSize_ ); assert( getNumRows() <= hotStartRStatSize_ ); - spxsolver_.setBasis( hotStartRStat_, hotStartCStat_ ); + //soplex_.setBasis( hotStartRStat_, hotStartCStat_ ); - maxiter = spxsolver_.terminationIter(); - spxsolver_.setTerminationIter( hotStartMaxIteration_ ); + maxiter = soplex_.terminationIter(); + soplex_.setTerminationIter( hotStartMaxIteration_ ); resolve(); - spxsolver_.setTerminationIter( maxiter ); + soplex_.setTerminationIter( maxiter ); } void OsiSpxSolverInterface::unmarkHotStart() @@ -482,22 +551,22 @@ //------------------------------------------------------------------ int OsiSpxSolverInterface::getNumCols() const { - return spxsolver_.nCols(); + return soplex_.nCols(); } int OsiSpxSolverInterface::getNumRows() const { - return spxsolver_.nRows(); + return soplex_.nRows(); } int OsiSpxSolverInterface::getNumElements() const { #if 0 - return spxsolver_.nNzos(); + return soplex_.nNzos(); #else int retVal = 0; int nrows = getNumRows(); int row; for( row = 0; row < nrows; ++row ) { - const soplex::SVector& rowvec = spxsolver_.rowVector( row ); + const soplex::SVector& rowvec = soplex_.rowVector( row ); retVal += rowvec.size(); } return retVal; @@ -512,7 +581,7 @@ { const double * retVal = NULL; if ( getNumCols()!=0 ) - retVal = spxsolver_.lower().get_const_ptr(); + retVal = soplex_.lower().get_const_ptr(); return retVal; } //------------------------------------------------------------------ @@ -520,7 +589,7 @@ { const double * retVal = NULL; if ( getNumCols()!=0 ) - retVal = spxsolver_.upper().get_const_ptr(); + retVal = soplex_.upper().get_const_ptr(); return retVal; } //------------------------------------------------------------------ @@ -552,7 +621,7 @@ rowsense_ = new char[nrows]; for( row = 0; row < nrows; ++row ) - convertBoundToSense( spxsolver_.lhs( row ), spxsolver_.rhs( row ), + convertBoundToSense( soplex_.lhs( row ), soplex_.rhs( row ), rowsense_[row], rhs_[row], rowrange_[row] ); } } @@ -574,7 +643,7 @@ { const double * retVal = NULL; if ( getNumRows() != 0 ) - retVal = spxsolver_.lhs().get_const_ptr(); + retVal = soplex_.lhs().get_const_ptr(); return retVal; } //------------------------------------------------------------------ @@ -582,7 +651,7 @@ { const double * retVal = NULL; if ( getNumRows() != 0 ) - retVal = spxsolver_.rhs().get_const_ptr(); + retVal = soplex_.rhs().get_const_ptr(); return retVal; } //------------------------------------------------------------------ @@ -592,7 +661,7 @@ if( obj_ == NULL ) { if ( getNumCols()!=0 ) { obj_ = new soplex::DVector( getNumCols() ); - spxsolver_.getObj( *obj_ ); + soplex_.getObj( *obj_ ); retVal = obj_->get_const_ptr(); } } @@ -604,7 +673,7 @@ //------------------------------------------------------------------ double OsiSpxSolverInterface::getObjSense() const { - switch( spxsolver_.spxSense() ) + switch( soplex_.spxSense() ) { case soplex::SPxLP::MINIMIZE: return +1.0; @@ -645,7 +714,7 @@ elem = 0; for( row = 0; row < nrows; ++row ) { - const soplex::SVector& rowvec = spxsolver_.rowVector( row ); + const soplex::SVector& rowvec = soplex_.rowVector( row ); starts[row] = elem; len [row] = rowvec.size(); for( i = 0; i < len[row]; ++i, ++elem ) @@ -684,7 +753,7 @@ elem = 0; for( col = 0; col < ncols; ++col ) { - const soplex::SVector& colvec = spxsolver_.colVector( col ); + const soplex::SVector& colvec = soplex_.colVector( col ); starts[col] = elem; len [col] = colvec.size(); for( i = 0; i < len[col]; ++i, ++elem ) @@ -728,7 +797,7 @@ { colsol_ = new soplex::DVector( ncols ); if( isProvenOptimal() ) - spxsolver_.getPrimal( *colsol_ ); + soplex_.getPrimal( *colsol_ ); else colsol_->clear(); } @@ -747,7 +816,7 @@ { rowsol_ = new soplex::DVector( nrows ); if( isProvenOptimal() ) - spxsolver_.getDual( *rowsol_ ); + soplex_.getDual( *rowsol_ ); else rowsol_->clear(); } @@ -766,7 +835,7 @@ { redcost_ = new soplex::DVector( ncols ); if( isProvenOptimal() ) - spxsolver_.getRdCost( *redcost_ ); + soplex_.getRedCost( *redcost_ ); else redcost_->clear(); } @@ -785,7 +854,7 @@ { rowact_ = new soplex::DVector( nrows ); if( isProvenOptimal() ) - spxsolver_.getSlacks( *rowact_ ); + soplex_.getSlacks( *rowact_ ); else rowact_->clear(); } @@ -799,12 +868,12 @@ { double objval; - switch( spxsolver_.status() ) + switch( soplex_.status() ) { - case soplex::SoPlex::OPTIMAL: - case soplex::SoPlex::UNBOUNDED: - case soplex::SoPlex::INFEASIBLE: - objval = spxsolver_.value(); + case soplex::SPxSolver::OPTIMAL: + case soplex::SPxSolver::UNBOUNDED: + case soplex::SPxSolver::INFEASIBLE: + objval = soplex_.objValue(); break; default: objval = 0.0; @@ -821,15 +890,21 @@ //------------------------------------------------------------------ int OsiSpxSolverInterface::getIterationCount() const { - return spxsolver_.iterations(); + return soplex_.iteration(); } //------------------------------------------------------------------ std::vector OsiSpxSolverInterface::getDualRays(int maxNumRays) const { - // *FIXME* : must write the method - throw CoinError("method is not yet written", "getDualRays", - "OsiSpxSolverInterface"); - return std::vector(); + std::vector ret = std::vector(); + + if (soplex_.status() == soplex::SPxSolver::INFEASIBLE && maxNumRays > 0) + { + ret.push_back(new double[getNumRows()]); + soplex::Vector proof(getNumRows(), ret[0]); + soplex_.getDualfarkas(proof); + } + + return ret; } //------------------------------------------------------------------ std::vector OsiSpxSolverInterface::getPrimalRays(int maxNumRays) const @@ -846,46 +921,46 @@ void OsiSpxSolverInterface::setObjCoeff( int elementIndex, double elementValue ) { - spxsolver_.changeObj( elementIndex, elementValue ); + soplex_.changeObj( elementIndex, elementValue ); freeCachedData( OsiSpxSolverInterface::FREECACHED_COLUMN ); } void OsiSpxSolverInterface::setColLower(int elementIndex, double elementValue) { - spxsolver_.changeLower( elementIndex, elementValue ); + soplex_.changeLower( elementIndex, elementValue ); freeCachedData( OsiSpxSolverInterface::FREECACHED_COLUMN ); } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::setColUpper(int elementIndex, double elementValue) { - spxsolver_.changeUpper( elementIndex, elementValue ); + soplex_.changeUpper( elementIndex, elementValue ); freeCachedData( OsiSpxSolverInterface::FREECACHED_COLUMN ); } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::setColBounds( int elementIndex, double lower, double upper ) { - spxsolver_.changeBounds( elementIndex, lower, upper ); + soplex_.changeBounds( elementIndex, lower, upper ); freeCachedData( OsiSpxSolverInterface::FREECACHED_COLUMN ); } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::setRowLower( int i, double elementValue ) { - spxsolver_.changeLhs( i, elementValue ); + soplex_.changeLhs( i, elementValue ); freeCachedData( OsiSpxSolverInterface::FREECACHED_ROW ); } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::setRowUpper( int i, double elementValue ) { - spxsolver_.changeRhs( i, elementValue ); + soplex_.changeRhs( i, elementValue ); freeCachedData( OsiSpxSolverInterface::FREECACHED_ROW ); } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::setRowBounds( int elementIndex, double lower, double upper ) { - spxsolver_.changeRange( elementIndex, lower, upper ); + soplex_.changeRange( elementIndex, lower, upper ); freeCachedData( OsiSpxSolverInterface::FREECACHED_ROW ); } //----------------------------------------------------------------------------- @@ -893,7 +968,8 @@ OsiSpxSolverInterface::setRowType(int i, char sense, double rightHandSide, double range) { - double lower, upper; + double lower = 0.0; + double upper = 0.0; convertSenseToBound( sense, rightHandSide, range, lower, upper ); setRowBounds( i, lower, upper ); @@ -927,9 +1003,9 @@ if( s != getObjSense() ) { if( s == +1.0 ) - spxsolver_.changeSense( soplex::SPxLP::MINIMIZE ); + soplex_.changeSense( soplex::SPxLP::MINIMIZE ); else - spxsolver_.changeSense( soplex::SPxLP::MAXIMIZE ); + soplex_.changeSense( soplex::SPxLP::MAXIMIZE ); freeCachedData( OsiSpxSolverInterface::FREECACHED_RESULTS ); } } @@ -985,14 +1061,14 @@ soplex::DSVector colvec; colvec.add( vec.getNumElements(), vec.getIndices(), vec.getElements() ); - spxsolver_.addCol( soplex::LPCol( obj, colvec, colub, collb ) ); + soplex_.addCol( soplex::LPCol( obj, colvec, colub, collb ) ); freeCachedData( OsiSpxSolverInterface::KEEPCACHED_ROW ); } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::deleteCols(const int num, const int * columnIndices) { - spxsolver_.removeCols( const_cast(columnIndices), num ); + soplex_.removeCols( const_cast(columnIndices), num ); freeCachedData( OsiSpxSolverInterface::KEEPCACHED_ROW ); } //----------------------------------------------------------------------------- @@ -1003,7 +1079,7 @@ soplex::DSVector rowvec; rowvec.add( vec.getNumElements(), vec.getIndices(), vec.getElements() ); - spxsolver_.addRow( soplex::LPRow( rowlb, rowvec, rowub ) ); + soplex_.addRow( soplex::LPRow( rowlb, rowvec, rowub ) ); freeCachedData( OsiSpxSolverInterface::KEEPCACHED_COLUMN ); } //----------------------------------------------------------------------------- @@ -1012,7 +1088,8 @@ const char rowsen, const double rowrhs, const double rowrng) { - double rowlb, rowub; + double rowlb = 0.0; + double rowub = 0.0; convertSenseToBound( rowsen, rowrhs, rowrng, rowlb, rowub ); addRow( vec, rowlb, rowub ); @@ -1021,7 +1098,7 @@ void OsiSpxSolverInterface::deleteRows(const int num, const int * rowIndices) { - spxsolver_.removeRows( const_cast(rowIndices), num ); + soplex_.removeRows( const_cast(rowIndices), num ); freeCachedData( OsiSpxSolverInterface::KEEPCACHED_COLUMN ); } @@ -1080,8 +1157,8 @@ else therowub = const_cast(rowub); - // copy problem into spxsolver_ - spxsolver_.clear(); + // copy problem into soplex_ + soplex_.clear(); spxintvars_.clear(); freeCachedData( OsiSpxSolverInterface::KEEPCACHED_NONE ); @@ -1097,7 +1174,7 @@ rowvec.clear(); for( row = 0; row < nrows; ++row ) rowset.add( therowlb[row], rowvec, therowub[row] ); - spxsolver_.addRows( rowset ); + soplex_.addRows( rowset ); /* create columns */ for( col = 0; col < ncols; ++col ) @@ -1108,8 +1185,8 @@ colset.add( theobj[col], thecollb[col], colvec, thecolub[col] ); } - spxsolver_.addCols( colset ); - // spxsolver_.changeRange( soplex::Vector( nrows, therowlb ), soplex::Vector( nrows, therowub ) ); + soplex_.addCols( colset ); + // soplex_.changeRange( soplex::Vector( nrows, therowlb ), soplex::Vector( nrows, therowub ) ); } else { @@ -1123,7 +1200,7 @@ colvec.clear(); for( col = 0; col < ncols; ++col ) colset.add( theobj[col], thecollb[col], colvec, thecolub[col] ); - spxsolver_.addCols( colset ); + soplex_.addCols( colset ); /* create rows */ for( row = 0; row < nrows; ++row ) @@ -1134,13 +1211,13 @@ rowset.add( therowlb[row], rowvec, therowub[row] ); } - spxsolver_.addRows( rowset ); - // spxsolver_.changeObj( soplex::Vector( ncols, theobj ) ); - // spxsolver_.changeBounds( soplex::Vector( ncols, thecollb ), soplex::Vector( ncols, thecolub ) ); + soplex_.addRows( rowset ); + // soplex_.changeObj( soplex::Vector( ncols, theobj ) ); + // soplex_.changeBounds( soplex::Vector( ncols, thecollb ), soplex::Vector( ncols, thecolub ) ); } // switch sense to minimization problem - spxsolver_.changeSense( soplex::SoPlex::MINIMIZE ); + soplex_.changeSense( soplex::SPxSolver::MINIMIZE ); // delete default arrays if neccessary if( collb == NULL ) @@ -1259,7 +1336,7 @@ soplex::LPColSet colset( numcols, start[numcols] ); soplex::DSVector colvec; - spxsolver_.clear(); + soplex_.clear(); spxintvars_.clear(); freeCachedData( OsiSpxSolverInterface::KEEPCACHED_NONE ); @@ -1271,8 +1348,8 @@ colset.add( obj[col], collb[col], colvec, colub[col] ); } - spxsolver_.addCols( colset ); - spxsolver_.changeRange( soplex::Vector( numrows, const_cast(rowlb) ), soplex::Vector( numrows, const_cast(rowub) ) ); + soplex_.addCols( colset ); + soplex_.changeRange( soplex::Vector( numrows, const_cast(rowlb) ), soplex::Vector( numrows, const_cast(rowub) ) ); } //----------------------------------------------------------------------------- @@ -1305,18 +1382,27 @@ int OsiSpxSolverInterface::readMps( const char * filename, const char * extension ) { -#if 0 + #if 0 std::string f(filename); std::string e(extension); std::string fullname = f + "." + e; + std::ifstream file(fullname.c_str()); + if (!file.good()) + { + std::cerr << "Error opening file " << fullname << " for reading!" << std::endl; + return 1; + } - spxsolver_.clear(); - spxintvars_.clear(); - if( !spxsolver_.readFile( fullname.c_str(), NULL, NULL, &spxintvars_ ) ) + soplex_.clear(); + if( !soplex_.readMPS(file, NULL, NULL, NULL) ) throwSPXerror( "error reading file <" + fullname + ">", "readMps" ); -#endif - // just call base class method - return OsiSolverInterface::readMps(filename,extension); + #endif + + // we preserve the objective sense independent of the problem which is read + soplex::SPxLP::SPxSense objsen = soplex_.spxSense(); + int retval = OsiSolverInterface::readMps(filename,extension); + soplex_.changeSense(objsen); + return retval; } //----------------------------------------------------------------------------- @@ -1328,10 +1414,18 @@ { std::string f(filename); std::string e(extension); - std::string fullname = f + ".lp"; // SOPLEX cannot write MPS files yet! + "." + e; - spxsolver_.dumpFile( fullname.c_str() ); - std::cout << "WARNING: LP file <" << fullname << "> created instead of " - << "MPS file <" << f << "." << e << "> !" << std::endl; + std::string fullname = f+"."+e; + std::ofstream file(fullname.c_str()); + if (!file.good()) + { + std::cerr << "Error opening file " << fullname << " for writing!" << std::endl; + return; + } + soplex::DIdxSet integers(getNumIntegers()); + for (int i = 0; i < getNumCols(); ++i) + if (isInteger(i)) + integers.addIdx(i); + soplex_.writeMPS(file, NULL, NULL, &integers); } //############################################################################# @@ -1343,7 +1437,7 @@ //------------------------------------------------------------------- OsiSpxSolverInterface::OsiSpxSolverInterface () : OsiSolverInterface(), - spxsolver_(soplex::SoPlex::ENTER, soplex::SoPlex::COLUMN), // default is primal simplex algorithm + soplex_(soplex::SPxSolver::ENTER, soplex::SPxSolver::COLUMN), // default is primal simplex algorithm spxintvars_(), hotStartCStat_(NULL), hotStartCStatSize_(0), @@ -1364,8 +1458,11 @@ #ifndef NDEBUG soplex::Param::setVerbose( 3 ); #else - soplex::Param::setVerbose( 0 ); + soplex::Param::setVerbose( 2 ); #endif + + // SoPlex default objective sense is maximization, thus we explicitly set it to minimization + soplex_.changeSense( soplex::SPxLP::MINIMIZE ); } @@ -1382,7 +1479,7 @@ //------------------------------------------------------------------- OsiSpxSolverInterface::OsiSpxSolverInterface( const OsiSpxSolverInterface & source ) : OsiSolverInterface(source), - spxsolver_(source.spxsolver_.type(), source.spxsolver_.rep()), + soplex_(source.soplex_), spxintvars_(source.spxintvars_), hotStartCStat_(NULL), hotStartCStatSize_(0), @@ -1400,14 +1497,6 @@ matrixByRow_(NULL), matrixByCol_(NULL) { - spxsolver_.loadLP( source.spxsolver_ ); - if( source.spxsolver_.basis().status() != soplex::SPxBasis::NO_PROBLEM ) - spxsolver_.loadBasis( source.spxsolver_.basis().desc() ); - spxsolver_.setTerminationTime ( source.spxsolver_.terminationTime() ); - spxsolver_.setTerminationIter ( source.spxsolver_.terminationIter() ); - // spxsolver_.setTerminationValue( source.spxsolver_.terminationValue() ); // ??? - spxsolver_.setPricing( source.spxsolver_.pricing() ); - spxsolver_.setDelta ( source.spxsolver_.delta() ); setColSolution(source.getColSolution()); setRowPrice(source.getRowPrice()); } @@ -1432,16 +1521,7 @@ OsiSolverInterface::operator=( source ); spxintvars_ = source.spxintvars_; - - spxsolver_.setRep ( source.spxsolver_.rep() ); - spxsolver_.setType ( source.spxsolver_.type() ); - spxsolver_.loadLP ( source.spxsolver_ ); - spxsolver_.loadBasis ( source.spxsolver_.basis().desc() ); - spxsolver_.setTerminationTime ( source.spxsolver_.terminationTime() ); - spxsolver_.setTerminationIter ( source.spxsolver_.terminationIter() ); - // spxsolver_.setTerminationValue( source.spxsolver_.terminationValue() ); - spxsolver_.setPricing ( source.spxsolver_.pricing() ); - spxsolver_.setDelta ( source.spxsolver_.delta() ); + soplex_ = source.soplex_; setColSolution(source.getColSolution()); setRowPrice(source.getRowPrice()); hotStartMaxIteration_ = source.hotStartMaxIteration_; @@ -1543,6 +1623,6 @@ hotStartCStatSize_ = 0; hotStartRStat_ = NULL; hotStartRStatSize_ = 0; - spxsolver_.clear(); + soplex_.clear(); spxintvars_.clear(); } diff -Nru coinor-osi-0.102.3/Osi/src/OsiSpx/OsiSpxSolverInterface.hpp coinor-osi-0.103.0/Osi/src/OsiSpx/OsiSpxSolverInterface.hpp --- coinor-osi-0.102.3/Osi/src/OsiSpx/OsiSpxSolverInterface.hpp 2007-06-15 15:46:48.000000000 +0000 +++ coinor-osi-0.103.0/Osi/src/OsiSpx/OsiSpxSolverInterface.hpp 2010-06-13 18:13:22.000000000 +0000 @@ -1,7 +1,8 @@ -// LAST EDIT: Fri Aug 31 13:54:15 2001 by Tobias Pfender (opt14!bzfpfend) //----------------------------------------------------------------------------- -// name: OSI Interface for SOPLEX -// author: Tobias Pfender +// name: OSI Interface for SoPlex >= 1.4.2c +// authors: Tobias Pfender +// Ambros Gleixner +// Wei Huang // Konrad-Zuse-Zentrum Berlin (Germany) // email: pfender@zib.de // date: 01/16/2002 @@ -9,21 +10,22 @@ //----------------------------------------------------------------------------- // Copyright (C) 2002, Tobias Pfender, International Business Machines // Corporation and others. All Rights Reserved. +// Last edit: $Id: OsiSpxSolverInterface.hpp 1528 2010-06-13 18:13:22Z stefan $ #ifndef OsiSpxSolverInterface_H #define OsiSpxSolverInterface_H #include -#include "spxsolver.h" +#include "soplex.h" #include "OsiSolverInterface.hpp" #include "CoinWarmStartBasis.hpp" -/** SOPLEX Solver Interface +/** SoPlex Solver Interface - Instantiation of OsiSpxSolverInterface for SOPLEX + Instantiation of OsiSpxSolverInterface for SoPlex */ -class OsiSpxSolverInterface : virtual public OsiSolverInterface { +class OsiSpxSolverInterface : virtual public OsiSolverInterface, public soplex::SoPlex { friend void OsiSpxSolverInterfaceUnitTest(const std::string & mpsDir, const std::string & netlibDir); public: @@ -606,8 +608,8 @@ /**@name Protected member data */ //@{ - /// SOPLEX solver object - soplex::SPxSolver spxsolver_; + /// SoPlex solver object + soplex::SoPlex soplex_; //@} @@ -670,13 +672,13 @@ soplex::DIdxSet spxintvars_; /// Hotstart information - soplex::SoPlex::VarStatus *hotStartCStat_; + soplex::SPxSolver::VarStatus *hotStartCStat_; int hotStartCStatSize_; - soplex::SoPlex::VarStatus *hotStartRStat_; + soplex::SPxSolver::VarStatus *hotStartRStat_; int hotStartRStatSize_; int hotStartMaxIteration_; - /**@name Cached information derived from the SOPLEX model */ + /**@name Cached information derived from the SoPlex model */ //@{ /// Pointer to objective Vector mutable soplex::DVector *obj_; diff -Nru coinor-osi-0.102.3/Osi/src/OsiSym/Makefile.am coinor-osi-0.103.0/Osi/src/OsiSym/Makefile.am --- coinor-osi-0.102.3/Osi/src/OsiSym/Makefile.am 2010-04-25 19:08:02.000000000 +0000 +++ coinor-osi-0.103.0/Osi/src/OsiSym/Makefile.am 2010-04-25 02:43:41.000000000 +0000 @@ -14,7 +14,7 @@ # # #===========================================================================# -## $Id: Makefile.am 1494 2010-04-25 19:08:02Z tkr $ +## $Id: Makefile.am 1493 2010-04-25 02:43:41Z tkr $ AUTOMAKE_OPTIONS = foreign diff -Nru coinor-osi-0.102.3/Osi/test/Makefile.am coinor-osi-0.103.0/Osi/test/Makefile.am --- coinor-osi-0.102.3/Osi/test/Makefile.am 2010-04-27 03:45:29.000000000 +0000 +++ coinor-osi-0.103.0/Osi/test/Makefile.am 2010-04-27 03:09:41.000000000 +0000 @@ -2,7 +2,7 @@ # All Rights Reserved. # This file is distributed under the Common Public License. -## $Id: Makefile.am 1497 2010-04-27 03:45:29Z tkr $ +## $Id: Makefile.am 1496 2010-04-27 03:09:41Z tkr $ # Author: Andreas Waechter IBM 2006-04-13 diff -Nru coinor-osi-0.102.3/Osi/TODO coinor-osi-0.103.0/Osi/TODO --- coinor-osi-0.102.3/Osi/TODO 2006-05-11 17:37:20.000000000 +0000 +++ coinor-osi-0.103.0/Osi/TODO 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -Osi: Separate calls to get last continuous primal solution and last mip -primal solution. - diff -Nru coinor-osi-0.102.3/ThirdParty/Lapack/configure coinor-osi-0.103.0/ThirdParty/Lapack/configure --- coinor-osi-0.102.3/ThirdParty/Lapack/configure 2009-10-28 02:40:01.000000000 +0000 +++ coinor-osi-0.103.0/ThirdParty/Lapack/configure 2010-04-28 17:34:51.000000000 +0000 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.59 for ThirdPartyLapack 1.0.20. +# Generated by GNU Autoconf 2.59 for ThirdPartyLapack 1.1.0. # # Report bugs to . # @@ -429,8 +429,8 @@ # Identity of this package. PACKAGE_NAME='ThirdPartyLapack' PACKAGE_TARNAME='thirdpartylapack' -PACKAGE_VERSION='1.0.20' -PACKAGE_STRING='ThirdPartyLapack 1.0.20' +PACKAGE_VERSION='1.1.0' +PACKAGE_STRING='ThirdPartyLapack 1.1.0' PACKAGE_BUGREPORT='http://projects.coin-or.org/BuildTools/newticket' ac_unique_file="LAPACK/SRC/dlarf.f" @@ -1001,7 +1001,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures ThirdPartyLapack 1.0.20 to adapt to many kinds of systems. +\`configure' configures ThirdPartyLapack 1.1.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1067,7 +1067,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of ThirdPartyLapack 1.0.20:";; + short | recursive ) echo "Configuration of ThirdPartyLapack 1.1.0:";; esac cat <<\_ACEOF @@ -1231,7 +1231,7 @@ test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF -ThirdPartyLapack configure 1.0.20 +ThirdPartyLapack configure 1.1.0 generated by GNU Autoconf 2.59 Copyright (C) 2003 Free Software Foundation, Inc. @@ -1251,7 +1251,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by ThirdPartyLapack $as_me 1.0.20, which was +It was created by ThirdPartyLapack $as_me 1.1.0, which was generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ @@ -4284,7 +4284,7 @@ # Define the identity of the package. PACKAGE='thirdpartylapack' - VERSION='1.0.20' + VERSION='1.1.0' cat >>confdefs.h <<_ACEOF @@ -25058,7 +25058,7 @@ ############################################################################# if test x"$MAKEOKFILE" != x; then - lapack_source_files='dbdsqr.f dgebd2.f dgebrd.f dgelq2.f dgelqf.f dgeqr2.f dgeqrf.f dgesvd.f dgesv.f dgetf2.f dgetrf.f dgetrs.f dlabrd.f dlacpy.f dlae2.f dlaev2.f dlange.f dlanst.f dlansy.f dlapy2.f dlarf.f dlarfb.f dlarfg.f dlarft.f dlartg.f dlas2.f dlascl.f dlaset.f dlasq1.f dlasq2.f dlasq5.f dlasq6.f dlasr.f dlasrt.f dlassq.f dlaswp.f dlatrd.f dlasv2.f dlazq3.f dlazq4.f dorg2l.f dorg2r.f dorgbr.f dorglq.f dorgl2.f dorgql.f dorgqr.f dorgtr.f dorm2r.f dormbr.f dorml2.f dormlq.f dormqr.f dpotf2.f dpotrf.f dpotrs.f dsteqr.f dsterf.f dsyev.f dsytd2.f dsytrd.f ieeeck.f ilaenv.f iparmq.f' + lapack_source_files='dbdsqr.f dgebd2.f dgebrd.f dgelq2.f dgelqf.f dgeqr2.f dgeqrf.f dgesvd.f dgesv.f dgetf2.f dgetrf.f dgetrs.f disnan.f dlabrd.f dlacpy.f dlaisnan.f dlae2.f dlaev2.f dlange.f dlanst.f dlansy.f dlapy2.f dlarf.f dlarfb.f dlarfg.f dlarfp.f dlarft.f dlartg.f dlas2.f dlascl.f dlaset.f dlasq1.f dlasq2.f dlasq3.f dlasq4.f dlasq5.f dlasq6.f dlasr.f dlasrt.f dlassq.f dlaswp.f dlatrd.f dlasv2.f dorg2l.f dorg2r.f dorgbr.f dorglq.f dorgl2.f dorgql.f dorgqr.f dorgtr.f dorm2r.f dormbr.f dorml2.f dormlq.f dormqr.f dpotf2.f dpotrf.f dpotrs.f dsteqr.f dsterf.f dsyev.f dsytd2.f dsytrd.f ieeeck.f iladlc.f iladlr.f ilaenv.f iparmq.f' for file in $lapack_source_files; do ac_config_links="$ac_config_links $file:LAPACK/SRC/$file" @@ -25600,7 +25600,7 @@ } >&5 cat >&5 <<_CSEOF -This file was extended by ThirdPartyLapack $as_me 1.0.20, which was +This file was extended by ThirdPartyLapack $as_me 1.1.0, which was generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -25661,7 +25661,7 @@ cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ -ThirdPartyLapack config.status 1.0.20 +ThirdPartyLapack config.status 1.1.0 configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" diff -Nru coinor-osi-0.102.3/ThirdParty/Lapack/configure.ac coinor-osi-0.103.0/ThirdParty/Lapack/configure.ac --- coinor-osi-0.102.3/ThirdParty/Lapack/configure.ac 2009-10-28 02:40:01.000000000 +0000 +++ coinor-osi-0.103.0/ThirdParty/Lapack/configure.ac 2010-04-28 17:34:51.000000000 +0000 @@ -2,7 +2,7 @@ # All Rights Reserved. # This file is distributed under the Common Public License. -## $Id: configure.ac 1424 2009-10-28 02:40:01Z andreasw $ +## $Id: configure.ac 1526 2010-04-28 17:34:51Z stefan $ # Author: Andreas Waechter IBM 2006-04-13 @@ -12,7 +12,7 @@ AC_PREREQ(2.59) -AC_INIT([ThirdPartyLapack],[1.0.20], +AC_INIT([ThirdPartyLapack],[1.1.0], [http://projects.coin-or.org/BuildTools/newticket]) AC_COPYRIGHT([ @@ -31,7 +31,7 @@ # /usr/local. AC_PREFIX_DEFAULT([`pwd`]) -AC_COIN_PROJECTDIR_INIT(1:20:0) +AC_COIN_PROJECTDIR_INIT ############################################################################# # Standard build tool stuff # @@ -107,7 +107,7 @@ ############################################################################# if test x"$MAKEOKFILE" != x; then - lapack_source_files='dbdsqr.f dgebd2.f dgebrd.f dgelq2.f dgelqf.f dgeqr2.f dgeqrf.f dgesvd.f dgesv.f dgetf2.f dgetrf.f dgetrs.f dlabrd.f dlacpy.f dlae2.f dlaev2.f dlange.f dlanst.f dlansy.f dlapy2.f dlarf.f dlarfb.f dlarfg.f dlarft.f dlartg.f dlas2.f dlascl.f dlaset.f dlasq1.f dlasq2.f dlasq5.f dlasq6.f dlasr.f dlasrt.f dlassq.f dlaswp.f dlatrd.f dlasv2.f dlazq3.f dlazq4.f dorg2l.f dorg2r.f dorgbr.f dorglq.f dorgl2.f dorgql.f dorgqr.f dorgtr.f dorm2r.f dormbr.f dorml2.f dormlq.f dormqr.f dpotf2.f dpotrf.f dpotrs.f dsteqr.f dsterf.f dsyev.f dsytd2.f dsytrd.f ieeeck.f ilaenv.f iparmq.f' + lapack_source_files='dbdsqr.f dgebd2.f dgebrd.f dgelq2.f dgelqf.f dgeqr2.f dgeqrf.f dgesvd.f dgesv.f dgetf2.f dgetrf.f dgetrs.f disnan.f dlabrd.f dlacpy.f dlaisnan.f dlae2.f dlaev2.f dlange.f dlanst.f dlansy.f dlapy2.f dlarf.f dlarfb.f dlarfg.f dlarfp.f dlarft.f dlartg.f dlas2.f dlascl.f dlaset.f dlasq1.f dlasq2.f dlasq3.f dlasq4.f dlasq5.f dlasq6.f dlasr.f dlasrt.f dlassq.f dlaswp.f dlatrd.f dlasv2.f dorg2l.f dorg2r.f dorgbr.f dorglq.f dorgl2.f dorgql.f dorgqr.f dorgtr.f dorm2r.f dormbr.f dorml2.f dormlq.f dormqr.f dpotf2.f dpotrf.f dpotrs.f dsteqr.f dsterf.f dsyev.f dsytd2.f dsytrd.f ieeeck.f iladlc.f iladlr.f ilaenv.f iparmq.f' for file in $lapack_source_files; do AC_CONFIG_LINKS($file:LAPACK/SRC/$file) done diff -Nru coinor-osi-0.102.3/ThirdParty/Lapack/get.Lapack coinor-osi-0.103.0/ThirdParty/Lapack/get.Lapack --- coinor-osi-0.102.3/ThirdParty/Lapack/get.Lapack 2007-08-21 18:13:28.000000000 +0000 +++ coinor-osi-0.103.0/ThirdParty/Lapack/get.Lapack 2010-04-28 15:52:09.000000000 +0000 @@ -2,6 +2,8 @@ set -e +lapack_ver=3.2.1 + wgetcmd=wget wgetcount=`which wget 2>/dev/null | wc -w` if test ! $wgetcount = 1; then @@ -20,18 +22,18 @@ rm -f lapack.tgz echo "Downloading the source code from www.netlib.org..." -$wgetcmd ftp://www.netlib.org/lapack/lapack-lite-3.1.0.tgz +$wgetcmd ftp://www.netlib.org/lapack/lapack-${lapack_ver}.tgz echo "Uncompressing the tarball..." -gunzip -f lapack-lite-3.1.0.tgz +gunzip -f lapack-${lapack_ver}.tgz echo "Unpacking the source code..." -tar xf lapack-lite-3.1.0.tar lapack-3.1.0/SRC lapack-3.1.0/INSTALL/dlamch.f +tar xf lapack-${lapack_ver}.tar lapack-${lapack_ver}/SRC lapack-${lapack_ver}/INSTALL/dlamch.f rm -rf LAPACK -mv lapack-3.1.0 LAPACK +mv lapack-${lapack_ver} LAPACK echo "Deleting the tar file..." -rm lapack-lite-3.1.0.tar +rm lapack-${lapack_ver}.tar echo " " echo "Done downloading the source code for LAPACK." diff -Nru coinor-osi-0.102.3/ThirdParty/Lapack/INSTALL.LAPACK coinor-osi-0.103.0/ThirdParty/Lapack/INSTALL.LAPACK --- coinor-osi-0.102.3/ThirdParty/Lapack/INSTALL.LAPACK 2006-11-27 21:32:10.000000000 +0000 +++ coinor-osi-0.103.0/ThirdParty/Lapack/INSTALL.LAPACK 2010-04-28 15:54:19.000000000 +0000 @@ -19,16 +19,15 @@ obtain the source code (with instructions on how to build it). If you decide to build the LAPACK library according to those instructions, make sure that you tell the configure script where it is (using ---with-lapack="-LPATH/TO/LAPACKLIBDIR -llapack) +--with-lapack="-LPATH/TO/LAPACKLIBDIR -llapack" ) Alternatively, if you want to have the necessary LAPACK routines compiled -within this distribution, please download the 'lapack-lite-3.1.0.tgz' tarball -from http://www.netlib.org/lapack and unpack it in this directory -(COIN/Ipopt/SOURCES/OTHERS/lapack): +within this distribution, please download the 'lapack-3.2.1.tgz' tarball +from http://www.netlib.org/lapack and unpack it in this directory: -gunzip lapack-lite-3.1.0.tgz -tar xf lapack-lite-3.1.0.tar -mv lapack-3.1.0 LAPACK +gunzip lapack-3.2.1.tgz +tar xf lapack-3.2.1.tar +mv lapack-3.2.1 LAPACK The last step is necessary since the projects expect the source code to be in that directory. diff -Nru coinor-osi-0.102.3/ThirdParty/Lapack/Makefile.am coinor-osi-0.103.0/ThirdParty/Lapack/Makefile.am --- coinor-osi-0.102.3/ThirdParty/Lapack/Makefile.am 2009-10-28 02:36:30.000000000 +0000 +++ coinor-osi-0.103.0/ThirdParty/Lapack/Makefile.am 2010-04-28 15:52:09.000000000 +0000 @@ -2,7 +2,7 @@ # All Rights Reserved. # This file is distributed under the Common Public License. -## $Id: Makefile.am 1423 2009-10-28 02:36:30Z andreasw $ +## $Id: Makefile.am 1520 2010-04-28 15:52:09Z stefan $ AUTOMAKE_OPTIONS = foreign @@ -27,10 +27,12 @@ dgetf2.f \ dgetrf.f \ dgetrs.f \ + disnan.f \ dlabrd.f \ dlacpy.f \ dlae2.f \ dlaev2.f \ + dlaisnan.f \ dlamch.f \ dlange.f \ dlanst.f \ @@ -39,6 +41,7 @@ dlarf.f \ dlarfb.f \ dlarfg.f \ + dlarfp.f \ dlarft.f \ dlartg.f \ dlas2.f \ @@ -46,6 +49,8 @@ dlaset.f \ dlasq1.f \ dlasq2.f \ + dlasq3.f \ + dlasq4.f \ dlasq5.f \ dlasq6.f \ dlasr.f \ @@ -54,8 +59,6 @@ dlassq.f \ dlasv2.f \ dlatrd.f \ - dlazq3.f \ - dlazq4.f \ dorg2l.f \ dorg2r.f \ dorgbr.f \ @@ -78,6 +81,8 @@ dsytd2.f \ dsytrd.f \ ieeeck.f \ + iladlc.f \ + iladlr.f \ ilaenv.f \ iparmq.f diff -Nru coinor-osi-0.102.3/ThirdParty/Lapack/Makefile.in coinor-osi-0.103.0/ThirdParty/Lapack/Makefile.in --- coinor-osi-0.102.3/ThirdParty/Lapack/Makefile.in 2009-10-28 02:36:30.000000000 +0000 +++ coinor-osi-0.103.0/ThirdParty/Lapack/Makefile.in 2010-04-28 15:52:09.000000000 +0000 @@ -72,15 +72,16 @@ libcoinlapack_la_LIBADD = am__objects_1 = dbdsqr.lo dgebd2.lo dgebrd.lo dgelq2.lo dgelqf.lo \ dgeqr2.lo dgeqrf.lo dgesvd.lo dgesv.lo dgetf2.lo dgetrf.lo \ - dgetrs.lo dlabrd.lo dlacpy.lo dlae2.lo dlaev2.lo dlamch.lo \ - dlange.lo dlanst.lo dlansy.lo dlapy2.lo dlarf.lo dlarfb.lo \ - dlarfg.lo dlarft.lo dlartg.lo dlas2.lo dlascl.lo dlaset.lo \ - dlasq1.lo dlasq2.lo dlasq5.lo dlasq6.lo dlasr.lo dlasrt.lo \ - dlaswp.lo dlassq.lo dlasv2.lo dlatrd.lo dlazq3.lo dlazq4.lo \ - dorg2l.lo dorg2r.lo dorgbr.lo dorglq.lo dorgl2.lo dorgql.lo \ - dorgqr.lo dorgtr.lo dorm2r.lo dormbr.lo dorml2.lo dormlq.lo \ - dormqr.lo dpotf2.lo dpotrf.lo dpotrs.lo dsteqr.lo dsterf.lo \ - dsyev.lo dsytd2.lo dsytrd.lo ieeeck.lo ilaenv.lo iparmq.lo + dgetrs.lo disnan.lo dlabrd.lo dlacpy.lo dlae2.lo dlaev2.lo \ + dlaisnan.lo dlamch.lo dlange.lo dlanst.lo dlansy.lo dlapy2.lo \ + dlarf.lo dlarfb.lo dlarfg.lo dlarfp.lo dlarft.lo dlartg.lo \ + dlas2.lo dlascl.lo dlaset.lo dlasq1.lo dlasq2.lo dlasq3.lo \ + dlasq4.lo dlasq5.lo dlasq6.lo dlasr.lo dlasrt.lo dlaswp.lo \ + dlassq.lo dlasv2.lo dlatrd.lo dorg2l.lo dorg2r.lo dorgbr.lo \ + dorglq.lo dorgl2.lo dorgql.lo dorgqr.lo dorgtr.lo dorm2r.lo \ + dormbr.lo dorml2.lo dormlq.lo dormqr.lo dpotf2.lo dpotrf.lo \ + dpotrs.lo dsteqr.lo dsterf.lo dsyev.lo dsytd2.lo dsytrd.lo \ + ieeeck.lo iladlc.lo iladlr.lo ilaenv.lo iparmq.lo nodist_libcoinlapack_la_OBJECTS = $(am__objects_1) libcoinlapack_la_OBJECTS = $(nodist_libcoinlapack_la_OBJECTS) @SKIPMAKE_FALSE@am_libcoinlapack_la_rpath = @@ -267,10 +268,12 @@ dgetf2.f \ dgetrf.f \ dgetrs.f \ + disnan.f \ dlabrd.f \ dlacpy.f \ dlae2.f \ dlaev2.f \ + dlaisnan.f \ dlamch.f \ dlange.f \ dlanst.f \ @@ -279,6 +282,7 @@ dlarf.f \ dlarfb.f \ dlarfg.f \ + dlarfp.f \ dlarft.f \ dlartg.f \ dlas2.f \ @@ -286,6 +290,8 @@ dlaset.f \ dlasq1.f \ dlasq2.f \ + dlasq3.f \ + dlasq4.f \ dlasq5.f \ dlasq6.f \ dlasr.f \ @@ -294,8 +300,6 @@ dlassq.f \ dlasv2.f \ dlatrd.f \ - dlazq3.f \ - dlazq4.f \ dorg2l.f \ dorg2r.f \ dorgbr.f \ @@ -318,6 +322,8 @@ dsytd2.f \ dsytrd.f \ ieeeck.f \ + iladlc.f \ + iladlr.f \ ilaenv.f \ iparmq.f