Browse Source

Merge branch 'master' into philippTopologicalRevival

Conflicts:
	CMakeLists.txt

Former-commit-id: b268a0fcd2
main
PBerger 11 years ago
parent
commit
deebd98e2c
  1. 21
      CMakeLists.txt
  2. 33
      resources/3rdparty/glpk-4.53/AUTHORS
  3. 279
      resources/3rdparty/glpk-4.53/CMakeLists.txt
  4. 674
      resources/3rdparty/glpk-4.53/COPYING
  5. 2747
      resources/3rdparty/glpk-4.53/ChangeLog
  6. 209
      resources/3rdparty/glpk-4.53/INSTALL
  7. 7
      resources/3rdparty/glpk-4.53/Makefile.am
  8. 759
      resources/3rdparty/glpk-4.53/Makefile.in
  9. 1741
      resources/3rdparty/glpk-4.53/NEWS
  10. 39
      resources/3rdparty/glpk-4.53/README
  11. 204
      resources/3rdparty/glpk-4.53/THANKS
  12. 949
      resources/3rdparty/glpk-4.53/aclocal.m4
  13. 1537
      resources/3rdparty/glpk-4.53/config.guess
  14. 27
      resources/3rdparty/glpk-4.53/config.h.cmake.in
  15. 27
      resources/3rdparty/glpk-4.53/config.h.in
  16. 1789
      resources/3rdparty/glpk-4.53/config.sub
  17. 13839
      resources/3rdparty/glpk-4.53/configure
  18. 147
      resources/3rdparty/glpk-4.53/configure.ac
  19. 787
      resources/3rdparty/glpk-4.53/depcomp
  20. BIN
      resources/3rdparty/glpk-4.53/doc/cnfsat.pdf
  21. 413
      resources/3rdparty/glpk-4.53/doc/cnfsat.tex
  22. BIN
      resources/3rdparty/glpk-4.53/doc/glpk.pdf
  23. 167
      resources/3rdparty/glpk-4.53/doc/glpk.tex
  24. 343
      resources/3rdparty/glpk-4.53/doc/glpk01.tex
  25. 3428
      resources/3rdparty/glpk-4.53/doc/glpk02.tex
  26. 1572
      resources/3rdparty/glpk-4.53/doc/glpk03.tex
  27. 1385
      resources/3rdparty/glpk-4.53/doc/glpk04.tex
  28. 1090
      resources/3rdparty/glpk-4.53/doc/glpk05.tex
  29. 441
      resources/3rdparty/glpk-4.53/doc/glpk06.tex
  30. 258
      resources/3rdparty/glpk-4.53/doc/glpk07.tex
  31. 738
      resources/3rdparty/glpk-4.53/doc/glpk08.tex
  32. 424
      resources/3rdparty/glpk-4.53/doc/glpk09.tex
  33. 166
      resources/3rdparty/glpk-4.53/doc/glpk10.tex
  34. 203
      resources/3rdparty/glpk-4.53/doc/glpk11.tex
  35. 707
      resources/3rdparty/glpk-4.53/doc/glpk12.tex
  36. BIN
      resources/3rdparty/glpk-4.53/doc/gmpl.pdf
  37. 4295
      resources/3rdparty/glpk-4.53/doc/gmpl.tex
  38. BIN
      resources/3rdparty/glpk-4.53/doc/graphs.pdf
  39. 4150
      resources/3rdparty/glpk-4.53/doc/graphs.tex
  40. 135
      resources/3rdparty/glpk-4.53/doc/miplib2.txt
  41. 143
      resources/3rdparty/glpk-4.53/doc/miplib3.txt
  42. 103
      resources/3rdparty/glpk-4.53/doc/netlib.txt
  43. BIN
      resources/3rdparty/glpk-4.53/doc/notes/dfeas.pdf
  44. BIN
      resources/3rdparty/glpk-4.53/doc/notes/gomory.pdf
  45. BIN
      resources/3rdparty/glpk-4.53/doc/notes/keller.pdf
  46. BIN
      resources/3rdparty/glpk-4.53/doc/notes/scaling.pdf
  47. BIN
      resources/3rdparty/glpk-4.53/doc/notes/updating.pdf
  48. 52
      resources/3rdparty/glpk-4.53/examples/INDEX
  49. 15
      resources/3rdparty/glpk-4.53/examples/Makefile.am
  50. 558
      resources/3rdparty/glpk-4.53/examples/Makefile.in
  51. 77
      resources/3rdparty/glpk-4.53/examples/assign.mod
  52. 83
      resources/3rdparty/glpk-4.53/examples/bpp.mod
  53. 49
      resources/3rdparty/glpk-4.53/examples/cal.mod
  54. 81
      resources/3rdparty/glpk-4.53/examples/cf12a.mod
  55. 88
      resources/3rdparty/glpk-4.53/examples/cf12b.mod
  56. 51
      resources/3rdparty/glpk-4.53/examples/cflsq.mod
  57. 113
      resources/3rdparty/glpk-4.53/examples/color.mod
  58. 44
      resources/3rdparty/glpk-4.53/examples/cplex/README
  59. 121
      resources/3rdparty/glpk-4.53/examples/cplex/concorde.txt
  60. 2130
      resources/3rdparty/glpk-4.53/examples/cplex/cplex.c
  61. 301
      resources/3rdparty/glpk-4.53/examples/cplex/cplex.h
  62. 67
      resources/3rdparty/glpk-4.53/examples/cpp.mod
  63. 84
      resources/3rdparty/glpk-4.53/examples/crypto.mod
  64. 7
      resources/3rdparty/glpk-4.53/examples/csv/distances.csv
  65. 4
      resources/3rdparty/glpk-4.53/examples/csv/markets.csv
  66. 2
      resources/3rdparty/glpk-4.53/examples/csv/parameters.csv
  67. 3
      resources/3rdparty/glpk-4.53/examples/csv/plants.csv
  68. 70
      resources/3rdparty/glpk-4.53/examples/csv/transp_csv.mod
  69. 226
      resources/3rdparty/glpk-4.53/examples/dbf/ForestMgt_Model_I_GIS_dbf.mod
  70. BIN
      resources/3rdparty/glpk-4.53/examples/dbf/Forest_Cost.dbf
  71. BIN
      resources/3rdparty/glpk-4.53/examples/dbf/NetRev_Table.dbf
  72. 2
      resources/3rdparty/glpk-4.53/examples/dbf/README
  73. BIN
      resources/3rdparty/glpk-4.53/examples/dbf/TCost_Table.dbf
  74. BIN
      resources/3rdparty/glpk-4.53/examples/dbf/Yield_Table_Vol.dbf
  75. BIN
      resources/3rdparty/glpk-4.53/examples/dbf/cultural_pres.dbf
  76. BIN
      resources/3rdparty/glpk-4.53/examples/dbf/mgt_year.dbf
  77. BIN
      resources/3rdparty/glpk-4.53/examples/dbf/stands.dbf
  78. BIN
      resources/3rdparty/glpk-4.53/examples/dbf/standtype.dbf
  79. 222
      resources/3rdparty/glpk-4.53/examples/dea.mod
  80. 99
      resources/3rdparty/glpk-4.53/examples/diet.mod
  81. 565
      resources/3rdparty/glpk-4.53/examples/dist.mod
  82. 519
      resources/3rdparty/glpk-4.53/examples/egypt.mod
  83. 93
      resources/3rdparty/glpk-4.53/examples/fctp.mod
  84. 127
      resources/3rdparty/glpk-4.53/examples/food.mod
  85. 150
      resources/3rdparty/glpk-4.53/examples/food2.mod
  86. 79
      resources/3rdparty/glpk-4.53/examples/gap.mod
  87. 10
      resources/3rdparty/glpk-4.53/examples/glpsol.c
  88. 98
      resources/3rdparty/glpk-4.53/examples/graph.mod
  89. 168
      resources/3rdparty/glpk-4.53/examples/hashi.mod
  90. 25
      resources/3rdparty/glpk-4.53/examples/huge.mod
  91. 17
      resources/3rdparty/glpk-4.53/examples/iptsamp.c
  92. 114
      resources/3rdparty/glpk-4.53/examples/jssp.mod
  93. 54
      resources/3rdparty/glpk-4.53/examples/magic.mod
  94. 85
      resources/3rdparty/glpk-4.53/examples/maxcut.mod
  95. 83
      resources/3rdparty/glpk-4.53/examples/maxflow.mod
  96. 62
      resources/3rdparty/glpk-4.53/examples/mfasp.mod
  97. 62
      resources/3rdparty/glpk-4.53/examples/mfvsp.mod
  98. 111
      resources/3rdparty/glpk-4.53/examples/min01ks.mod
  99. 665
      resources/3rdparty/glpk-4.53/examples/misp.mod
  100. 1489
      resources/3rdparty/glpk-4.53/examples/misp1.dat

21
CMakeLists.txt

@ -32,7 +32,6 @@ option(ENABLE_INTELTBB "Sets whether the Intel TBB is available." OFF)
option(STORM_USE_COTIRE "Sets whether Cotire should be used (for building precompiled headers)." OFF)
option(LINK_LIBCXXABI "Sets whether libc++abi should be linked." OFF)
option(USE_LIBCXX "Sets whether the standard library is libc++." OFF)
option(ENABLE_GLPK "Sets whether StoRM is built with support for glpk." OFF)
option(ENABLE_CUDAFORSTORM "Sets whether StoRM is built with its CUDA extension." OFF)
set(GUROBI_ROOT "" CACHE STRING "The root directory of Gurobi (if available).")
set(Z3_ROOT "" CACHE STRING "The root directory of Z3 (if available).")
@ -178,11 +177,7 @@ else()
endif()
# glpk defines
if (ENABLE_GLPK)
set(STORM_CPP_GLPK_DEF "define")
else()
set(STORM_CPP_GLPK_DEF "undef")
endif()
set(STORM_CPP_GLPK_DEF "define")
# CUDA Defines
if (ENABLE_CUDAFORSTORM)
@ -384,15 +379,15 @@ endif(ENABLE_GUROBI)
#############################################################
##
## glpk (optional)
## glpk
##
#############################################################
if (ENABLE_GLPK)
message (STATUS "StoRM - Linking with glpk")
target_link_libraries(storm "glpk")
target_link_libraries(storm-functional-tests "glpk")
target_link_libraries(storm-performance-tests "glpk")
endif(ENABLE_GLPK)
message (STATUS "StoRM - Linking with glpk")
add_subdirectory("${PROJECT_SOURCE_DIR}/resources/3rdparty/glpk-4.53")
include_directories("${PROJECT_SOURCE_DIR}/resources/3rdparty/glpk-4.53/src")
target_link_libraries(storm "glpk")
target_link_libraries(storm-functional-tests "glpk")
target_link_libraries(storm-performance-tests "glpk")
#############################################################
##

33
resources/3rdparty/glpk-4.53/AUTHORS

@ -0,0 +1,33 @@
The GLPK package was developed and programmed by Andrew Makhorin,
Department for Applied Informatics, Moscow Aviation Institute, Moscow,
Russia.
E-mail: <mao@gnu.org>
Paper mail: 125871, Russia, Moscow, Volokolamskoye sh., 4,
Moscow Aviation Institute, Andrew O. Makhorin
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.2.2 (MingW32)
mQGiBD8UdT8RBAC6yWYxoa1b7U973J0jBuQpgZnhXlGJJpMZgAW9efDBD17vhkJm
hPVOQBKRUeOOLcW3/a7NMoNLMdmF1Rgz1FPVy3RgBDsYj4Sp4RBCsX/o0xXh+jxe
gncr4bdN0Ruk03pezVtLi9oYygdxfI51SsjZ2vwYP6BhMwv+xrIgcnc4qwCgoCit
26mTd0FoGOmsQuipo6X5LaUD/1l7NqFIjiGdWthyG3TqsiK5Ew7xF3fLEABXKPjb
PMRTMucX8XXHmW8RUD1vP1uGDnEn6s+fjc3/RtaqKjqGMdLt4XgHQkImaVguNpSS
IxN3LaK600BgAbwSd1bomRqWNlczAM7469VvGG9ASpCBveUUrqwerHZcUbvngL62
pIcqA/41dO0xYrOTqMRhuguYMgHL2xbwB2Aj2TqRwBm697DIS25B9nE+8UsbjGRx
q3EmeuHeZ5kN5RbESXkGUB8whIcYxvH16HRNmM1ZjmFoBVL2Z6S2gpa2ZUqsq7BZ
s+hriElm3dfOQCt79/o852uKWu5bSjw2yiemVA2T8tG4OoN6DrQjQW5kcmV3IE1h
a2hvcmluIDxtYW9AbWFpMi5yY25ldC5ydT6IWwQTEQIAGwUCPxR1PwYLCQgHAwID
FQIDAxYCAQIeAQIXgAAKCRDRe/IwWYHoGKpHAJ44MmzWKr8OiTc0Bb6/RD56aekp
3wCdGznQMCfWFkehQPbeNaB5yFIs+8a5AQ0EPxR1UBAEAO3U3H5M0iYv06C4kKty
6ReWyYH4CzMAfp2lPVUKzRSjPtoAJ6SkrBSKMT+U+DahxZ4K4HbinvHq3uvlwWax
xw0wKxJl4oY6EGE1Jqn3B//Ak47RaNMnrs9V739WT1YNRpQvh4wOCeMekBzksf43
hm4dSV4PMQkLmrEeG2+BYaZnAAMFA/4tVHhjGRkxzcTcfHCB+Yo3PXeIQMuIs00c
VKCrNReLni/3BWZC0w9tFzZSdz+URXefPWDGuAC16vLCVOD06NcIQGutPe189dUn
Kf9Bl6qc9DyWsxSTdF/PbLqcLfEe9g7fHhIwdY+w/hSq2n3NEURMzHiMT1U3CvHd
As5IzV/yD4hGBBgRAgAGBQI/FHVQAAoJENF78jBZgegYRZEAmwReJkMSrbs0EQs2
wjyTCMd5KDh3AKCR2/RvVad9RT3ShYnUiPPYTL2/Nw==
=OfLQ
-----END PGP PUBLIC KEY BLOCK-----

279
resources/3rdparty/glpk-4.53/CMakeLists.txt

@ -0,0 +1,279 @@
cmake_minimum_required (VERSION 2.8.6)
# Set project name
project (glpk CXX C)
# Add the resources/cmake folder to Module Search Path for FindMySQL.cmake
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/resources/")
# Add base folder for better inclusion paths
include_directories("${PROJECT_SOURCE_DIR}")
include_directories("${PROJECT_SOURCE_DIR}/src")
include_directories("${PROJECT_SOURCE_DIR}/src/amd")
include_directories("${PROJECT_SOURCE_DIR}/src/bflib")
include_directories("${PROJECT_SOURCE_DIR}/src/cglib")
include_directories("${PROJECT_SOURCE_DIR}/src/colamd")
include_directories("${PROJECT_SOURCE_DIR}/src/env")
include_directories("${PROJECT_SOURCE_DIR}/src/minisat")
include_directories("${PROJECT_SOURCE_DIR}/src/misc")
include_directories("${PROJECT_SOURCE_DIR}/src/proxy")
include_directories("${PROJECT_SOURCE_DIR}/src/zlib")
#############################################################
##
## CMake options of GLPK
##
#############################################################
option(WITH_GLPK_EXAMPLES "Also build examples and standalone executables" OFF)
option(WITH_GMP "Use GNU MO bignum library" OFF)
option(ENABLE_DL "Enable shared library support" OFF)
option(ENABLE_ODBC "Enable MathProg ODBC support" OFF)
option(ENABLE_MYSQL "Enable MathProg MySQL support" OFF)
option(DEBUG "Sets whether the DEBUG mode is used" OFF)
set(ADDITIONAL_INCLUDE_DIRS "" CACHE STRING "Additional directories added to the include directories.")
set(ADDITIONAL_LINK_DIRS "" CACHE STRING "Additional directories added to the link directories.")
# If the DEBUG option was turned on, we will target a debug version and a release version otherwise
if (DEBUG)
set (CMAKE_BUILD_TYPE "DEBUG")
else()
set (CMAKE_BUILD_TYPE "RELEASE")
endif()
message(STATUS "GLPK - Building ${CMAKE_BUILD_TYPE} version.")
message(STATUS "GLPK - CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}")
message(STATUS "GLPK - CMAKE_BUILD_TYPE (ENV): $ENV{CMAKE_BUILD_TYPE}")
#############################################################
##
## Compiler specific settings and definitions
##
#############################################################
if(CMAKE_COMPILER_IS_GNUCC)
message(STATUS "GLPK - Using Compiler Configuration: GCC")
# Set standard flags for GCC
set(CMAKE_C_FLAGS "${CMAKE_CXX_FLAGS} -Wno-return-type")
add_definitions(-DHAVE_CONFIG_H=1)
elseif(MSVC)
message(STATUS "GLPK - Using Compiler Configuration: MSVC")
add_definitions(/D_SCL_SECURE_NO_DEPRECATE /D_CRT_SECURE_NO_WARNINGS)
add_definitions(/D_VARIADIC_MAX=10)
add_definitions(/DNOMINMAX)
add_definitions(/DHAVE_CONFIG_H=1)
else(CLANG)
message(STATUS "GLPK - Using Compiler Configuration: Clang (LLVM)")
# As CLANG is not set as a variable, we need to set it in case we have not matched another compiler.
set (CLANG ON)
# Set standard flags for clang
set (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -funroll-loops -O3")
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-return-type -Wno-return-type-c-linkage -Wno-unused-variable")
set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -g")
add_definitions(-DHAVE_CONFIG_H=1)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -version-info=37:0:1 -export-symbols-regex='^glp_*'")
endif()
#############################################################
##
## CMake-generated Config File for GLPK
##
#############################################################
include(CheckIncludeFiles)
include(CheckFunctionExists)
CHECK_INCLUDE_FILES(sys/time.h HAVE_SYS_TIME_H)
CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
CHECK_INCLUDE_FILES(ltdl.h HAVE_LTDL)
CHECK_INCLUDE_FILES(dlfcn.h HAVE_DLFCN)
if(WITH_GMP)
message(STATUS "GLPK - Building with GMP Support")
CHECK_INCLUDE_FILE(gmp.h HAVE_GMP_H)
if (NOT HAVE_GMP_H)
message(SEND_ERROR "Could not find gmp.h!")
endif()
set(GLPK_HAVE_GMP "define")
else()
set(GLPK_HAVE_GMP "undef")
endif()
if (UNIX AND NOT APPLE)
set(LIBIODBC "libiodbc.so")
set(LIBODBC "libodbc.so")
set(LIBMYSQL "libmysqlclient.so")
elseif(UNIX AND APPLE)
set(LIBIODBC "libiodbc.dylib")
set(LIBODBC "libodbc.dylib")
set(LIBMYSQL "libmysqlclient.dylib")
elseif(MSVC)
set(LIBIODBC "odbc32.lib")
set(LIBODBC "odbc32.lib")
set(LIBMYSQL "mysqlclient.lib")
endif()
if(ENABLE_ODBC)
message(STATUS "GLPK - Building with ODBC Support")
find_package(ODBC REQUIRED)
if (NOT ENABLE_DL)
message(SEND_ERROR "ENABLE_ODBC required ENABLE_DL")
endif()
include_directories(ODBC_INCLUDE_DIRECTORIES)
set(GLPK_HAVE_ODBC "define")
set(GLPK_ODBC_DLNAME "${ODBC_LIBRARIES}")
else()
set(GLPK_HAVE_ODBC "undef")
set(GLPK_ODBC_DLNAME "")
endif()
if(ENABLE_MYSQL)
message(STATUS "GLPK - Building with MySQL Support")
find_package(MySQL REQUIRED)
if (NOT ENABLE_DL)
message(SEND_ERROR "ENABLE_MYSQL required ENABLE_DL")
endif()
include_directories(MYSQL_INCLUDE_DIR)
set(GLPK_HAVE_MYSQL "define")
set(GLPK_MYSQL_DLNAME "${MYSQL_LIBRARIES}")
else()
set(GLPK_HAVE_MYSQL "undef")
set(GLPK_MYSQL_DLNAME "")
endif()
# Convert to CMake Variables to be used in the Config File
if(HAVE_SYS_TIME_H)
set(GLPK_HAVE_SYS_TIME_H "define")
else()
set (GLPK_HAVE_SYS_TIME_H "undef")
endif()
if(HAVE_GETTIMEOFDAY)
set(GLPK_HAVE_GETTIMEOFDAY "define")
else()
set (GLPK_HAVE_GETTIMEOFDAY "undef")
endif()
if(HAVE_LTDL)
set(GLPK_HAVE_LTDL "define")
else()
set (GLPK_HAVE_LTDL "undef")
endif()
if(HAVE_DLFCN)
set(GLPK_HAVE_DLFCN "define")
else()
set (GLPK_HAVE_DLFCN "undef")
endif()
# Configure a header file to pass some of the CMake settings to the source code
configure_file (
"${PROJECT_SOURCE_DIR}/config.h.cmake.in"
"${PROJECT_BINARY_DIR}/include/config.h"
)
# Add the binary dir include directory for config.h
include_directories("${PROJECT_BINARY_DIR}/include")
#############################################################
##
## Source file aggregation and clustering
##
#############################################################
file(GLOB_RECURSE GLPK_LIB_HEADERS ${PROJECT_SOURCE_DIR}/src/*.h)
file(GLOB_RECURSE GLPK_LIB_SOURCES ${PROJECT_SOURCE_DIR}/src/*.c)
file(GLOB_RECURSE GLPK_LIB_DEF ${PROJECT_SOURCE_DIR}/w64/*.def)
set(GLPK_EXAMPLE_GLPSOL_SOURCES ${PROJECT_SOURCE_DIR}/examples/glpsol.c)
set(GLPK_EXAMPLE_IPTSAMP_SOURCES ${PROJECT_SOURCE_DIR}/examples/iptsamp.c)
set(GLPK_EXAMPLE_MPLSAMP1_SOURCES ${PROJECT_SOURCE_DIR}/examples/mplsamp1.c)
set(GLPK_EXAMPLE_MPLSAMP2_SOURCES ${PROJECT_SOURCE_DIR}/examples/mplsamp2.c)
set(GLPK_EXAMPLE_SAMPLE_SOURCES ${PROJECT_SOURCE_DIR}/examples/sample.c)
set(GLPK_EXAMPLE_SPXSAMP1_SOURCES ${PROJECT_SOURCE_DIR}/examples/spxsamp1.c)
set(GLPK_EXAMPLE_SPXSAMP2_SOURCES ${PROJECT_SOURCE_DIR}/examples/spxsamp2.c)
set(GLPK_EXAMPLE_NETGEN_SOURCES ${PROJECT_SOURCE_DIR}/examples/netgen.c)
# Additional include files like the storm-config.h
file(GLOB_RECURSE GLPK_BUILD_HEADERS ${PROJECT_BINARY_DIR}/include/*.h)
# Add custom additional include or link directories
if (ADDITIONAL_INCLUDE_DIRS)
message(STATUS "GLPK - Using additional include directories ${ADDITIONAL_INCLUDE_DIRS}")
include_directories(${ADDITIONAL_INCLUDE_DIRS})
endif(ADDITIONAL_INCLUDE_DIRS)
if (ADDITIONAL_LINK_DIRS)
message(STATUS "GLPK - Using additional link directories ${ADDITIONAL_LINK_DIRS}")
link_directories(${ADDITIONAL_LINK_DIRS})
endif(ADDITIONAL_LINK_DIRS)
###############################################################################
## #
## Executable Creation #
## #
## All link_directories() calls MUST be made before this point #
## #
###############################################################################
if(WITH_GLPK_EXAMPLES)
add_executable(glpsol ${GLPK_EXAMPLE_GLPSOL_SOURCES})
add_executable(iptsamp ${GLPK_EXAMPLE_IPTSAMP_SOURCES})
add_executable(mplsamp1 ${GLPK_EXAMPLE_MPLSAMP1_SOURCES})
add_executable(mplsamp2 ${GLPK_EXAMPLE_MPLSAMP2_SOURCES})
add_executable(spxsamp1 ${GLPK_EXAMPLE_SPXSAMP1_SOURCES})
add_executable(spxsamp2 ${GLPK_EXAMPLE_SPXSAMP2_SOURCES})
add_executable(netgen ${GLPK_EXAMPLE_NETGEN_SOURCES})
add_executable(sample ${GLPK_EXAMPLE_SAMPLE_SOURCES})
endif()
if(ENABLE_DL)
set(GLPK_BUILD_TYPE SHARED)
else()
set(GLPK_BUILD_TYPE STATIC)
endif()
if (NOT MSVC)
set(GLPK_LIB_DEF "")
endif()
add_library(glpk ${GLPK_BUILD_TYPE} ${GLPK_LIB_SOURCES} ${GLPK_LIB_HEADERS} ${GLPK_LIB_DEF})
IF(UNIX)
target_link_libraries(glpk m)
ENDIF(UNIX)
if(HAVE_LTDL)
target_link_libraries(glpk ltdl)
endif(HAVE_LTDL)
if(HAVE_DLFCN)
target_link_libraries(glpk dl)
endif(HAVE_DLFCN)
if(WITH_GLPK_EXAMPLES)
# Dependency for the Executable
add_dependencies(glpsol glpk)
add_dependencies(iptsamp glpk)
add_dependencies(mplsamp1 glpk)
add_dependencies(mplsamp2 glpk)
add_dependencies(spxsamp1 glpk)
add_dependencies(spxsamp2 glpk)
add_dependencies(netgen glpk)
add_dependencies(sample glpk)
target_link_libraries(glpsol glpk)
target_link_libraries(iptsamp glpk)
target_link_libraries(mplsamp1 glpk)
target_link_libraries(mplsamp2 glpk)
target_link_libraries(spxsamp1 glpk)
target_link_libraries(spxsamp2 glpk)
target_link_libraries(netgen glpk)
target_link_libraries(sample glpk)
endif()
#############################################################
##
## ODBC
##
#############################################################
if(ODBC_FOUND)
target_link_libraries(glpk ${ODBC_LIBRARIES})
endif()
#############################################################
##
## MySQL
##
#############################################################
if(MYSQL_FOUND)
target_link_libraries(glpk ${MYSQL_LIBRARIES})
endif()

674
resources/3rdparty/glpk-4.53/COPYING

@ -0,0 +1,674 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.

2747
resources/3rdparty/glpk-4.53/ChangeLog
File diff suppressed because it is too large
View File

209
resources/3rdparty/glpk-4.53/INSTALL

@ -0,0 +1,209 @@
INSTALLING GLPK ON YOUR COMPUTER
********************************
Unpacking the distribution file
-------------------------------
The GLPK package (like all other GNU software) is distributed in the
form of a packed archive. It is one file named `glpk-X.Y.tar.gz', where
`X' is the major version number and `Y' is the minor version number;
for example, the archive name might be `glpk-4.15.tar.gz'.
In order to prepare the distribution for installation you should:
1. Copy the GLPK distribution file to a working directory.
2. Unpack the distribution file with the following command:
gzip -d glpk-X.Y.tar.gz
After unpacking the distribution file is automatically renamed to
`glpk-X.Y.tar'.
3. Unarchive the distribution file with the following command:
tar -x < glpk-X.Y.tar
It automatically creates the subdirectory `glpk-X.Y' containing the
GLPK distribution.
Configuring the package
-----------------------
After unpacking and unarchiving the GLPK distribution you should
configure the package, i.e. automatically tune it for your platform.
Normally, you should just `cd' to the directory `glpk-X.Y' and run the
`configure' script, e.g.
./configure
The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses
those values to create a `Makefile' in each directory of the package.
It also creates file `config.h' containing platform-dependent
definitions. Finally, it creates a shell script `config.status' that
you can run in the future to recreate the current configuration, a file
`config.cache' that saves the results of its tests to speed up
reconfiguring, and a file `config.log' containing compiler output
(useful mainly for debugging `configure').
Running `configure' takes about a few seconds. While it is running, it
displays some messages that tell you what it is doing. If you don't want
to see the messages, run `configure' with its standard output redirected
to `dev/null'; for example, `./configure > /dev/null'.
By default both static and shared versions of the GLPK library will be
compiled. Compilation of the shared librariy can be turned off by
specifying the `--disable-shared' option to `configure', e.g.
./configure --disable-shared
If you encounter problems building the library try using the above
option, because some platforms do not support shared libraries.
The GLPK package has some optional features listed below. By default
all these features are disabled. To enable a feature the corresponding
option should be passed to the configure script.
--with-gmp Enable using the GNU MP bignum library
This feature allows the exact simplex solver to use the GNU MP
bignum library. If it is disabled, the exact simplex solver uses the
GLPK bignum module, which provides the same functionality as GNU MP,
however, it is much less efficient.
For details about the GNU MP bignum library see its web page at
<http://gmplib.org/>.
--with-zlib Enable using the zlib data compression library
This feature allows GLPK API routines and the stand-alone solver to
read and write compressed data files performing compression and
decompression "on the fly" (compressed data files are recognized by
suffix `.gz' in the file name). It may be useful in case of large
MPS files to save the disk space.
For details about the zlib compression library see its web page at
<http://www.zlib.net/>.
--enable-dl The same as --enable-dl=ltdl
--enable-dl=ltdl Enable shared library support (GNU)
--enable-dl=dlfcn Enable shared library support (POSIX)
Currently this feature is only needed to provide dynamic linking to
ODBC and MySQL shared libraries (see below).
For details about the GNU shared library support see the manual at
<http://www.gnu.org/software/libtool/manual/>.
--enable-odbc Enable using ODBC table driver (libiodbc)
--enable-odbc=unix Enable using ODBC table driver (libodbc)
This feature allows transmitting data between MathProg model objects
and relational databases accessed through ODBC.
For more details about this feature see the supplement "Using Data
Tables in the GNU MathProg Modeling Language" (doc/tables.*).
--enable-mysql Enable using MySQL table driver (libmysql)
This feature allows transmitting data between MathProg model objects
and MySQL relational databases.
For more details about this feature see the supplement "Using Data
Tables in the GNU MathProg Modeling Language" (doc/tables.*).
Compiling the package
---------------------
Normally, you can compile (build) the package by typing the command:
make
It reads `Makefile' generated by `configure' and performs all necessary
jobs.
If you want, you can override the `make' variables CFLAGS and LDFLAGS
like this:
make CFLAGS=-O2 LDFLAGS=-s
To compile the package in a different directory from the one containing
the source code, you must use a version of `make' that supports `VPATH'
variable, such as GNU `make'. `cd' to the directory where you want the
object files and executables to go and run the `configure' script.
`configure' automatically checks for the source code in the directory
that `configure' is in and in `..'. If for some reason `configure' is
not in the source code directory that you are configuring, then it will
report that it can't find the source code. In that case, run `configure'
with the option `--srcdir=DIR', where DIR is the directory that contains
the source code.
Some systems require unusual options for compilation or linking that
the `configure' script does not know about. You can give `configure'
initial values for variables by setting them in the environment. Using
a Bourne-compatible shell, you can do that on the command line like
this:
CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
Or on systems that have the `env' program, you can do it like this:
env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
Here are the `make' variables that you might want to override with
environment variables when running `configure'.
For these variables, any value given in the environment overrides the
value that `configure' would choose:
CC: C compiler program. The default is `cc'.
INSTALL: Program used to install files. The default value is `install'
if you have it, otherwise `cp'.
For these variables, any value given in the environment is added to the
value that `configure' chooses:
DEFS: Configuration options, in the form `-Dfoo -Dbar ...'.
LIBS: Libraries to link with, in the form `-lfoo -lbar ...'.
Checking the package
--------------------
To check the package, i.e. to run some tests included in the package,
you can use the following command:
make check
Installing the package
----------------------
Normally, to install the GLPK package you should type the following
command:
make install
By default, `make install' will install the package's files in
`usr/local/bin', `usr/local/lib', etc. You can specify an installation
prefix other than `/usr/local' by giving `configure' the option
`--prefix=PATH'. Alternately, you can do so by consistently giving a
value for the `prefix' variable when you run `make', e.g.
make prefix=/usr/gnu
make prefix=/usr/gnu install
After installing you can remove the program binaries and object files
from the source directory by typing `make clean'. To remove all files
that `configure' created (`Makefile', `config.status', etc.), just type
`make distclean'.
The file `configure.ac' is used to create `configure' by a program
called `autoconf'. You only need it if you want to remake `configure'
using a newer version of `autoconf'.
Uninstalling the package
------------------------
To uninstall the GLPK package, i.e. to remove all the package's files
from the system places, you can use the following command:
make uninstall
========================================================================

7
resources/3rdparty/glpk-4.53/Makefile.am

@ -0,0 +1,7 @@
## Process this file with automake to produce Makefile.in ##
ACLOCAL_AMFLAGS=-I m4
SUBDIRS = src examples
## eof ##

759
resources/3rdparty/glpk-4.53/Makefile.in

@ -0,0 +1,759 @@
# Makefile.in generated by automake 1.12.5 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2012 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
am__make_dryrun = \
{ \
am__dry=no; \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \
*) \
for am__flg in $$MAKEFLAGS; do \
case $$am__flg in \
*=*|--*) ;; \
*n*) am__dry=yes; break;; \
esac; \
done;; \
esac; \
test $$am__dry = yes; \
}
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = .
DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in $(srcdir)/config.h.in \
$(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \
THANKS config.guess config.sub install-sh ltmain.sh missing
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
configure.lineno config.status.lineno
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
SOURCES =
DIST_SOURCES =
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
html-recursive info-recursive install-data-recursive \
install-dvi-recursive install-exec-recursive \
install-html-recursive install-info-recursive \
install-pdf-recursive install-ps-recursive install-recursive \
installcheck-recursive installdirs-recursive pdf-recursive \
ps-recursive uninstall-recursive
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
distclean-recursive maintainer-clean-recursive
AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
cscope distdir dist dist-all distcheck
ETAGS = etags
CTAGS = ctags
CSCOPE = cscope
DIST_SUBDIRS = $(SUBDIRS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir)
am__remove_distdir = \
if test -d "$(distdir)"; then \
find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
&& rm -rf "$(distdir)" \
|| { sleep 5 && rm -rf "$(distdir)"; }; \
else :; fi
am__post_remove_distdir = $(am__remove_distdir)
am__relativize = \
dir0=`pwd`; \
sed_first='s,^\([^/]*\)/.*$$,\1,'; \
sed_rest='s,^[^/]*/*,,'; \
sed_last='s,^.*/\([^/]*\)$$,\1,'; \
sed_butlast='s,/*[^/]*$$,,'; \
while test -n "$$dir1"; do \
first=`echo "$$dir1" | sed -e "$$sed_first"`; \
if test "$$first" != "."; then \
if test "$$first" = ".."; then \
dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
else \
first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
if test "$$first2" = "$$first"; then \
dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
else \
dir2="../$$dir2"; \
fi; \
dir0="$$dir0"/"$$first"; \
fi; \
fi; \
dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
done; \
reldir="$$dir2"
DIST_ARCHIVES = $(distdir).tar.gz
GZIP_ENV = --best
DIST_TARGETS = dist-gzip
distuninstallcheck_listfiles = find . -type f -print
am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
| sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
distcleancheck_listfiles = find . -type f -print
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
ACLOCAL_AMFLAGS = -I m4
SUBDIRS = src examples
all: config.h
$(MAKE) $(AM_MAKEFLAGS) all-recursive
.SUFFIXES:
am--refresh: Makefile
@:
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \
$(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
echo ' $(SHELL) ./config.status'; \
$(SHELL) ./config.status;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
$(SHELL) ./config.status --recheck
$(top_srcdir)/configure: $(am__configure_deps)
$(am__cd) $(srcdir) && $(AUTOCONF)
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
$(am__aclocal_m4_deps):
config.h: stamp-h1
@if test ! -f $@; then rm -f stamp-h1; else :; fi
@if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi
stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
@rm -f stamp-h1
cd $(top_builddir) && $(SHELL) ./config.status config.h
$(srcdir)/config.h.in: $(am__configure_deps)
($(am__cd) $(top_srcdir) && $(AUTOHEADER))
rm -f stamp-h1
touch $@
distclean-hdr:
-rm -f config.h stamp-h1
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
distclean-libtool:
-rm -f libtool config.lt
# This directory's subdirectories are mostly independent; you can cd
# into them and run 'make' without going through this Makefile.
# To change the values of 'make' variables: instead of editing Makefiles,
# (1) if the variable is set in 'config.status', edit 'config.status'
# (which will cause the Makefiles to be regenerated when you run 'make');
# (2) otherwise, pass the desired values on the 'make' command line.
$(RECURSIVE_TARGETS) $(RECURSIVE_CLEAN_TARGETS):
@fail= failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
case "$@" in \
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
*) list='$(SUBDIRS)' ;; \
esac; \
for subdir in $$list; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
dot_seen=yes; \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
done; \
if test "$$dot_seen" = "no"; then \
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
fi; test -z "$$fail"
tags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
done
ctags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
done
cscopelist-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \
done
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
set x; \
here=`pwd`; \
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
include_option=--etags-include; \
empty_fix=.; \
else \
include_option=--include; \
empty_fix=; \
fi; \
list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test ! -f $$subdir/TAGS || \
set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
fi; \
done; \
list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
if test $$# -gt 0; then \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi
ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
cscope: cscope.files
test ! -s cscope.files \
|| $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
clean-cscope:
-rm -f cscope.files
cscope.files: clean-cscope cscopelist-recursive cscopelist
cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP)
list='$(SOURCES) $(HEADERS) $(LISP)'; \
case "$(srcdir)" in \
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
*) sdir=$(subdir)/$(srcdir) ;; \
esac; \
for i in $$list; do \
if test -f "$$i"; then \
echo "$(subdir)/$$i"; \
else \
echo "$$sdir/$$i"; \
fi; \
done >> $(top_builddir)/cscope.files
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-rm -f cscope.out cscope.in.out cscope.po.out cscope.files
distdir: $(DISTFILES)
$(am__remove_distdir)
test -d "$(distdir)" || mkdir "$(distdir)"
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
$(am__make_dryrun) \
|| test -d "$(distdir)/$$subdir" \
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|| exit 1; \
dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
$(am__relativize); \
new_distdir=$$reldir; \
dir1=$$subdir; dir2="$(top_distdir)"; \
$(am__relativize); \
new_top_distdir=$$reldir; \
echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
($(am__cd) $$subdir && \
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="$$new_top_distdir" \
distdir="$$new_distdir" \
am__remove_distdir=: \
am__skip_length_check=: \
am__skip_mode_fix=: \
distdir) \
|| exit 1; \
fi; \
done
-test -n "$(am__skip_mode_fix)" \
|| find "$(distdir)" -type d ! -perm -755 \
-exec chmod u+rwx,go+rx {} \; -o \
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
|| chmod -R a+r "$(distdir)"
dist-gzip: distdir
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
$(am__post_remove_distdir)
dist-bzip2: distdir
tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
$(am__post_remove_distdir)
dist-lzip: distdir
tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
$(am__post_remove_distdir)
dist-xz: distdir
tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
$(am__post_remove_distdir)
dist-tarZ: distdir
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
$(am__post_remove_distdir)
dist-shar: distdir
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
$(am__post_remove_distdir)
dist-zip: distdir
-rm -f $(distdir).zip
zip -rq $(distdir).zip $(distdir)
$(am__post_remove_distdir)
dist dist-all:
$(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
$(am__post_remove_distdir)
# This target untars the dist file and tries a VPATH configuration. Then
# it guarantees that the distribution is self-contained by making another
# tarfile.
distcheck: dist
case '$(DIST_ARCHIVES)' in \
*.tar.gz*) \
GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
*.tar.bz2*) \
bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
*.tar.lz*) \
lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
*.tar.xz*) \
xz -dc $(distdir).tar.xz | $(am__untar) ;;\
*.tar.Z*) \
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
*.shar.gz*) \
GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
*.zip*) \
unzip $(distdir).zip ;;\
esac
chmod -R a-w $(distdir)
chmod u+w $(distdir)
mkdir $(distdir)/_build $(distdir)/_inst
chmod a-w $(distdir)
test -d $(distdir)/_build || exit 0; \
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
&& am__cwd=`pwd` \
&& $(am__cd) $(distdir)/_build \
&& ../configure --srcdir=.. --prefix="$$dc_install_base" \
$(AM_DISTCHECK_CONFIGURE_FLAGS) \
$(DISTCHECK_CONFIGURE_FLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
&& $(MAKE) $(AM_MAKEFLAGS) check \
&& $(MAKE) $(AM_MAKEFLAGS) install \
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
&& $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
distuninstallcheck \
&& chmod -R a-w "$$dc_install_base" \
&& ({ \
(cd ../.. && umask 077 && mkdir "$$dc_destdir") \
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
} || { rm -rf "$$dc_destdir"; exit 1; }) \
&& rm -rf "$$dc_destdir" \
&& $(MAKE) $(AM_MAKEFLAGS) dist \
&& rm -rf $(DIST_ARCHIVES) \
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
&& cd "$$am__cwd" \
|| exit 1
$(am__post_remove_distdir)
@(echo "$(distdir) archives ready for distribution: "; \
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
distuninstallcheck:
@test -n '$(distuninstallcheck_dir)' || { \
echo 'ERROR: trying to run $@ with an empty' \
'$$(distuninstallcheck_dir)' >&2; \
exit 1; \
}; \
$(am__cd) '$(distuninstallcheck_dir)' || { \
echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
exit 1; \
}; \
test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
|| { echo "ERROR: files left after uninstall:" ; \
if test -n "$(DESTDIR)"; then \
echo " (check DESTDIR support)"; \
fi ; \
$(distuninstallcheck_listfiles) ; \
exit 1; } >&2
distcleancheck: distclean
@if test '$(srcdir)' = . ; then \
echo "ERROR: distcleancheck can only run from a VPATH build" ; \
exit 1 ; \
fi
@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
|| { echo "ERROR: files left in build directory after distclean:" ; \
$(distcleancheck_listfiles) ; \
exit 1; } >&2
check-am: all-am
check: check-recursive
all-am: Makefile config.h
installdirs: installdirs-recursive
installdirs-am:
install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-recursive
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-recursive
clean-am: clean-generic clean-libtool mostlyclean-am
distclean: distclean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -f Makefile
distclean-am: clean-am distclean-generic distclean-hdr \
distclean-libtool distclean-tags
dvi: dvi-recursive
dvi-am:
html: html-recursive
html-am:
info: info-recursive
info-am:
install-data-am:
install-dvi: install-dvi-recursive
install-dvi-am:
install-exec-am:
install-html: install-html-recursive
install-html-am:
install-info: install-info-recursive
install-info-am:
install-man:
install-pdf: install-pdf-recursive
install-pdf-am:
install-ps: install-ps-recursive
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -rf $(top_srcdir)/autom4te.cache
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-recursive
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
pdf: pdf-recursive
pdf-am:
ps: ps-recursive
ps-am:
uninstall-am:
.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \
cscopelist-recursive ctags-recursive install-am install-strip \
tags-recursive
.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
all all-am am--refresh check check-am clean clean-cscope \
clean-generic clean-libtool cscope cscopelist \
cscopelist-recursive ctags ctags-recursive dist dist-all \
dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ dist-xz \
dist-zip distcheck distclean distclean-generic distclean-hdr \
distclean-libtool distclean-tags distcleancheck distdir \
distuninstallcheck dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
install-pdf install-pdf-am install-ps install-ps-am \
install-strip installcheck installcheck-am installdirs \
installdirs-am maintainer-clean maintainer-clean-generic \
mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
ps ps-am tags tags-recursive uninstall uninstall-am
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

1741
resources/3rdparty/glpk-4.53/NEWS
File diff suppressed because it is too large
View File

39
resources/3rdparty/glpk-4.53/README

@ -0,0 +1,39 @@
Olga K. gewidmet
GLPK (GNU Linear Programming Kit) Version 4.53
Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
2009, 2010, 2011, 2013, 2014 Andrew Makhorin, Department for Applied
Informatics, Moscow Aviation Institute, Moscow, Russia. All rights
reserved. E-mail: <mao@gnu.org>.
GLPK is part of the GNU Project released under the aegis of GNU.
GLPK is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation, either version 3 of the License, or (at your
option) any later version.
See the file COPYING for the GNU General Public License.
See the file INSTALL for compilation and installation instructions.
The GLPK package is a set of routines written in ANSI C and organized
in the form of a callable library. This package is intended for solving
large-scale linear programming (LP), mixed integer linear programming
(MIP), and other related problems.
The GLPK package includes the following main components:
* implementation of the simplex method;
* implementation of the exact simplex method based on bignum (rational)
arithmetic;
* implementation of the primal-dual interior-point method;
* implementation of the branch-and-cut method;
* application program interface (API);
* GNU MathProg modeling language (a subset of AMPL);
* GLPSOL, a stand-alone LP/MIP solver.
See GLPK webpage <http://www.gnu.org/software/glpk/glpk.html>.
Please report bugs to <bug-glpk@gnu.org>.

204
resources/3rdparty/glpk-4.53/THANKS

@ -0,0 +1,204 @@
Achim Gaedke <achim.gaedke@gmail.com> for bug report.
Alexandre Oliva <oliva@lsd.ic.unicamp.br> for bug report.
Andre Girard <andre@inrs-emt.uquebec.ca> for bug report.
Andrew Hamilton-Wright <andrewhw@ieee.org> for bug report.
Andrew Hood <ajhood@fl.net.au> for bug report.
Anne-Laurence Putz <anne-laurence.putz@eurodecision.com> for bug
report.
Axel Simon <Axel.Simon@ens.fr> for bug report.
Bernhard Schmidt <schmidt@math.uni-augsburg.de> for bug report.
Boris Wirtz <Boris.Wirtz@uni-oldenburg.de> for bug report.
Brady Hunsaker <hunsaker@engr.pitt.edu> for contribution of a routine
for bounds sensitivity analysis.
Brady Hunsaker <hunsaker@engr.pitt.edu> for some suggestions concerning
MIP routines.
Cameron Kellough <Cameron.Kellough@sri.com> for bug report.
Carlo Baldassi <carlobaldassi@gmail.com> for bug report.
Cedric[FR] <fox2113@wanadoo.fr> for bug report.
Charles Brixko <charles.brixko@voo.be> for bug report.
Chris Rosebrugh <cpr@pobox.com> for contribution of a new version of
GLPK JNI (Java Native Interface).
Christophe Caron <caron@diamant.jouy.inra.fr> for bug report.
David T. Price <dtprice@speakeasy.net> for bug report.
Dennis Schridde <devurandom@gmx.net> for bug report.
Enric Rodriguez <erodri@lsi.upc.edu> for bug report.
Flavio Keidi Miyazawa <fkm@ic.unicamp.br> for bug report.
Gabriel Hackebeil <gabehack@gmail.com> for bug report.
Giles Thompson <gwpt1@cus.cam.ac.uk> for bug report.
Giorgio Sartor <0gioker0@gmail.com> for contribution of routines that
implement the proximity search heuristic for MIP.
Graham Rockwell <bionomicron@gmail.com> for bug report.
Hans Schwengeler <Hans.Schwengeler@unibas.ch> for bug report.
Harley Mackenzie <hjm@bigpond.com> for contribution of GLPK FAQ.
Dr. Harley Mackenzie <hjm@hardsoftware.com> for two example MathProg
models (curve fitting problem).
Heinrich Schuchardt <heinrich.schuchardt@gmx.de> for contribution of
makefiles and testing the package under 64-bit Windows.
Heinrich Schuchardt <heinrich.schuchardt@gmx.de> for contribution of
two MathProg table drivers for iODBC and MySQL.
Heinrich Schuchardt <heinrich.schuchardt@gmx.de> for some patches for
the MathProg translator.
Heinrich Schuchardt <xypron.glpk@gmx.de> for testing the package on
32- and 64-bit MS Windows platforms.
Ivan Luzzi <iluzzi@libero.it> for comments concerning CPLEX LP format.
Ivo van Baren <i.van.baren@freeler.nl> for contribution of GLPK DELI
(Delphi Interface).
Jan Engelhardt <jengelh@inai.de> for some suggestions.
Jeffrey Kantor <Kantor.1@nd.edu> for reporting typos in the MathProg
language reference.
Jiri Spitz <jiri.spitz@telecom.cz> for bug report.
Joey Rios <joeylrios@hotmail.com> for some suggestions.
Jonathan Senning <Jonathan.Senning@gordon.edu> for bug report.
Karel Zimmermann <kzimm@diamant.jouy.inra.fr> for bug report.
Kelly Westbrooks <kellywestbrooks@yahoo.com> for suggestions.
Kendall Demaree <kendal.demaree@verizon.net> for bug report.
Kjell Eikland <kjell.eikland@broadpark.no> for bug report.
Larry D'Agostino <Larry.D'Agostino@gmacrescap.com> for example model in
MathProg.
Luiz Bettoni <bettoni@cpgei.ct.utfpr.edu.br> for some suggestions.
Marco Atzeri <marco.atzeri@gmail.com> for bug report.
Marco Atzeri <marco_atzeri@yahoo.it> for bug report.
Markus Pilz <pilz@cs.uni-bonn.de> for bug report.
Minh Ha Duong <haduong@centre-cired.fr> for fixing doc typos.
Morten Welinder <terra@diku.dk> for bug report.
Morten Welinder <terra@gnu.org> for bug report.
Nelson H. F. Beebe <beebe@math.utah.edu> for bug report.
Nicolo Giorgetti <giorgetti@dii.unisi.it> for contribution of GLPKMEX,
a Matlab MEX interface.
Niels Klitgord <niels@bu.edu> for bug report.
Nigel Galloway <Nigel_Galloway@operamail.com> for an example MathProg
model.
Nigel Galloway <Nigel_Galloway@operamail.com> for an example program
in C#.
Nigel Galloway <nigel_galloway@operamail.com> for bug report.
Nigel Galloway <nigel_galloway@operamail.com> for example models in
MathProg.
Noli Sicad <nsicad@gmail.com> for testing glpk under Mac OS.
Noli Sicad <nsicad@gmail.com> for example model in MathProg.
Olivier <odwl@skynet.be> for bug report.
Oscar Gustafsson <oscarg@isy.liu.se> for contribution of a routine to
write data in OPB (pseudo boolean) format.
Peter T. Breuer <ptb@inv.it.uc3m.es> for bug report.
Peter A. Huegler <phuegler@bsco.com> for bug report.
Peter Ingerfeld <peter.ingerfeld@mops-optimizer.com> for bug report.
Peter Lee <plee@kinggee.com.au> for example LP model and bug report.
Pietro Scionti <pietro.scionti@archinet.it> for report typos found in
the reference manual.
Rafael Laboissiere <rafael@debian.org> for useful advices concerning
shared library support under GNU/Linux.
Raniere Gaia Costa da Silva for bug report.
Robbie Morrison <robbie@actrix.co.nz> for correcting the glpk manual.
Robert Wood <rgwood01@cox.net> for example model in MathProg.
Roberto Bagnara <bagnara@cs.unipr.it> (Department of Mathematics,
University of Parma, Italy) for bug report.
Sami Farin <sfarin@ratol.fi> for bug report.
Sebastian Nowozin <nowozin@gmail.com> for example models in MathProg.
Sebastien Briais <sbriais@free.fr> for bug report.
Sebastien de Menten <sdementen@hotmail.com> for bug report.
Sebastien Villemot <sebastien@debian.org> for bug report.
Stefan Vigerske <stefan@math.hu-berlin.de> for bug report.
Stefan Vigerske <stefan@vigerske.de> for bug report.
Sylvain Fournier for bug report.
Thomas Kahle <tom111@gmx.de> for some suggestions.
Uday Venkatadri <Uday.Venkatadri@dal.ca> for bug report.
Vijay Patil <vijay.patil@gmail.com> for testing the package under
Windows XP.
Vlahos Kiriakos <Kiriakos.Vlahos@gs.com> for bug report.
Xypron <xypron.glpk@gmx.de> for bug fixing and some improvments in the
FPUMP module.
Xypron <xypron.glpk@gmx.de> for bug patch.
Xypron <xypron.glpk@gmx.de> for contribution and testing batch scripts
to build Glpk with MS Visual Studio 2010.
Xypron <xypron.glpk@gmx.de> for improving the SQL table driver.
Xypron <xypron.glpk@gmx.de> for testing GLPK on 64-bit platforms and
for maintaining Windows versions of the package.
Yuri Victorovich <yuri@gjt.org> for contribution of GLPK Java binding.

949
resources/3rdparty/glpk-4.53/aclocal.m4

@ -0,0 +1,949 @@
# generated automatically by aclocal 1.12.5 -*- Autoconf -*-
# Copyright (C) 1996-2012 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
m4_ifndef([AC_AUTOCONF_VERSION],
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
[m4_warning([this file was generated for autoconf 2.69.
You have another version of autoconf. It may work, but is not guaranteed to.
If you have problems, you may need to regenerate the build system entirely.
To do so, use the procedure documented by the package, typically 'autoreconf'.])])
# Copyright (C) 2002-2012 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# AM_AUTOMAKE_VERSION(VERSION)
# ----------------------------
# Automake X.Y traces this macro to ensure aclocal.m4 has been
# generated from the m4 files accompanying Automake X.Y.
# (This private macro should not be called outside this file.)
AC_DEFUN([AM_AUTOMAKE_VERSION],
[am__api_version='1.12'
dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
dnl require some minimum version. Point them to the right macro.
m4_if([$1], [1.12.5], [],
[AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
])
# _AM_AUTOCONF_VERSION(VERSION)
# -----------------------------
# aclocal traces this macro to find the Autoconf version.
# This is a private macro too. Using m4_define simplifies
# the logic in aclocal, which can simply ignore this definition.
m4_define([_AM_AUTOCONF_VERSION], [])
# AM_SET_CURRENT_AUTOMAKE_VERSION
# -------------------------------
# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
[AM_AUTOMAKE_VERSION([1.12.5])dnl
m4_ifndef([AC_AUTOCONF_VERSION],
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
# AM_AUX_DIR_EXPAND -*- Autoconf -*-
# Copyright (C) 2001-2012 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to
# '$srcdir', '$srcdir/..', or '$srcdir/../..'.
#
# Of course, Automake must honor this variable whenever it calls a
# tool from the auxiliary directory. The problem is that $srcdir (and
# therefore $ac_aux_dir as well) can be either absolute or relative,
# depending on how configure is run. This is pretty annoying, since
# it makes $ac_aux_dir quite unusable in subdirectories: in the top
# source directory, any form will work fine, but in subdirectories a
# relative path needs to be adjusted first.
#
# $ac_aux_dir/missing
# fails when called from a subdirectory if $ac_aux_dir is relative
# $top_srcdir/$ac_aux_dir/missing
# fails if $ac_aux_dir is absolute,
# fails when called from a subdirectory in a VPATH build with
# a relative $ac_aux_dir
#
# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
# are both prefixed by $srcdir. In an in-source build this is usually
# harmless because $srcdir is '.', but things will broke when you
# start a VPATH build or use an absolute $srcdir.
#
# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
# and then we would define $MISSING as
# MISSING="\${SHELL} $am_aux_dir/missing"
# This will work as long as MISSING is not called from configure, because
# unfortunately $(top_srcdir) has no meaning in configure.
# However there are other variables, like CC, which are often used in
# configure, and could therefore not use this "fixed" $ac_aux_dir.
#
# Another solution, used here, is to always expand $ac_aux_dir to an
# absolute PATH. The drawback is that using absolute paths prevent a
# configured tree to be moved without reconfiguration.
AC_DEFUN([AM_AUX_DIR_EXPAND],
[dnl Rely on autoconf to set up CDPATH properly.
AC_PREREQ([2.50])dnl
# expand $ac_aux_dir to an absolute path
am_aux_dir=`cd $ac_aux_dir && pwd`
])
# AM_CONDITIONAL -*- Autoconf -*-
# Copyright (C) 1997-2012 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# AM_CONDITIONAL(NAME, SHELL-CONDITION)
# -------------------------------------
# Define a conditional.
AC_DEFUN([AM_CONDITIONAL],
[AC_PREREQ([2.52])dnl
m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
[$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
AC_SUBST([$1_TRUE])dnl
AC_SUBST([$1_FALSE])dnl
_AM_SUBST_NOTMAKE([$1_TRUE])dnl
_AM_SUBST_NOTMAKE([$1_FALSE])dnl
m4_define([_AM_COND_VALUE_$1], [$2])dnl
if $2; then
$1_TRUE=
$1_FALSE='#'
else
$1_TRUE='#'
$1_FALSE=
fi
AC_CONFIG_COMMANDS_PRE(
[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
AC_MSG_ERROR([[conditional "$1" was never defined.
Usually this means the macro was only invoked conditionally.]])
fi])])
# Copyright (C) 1999-2012 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be
# written in clear, in which case automake, when reading aclocal.m4,
# will think it sees a *use*, and therefore will trigger all it's
# C support machinery. Also note that it means that autoscan, seeing
# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
# _AM_DEPENDENCIES(NAME)
# ----------------------
# See how the compiler implements dependency checking.
# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC".
# We try a few techniques and use that to set a single cache variable.
#
# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
# dependency, and given that the user is not expected to run this macro,
# just rely on AC_PROG_CC.
AC_DEFUN([_AM_DEPENDENCIES],
[AC_REQUIRE([AM_SET_DEPDIR])dnl
AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
AC_REQUIRE([AM_MAKE_INCLUDE])dnl
AC_REQUIRE([AM_DEP_TRACK])dnl
m4_if([$1], [CC], [depcc="$CC" am_compiler_list=],
[$1], [CXX], [depcc="$CXX" am_compiler_list=],
[$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
[$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'],
[$1], [UPC], [depcc="$UPC" am_compiler_list=],
[$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
[depcc="$$1" am_compiler_list=])
AC_CACHE_CHECK([dependency style of $depcc],
[am_cv_$1_dependencies_compiler_type],
[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
# We make a subdir and do the tests there. Otherwise we can end up
# making bogus files that we don't know about and never remove. For
# instance it was reported that on HP-UX the gcc test will end up
# making a dummy file named 'D' -- because '-MD' means "put the output
# in D".
rm -rf conftest.dir
mkdir conftest.dir
# Copy depcomp to subdir because otherwise we won't find it if we're
# using a relative directory.
cp "$am_depcomp" conftest.dir
cd conftest.dir
# We will build objects and dependencies in a subdirectory because
# it helps to detect inapplicable dependency modes. For instance
# both Tru64's cc and ICC support -MD to output dependencies as a
# side effect of compilation, but ICC will put the dependencies in
# the current directory while Tru64 will put them in the object
# directory.
mkdir sub
am_cv_$1_dependencies_compiler_type=none
if test "$am_compiler_list" = ""; then
am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
fi
am__universal=false
m4_case([$1], [CC],
[case " $depcc " in #(
*\ -arch\ *\ -arch\ *) am__universal=true ;;
esac],
[CXX],
[case " $depcc " in #(
*\ -arch\ *\ -arch\ *) am__universal=true ;;
esac])
for depmode in $am_compiler_list; do
# Setup a source with many dependencies, because some compilers
# like to wrap large dependency lists on column 80 (with \), and
# we should not choose a depcomp mode which is confused by this.
#
# We need to recreate these files for each test, as the compiler may
# overwrite some of them when testing with obscure command lines.
# This happens at least with the AIX C compiler.
: > sub/conftest.c
for i in 1 2 3 4 5 6; do
echo '#include "conftst'$i'.h"' >> sub/conftest.c
# Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
# Solaris 10 /bin/sh.
echo '/* dummy */' > sub/conftst$i.h
done
echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
# We check with '-c' and '-o' for the sake of the "dashmstdout"
# mode. It turns out that the SunPro C++ compiler does not properly
# handle '-M -o', and we need to detect this. Also, some Intel
# versions had trouble with output in subdirs.
am__obj=sub/conftest.${OBJEXT-o}
am__minus_obj="-o $am__obj"
case $depmode in
gcc)
# This depmode causes a compiler race in universal mode.
test "$am__universal" = false || continue
;;
nosideeffect)
# After this tag, mechanisms are not by side-effect, so they'll
# only be used when explicitly requested.
if test "x$enable_dependency_tracking" = xyes; then
continue
else
break
fi
;;
msvc7 | msvc7msys | msvisualcpp | msvcmsys)
# This compiler won't grok '-c -o', but also, the minuso test has
# not run yet. These depmodes are late enough in the game, and
# so weak that their functioning should not be impacted.
am__obj=conftest.${OBJEXT-o}
am__minus_obj=
;;
none) break ;;
esac
if depmode=$depmode \
source=sub/conftest.c object=$am__obj \
depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
$SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
>/dev/null 2>conftest.err &&
grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
${MAKE-make} -s -f confmf > /dev/null 2>&1; then
# icc doesn't choke on unknown options, it will just issue warnings
# or remarks (even with -Werror). So we grep stderr for any message
# that says an option was ignored or not supported.
# When given -MP, icc 7.0 and 7.1 complain thusly:
# icc: Command line warning: ignoring option '-M'; no argument required
# The diagnosis changed in icc 8.0:
# icc: Command line remark: option '-MP' not supported
if (grep 'ignoring option' conftest.err ||
grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
am_cv_$1_dependencies_compiler_type=$depmode
break
fi
fi
done
cd ..
rm -rf conftest.dir
else
am_cv_$1_dependencies_compiler_type=none
fi
])
AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
AM_CONDITIONAL([am__fastdep$1], [
test "x$enable_dependency_tracking" != xno \
&& test "$am_cv_$1_dependencies_compiler_type" = gcc3])
])
# AM_SET_DEPDIR
# -------------
# Choose a directory name for dependency files.
# This macro is AC_REQUIREd in _AM_DEPENDENCIES.
AC_DEFUN([AM_SET_DEPDIR],
[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
])
# AM_DEP_TRACK
# ------------
AC_DEFUN([AM_DEP_TRACK],
[AC_ARG_ENABLE([dependency-tracking], [dnl
AS_HELP_STRING(
[--enable-dependency-tracking],
[do not reject slow dependency extractors])
AS_HELP_STRING(
[--disable-dependency-tracking],
[speeds up one-time build])])
if test "x$enable_dependency_tracking" != xno; then
am_depcomp="$ac_aux_dir/depcomp"
AMDEPBACKSLASH='\'
am__nodep='_no'
fi
AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
AC_SUBST([AMDEPBACKSLASH])dnl
_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
AC_SUBST([am__nodep])dnl
_AM_SUBST_NOTMAKE([am__nodep])dnl
])
# Generate code to set up dependency tracking. -*- Autoconf -*-
# Copyright (C) 1999-2012 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# _AM_OUTPUT_DEPENDENCY_COMMANDS
# ------------------------------
AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
[{
# Autoconf 2.62 quotes --file arguments for eval, but not when files
# are listed without --file. Let's play safe and only enable the eval
# if we detect the quoting.
case $CONFIG_FILES in
*\'*) eval set x "$CONFIG_FILES" ;;
*) set x $CONFIG_FILES ;;
esac
shift
for mf
do
# Strip MF so we end up with the name of the file.
mf=`echo "$mf" | sed -e 's/:.*$//'`
# Check whether this is an Automake generated Makefile or not.
# We used to match only the files named 'Makefile.in', but
# some people rename them; so instead we look at the file content.
# Grep'ing the first line is not enough: some people post-process
# each Makefile.in and add a new line on top of each file to say so.
# Grep'ing the whole file is not good either: AIX grep has a line
# limit of 2048, but all sed's we know have understand at least 4000.
if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
dirpart=`AS_DIRNAME("$mf")`
else
continue
fi
# Extract the definition of DEPDIR, am__include, and am__quote
# from the Makefile without running 'make'.
DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
test -z "$DEPDIR" && continue
am__include=`sed -n 's/^am__include = //p' < "$mf"`
test -z "am__include" && continue
am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
# Find all dependency output files, they are included files with
# $(DEPDIR) in their names. We invoke sed twice because it is the
# simplest approach to changing $(DEPDIR) to its actual value in the
# expansion.
for file in `sed -n "
s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
# Make sure the directory exists.
test -f "$dirpart/$file" && continue
fdir=`AS_DIRNAME(["$file"])`
AS_MKDIR_P([$dirpart/$fdir])
# echo "creating $dirpart/$file"
echo '# dummy' > "$dirpart/$file"
done
done
}
])# _AM_OUTPUT_DEPENDENCY_COMMANDS
# AM_OUTPUT_DEPENDENCY_COMMANDS
# -----------------------------
# This macro should only be invoked once -- use via AC_REQUIRE.
#
# This code is only required when automatic dependency tracking
# is enabled. FIXME. This creates each '.P' file that we will
# need in order to bootstrap the dependency handling code.
AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
[AC_CONFIG_COMMANDS([depfiles],
[test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
[AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
])
# Do all the work for Automake. -*- Autoconf -*-
# Copyright (C) 1996-2012 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This macro actually does too much. Some checks are only needed if
# your package does certain things. But this isn't really a big deal.
# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
# AM_INIT_AUTOMAKE([OPTIONS])
# -----------------------------------------------
# The call with PACKAGE and VERSION arguments is the old style
# call (pre autoconf-2.50), which is being phased out. PACKAGE
# and VERSION should now be passed to AC_INIT and removed from
# the call to AM_INIT_AUTOMAKE.
# We support both call styles for the transition. After
# the next Automake release, Autoconf can make the AC_INIT
# arguments mandatory, and then we can depend on a new Autoconf
# release and drop the old call support.
AC_DEFUN([AM_INIT_AUTOMAKE],
[AC_PREREQ([2.62])dnl
dnl Autoconf wants to disallow AM_ names. We explicitly allow
dnl the ones we care about.
m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
AC_REQUIRE([AC_PROG_INSTALL])dnl
if test "`cd $srcdir && pwd`" != "`pwd`"; then
# Use -I$(srcdir) only when $(srcdir) != ., so that make's output
# is not polluted with repeated "-I."
AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
# test to see if srcdir already configured
if test -f $srcdir/config.status; then
AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
fi
fi
# test whether we have cygpath
if test -z "$CYGPATH_W"; then
if (cygpath --version) >/dev/null 2>/dev/null; then
CYGPATH_W='cygpath -w'
else
CYGPATH_W=echo
fi
fi
AC_SUBST([CYGPATH_W])
# Define the identity of the package.
dnl Distinguish between old-style and new-style calls.
m4_ifval([$2],
[AC_DIAGNOSE([obsolete],
[$0: two- and three-arguments forms are deprecated. For more info, see:
http://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_INIT_AUTOMAKE-invocation])
m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
AC_SUBST([PACKAGE], [$1])dnl
AC_SUBST([VERSION], [$2])],
[_AM_SET_OPTIONS([$1])dnl
dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
m4_if(
m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]),
[ok:ok],,
[m4_fatal([AC_INIT should be called with package and version arguments])])dnl
AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
_AM_IF_OPTION([no-define],,
[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package])
AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl
# Some tools Automake needs.
AC_REQUIRE([AM_SANITY_CHECK])dnl
AC_REQUIRE([AC_ARG_PROGRAM])dnl
AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}])
AM_MISSING_PROG([AUTOCONF], [autoconf])
AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}])
AM_MISSING_PROG([AUTOHEADER], [autoheader])
AM_MISSING_PROG([MAKEINFO], [makeinfo])
AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
AC_REQUIRE([AC_PROG_MKDIR_P])dnl
# For better backward compatibility. To be removed once Automake 1.9.x
# dies out for good. For more background, see:
# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
# We need awk for the "check" target. The system "awk" is bad on
# some platforms.
AC_REQUIRE([AC_PROG_AWK])dnl
AC_REQUIRE([AC_PROG_MAKE_SET])dnl
AC_REQUIRE([AM_SET_LEADING_DOT])dnl
_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
[_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
[_AM_PROG_TAR([v7])])])
_AM_IF_OPTION([no-dependencies],,
[AC_PROVIDE_IFELSE([AC_PROG_CC],
[_AM_DEPENDENCIES([CC])],
[m4_define([AC_PROG_CC],
m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl
AC_PROVIDE_IFELSE([AC_PROG_CXX],
[_AM_DEPENDENCIES([CXX])],
[m4_define([AC_PROG_CXX],
m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl
AC_PROVIDE_IFELSE([AC_PROG_OBJC],
[_AM_DEPENDENCIES([OBJC])],
[m4_define([AC_PROG_OBJC],
m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
dnl Support for Objective C++ was only introduced in Autoconf 2.65,
dnl but we still cater to Autoconf 2.62.
m4_ifdef([AC_PROG_OBJCXX],
[AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
[_AM_DEPENDENCIES([OBJCXX])],
[m4_define([AC_PROG_OBJCXX],
m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])])dnl
])
_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
dnl The 'parallel-tests' driver may need to know about EXEEXT, so add the
dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro
dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
AC_CONFIG_COMMANDS_PRE(dnl
[m4_provide_if([_AM_COMPILER_EXEEXT],
[AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
])
dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not
dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
dnl mangled by Autoconf and run in a shell conditional statement.
m4_define([_AC_COMPILER_EXEEXT],
m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
# When config.status generates a header, we must update the stamp-h file.
# This file resides in the same directory as the config header
# that is generated. The stamp files are numbered to have different names.
# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
# loop where config.status creates the headers, so we can generate
# our stamp files there.
AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
[# Compute $1's index in $config_headers.
_am_arg=$1
_am_stamp_count=1
for _am_header in $config_headers :; do
case $_am_header in
$_am_arg | $_am_arg:* )
break ;;
* )
_am_stamp_count=`expr $_am_stamp_count + 1` ;;
esac
done
echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
# Copyright (C) 2001-2012 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# AM_PROG_INSTALL_SH
# ------------------
# Define $install_sh.
AC_DEFUN([AM_PROG_INSTALL_SH],
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
if test x"${install_sh}" != xset; then
case $am_aux_dir in
*\ * | *\ *)
install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
*)
install_sh="\${SHELL} $am_aux_dir/install-sh"
esac
fi
AC_SUBST([install_sh])])
# Copyright (C) 2003-2012 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# Check whether the underlying file-system supports filenames
# with a leading dot. For instance MS-DOS doesn't.
AC_DEFUN([AM_SET_LEADING_DOT],
[rm -rf .tst 2>/dev/null
mkdir .tst 2>/dev/null
if test -d .tst; then
am__leading_dot=.
else
am__leading_dot=_
fi
rmdir .tst 2>/dev/null
AC_SUBST([am__leading_dot])])
# Check to see how 'make' treats includes. -*- Autoconf -*-
# Copyright (C) 2001-2012 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# AM_MAKE_INCLUDE()
# -----------------
# Check to see how make treats includes.
AC_DEFUN([AM_MAKE_INCLUDE],
[am_make=${MAKE-make}
cat > confinc << 'END'
am__doit:
@echo this is the am__doit target
.PHONY: am__doit
END
# If we don't find an include directive, just comment out the code.
AC_MSG_CHECKING([for style of include used by $am_make])
am__include="#"
am__quote=
_am_result=none
# First try GNU make style include.
echo "include confinc" > confmf
# Ignore all kinds of additional output from 'make'.
case `$am_make -s -f confmf 2> /dev/null` in #(
*the\ am__doit\ target*)
am__include=include
am__quote=
_am_result=GNU
;;
esac
# Now try BSD make style include.
if test "$am__include" = "#"; then
echo '.include "confinc"' > confmf
case `$am_make -s -f confmf 2> /dev/null` in #(
*the\ am__doit\ target*)
am__include=.include
am__quote="\""
_am_result=BSD
;;
esac
fi
AC_SUBST([am__include])
AC_SUBST([am__quote])
AC_MSG_RESULT([$_am_result])
rm -f confinc confmf
])
# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
# Copyright (C) 1997-2012 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# AM_MISSING_PROG(NAME, PROGRAM)
# ------------------------------
AC_DEFUN([AM_MISSING_PROG],
[AC_REQUIRE([AM_MISSING_HAS_RUN])
$1=${$1-"${am_missing_run}$2"}
AC_SUBST($1)])
# AM_MISSING_HAS_RUN
# ------------------
# Define MISSING if not defined so far and test if it supports --run.
# If it does, set am_missing_run to use it, otherwise, to nothing.
AC_DEFUN([AM_MISSING_HAS_RUN],
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
AC_REQUIRE_AUX_FILE([missing])dnl
if test x"${MISSING+set}" != xset; then
case $am_aux_dir in
*\ * | *\ *)
MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
*)
MISSING="\${SHELL} $am_aux_dir/missing" ;;
esac
fi
# Use eval to expand $SHELL
if eval "$MISSING --run true"; then
am_missing_run="$MISSING --run "
else
am_missing_run=
AC_MSG_WARN(['missing' script is too old or missing])
fi
])
# Helper functions for option handling. -*- Autoconf -*-
# Copyright (C) 2001-2012 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# _AM_MANGLE_OPTION(NAME)
# -----------------------
AC_DEFUN([_AM_MANGLE_OPTION],
[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
# _AM_SET_OPTION(NAME)
# --------------------
# Set option NAME. Presently that only means defining a flag for this option.
AC_DEFUN([_AM_SET_OPTION],
[m4_define(_AM_MANGLE_OPTION([$1]), [1])])
# _AM_SET_OPTIONS(OPTIONS)
# ------------------------
# OPTIONS is a space-separated list of Automake options.
AC_DEFUN([_AM_SET_OPTIONS],
[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
# -------------------------------------------
# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
AC_DEFUN([_AM_IF_OPTION],
[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
# Check to make sure that the build environment is sane. -*- Autoconf -*-
# Copyright (C) 1996-2012 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# AM_SANITY_CHECK
# ---------------
AC_DEFUN([AM_SANITY_CHECK],
[AC_MSG_CHECKING([whether build environment is sane])
# Reject unsafe characters in $srcdir or the absolute working directory
# name. Accept space and tab only in the latter.
am_lf='
'
case `pwd` in
*[[\\\"\#\$\&\'\`$am_lf]]*)
AC_MSG_ERROR([unsafe absolute working directory name]);;
esac
case $srcdir in
*[[\\\"\#\$\&\'\`$am_lf\ \ ]]*)
AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);;
esac
# Do 'set' in a subshell so we don't clobber the current shell's
# arguments. Must try -L first in case configure is actually a
# symlink; some systems play weird games with the mod time of symlinks
# (eg FreeBSD returns the mod time of the symlink's containing
# directory).
if (
am_has_slept=no
for am_try in 1 2; do
echo "timestamp, slept: $am_has_slept" > conftest.file
set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
if test "$[*]" = "X"; then
# -L didn't work.
set X `ls -t "$srcdir/configure" conftest.file`
fi
if test "$[*]" != "X $srcdir/configure conftest.file" \
&& test "$[*]" != "X conftest.file $srcdir/configure"; then
# If neither matched, then we have a broken ls. This can happen
# if, for instance, CONFIG_SHELL is bash and it inherits a
# broken ls alias from the environment. This has actually
# happened. Such a system could not be considered "sane".
AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
alias in your environment])
fi
if test "$[2]" = conftest.file || test $am_try -eq 2; then
break
fi
# Just in case.
sleep 1
am_has_slept=yes
done
test "$[2]" = conftest.file
)
then
# Ok.
:
else
AC_MSG_ERROR([newly created file is older than distributed files!
Check your system clock])
fi
AC_MSG_RESULT([yes])
# If we didn't sleep, we still need to ensure time stamps of config.status and
# generated files are strictly newer.
am_sleep_pid=
if grep 'slept: no' conftest.file >/dev/null 2>&1; then
( sleep 1 ) &
am_sleep_pid=$!
fi
AC_CONFIG_COMMANDS_PRE(
[AC_MSG_CHECKING([that generated files are newer than configure])
if test -n "$am_sleep_pid"; then
# Hide warnings about reused PIDs.
wait $am_sleep_pid 2>/dev/null
fi
AC_MSG_RESULT([done])])
rm -f conftest.file
])
# Copyright (C) 2001-2012 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# AM_PROG_INSTALL_STRIP
# ---------------------
# One issue with vendor 'install' (even GNU) is that you can't
# specify the program used to strip binaries. This is especially
# annoying in cross-compiling environments, where the build's strip
# is unlikely to handle the host's binaries.
# Fortunately install-sh will honor a STRIPPROG variable, so we
# always use install-sh in "make install-strip", and initialize
# STRIPPROG with the value of the STRIP variable (set by the user).
AC_DEFUN([AM_PROG_INSTALL_STRIP],
[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
# Installed binaries are usually stripped using 'strip' when the user
# run "make install-strip". However 'strip' might not be the right
# tool to use in cross-compilation environments, therefore Automake
# will honor the 'STRIP' environment variable to overrule this program.
dnl Don't test for $cross_compiling = yes, because it might be 'maybe'.
if test "$cross_compiling" != no; then
AC_CHECK_TOOL([STRIP], [strip], :)
fi
INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
AC_SUBST([INSTALL_STRIP_PROGRAM])])
# Copyright (C) 2006-2012 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# _AM_SUBST_NOTMAKE(VARIABLE)
# ---------------------------
# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
# This macro is traced by Automake.
AC_DEFUN([_AM_SUBST_NOTMAKE])
# AM_SUBST_NOTMAKE(VARIABLE)
# --------------------------
# Public sister of _AM_SUBST_NOTMAKE.
AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
# Check how to create a tarball. -*- Autoconf -*-
# Copyright (C) 2004-2012 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# _AM_PROG_TAR(FORMAT)
# --------------------
# Check how to create a tarball in format FORMAT.
# FORMAT should be one of 'v7', 'ustar', or 'pax'.
#
# Substitute a variable $(am__tar) that is a command
# writing to stdout a FORMAT-tarball containing the directory
# $tardir.
# tardir=directory && $(am__tar) > result.tar
#
# Substitute a variable $(am__untar) that extract such
# a tarball read from stdin.
# $(am__untar) < result.tar
AC_DEFUN([_AM_PROG_TAR],
[# Always define AMTAR for backward compatibility. Yes, it's still used
# in the wild :-( We should find a proper way to deprecate it ...
AC_SUBST([AMTAR], ['$${TAR-tar}'])
m4_if([$1], [v7],
[am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
[m4_case([$1], [ustar],, [pax],,
[m4_fatal([Unknown tar format])])
AC_MSG_CHECKING([how to create a $1 tar archive])
# Loop over all known methods to create a tar archive until one works.
_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
_am_tools=${am_cv_prog_tar_$1-$_am_tools}
# Do not fold the above two line into one, because Tru64 sh and
# Solaris sh will not grok spaces in the rhs of '-'.
for _am_tool in $_am_tools
do
case $_am_tool in
gnutar)
for _am_tar in tar gnutar gtar;
do
AM_RUN_LOG([$_am_tar --version]) && break
done
am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
am__untar="$_am_tar -xf -"
;;
plaintar)
# Must skip GNU tar: if it does not support --format= it doesn't create
# ustar tarball either.
(tar --version) >/dev/null 2>&1 && continue
am__tar='tar chf - "$$tardir"'
am__tar_='tar chf - "$tardir"'
am__untar='tar xf -'
;;
pax)
am__tar='pax -L -x $1 -w "$$tardir"'
am__tar_='pax -L -x $1 -w "$tardir"'
am__untar='pax -r'
;;
cpio)
am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
am__untar='cpio -i -H $1 -d'
;;
none)
am__tar=false
am__tar_=false
am__untar=false
;;
esac
# If the value was cached, stop now. We just wanted to have am__tar
# and am__untar set.
test -n "${am_cv_prog_tar_$1}" && break
# tar/untar a dummy directory, and stop if the command works
rm -rf conftest.dir
mkdir conftest.dir
echo GrepMe > conftest.dir/file
AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
rm -rf conftest.dir
if test -s conftest.tar; then
AM_RUN_LOG([$am__untar <conftest.tar])
grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
fi
done
rm -rf conftest.dir
AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
AC_MSG_RESULT([$am_cv_prog_tar_$1])])
AC_SUBST([am__tar])
AC_SUBST([am__untar])
]) # _AM_PROG_TAR
m4_include([m4/libtool.m4])
m4_include([m4/ltoptions.m4])
m4_include([m4/ltsugar.m4])
m4_include([m4/ltversion.m4])
m4_include([m4/lt~obsolete.m4])

1537
resources/3rdparty/glpk-4.53/config.guess
File diff suppressed because it is too large
View File

27
resources/3rdparty/glpk-4.53/config.h.cmake.in

@ -0,0 +1,27 @@
/* config.h.in (GLPK configuration template file) */
#@GLPK_HAVE_SYS_TIME_H@ HAVE_SYS_TIME_H
/* defined if the <sys/time.h> header can be used */
#@GLPK_HAVE_GETTIMEOFDAY@ HAVE_GETTIMEOFDAY
/* defined if the gettimeofday function can be used */
#@GLPK_HAVE_GMP@ HAVE_GMP
/* defined if the GNU MP bignum library is available */
/* requires <gmp.h> and -lgmp */
#@GLPK_HAVE_LTDL@ HAVE_LTDL
/* defined if the GNU Libtool shared library support is enabled */
/* requires <ltdl.h> and -lltdl */
#@GLPK_HAVE_DLFCN@ HAVE_DLFCN
/* defined if the POSIX shared library support is enabled */
/* requires <dlfcn.h> */
#@GLPK_HAVE_ODBC@ ODBC_DLNAME @GLPK_ODBC_DLNAME@
/* ODBC shared library name if this feature is enabled */
#@GLPK_HAVE_MYSQL@ MYSQL_DLNAME @GLPK_MYSQL_DLNAME@
/* MySQL shared library name if this feature is enabled */
/* eof */

27
resources/3rdparty/glpk-4.53/config.h.in

@ -0,0 +1,27 @@
/* config.h.in (GLPK configuration template file) */
#undef HAVE_SYS_TIME_H
/* defined if the <sys/time.h> header can be used */
#undef HAVE_GETTIMEOFDAY
/* defined if the gettimeofday function can be used */
#undef HAVE_GMP
/* defined if the GNU MP bignum library is available */
/* requires <gmp.h> and -lgmp */
#undef HAVE_LTDL
/* defined if the GNU Libtool shared library support is enabled */
/* requires <ltdl.h> and -lltdl */
#undef HAVE_DLFCN
/* defined if the POSIX shared library support is enabled */
/* requires <dlfcn.h> */
#undef ODBC_DLNAME
/* ODBC shared library name if this feature is enabled */
#undef MYSQL_DLNAME
/* MySQL shared library name if this feature is enabled */
/* eof */

1789
resources/3rdparty/glpk-4.53/config.sub
File diff suppressed because it is too large
View File

13839
resources/3rdparty/glpk-4.53/configure
File diff suppressed because it is too large
View File

147
resources/3rdparty/glpk-4.53/configure.ac

@ -0,0 +1,147 @@
dnl Process this file with autoconf to produce a configure script
AC_INIT([GLPK], [4.53], [bug-glpk@gnu.org])
AC_CONFIG_SRCDIR([src/glpk.h])
AC_CONFIG_MACRO_DIR([m4])
AM_INIT_AUTOMAKE
AC_CONFIG_HEADERS([config.h])
AC_ARG_WITH(gmp,
AC_HELP_STRING([--with-gmp],
[use GNU MP bignum library [[default=no]]]),
[case $withval in
yes | no) ;;
*) AC_MSG_ERROR([invalid value `$withval' for --with-gmp]);;
esac],
[with_gmp=no])
AC_ARG_ENABLE(dl,
AC_HELP_STRING([--enable-dl],
[enable shared library support [[default=no]]]),
[case $enableval in
yes | ltdl | dlfcn | no) ;;
*) AC_MSG_ERROR([invalid value `$enableval' for --enable-dl]);;
esac],
[enable_dl=no])
AC_ARG_ENABLE(odbc,
AC_HELP_STRING([--enable-odbc],
[enable MathProg ODBC support [[default=no]]]),
[case $enableval in
yes | unix | no) ;;
*) AC_MSG_ERROR([invalid value `$enableval' for --enable-odbc]);;
esac],
[enable_odbc=no])
AC_ARG_ENABLE(mysql,
AC_HELP_STRING([--enable-mysql],
[enable MathProg MySQL support [[default=no]]]),
[case $enableval in
yes | no) ;;
*) AC_MSG_ERROR([invalid value `$enableval' for --enable-mysql]);;
esac],
[enable_mysql=no])
dnl Disable unnecessary libtool tests
define([AC_LIBTOOL_LANG_CXX_CONFIG], [:])
define([AC_LIBTOOL_LANG_F77_CONFIG], [:])
define([AC_LIBTOOL_LANG_GCJ_CONFIG], [:])
dnl Check for programs
AC_PROG_CC
AC_PROG_INSTALL
AC_PROG_LIBTOOL
dnl Check for math library
AC_CHECK_LIB([m], [exp])
dnl Check for <sys/time.h> header
AC_CHECK_HEADER([sys/time.h],
AC_DEFINE([HAVE_SYS_TIME_H], [1], [N/A]))
dnl Check for gettimeofday function
AC_CHECK_FUNC([gettimeofday],
AC_DEFINE([HAVE_GETTIMEOFDAY], [1], [N/A]))
dnl Check for <gmp.h> header
if test "$with_gmp" = "yes"; then
AC_CHECK_HEADER([gmp.h], [],
[AC_MSG_ERROR([gmp.h header not found])])
fi
AC_MSG_CHECKING([whether to use GNU MP bignum library])
if test "$with_gmp" = "yes"; then
AC_MSG_RESULT([yes])
AC_DEFINE([HAVE_GMP], [1], [N/A])
LIBS="-lgmp $LIBS"
else
AC_MSG_RESULT([no])
fi
AC_MSG_CHECKING([whether to enable shared library support])
if test "$enable_dl" = "yes"; then
AC_MSG_RESULT([ltdl])
AC_DEFINE([HAVE_LTDL], [1], [N/A])
LIBS="-lltdl $LIBS"
elif test "$enable_dl" = "ltdl"; then
AC_MSG_RESULT([ltdl])
AC_DEFINE([HAVE_LTDL], [1], [N/A])
LIBS="-lltdl $LIBS"
elif test "$enable_dl" = "dlfcn"; then
AC_MSG_RESULT([dlfcn])
AC_DEFINE([HAVE_DLFCN], [1], [N/A])
else
AC_MSG_RESULT([no])
fi
case $host_os in
darwin* | macosx*)
LIBIODBC="libiodbc.dylib"
LIBODBC="libodbc.dylib"
LIBMYSQL="libmysqlclient.dylib"
;;
*)
LIBIODBC="libiodbc.so"
LIBODBC="libodbc.so"
LIBMYSQL="libmysqlclient.so"
;;
esac
AC_MSG_CHECKING([whether to enable MathProg ODBC support])
if test "$enable_odbc" = "yes"; then
if test "$enable_dl" = "no"; then
AC_MSG_ERROR([--enable-odbc requires --enable-dl])
fi
AC_MSG_RESULT([yes])
AC_DEFINE_UNQUOTED([ODBC_DLNAME], ["$LIBIODBC"], [N/A])
elif test "$enable_odbc" = "unix"; then
if test "$enable_dl" = "no"; then
AC_MSG_ERROR([--enable-odbc requires --enable-dl])
fi
AC_MSG_RESULT([unix])
AC_DEFINE_UNQUOTED([ODBC_DLNAME], ["$LIBODBC"], [N/A])
else
AC_MSG_RESULT([no])
fi
AC_MSG_CHECKING([whether to enable MathProg MySQL support])
if test "$enable_mysql" = "yes"; then
if test "$enable_dl" = "no"; then
AC_MSG_ERROR([--enable-mysql requires --enable-dl])
fi
AC_MSG_RESULT([yes])
CPPFLAGS="-I/usr/include/mysql $CPPFLAGS"
AC_DEFINE_UNQUOTED([MYSQL_DLNAME], ["$LIBMYSQL"], [N/A])
else
AC_MSG_RESULT([no])
fi
AC_CONFIG_FILES(
[src/Makefile examples/Makefile Makefile])
AC_OUTPUT
dnl eof

787
resources/3rdparty/glpk-4.53/depcomp

@ -0,0 +1,787 @@
#! /bin/sh
# depcomp - compile a program generating dependencies as side-effects
scriptversion=2012-07-12.20; # UTC
# Copyright (C) 1999-2012 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
case $1 in
'')
echo "$0: No command. Try '$0 --help' for more information." 1>&2
exit 1;
;;
-h | --h*)
cat <<\EOF
Usage: depcomp [--help] [--version] PROGRAM [ARGS]
Run PROGRAMS ARGS to compile a file, generating dependencies
as side-effects.
Environment variables:
depmode Dependency tracking mode.
source Source file read by 'PROGRAMS ARGS'.
object Object file output by 'PROGRAMS ARGS'.
DEPDIR directory where to store dependencies.
depfile Dependency file to output.
tmpdepfile Temporary file to use when outputting dependencies.
libtool Whether libtool is used (yes/no).
Report bugs to <bug-automake@gnu.org>.
EOF
exit $?
;;
-v | --v*)
echo "depcomp $scriptversion"
exit $?
;;
esac
# A tabulation character.
tab=' '
# A newline character.
nl='
'
if test -z "$depmode" || test -z "$source" || test -z "$object"; then
echo "depcomp: Variables source, object and depmode must be set" 1>&2
exit 1
fi
# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
depfile=${depfile-`echo "$object" |
sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
rm -f "$tmpdepfile"
# Avoid interferences from the environment.
gccflag= dashmflag=
# Some modes work just like other modes, but use different flags. We
# parameterize here, but still list the modes in the big case below,
# to make depend.m4 easier to write. Note that we *cannot* use a case
# here, because this file can only contain one case statement.
if test "$depmode" = hp; then
# HP compiler uses -M and no extra arg.
gccflag=-M
depmode=gcc
fi
if test "$depmode" = dashXmstdout; then
# This is just like dashmstdout with a different argument.
dashmflag=-xM
depmode=dashmstdout
fi
cygpath_u="cygpath -u -f -"
if test "$depmode" = msvcmsys; then
# This is just like msvisualcpp but w/o cygpath translation.
# Just convert the backslash-escaped backslashes to single forward
# slashes to satisfy depend.m4
cygpath_u='sed s,\\\\,/,g'
depmode=msvisualcpp
fi
if test "$depmode" = msvc7msys; then
# This is just like msvc7 but w/o cygpath translation.
# Just convert the backslash-escaped backslashes to single forward
# slashes to satisfy depend.m4
cygpath_u='sed s,\\\\,/,g'
depmode=msvc7
fi
if test "$depmode" = xlc; then
# IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
gccflag=-qmakedep=gcc,-MF
depmode=gcc
fi
case "$depmode" in
gcc3)
## gcc 3 implements dependency tracking that does exactly what
## we want. Yay! Note: for some reason libtool 1.4 doesn't like
## it if -MD -MP comes after the -MF stuff. Hmm.
## Unfortunately, FreeBSD c89 acceptance of flags depends upon
## the command line argument order; so add the flags where they
## appear in depend2.am. Note that the slowdown incurred here
## affects only configure: in makefiles, %FASTDEP% shortcuts this.
for arg
do
case $arg in
-c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
*) set fnord "$@" "$arg" ;;
esac
shift # fnord
shift # $arg
done
"$@"
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
mv "$tmpdepfile" "$depfile"
;;
gcc)
## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
## (see the conditional assignment to $gccflag above).
## There are various ways to get dependency output from gcc. Here's
## why we pick this rather obscure method:
## - Don't want to use -MD because we'd like the dependencies to end
## up in a subdir. Having to rename by hand is ugly.
## (We might end up doing this anyway to support other compilers.)
## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
## -MM, not -M (despite what the docs say). Also, it might not be
## supported by the other compilers which use the 'gcc' depmode.
## - Using -M directly means running the compiler twice (even worse
## than renaming).
if test -z "$gccflag"; then
gccflag=-MD,
fi
"$@" -Wp,"$gccflag$tmpdepfile"
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
rm -f "$depfile"
echo "$object : \\" > "$depfile"
alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
## The second -e expression handles DOS-style file names with drive letters.
sed -e 's/^[^:]*: / /' \
-e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
## This next piece of magic avoids the "deleted header file" problem.
## The problem is that when a header file which appears in a .P file
## is deleted, the dependency causes make to die (because there is
## typically no way to rebuild the header). We avoid this by adding
## dummy dependencies for each header file. Too bad gcc doesn't do
## this for us directly.
tr ' ' "$nl" < "$tmpdepfile" |
## Some versions of gcc put a space before the ':'. On the theory
## that the space means something, we add a space to the output as
## well. hp depmode also adds that space, but also prefixes the VPATH
## to the object. Take care to not repeat it in the output.
## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly. Breaking it into two sed invocations is a workaround.
sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
| sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
hp)
# This case exists only to let depend.m4 do its work. It works by
# looking at the text of this script. This case will never be run,
# since it is checked for above.
exit 1
;;
sgi)
if test "$libtool" = yes; then
"$@" "-Wp,-MDupdate,$tmpdepfile"
else
"$@" -MDupdate "$tmpdepfile"
fi
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
rm -f "$depfile"
if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
echo "$object : \\" > "$depfile"
# Clip off the initial element (the dependent). Don't try to be
# clever and replace this with sed code, as IRIX sed won't handle
# lines with more than a fixed number of characters (4096 in
# IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
# the IRIX cc adds comments like '#:fec' to the end of the
# dependency line.
tr ' ' "$nl" < "$tmpdepfile" \
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
tr "$nl" ' ' >> "$depfile"
echo >> "$depfile"
# The second pass generates a dummy entry for each header file.
tr ' ' "$nl" < "$tmpdepfile" \
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
>> "$depfile"
else
# The sourcefile does not contain any dependencies, so just
# store a dummy comment line, to avoid errors with the Makefile
# "include basename.Plo" scheme.
echo "#dummy" > "$depfile"
fi
rm -f "$tmpdepfile"
;;
xlc)
# This case exists only to let depend.m4 do its work. It works by
# looking at the text of this script. This case will never be run,
# since it is checked for above.
exit 1
;;
aix)
# The C for AIX Compiler uses -M and outputs the dependencies
# in a .u file. In older versions, this file always lives in the
# current directory. Also, the AIX compiler puts '$object:' at the
# start of each line; $object doesn't have directory information.
# Version 6 uses the directory in both cases.
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
test "x$dir" = "x$object" && dir=
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
if test "$libtool" = yes; then
tmpdepfile1=$dir$base.u
tmpdepfile2=$base.u
tmpdepfile3=$dir.libs/$base.u
"$@" -Wc,-M
else
tmpdepfile1=$dir$base.u
tmpdepfile2=$dir$base.u
tmpdepfile3=$dir$base.u
"$@" -M
fi
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
exit $stat
fi
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
do
test -f "$tmpdepfile" && break
done
if test -f "$tmpdepfile"; then
# Each line is of the form 'foo.o: dependent.h'.
# Do two passes, one to just change these to
# '$object: dependent.h' and one to simply 'dependent.h:'.
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
else
# The sourcefile does not contain any dependencies, so just
# store a dummy comment line, to avoid errors with the Makefile
# "include basename.Plo" scheme.
echo "#dummy" > "$depfile"
fi
rm -f "$tmpdepfile"
;;
icc)
# Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'.
# However on
# $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c
# ICC 7.0 will fill foo.d with something like
# foo.o: sub/foo.c
# foo.o: sub/foo.h
# which is wrong. We want
# sub/foo.o: sub/foo.c
# sub/foo.o: sub/foo.h
# sub/foo.c:
# sub/foo.h:
# ICC 7.1 will output
# foo.o: sub/foo.c sub/foo.h
# and will wrap long lines using '\':
# foo.o: sub/foo.c ... \
# sub/foo.h ... \
# ...
# tcc 0.9.26 (FIXME still under development at the moment of writing)
# will emit a similar output, but also prepend the continuation lines
# with horizontal tabulation characters.
"$@" -MD -MF "$tmpdepfile"
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
rm -f "$depfile"
# Each line is of the form 'foo.o: dependent.h',
# or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'.
# Do two passes, one to just change these to
# '$object: dependent.h' and one to simply 'dependent.h:'.
sed -e "s/^[ $tab][ $tab]*/ /" -e "s,^[^:]*:,$object :," \
< "$tmpdepfile" > "$depfile"
sed '
s/[ '"$tab"'][ '"$tab"']*/ /g
s/^ *//
s/ *\\*$//
s/^[^:]*: *//
/^$/d
/:$/d
s/$/ :/
' < "$tmpdepfile" >> "$depfile"
rm -f "$tmpdepfile"
;;
## The order of this option in the case statement is important, since the
## shell code in configure will try each of these formats in the order
## listed in this file. A plain '-MD' option would be understood by many
## compilers, so we must ensure this comes after the gcc and icc options.
pgcc)
# Portland's C compiler understands '-MD'.
# Will always output deps to 'file.d' where file is the root name of the
# source file under compilation, even if file resides in a subdirectory.
# The object file name does not affect the name of the '.d' file.
# pgcc 10.2 will output
# foo.o: sub/foo.c sub/foo.h
# and will wrap long lines using '\' :
# foo.o: sub/foo.c ... \
# sub/foo.h ... \
# ...
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
test "x$dir" = "x$object" && dir=
# Use the source, not the object, to determine the base name, since
# that's sadly what pgcc will do too.
base=`echo "$source" | sed -e 's|^.*/||' -e 's/\.[-_a-zA-Z0-9]*$//'`
tmpdepfile="$base.d"
# For projects that build the same source file twice into different object
# files, the pgcc approach of using the *source* file root name can cause
# problems in parallel builds. Use a locking strategy to avoid stomping on
# the same $tmpdepfile.
lockdir="$base.d-lock"
trap "echo '$0: caught signal, cleaning up...' >&2; rm -rf $lockdir" 1 2 13 15
numtries=100
i=$numtries
while test $i -gt 0 ; do
# mkdir is a portable test-and-set.
if mkdir $lockdir 2>/dev/null; then
# This process acquired the lock.
"$@" -MD
stat=$?
# Release the lock.
rm -rf $lockdir
break
else
## the lock is being held by a different process,
## wait until the winning process is done or we timeout
while test -d $lockdir && test $i -gt 0; do
sleep 1
i=`expr $i - 1`
done
fi
i=`expr $i - 1`
done
trap - 1 2 13 15
if test $i -le 0; then
echo "$0: failed to acquire lock after $numtries attempts" >&2
echo "$0: check lockdir '$lockdir'" >&2
exit 1
fi
if test $stat -ne 0; then
rm -f "$tmpdepfile"
exit $stat
fi
rm -f "$depfile"
# Each line is of the form `foo.o: dependent.h',
# or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
# Do two passes, one to just change these to
# `$object: dependent.h' and one to simply `dependent.h:'.
sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
# Some versions of the HPUX 10.20 sed can't process this invocation
# correctly. Breaking it into two sed invocations is a workaround.
sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
hp2)
# The "hp" stanza above does not work with aCC (C++) and HP's ia64
# compilers, which have integrated preprocessors. The correct option
# to use with these is +Maked; it writes dependencies to a file named
# 'foo.d', which lands next to the object file, wherever that
# happens to be.
# Much of this is similar to the tru64 case; see comments there.
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
test "x$dir" = "x$object" && dir=
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
if test "$libtool" = yes; then
tmpdepfile1=$dir$base.d
tmpdepfile2=$dir.libs/$base.d
"$@" -Wc,+Maked
else
tmpdepfile1=$dir$base.d
tmpdepfile2=$dir$base.d
"$@" +Maked
fi
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile1" "$tmpdepfile2"
exit $stat
fi
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
do
test -f "$tmpdepfile" && break
done
if test -f "$tmpdepfile"; then
sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
# Add 'dependent.h:' lines.
sed -ne '2,${
s/^ *//
s/ \\*$//
s/$/:/
p
}' "$tmpdepfile" >> "$depfile"
else
echo "#dummy" > "$depfile"
fi
rm -f "$tmpdepfile" "$tmpdepfile2"
;;
tru64)
# The Tru64 compiler uses -MD to generate dependencies as a side
# effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
# At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
# dependencies in 'foo.d' instead, so we check for that too.
# Subdirectories are respected.
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
test "x$dir" = "x$object" && dir=
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
if test "$libtool" = yes; then
# With Tru64 cc, shared objects can also be used to make a
# static library. This mechanism is used in libtool 1.4 series to
# handle both shared and static libraries in a single compilation.
# With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
#
# With libtool 1.5 this exception was removed, and libtool now
# generates 2 separate objects for the 2 libraries. These two
# compilations output dependencies in $dir.libs/$base.o.d and
# in $dir$base.o.d. We have to check for both files, because
# one of the two compilations can be disabled. We should prefer
# $dir$base.o.d over $dir.libs/$base.o.d because the latter is
# automatically cleaned when .libs/ is deleted, while ignoring
# the former would cause a distcleancheck panic.
tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
tmpdepfile2=$dir$base.o.d # libtool 1.5
tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
"$@" -Wc,-MD
else
tmpdepfile1=$dir$base.o.d
tmpdepfile2=$dir$base.d
tmpdepfile3=$dir$base.d
tmpdepfile4=$dir$base.d
"$@" -MD
fi
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
exit $stat
fi
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
do
test -f "$tmpdepfile" && break
done
if test -f "$tmpdepfile"; then
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
else
echo "#dummy" > "$depfile"
fi
rm -f "$tmpdepfile"
;;
msvc7)
if test "$libtool" = yes; then
showIncludes=-Wc,-showIncludes
else
showIncludes=-showIncludes
fi
"$@" $showIncludes > "$tmpdepfile"
stat=$?
grep -v '^Note: including file: ' "$tmpdepfile"
if test "$stat" = 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
rm -f "$depfile"
echo "$object : \\" > "$depfile"
# The first sed program below extracts the file names and escapes
# backslashes for cygpath. The second sed program outputs the file
# name when reading, but also accumulates all include files in the
# hold buffer in order to output them again at the end. This only
# works with sed implementations that can handle large buffers.
sed < "$tmpdepfile" -n '
/^Note: including file: *\(.*\)/ {
s//\1/
s/\\/\\\\/g
p
}' | $cygpath_u | sort -u | sed -n '
s/ /\\ /g
s/\(.*\)/'"$tab"'\1 \\/p
s/.\(.*\) \\/\1:/
H
$ {
s/.*/'"$tab"'/
G
p
}' >> "$depfile"
rm -f "$tmpdepfile"
;;
msvc7msys)
# This case exists only to let depend.m4 do its work. It works by
# looking at the text of this script. This case will never be run,
# since it is checked for above.
exit 1
;;
#nosideeffect)
# This comment above is used by automake to tell side-effect
# dependency tracking mechanisms from slower ones.
dashmstdout)
# Important note: in order to support this mode, a compiler *must*
# always write the preprocessed file to stdout, regardless of -o.
"$@" || exit $?
# Remove the call to Libtool.
if test "$libtool" = yes; then
while test "X$1" != 'X--mode=compile'; do
shift
done
shift
fi
# Remove '-o $object'.
IFS=" "
for arg
do
case $arg in
-o)
shift
;;
$object)
shift
;;
*)
set fnord "$@" "$arg"
shift # fnord
shift # $arg
;;
esac
done
test -z "$dashmflag" && dashmflag=-M
# Require at least two characters before searching for ':'
# in the target name. This is to cope with DOS-style filenames:
# a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
"$@" $dashmflag |
sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile"
rm -f "$depfile"
cat < "$tmpdepfile" > "$depfile"
tr ' ' "$nl" < "$tmpdepfile" | \
## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly. Breaking it into two sed invocations is a workaround.
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
dashXmstdout)
# This case only exists to satisfy depend.m4. It is never actually
# run, as this mode is specially recognized in the preamble.
exit 1
;;
makedepend)
"$@" || exit $?
# Remove any Libtool call
if test "$libtool" = yes; then
while test "X$1" != 'X--mode=compile'; do
shift
done
shift
fi
# X makedepend
shift
cleared=no eat=no
for arg
do
case $cleared in
no)
set ""; shift
cleared=yes ;;
esac
if test $eat = yes; then
eat=no
continue
fi
case "$arg" in
-D*|-I*)
set fnord "$@" "$arg"; shift ;;
# Strip any option that makedepend may not understand. Remove
# the object too, otherwise makedepend will parse it as a source file.
-arch)
eat=yes ;;
-*|$object)
;;
*)
set fnord "$@" "$arg"; shift ;;
esac
done
obj_suffix=`echo "$object" | sed 's/^.*\././'`
touch "$tmpdepfile"
${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
rm -f "$depfile"
# makedepend may prepend the VPATH from the source file name to the object.
# No need to regex-escape $object, excess matching of '.' is harmless.
sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \
## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly. Breaking it into two sed invocations is a workaround.
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile" "$tmpdepfile".bak
;;
cpp)
# Important note: in order to support this mode, a compiler *must*
# always write the preprocessed file to stdout.
"$@" || exit $?
# Remove the call to Libtool.
if test "$libtool" = yes; then
while test "X$1" != 'X--mode=compile'; do
shift
done
shift
fi
# Remove '-o $object'.
IFS=" "
for arg
do
case $arg in
-o)
shift
;;
$object)
shift
;;
*)
set fnord "$@" "$arg"
shift # fnord
shift # $arg
;;
esac
done
"$@" -E |
sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
-e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
sed '$ s: \\$::' > "$tmpdepfile"
rm -f "$depfile"
echo "$object : \\" > "$depfile"
cat < "$tmpdepfile" >> "$depfile"
sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
msvisualcpp)
# Important note: in order to support this mode, a compiler *must*
# always write the preprocessed file to stdout.
"$@" || exit $?
# Remove the call to Libtool.
if test "$libtool" = yes; then
while test "X$1" != 'X--mode=compile'; do
shift
done
shift
fi
IFS=" "
for arg
do
case "$arg" in
-o)
shift
;;
$object)
shift
;;
"-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
set fnord "$@"
shift
shift
;;
*)
set fnord "$@" "$arg"
shift
shift
;;
esac
done
"$@" -E 2>/dev/null |
sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
rm -f "$depfile"
echo "$object : \\" > "$depfile"
sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
echo "$tab" >> "$depfile"
sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
rm -f "$tmpdepfile"
;;
msvcmsys)
# This case exists only to let depend.m4 do its work. It works by
# looking at the text of this script. This case will never be run,
# since it is checked for above.
exit 1
;;
none)
exec "$@"
;;
*)
echo "Unknown depmode $depmode" 1>&2
exit 1
;;
esac
exit 0
# Local Variables:
# mode: shell-script
# sh-indentation: 2
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-time-zone: "UTC"
# time-stamp-end: "; # UTC"
# End:

BIN
resources/3rdparty/glpk-4.53/doc/cnfsat.pdf

413
resources/3rdparty/glpk-4.53/doc/cnfsat.tex

@ -0,0 +1,413 @@
%* cnfsat.tex *%
\documentclass[11pt,draft]{article}
\usepackage{amssymb}
\usepackage{indentfirst}
\setlength{\textwidth}{6.5in}
\setlength{\textheight}{8.5in}
\setlength{\oddsidemargin}{0in}
\setlength{\topmargin}{0in}
\setlength{\headheight}{0in}
\setlength{\headsep}{0in}
\setlength{\footskip}{0.5in}
\setlength{\parindent}{16pt}
\setlength{\parskip}{5pt}
\setlength{\topsep}{0pt}
\setlength{\partopsep}{0pt}
\setlength{\itemsep}{\parskip}
\setlength{\parsep}{0pt}
\setlength{\leftmargini}{\parindent}
\renewcommand{\labelitemi}{---}
\def\para#1{\noindent{\bf#1}}
\def\synopsis{\para{Synopsis}}
\def\description{\para{Description}}
\def\returns{\para{Returns}}
\newenvironment{retlist}
{ \def\arraystretch{1.5}
\noindent
\begin{tabular}{@{}p{1in}@{}p{5.5in}@{}}
}
{\end{tabular}}
\begin{document}
\title{\bf CNF Satisfiability Problem}
\author{Andrew Makhorin {\tt<mao@gnu.org>}}
\date{August 2011}
\maketitle
\section{Introduction}
The {\it Satisfiability Problem (SAT)} is a classic combinatorial
problem. Given a Boolean formula of $n$ variables
$$f(x_1,x_2,\dots,x_n),\eqno(1.1)$$
this problem is to find such values of the variables, on which the
formula takes on the value {\it true}.
The {\it CNF Satisfiability Problem (CNF-SAT)} is a version of the
Satisfiability Problem, where the Boolean formula (1.1) is specified
in the {\it Conjunctive Normal Form (CNF)}, that means that it is a
conjunction of {\it clauses}, where a clause is a disjunction of
{\it literals}, and a literal is a variable or its negation.
For example:
$$(x_1\vee x_2)\;\&\;(\neg x_2\vee x_3\vee\neg x_4)\;\&\;(\neg
x_1\vee x_4).\eqno(1.2)$$
Here $x_1$, $x_2$, $x_3$, $x_4$ are Boolean variables to be assigned,
$\neg$ means
negation (logical {\it not}), $\vee$ means disjunction (logical
{\it or}), and $\&$ means conjunction (logical {\it and}). One may
note that the formula (1.2) is {\it satisfiable}, because on
$x_1$ = {\it true}, $x_2$ = {\it false}, $x_3$ = {\it false}, and
$x_4$ = {\it true} it takes on the value {\it true}. If a formula
is not satisfiable, it is called {\it unsatisfiable}, that means that
it takes on the value {\it false} on any values of its variables.
Any CNF-SAT problem can be easily translated to a 0-1 programming
problem as follows.\linebreak A Boolean variable $x$ can be modeled by
a binary variable in a natural way: $x=1$ means that $x$ takes on the
value {\it true}, and $x=0$ means that $x$ takes on the value
{\it false}. Then, if a literal is a negated variable, i.e. $t=\neg x$,
it can be expressed as $t=1-x$. Since a formula in CNF is a conjunction
of clauses, to provide its satisfiability we should require all its
clauses to take on the value {\it true}. A particular clause is
a disjunction of literals:
$$t\vee t'\vee t''\dots ,\eqno(1.3)$$
so it takes on the value {\it true} iff at least one of its literals
takes on the value {\it true}, that can be expressed as the following
inequality constraint:
$$t+t'+t''+\dots\geq 1.\eqno(1.4)$$
Note that no objective function is used in this case, because only
a feasible solution needs to be found.
For example, the formula (1.2) can be translated to the following
constraints:
$$\begin{array}{c@{\ }c@{\ }c@{\ }c@{\ }c@{\ }c@{\ }c@{\ }c@{\ }c}
x_1&+&x_2&&&&&\geq&1\\
&&(1-x_2)&+&x_3&+&(1-x_4)&\geq&1\\
(1-x_1)&&&&&+&x_4&\geq&1\\
\end{array}$$
$$x_1, x_2, x_3, x_4\in\{0,1\}$$
Carrying out all constant terms to the right-hand side gives
corresponding 0-1 programming problem in the standard format:
$$\begin{array}{r@{\ }c@{\ }c@{\ }c@{\ }c@{\ }c@{\ }c@{\ }c@{\ }r}
x_1&+&x_2&&&&&\geq&1\\
&-&x_2&+&x_3&-&x_4&\geq&-1\\
-x_1&&&&&+&x_4&\geq&0\\
\end{array}$$
$$x_1, x_2, x_3, x_4\in\{0,1\}$$
In general case translation of a CNF-SAT problem results in the
following 0-1 programming problem:
$$\sum_{j\in J^+_i}x_j-\sum_{j\in J^-_i}x_j\geq 1-|J^-_i|,
\ \ \ i=1,\dots,m\eqno(1.5)$$
$$x_j\in\{0,1\},\ \ \ j=1,\dots,n\eqno(1.6)$$
where $n$ is the number of variables, $m$ is the number of clauses
(inequality constraints),\linebreak $J^+_i\subseteq\{1,\dots,n\}$ is
a subset of variables, whose literals in $i$-th clause do not have
negation, and $J^-_i\subseteq\{1,\dots,n\}$ is a subset of variables,
whose literals in $i$-th clause are negations of that variables. It is
assumed that $J^+_i\cap J^-_i=\varnothing$ for all $i$.
\section{GLPK API Routines}
\subsection{glp\_read\_cnfsat --- read CNF-SAT problem data in DIMACS
format}
\synopsis
\begin{verbatim}
int glp_read_cnfsat(glp_prob *P, const char *fname);
\end{verbatim}
\description
The routine \verb|glp_read_cnfsat| reads the CNF-SAT problem data from
a text file in DIMACS format and automatically translates the data to
corresponding 0-1 programming problem instance (1.5)--(1.6).
The parameter \verb|P| specifies the problem object, to which the
0-1 programming problem instance should be stored. Note that before
reading data the current content of the problem object is completely
erased with the routine \verb|glp_erase_prob|.
The character string \verb|fname| specifies the name of a text file
to be read in. (If the file name ends with the suffix `\verb|.gz|',
the file is assumed to be compressed, in which case the routine
decompresses it ``on the fly''.)
\newpage
\returns
If the operation was successful, the routine returns zero. Otherwise,
it prints an error message and returns non-zero.
\para{DIMACS CNF-SAT problem format}\footnote{This material is based on
the paper ``Satisfiability Suggested Format'', which is publicly
available at {\tt http://dimacs.rutgers.edu/}.}
The DIMACS input file is a plain ASCII text file. It contains lines of
several types described below. A line is terminated with an end-of-line
character. Fields in each line are separated by at least one blank
space.
\para{Comment lines.} Comment lines give human-readable information
about the file and are ignored by programs. Comment lines can appear
anywhere in the file. Each comment line begins with a lower-case
character \verb|c|.
\begin{verbatim}
c This is a comment line
\end{verbatim}
\para{Problem line.} There is one problem line per data file. The
problem line must appear before any clause lines. It has the following
format:
\begin{verbatim}
p cnf VARIABLES CLAUSES
\end{verbatim}
\noindent
The lower-case character \verb|p| signifies that this is a problem
line. The three character problem designator \verb|cnf| identifies the
file as containing specification information for the CNF-SAT problem.
The \verb|VARIABLES| field contains an integer value specifying $n$,
the number of variables in the instance. The \verb|CLAUSES| field
contains an integer value specifying $m$, the number of clauses in the
instance.
\para{Clauses.} The clauses appear immediately after the problem
line. The variables are assumed to be numbered from 1 up to $n$. It is
not necessary that every variable appears in the instance. Each clause
is represented by a sequence of numbers separated by either a space,
tab, or new-line character. The non-negated version of a variable $j$
is represented by $j$; the negated version is represented by $-j$. Each
clause is terminated by the value 0. Unlike many formats that represent
the end of a clause by a new-line character, this format allows clauses
to be on multiple lines.
\para{Example.} Below here is an example of the data file in DIMACS
format corresponding to the CNF-SAT problem (1.2).
\begin{footnotesize}
\begin{verbatim}
c sample.cnf
c
c This is an example of the CNF-SAT problem data
c in DIMACS format.
c
p cnf 4 3
1 2 0
-4 3
-2 0
-1 4 0
c
c eof
\end{verbatim}
\end{footnotesize}
\newpage
\subsection{glp\_check\_cnfsat --- check for CNF-SAT problem instance}
\synopsis
\begin{verbatim}
int glp_check_cnfsat(glp\_prob *P);
\end{verbatim}
\description
The routine \verb|glp_check_cnfsat| checks if the specified problem
object \verb|P| contains a 0-1 programming problem instance in the
format (1.5)--(1.6) and therefore encodes a CNF-SAT problem instance.
\returns
If the specified problem object has the format (1.5)--(1.6), the
routine returns zero, otherwise non-zero.
\subsection{glp\_write\_cnfsat --- write CNF-SAT problem data in DIMACS
format}
\synopsis
\begin{verbatim}
int glp_write_cnfsat(glp_prob *P, const char *fname);
\end{verbatim}
\description
The routine \verb|glp_write_cnfsat| automatically translates the
specified 0-1 programming problem instance (1.5)--(1.6) to a CNF-SAT
problem instance and writes the problem data to a text file in DIMACS
format.
The parameter \verb|P| is the problem object, which should specify
a 0-1 programming problem instance in the format (1.5)--(1.6).
The character string \verb|fname| specifies a name of the output text
file to be written. (If the file name ends with suffix `\verb|.gz|',
the file is assumed to be compressed, in which case the routine
performs automatic compression on writing that file.)
\returns
If the operation was successful, the routine returns zero. Otherwise,
it prints an error message and returns non-zero.
\subsection{glp\_minisat1 --- solve CNF-SAT problem instance with
MiniSat solver}
\synopsis
\begin{verbatim}
int glp_minisat1(glp_prob *P);
\end{verbatim}
\description
The routine \verb|glp_minisat1| is a driver to MiniSat, a CNF-SAT
solver developed by Niklas E\'en and Niklas S\"orensson, Chalmers
University of Technology, Sweden.\footnote{The MiniSat software module
is {\it not} part of GLPK, but is used with GLPK and included in the
distribution.}
\newpage
It is assumed that the specified problem object \verb|P| contains
a 0-1 programming problem instance in the format (1.5)--(1.6) and
therefore encodes a CNF-SAT problem instance.
If the problem instance has been successfully solved to the end, the
routine \verb|glp_minisat1| returns 0. In this case the routine
\verb|glp_mip_status| can be used to determine the solution status:
\begin{itemize}
\item {\tt GLP\_OPT} means that the solver found an integer feasible
solution and therefore the corresponding CNF-SAT instance is
satisfiable;
\item {\tt GLP\_NOFEAS} means that no integer feasible solution exists
and therefore the corresponding CNF-SAT instance is unsatisfiable.
\end{itemize}
If an integer feasible solution was found, corresponding values of
binary variables can be retrieved with the routine
\verb|glp_mip_col_val|.
\returns
\begin{retlist}
0 & The MIP problem instance has been successfully solved. (This code
does {\it not} necessarily mean that the solver has found feasible
solution. It only means that the solution process was successful.)\\
{\tt GLP\_EDATA} & The specified problem object contains a MIP
instance which does {\it not} have the format (1.5)--(1.6).\\
{\tt GLP\_EFAIL} & The solution process was unsuccessful because of
the solver failure.\\
\end{retlist}
\subsection{glp\_intfeas1 --- solve integer feasibility problem}
\synopsis
\begin{verbatim}
int glp_intfeas1(glp_prob *P, int use_bound, int obj_bound);
\end{verbatim}
\description
The routine \verb|glp_intfeas1| is a tentative implementation of
an integer feasibility solver based on a CNF-SAT solver (currently
it is MiniSat; see Subsection 2.4).
If the parameter \verb|use_bound| is zero, the routine searches for
{\it any} integer feasibile solution to the specified integer
programming problem. Note that in this case the objective function is
ignored.
If the parameter \verb|use_bound| is non-zero, the routine searches for
an integer feasible solution, which provides a value of the objective
function not worse than \verb|obj_bound|. In other word, the parameter
\verb|obj_bound| specifies an upper (in case of minimization) or lower
(in case of maximization) bound to the objective function.
If the specified problem has been successfully solved to the end, the
routine \verb|glp_intfeas1| returns 0. In this case the routine
\verb|glp_mip_status| can be used to determine the solution status:
\begin{itemize}
\item {\tt GLP\_FEAS} means that the solver found an integer feasible
solution;
\item {\tt GLP\_NOFEAS} means that the problem has no integer feasible
solution (if {\tt use\_bound} is zero) or it has no integer feasible
solution, which is not worse than {\tt obj\_bound} (if {\tt use\_bound}
is non-zero).
\end{itemize}
\newpage
If an integer feasible solution was found, corresponding values of
variables (columns) can be retrieved with the routine
\verb|glp_mip_col_val|.
\para{Usage Notes}
The integer programming problem specified by the parameter \verb|P|
should satisfy to the following requirements:
\begin{enumerate}
\item All variables (columns) should be either binary ({\tt GLP\_BV})
or fixed at integer values ({\tt GLP\_FX}).
\item All constraint and objective coefficients should be integer
numbers in the range\linebreak $[-2^{31},\ +2^{31}-1]$.
\end{enumerate}
Though there are no special requirements to the constraints,
currently the routine \verb|glp_intfeas1| is efficient mainly for
problems, where most constraints (rows) fall into the following three
classes:
\begin{enumerate}
\item Covering inequalities
$$\sum_{j}t_j\geq 1,$$
where $t_j=x_j$ or $t_j=1-x_j$, $x_j$ is a binary variable.
\item Packing inequalities
$$\sum_{j}t_j\leq 1.$$
\item Partitioning equalities (SOS1 constraints)
$$\sum_{j}t_j=1.$$
\end{enumerate}
\returns
\begin{retlist}
0 & The problem has been successfully solved. (This code does
{\it not} necessarily mean that the solver has found an integer
feasible solution. It only means that the solution process was
successful.) \\
{\tt GLP\_EDATA} & The specified problem object does not satisfy
to the requirements listed in Paragraph `Usage Notes'. \\
{\tt GLP\_ERANGE} & An integer overflow occured on translating the
specified problem to a CNF-SAT problem. \\
{\tt GLP\_EFAIL} & The solution process was unsuccessful because of
the solver failure. \\
\end{retlist}
\end{document}

BIN
resources/3rdparty/glpk-4.53/doc/glpk.pdf

167
resources/3rdparty/glpk-4.53/doc/glpk.tex

@ -0,0 +1,167 @@
%* glpk.tex *%
%***********************************************************************
% This code is part of GLPK (GNU Linear Programming Kit).
%
% Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
% 2009, 2010, 2011, 2013 Andrew Makhorin, Department for Applied
% Informatics, Moscow Aviation Institute, Moscow, Russia. All rights
% reserved. E-mail: <mao@gnu.org>.
%
% GLPK is free software: you can redistribute it and/or modify it
% under the terms of the GNU General Public License as published by
% the Free Software Foundation, either version 3 of the License, or
% (at your option) any later version.
%
% GLPK is distributed in the hope that it will be useful, but WITHOUT
% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
% License for more details.
%
% You should have received a copy of the GNU General Public License
% along with GLPK. If not, see <http://www.gnu.org/licenses/>.
%***********************************************************************
\documentclass[11pt]{report}
\usepackage{amssymb}
\usepackage[dvipdfm,linktocpage,colorlinks,linkcolor=blue,
urlcolor=blue]{hyperref}
\usepackage{indentfirst}
\usepackage{lscape}
\usepackage[all]{xy}
\setlength{\textwidth}{6.5in}
\setlength{\textheight}{8.5in}
\setlength{\oddsidemargin}{0in}
\setlength{\topmargin}{0in}
\setlength{\headheight}{0in}
\setlength{\headsep}{0in}
\setlength{\footskip}{0.5in}
\setlength{\parindent}{16pt}
\setlength{\parskip}{5pt}
\setlength{\topsep}{0pt}
\setlength{\partopsep}{0pt}
\setlength{\itemsep}{\parskip}
\setlength{\parsep}{0pt}
\setlength{\leftmargini}{\parindent}
\renewcommand{\labelitemi}{---}
\def\para#1{\noindent{\bf#1}}
\def\synopsis{\para{Synopsis}}
\def\description{\para{Description}}
\def\returns{\para{Returns}}
\renewcommand\contentsname{\sf\bfseries Contents}
\renewcommand\chaptername{\sf\bfseries Chapter}
\renewcommand\appendixname{\sf\bfseries Appendix}
\newenvironment{retlist}
{ \def\arraystretch{1.5}
\noindent
\begin{tabular}{@{}p{1in}@{}p{5.5in}@{}}
}
{\end{tabular}}
\begin{document}
\thispagestyle{empty}
\begin{center}
\vspace*{1.5in}
\begin{huge}
\sf\bfseries GNU Linear Programming Kit
\end{huge}
\vspace{0.5in}
\begin{LARGE}
\sf Reference Manual
\end{LARGE}
\vspace{0.5in}
\begin{LARGE}
\sf for GLPK Version 4.52
\end{LARGE}
\vspace{0.5in}
\begin{Large}
\sf (DRAFT, July 2013)
\end{Large}
\end{center}
\newpage
\vspace*{1in}
\vfill
\noindent
The GLPK package is part of the GNU Project released under the aegis of
GNU.
\noindent
Copyright \copyright{} 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
2008, 2009, 2010, 2011, 2013 Andrew Makhorin, Department for Applied
Informatics, Moscow Aviation Institute, Moscow, Russia. All rights
reserved.
\noindent
Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
02110-1301, USA.
\noindent
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
preserved on all copies.
\noindent
Permission is granted to copy and distribute modified versions of this
manual under the conditions for verbatim copying, provided also that
the entire resulting derived work is distributed under the terms of
a permission notice identical to this one.
\noindent
Permission is granted to copy and distribute translations of this
manual into another language, under the above conditions for modified
versions.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newpage
{\setlength{\parskip}{0pt}
\tableofcontents
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\include{glpk01}
\include{glpk02}
\include{glpk03}
\include{glpk04}
\include{glpk05}
\include{glpk06}
\appendix
\include{glpk07}
\include{glpk08}
\include{glpk09}
\include{glpk10}
\include{glpk11}
\include{glpk12}
\end{document}

343
resources/3rdparty/glpk-4.53/doc/glpk01.tex

@ -0,0 +1,343 @@
%* glpk01.tex *%
\chapter{Introduction}
GLPK (\underline{G}NU \underline{L}inear \underline{P}rogramming
\underline{K}it) is a set of routines written in the ANSI C programming
language and organized in the form of a callable library. It is
intended for solving linear programming (LP), mixed integer programming
(MIP), and other related problems.
\section{LP problem}
\label{seclp}
GLPK assumes the following formulation of {\it linear programming (LP)}
problem:
\medskip\noindent
\hspace{.5in} minimize (or maximize)
$$z = c_1x_{m+1} + c_2x_{m+2} + \dots + c_nx_{m+n} + c_0 \eqno (1.1)$$
\hspace{.5in} subject to linear constraints
$$
\begin{array}{r@{\:}c@{\:}r@{\:}c@{\:}r@{\:}c@{\:}r}
x_1&=&a_{11}x_{m+1}&+&a_{12}x_{m+2}&+ \dots +&a_{1n}x_{m+n} \\
x_2&=&a_{21}x_{m+1}&+&a_{22}x_{m+2}&+ \dots +&a_{2n}x_{m+n} \\
\multicolumn{7}{c}
{.\ \ .\ \ .\ \ .\ \ .\ \ .\ \ .\ \ .\ \ .\ \ .\ \ .\ \ .\ \ .\ \ .} \\
x_m&=&a_{m1}x_{m+1}&+&a_{m2}x_{m+2}&+ \dots +&a_{mn}x_{m+n} \\
\end{array} \eqno (1.2)
$$
\hspace{.5in} and bounds of variables
$$
\begin{array}{r@{\:}c@{\:}c@{\:}c@{\:}l}
l_1&\leq&x_1&\leq&u_1 \\
l_2&\leq&x_2&\leq&u_2 \\
\multicolumn{5}{c}{.\ \ .\ \ .\ \ .\ \ .}\\
l_{m+n}&\leq&x_{m+n}&\leq&u_{m+n} \\
\end{array} \eqno (1.3)
$$
\medskip\noindent
where: $x_1, x_2, \dots, x_m$ are auxiliary variables;
$x_{m+1}, x_{m+2}, \dots, x_{m+n}$ are structural variables;
$z$ is the objective function;
$c_1, c_2, \dots, c_n$ are objective coefficients;
$c_0$ is the constant term (``shift'') of the objective function;
$a_{11}, a_{12}, \dots, a_{mn}$ are constraint coefficients;
$l_1, l_2, \dots, l_{m+n}$ are lower bounds of variables;
$u_1, u_2, \dots, u_{m+n}$ are upper bounds of variables.
Auxiliary variables are also called {\it rows}, because they correspond
to rows of the constraint matrix (i.e. a matrix built of the constraint
coefficients). Similarly, structural variables are also called
{\it columns}, because they correspond to columns of the constraint
matrix.
Bounds of variables can be finite as well as infinite. Besides, lower
and upper bounds can be equal to each other. Thus, the following types
of variables are possible:
\begin{center}
\begin{tabular}{r@{}c@{}ll}
\multicolumn{3}{c}{Bounds of variable} & Type of variable \\
\hline
$-\infty <$ &$\ x_k\ $& $< +\infty$ & Free (unbounded) variable \\
$l_k \leq$ &$\ x_k\ $& $< +\infty$ & Variable with lower bound \\
$-\infty <$ &$\ x_k\ $& $\leq u_k$ & Variable with upper bound \\
$l_k \leq$ &$\ x_k\ $& $\leq u_k$ & Double-bounded variable \\
$l_k =$ &$\ x_k\ $& $= u_k$ & Fixed variable \\
\end{tabular}
\end{center}
\noindent
Note that the types of variables shown above are applicable to
structural as well as to auxiliary variables.
To solve the LP problem (1.1)---(1.3) is to find such values of all
structural and auxiliary variables, which:
\vspace*{-10pt}
\begin{itemize}\setlength{\itemsep}{0pt}
\item satisfy to all the linear constraints (1.2), and
\item are within their bounds (1.3), and
\item provide smallest (in case of minimization) or largest (in case of
maximization) value of the objective function (1.1).
\end{itemize}
\section{MIP problem}
{\it Mixed integer linear programming (MIP)} problem is an LP problem
in which some variables are additionally required to be integer.
GLPK assumes that MIP problem has the same formulation as ordinary
(pure) LP problem (1.1)---(1.3), i.e. includes auxiliary and structural
variables, which may have lower and/or upper bounds. However, in case
of MIP problem some variables may be required to be integer. This
additional constraint means that a value of each {\it integer variable}
must be only integer number. (Should note that GLPK allows only
structural variables to be of integer kind.)
\section{Using the package}
\subsection{Brief example}
In order to understand what GLPK is from the user's standpoint,
consider the following simple LP problem:
\medskip
\noindent
\hspace{.5in} maximize
$$z = 10 x_1 + 6 x_2 + 4 x_3$$
\hspace{.5in} subject to
$$
\begin{array}{r@{\:}c@{\:}r@{\:}c@{\:}r@{\:}c@{\:}r}
x_1 &+&x_2 &+&x_3 &\leq 100 \\
10 x_1 &+& 4 x_2 & +&5 x_3 & \leq 600 \\
2 x_1 &+& 2 x_2 & +& 6 x_3 & \leq 300 \\
\end{array}
$$
\hspace{.5in} where all variables are non-negative
$$x_1 \geq 0, \ x_2 \geq 0, \ x_3 \geq 0$$
At first, this LP problem should be transformed to the standard form
(1.1)---(1.3). This can be easily done by introducing auxiliary
variables, by one for each original inequality constraint. Thus, the
problem can be reformulated as follows:
\medskip
\noindent
\hspace{.5in} maximize
$$z = 10 x_1 + 6 x_2 + 4 x_3$$
\hspace{.5in} subject to
$$
\begin{array}{r@{\:}c@{\:}r@{\:}c@{\:}r@{\:}c@{\:}r}
p& = &x_1 &+&x_2 &+&x_3 \\
q& = &10 x_1 &+& 4 x_2 &+& 5 x_3 \\
r& = &2 x_1 &+& 2 x_2 &+& 6 x_3 \\
\end{array}
$$
\hspace{.5in} and bounds of variables
$$
\begin{array}{ccc}
\nonumber -\infty < p \leq 100 && 0 \leq x_1 < +\infty \\
\nonumber -\infty < q \leq 600 && 0 \leq x_2 < +\infty \\
\nonumber -\infty < r \leq 300 && 0 \leq x_3 < +\infty \\
\end{array}
$$
\medskip
where $p, q, r$ are auxiliary variables (rows), and $x_1, x_2, x_3$ are
structural variables (columns).
The example C program shown below uses GLPK API routines in order to
solve this LP problem.\footnote{If you just need to solve LP or MIP
instance, you may write it in MPS or CPLEX LP format and then use the
GLPK stand-alone solver to obtain a solution. This is much less
time-consuming than programming in C with GLPK API routines.}
\begin{footnotesize}
\begin{verbatim}
/* sample.c */
#include <stdio.h>
#include <stdlib.h>
#include <glpk.h>
int main(void)
{ glp_prob *lp;
int ia[1+1000], ja[1+1000];
double ar[1+1000], z, x1, x2, x3;
s1: lp = glp_create_prob();
s2: glp_set_prob_name(lp, "sample");
s3: glp_set_obj_dir(lp, GLP_MAX);
s4: glp_add_rows(lp, 3);
s5: glp_set_row_name(lp, 1, "p");
s6: glp_set_row_bnds(lp, 1, GLP_UP, 0.0, 100.0);
s7: glp_set_row_name(lp, 2, "q");
s8: glp_set_row_bnds(lp, 2, GLP_UP, 0.0, 600.0);
s9: glp_set_row_name(lp, 3, "r");
s10: glp_set_row_bnds(lp, 3, GLP_UP, 0.0, 300.0);
s11: glp_add_cols(lp, 3);
s12: glp_set_col_name(lp, 1, "x1");
s13: glp_set_col_bnds(lp, 1, GLP_LO, 0.0, 0.0);
s14: glp_set_obj_coef(lp, 1, 10.0);
s15: glp_set_col_name(lp, 2, "x2");
s16: glp_set_col_bnds(lp, 2, GLP_LO, 0.0, 0.0);
s17: glp_set_obj_coef(lp, 2, 6.0);
s18: glp_set_col_name(lp, 3, "x3");
s19: glp_set_col_bnds(lp, 3, GLP_LO, 0.0, 0.0);
s20: glp_set_obj_coef(lp, 3, 4.0);
s21: ia[1] = 1, ja[1] = 1, ar[1] = 1.0; /* a[1,1] = 1 */
s22: ia[2] = 1, ja[2] = 2, ar[2] = 1.0; /* a[1,2] = 1 */
s23: ia[3] = 1, ja[3] = 3, ar[3] = 1.0; /* a[1,3] = 1 */
s24: ia[4] = 2, ja[4] = 1, ar[4] = 10.0; /* a[2,1] = 10 */
s25: ia[5] = 3, ja[5] = 1, ar[5] = 2.0; /* a[3,1] = 2 */
s26: ia[6] = 2, ja[6] = 2, ar[6] = 4.0; /* a[2,2] = 4 */
s27: ia[7] = 3, ja[7] = 2, ar[7] = 2.0; /* a[3,2] = 2 */
s28: ia[8] = 2, ja[8] = 3, ar[8] = 5.0; /* a[2,3] = 5 */
s29: ia[9] = 3, ja[9] = 3, ar[9] = 6.0; /* a[3,3] = 6 */
s30: glp_load_matrix(lp, 9, ia, ja, ar);
s31: glp_simplex(lp, NULL);
s32: z = glp_get_obj_val(lp);
s33: x1 = glp_get_col_prim(lp, 1);
s34: x2 = glp_get_col_prim(lp, 2);
s35: x3 = glp_get_col_prim(lp, 3);
s36: printf("\nz = %g; x1 = %g; x2 = %g; x3 = %g\n",
z, x1, x2, x3);
s37: glp_delete_prob(lp);
return 0;
}
/* eof */
\end{verbatim}
\end{footnotesize}
The statement \verb|s1| creates a problem object. Being created the
object is initially empty. The statement \verb|s2| assigns a symbolic
name to the problem object.
The statement \verb|s3| calls the routine \verb|glp_set_obj_dir| in
order to set the optimization direction flag, where \verb|GLP_MAX|
means maximization.
The statement \verb|s4| adds three rows to the problem object.
The statement \verb|s5| assigns the symbolic name `\verb|p|' to the
first row, and the statement \verb|s6| sets the type and bounds of the
first row, where \verb|GLP_UP| means that the row has an upper bound.
The statements \verb|s7|, \verb|s8|, \verb|s9|, \verb|s10| are used in
the same way in order to assign the symbolic names `\verb|q|' and
`\verb|r|' to the second and third rows and set their types and bounds.
The statement \verb|s11| adds three columns to the problem object.
The statement \verb|s12| assigns the symbolic name `\verb|x1|' to the
first column, the statement \verb|s13| sets the type and bounds of the
first column, where \verb|GLP_LO| means that the column has an lower
bound, and the statement \verb|s14| sets the objective coefficient for
the first column. The statements \verb|s15|---\verb|s20| are used in
the same way in order to assign the symbolic names `\verb|x2|' and
`\verb|x3|' to the second and third columns and set their types,
bounds, and objective coefficients.
The statements \verb|s21|---\verb|s29| prepare non-zero elements of the
constraint matrix (i.e. constraint coefficients). Row indices of each
element are stored in the array \verb|ia|, column indices are stored in
the array \verb|ja|, and numerical values of corresponding elements are
stored in the array \verb|ar|. Then the statement \verb|s30| calls
the routine \verb|glp_load_matrix|, which loads information from these
three arrays into the problem object.
Now all data have been entered into the problem object, and therefore
the statement \verb|s31| calls the routine \verb|glp_simplex|, which is
a driver to the simplex method, in order to solve the LP problem. This
routine finds an optimal solution and stores all relevant information
back into the problem object.
The statement \verb|s32| obtains a computed value of the objective
function, and the statements \verb|s33|---\verb|s35| obtain computed
values of structural variables (columns), which correspond to the
optimal basic solution found by the solver.
The statement \verb|s36| writes the optimal solution to the standard
output. The printout may look like follows:
\begin{footnotesize}
\begin{verbatim}
* 0: objval = 0.000000000e+00 infeas = 0.000000000e+00 (0)
* 2: objval = 7.333333333e+02 infeas = 0.000000000e+00 (0)
OPTIMAL SOLUTION FOUND
z = 733.333; x1 = 33.3333; x2 = 66.6667; x3 = 0
\end{verbatim}
\end{footnotesize}
Finally, the statement \verb|s37| calls the routine
\verb|glp_delete_prob|, which frees all the memory allocated to the
problem object.
\subsection{Compiling}
The GLPK package has the only header file \verb|glpk.h|, which should
be available on compiling a C (or C++) program using GLPK API routines.
If the header file is installed in the default location
\verb|/usr/local/include|, the following typical command may be used to
compile, say, the example C program described above with the GNU C
compiler:
\begin{verbatim}
$ gcc -c sample.c
\end{verbatim}
If \verb|glpk.h| is not in the default location, the corresponding
directory containing it should be made known to the C compiler through
\verb|-I| option, for example:
\begin{verbatim}
$ gcc -I/foo/bar/glpk-4.15/include -c sample.c
\end{verbatim}
In any case the compilation results in an object file \verb|sample.o|.
\subsection{Linking}
The GLPK library is a single file \verb|libglpk.a|. (On systems which
support shared libraries there may be also a shared version of the
library \verb|libglpk.so|.)
If the library is installed in the default
location \verb|/usr/local/lib|, the following typical command may be
used to link, say, the example C program described above against with
the library:
\begin{verbatim}
$ gcc sample.o -lglpk -lm
\end{verbatim}
If the GLPK library is not in the default location, the corresponding
directory containing it should be made known to the linker through
\verb|-L| option, for example:
\begin{verbatim}
$ gcc -L/foo/bar/glpk-4.15 sample.o -lglpk -lm
\end{verbatim}
Depending on configuration of the package linking against with the GLPK
library may require optional libraries, in which case these libraries
should be also made known to the linker, for example:
\begin{verbatim}
$ gcc sample.o -lglpk -lgmp -lm
\end{verbatim}
For more details about configuration options of the GLPK package see
Appendix \ref{install}, page \pageref{install}.
%* eof *%

3428
resources/3rdparty/glpk-4.53/doc/glpk02.tex
File diff suppressed because it is too large
View File

1572
resources/3rdparty/glpk-4.53/doc/glpk03.tex
File diff suppressed because it is too large
View File

1385
resources/3rdparty/glpk-4.53/doc/glpk04.tex
File diff suppressed because it is too large
View File

1090
resources/3rdparty/glpk-4.53/doc/glpk05.tex
File diff suppressed because it is too large
View File

441
resources/3rdparty/glpk-4.53/doc/glpk06.tex

@ -0,0 +1,441 @@
%* glpk06.tex *%
\chapter{Miscellaneous API Routines}
\section{GLPK environment routines}
\subsection{glp\_init\_env --- initialize GLPK environment}
\synopsis
\begin{verbatim}
int glp_init_env(void);
\end{verbatim}
\description
The routine \verb|glp_init_env| initializes the GLPK environment.
Normally the application program does not need to call this routine,
because it is called automatically on the first call to any API
routine.
\returns
\begin{retlist}
0 & initialization successful;\\
1 & environment is already initialized;\\
2 & initialization failed (insufficient memory);\\
3 & initialization failed (unsupported programming model).\\
\end{retlist}
\subsection{glp\_version --- determine library version}
\synopsis
\begin{verbatim}
const char *glp_version(void);
\end{verbatim}
\returns
The routine \verb|glp_version| returns a pointer to a null-terminated
character string, which specifies the version of the GLPK library in
the form \verb|"X.Y"|, where `\verb|X|' is the major version number,
and `\verb|Y|' is the minor version number, for example, \verb|"4.16"|.
\newpage
\subsection{glp\_free\_env --- free GLPK environment}
\synopsis
\begin{verbatim}
int glp_free_env(void);
\end{verbatim}
\description
The routine \verb|glp_free_env| frees all resources used by GLPK
routines (memory blocks, etc.) which are currently still in use.
Normally the application program does not need to call this routine,
because GLPK routines always free all unused resources. However, if
the application program even has deleted all problem objects, there
will be several memory blocks still allocated for the internal library
needs. For some reasons the application program may want GLPK to free
this memory, in which case it should call \verb|glp_free_env|.
Note that a call to \verb|glp_free_env| invalidates all problem objects
which still exist.
\returns
\begin{retlist}
0 & termination successful;\\
1 & environment is inactive (was not initialized).\\
\end{retlist}
\subsection{glp\_printf --- write formatted output to terminal}
\synopsis
\begin{verbatim}
void glp_printf(const char *fmt, ...);
\end{verbatim}
\description
The routine \verb|glp_printf| uses the format control string
\verb|fmt| to format its parameters and writes the formatted output to
the terminal.
This routine is a replacement of the standard C function
\verb|printf| and used by all GLPK routines to perform terminal
output. The application program may use \verb|glp_printf| for the same
purpose that allows controlling its terminal output with the routines
\verb|glp_term_out| and \verb|glp_term_hook|.
\subsection{glp\_vprintf --- write formatted output to terminal}
\synopsis
\begin{verbatim}
void glp_vprintf(const char *fmt, va_list arg);
\end{verbatim}
\description
The routine \verb|glp_vprintf| uses the format control string
\verb|fmt| to format its parameters specified by the list \verb|arg|
and writes the formatted output to the terminal.
This routine is a replacement of the standard C function
\verb|vprintf| and used by all GLPK routines to perform terminal
output. The application program may use \verb|glp_vprintf| for the same
purpose that allows controlling its terminal output with the routines
\verb|glp_term_out| and \verb|glp_term_hook|.
\newpage
\subsection{glp\_term\_out --- enable/disable terminal output}
\synopsis
\begin{verbatim}
int glp_term_out(int flag);
\end{verbatim}
\description
Depending on the parameter flag the routine \verb|glp_term_out| enables
or disables terminal output performed by glpk routines:
\verb|GLP_ON | --- enable terminal output;
\verb|GLP_OFF| --- disable terminal output.
\returns
The routine \verb|glp_term_out| returns the previous value of the
terminal output flag.
\subsection{glp\_term\_hook --- intercept terminal output}
\synopsis
\begin{verbatim}
void glp_term_hook(int (*func)(void *info, const char *s), void *info);
\end{verbatim}
\description
The routine \verb|glp_term_hook| installs the user-defined hook routine
to intercept all terminal output performed by GLPK routines.
%This feature can be used to redirect the terminal output to other
%destination, for example, to a file or a text window.
The parameter {\it func} specifies the user-defined hook routine. It is
called from an internal printing routine, which passes to it two
parameters: {\it info} and {\it s}. The parameter {\it info} is a
transit pointer specified in corresponding call to the routine
\verb|glp_term_hook|; it may be used to pass some additional information
to the hook routine. The parameter {\it s} is a pointer to the null
terminated character string, which is intended to be written to the
terminal. If the hook routine returns zero, the printing routine writes
the string {\it s} to the terminal in a usual way; otherwise, if the
hook routine returns non-zero, no terminal output is performed.
To uninstall the hook routine both parameters {\it func} and {\it info}
should be specified as \verb|NULL|.
\para{Example}
\begin{footnotesize}
\begin{verbatim}
static int hook(void *info, const char *s)
{ FILE *foo = info;
fputs(s, foo);
return 1;
}
int main(void)
{ FILE *foo;
. . .
glp_term_hook(hook, foo); /* redirect terminal output */
. . .
glp_term_hook(NULL, NULL); /* resume terminal output */
. . .
}
\end{verbatim}
\end{footnotesize}
\newpage
\subsection{glp\_open\_tee --- start copying terminal output}
\synopsis
\begin{verbatim}
int glp_open_tee(const char *fname);
\end{verbatim}
\description
The routine \verb|glp_open_tee| starts copying all the terminal output
to an output text file, whose name is specified by the character string
\verb|fname|.
\returns
\begin{retlist}
0 & operation successful;\\
1 & copying terminal output is already active;\\
2 & unable to create output file.\\
\end{retlist}
\subsection{glp\_close\_tee --- stop copying terminal output}
\synopsis
\begin{verbatim}
int glp_close_tee(void);
\end{verbatim}
\description
The routine \verb|glp_close_tee| stops copying the terminal output to
the output text file previously open by the routine \verb|glp_open_tee|
closing that file.
\returns
\begin{retlist}
0 & operation successful;\\
1 & copying terminal output was not started.\\
\end{retlist}
\subsection{glp\_error --- display error message and terminate
execution}
\synopsis
\begin{verbatim}
void glp_error(const char *fmt, ...);
\end{verbatim}
\description
The routine \verb|glp_error| (implemented as a macro) formats its
parameters using the format control string \verb|fmt|, writes the
formatted message to the terminal, and then abnormally terminates the
program.
\newpage
\subsection{glp\_assert --- check logical condition}
\synopsis
\begin{verbatim}
void glp_assert(int expr);
\end{verbatim}
\description
The routine \verb|glp_assert| (implemented as a macro) checks
a logical condition specified by the expression \verb|expr|. If the
condition is true (non-zero), the routine does nothing; otherwise, if
the condition is false (zero), the routine prints an error message and
abnormally terminates the program.
This routine is a replacement of the standard C function \verb|assert|
and used by all GLPK routines to check program logic. The application
program may use \verb|glp_assert| for the same purpose.
\subsection{glp\_error\_hook --- install hook to intercept abnormal
termination}
\synopsis
\begin{verbatim}
void glp_error_hook(void (*func)(void *info), void *info);
\end{verbatim}
\description
The routine \verb|glp_error_hook| installs a user-defined hook routine
to intercept abnormal termination.
The parameter \verb|func| specifies the user-defined hook routine. It
is called from the routine \verb|glp_error| before the latter calls the
abort function to abnormally terminate the application program because
of fatal error. The parameter \verb|info| is a transit pointer,
specified in the corresponding call to the routine
\verb|glp_error_hook|; it may be used to pass some information to the
hook routine.
To uninstall the hook routine the parameters \verb|func| and \verb|info|
should be specified as \verb|NULL|.
If the hook routine returns, the application program is abnormally
terminated. To prevent abnormal termnation the hook routine may perform
a global jump using the standard function \verb|longjmp|, in which case
the application program {\it must} call the routine \verb|glp_free_env|.
\subsection{glp\_malloc --- allocate memory block}
\synopsis
\begin{verbatim}
void *glp_malloc(int size);
\end{verbatim}
\description
The routine \verb|glp_malloc| dynamically allocates a memory block of
\verb|size| bytes long. Note that:
1) the parameter \verb|size| must be positive;
2) being allocated the memory block contains arbitrary data, that is,
it is {\it not} initialized by binary zeros;
3) if the block cannot be allocated due to insufficient memory, the
routine prints an error message and abnormally terminates the program.
This routine is a replacement of the standard C function \verb|malloc|
and used by all GLPK routines for dynamic memory allocation. The
application program may use \verb|glp_malloc| for the same purpose.
\returns
The routine \verb|glp_malloc| returns a pointer to the memory block
allocated. To free this block the routine \verb|glp_free| (not the
standard C function \verb|free|!) must be used.
\subsection{glp\_calloc --- allocate memory block}
\synopsis
\begin{verbatim}
void *glp_calloc(int n, int size);
\end{verbatim}
\description
The routine \verb|glp_calloc| dynamically allocates a memory block of
\verb|n|$\times$\verb|size| bytes long. Note that:
1) both parameters \verb|n| and \verb|size| must be positive;
2) being allocated the memory block contains arbitrary data, that is,
it is {\it not} initialized by binary zeros;
3) if the block cannot be allocated due to insufficient memory, the
routine prints an error message and abnormally terminates the program.
This routine is a replacement of the standard C function \verb|calloc|
(with exception that the block is not cleaned) and used by all GLPK
routines for dynamic memory allocation. The application program may use
\verb|glp_calloc| for the same purpose.
\returns
The routine \verb|glp_calloc| returns a pointer to the memory block
allocated. To free this block the routine \verb|glp_free| (not the
standard C function \verb|free|!) must be used.
\subsection{glp\_free --- free memory block}
\synopsis
\begin{verbatim}
void glp_free(void *ptr);
\end{verbatim}
\description
The routine \verb|glp_free| deallocates a memory block pointed to by
\verb|ptr|, which was previously allocated by the routine
\verb|glp_malloc| or \verb|glp_calloc|. Note that the pointer
\verb|ptr| must be valid and must not be \verb|NULL|.
This routine is a replacement of the standard C function \verb|free|
and used by all GLPK routines for dynamic memory allocation. The
application program may use \verb|glp_free| for the same purpose.
\newpage
\subsection{glp\_mem\_usage --- get memory usage information}
\synopsis
\begin{verbatim}
void glp_mem_usage(int *count, int *cpeak, size_t *total, size_t *tpeak);
\end{verbatim}
\description
The routine \verb|glp_mem_usage| reports some information about
utilization of the memory by the routines \verb|glp_malloc|,
\verb|glp_calloc|, and \verb|glp_free|. Information is stored to
locations specified by corresponding parameters (see below). Any
parameter can be specified as \verb|NULL|, in which case corresponding
information is not stored.
\verb|*count| is the number of currently allocated memory blocks.
\verb|*cpeak| is the peak value of \verb|*count| reached since the
initialization of the GLPK library environment.
\verb|*total| is the total amount, in bytes, of currently allocated
memory blocks.
\verb|*tpeak| is the peak value of \verb|*total| reached since the
initialization of the GLPK library envirionment.
\para{Example}
\begin{footnotesize}
\begin{verbatim}
glp_mem_usage(&count, NULL, NULL, NULL);
printf("%d memory block(s) are still allocated\n", count);
\end{verbatim}
\end{footnotesize}
\subsection{glp\_mem\_limit --- set memory usage limit}
\synopsis
\begin{verbatim}
void glp_mem_limit(int limit);
\end{verbatim}
\description
The routine \verb|glp_mem_limit| limits the amount of memory available
for dynamic allocation (with the routines \verb|glp_malloc| and
\verb|glp_calloc|) to \verb|limit| megabytes.
%* eof *%

258
resources/3rdparty/glpk-4.53/doc/glpk07.tex

@ -0,0 +1,258 @@
%* glpk07.tex *%
\chapter{Installing GLPK on Your Computer}
\label{install}
\section{Downloading the distribution tarball}
The distribution tarball of the most recent version of the GLPK
package can be found on \url{http://ftp.gnu.org/gnu/glpk/} [via http]
and \url{ftp://ftp.gnu.org/gnu/glpk/} [via FTP]. It can also be found
on one of the FTP mirrors; see \url{http://www.gnu.org/prep/ftp.html}.
Please use a mirror if possible.
To make sure that the GLPK distribution tarball you have downloaded is
intact you need to download the corresponding `\verb|.sig|' file and
run a command like this:
\begin{verbatim}
gpg --verify glpk-4.38.tar.gz.sig
\end{verbatim}
\noindent
If that command fails because you do not have the required public key,
run the following command to import it:
\begin{verbatim}
gpg --keyserver keys.gnupg.net --recv-keys 5981E818
\end{verbatim}
\noindent
and then re-run the previous command.
\section{Unpacking the distribution tarball}
The GLPK package (like all other GNU software) is distributed in the
form of packed archive. This is one file named \verb|glpk-X.Y.tar.gz|,
where {\it X} is the major version number and {\it Y} is the minor
version number.
In order to prepare the distribution for installation you need to copy
the GLPK distribution file to a working subdirectory and then unpack
and unarchive the distribution file with the following command:
\begin{verbatim}
tar zx < glpk-X.Y.tar
\end{verbatim}
\newpage
\section{Configuring the package}
After unpacking and unarchiving the GLPK distribution you should
configure the package,\linebreak i.e. automatically tune it for your
platform.
Normally, you should just \verb|cd| to the subdirectory \verb|glpk-X.Y|
and run the configure script, e.g.
\begin{verbatim}
./configure
\end{verbatim}
The `\verb|configure|' shell script attempts to guess correct values
for various system-dependent variables used during compilation. It uses
those values to create a `\verb|Makefile|' in each directory of the
package. It also creates file `\verb|config.h|' containing
platform-dependent definitions. Finally, it creates a shell script
`\verb|config.status|' that you can run in the future to recreate the
current configuration, a file `\verb|config.cache|' that saves the
results of its tests to speed up reconfiguring, and a file
`\verb|config.log|' containing compiler output (useful mainly for
debugging `\verb|configure|').
Running `\verb|configure|' takes about a minute. While it is running,
it displays some informational messages that tell you what it
is doing. If you don't want to see these messages, run
`\verb|configure|' with its standard output redirected to
`\verb|dev/null|'; for example, `\verb|./configure > /dev/null|'.
By default both static and shared versions of the GLPK library will be
compiled. Compilation of the shared librariy can be turned off by
specifying the `\verb|--disable-shared|' option to `\verb|configure|':
\begin{verbatim}
./configure --disable-shared
\end{verbatim}
\noindent
If you encounter problems building the library try using the above
option, because some platforms do not support shared libraries.
The GLPK package has some optional features listed below. By default
all these features are disabled. To enable a feature the corresponding
option should be passed to the configure script.
\verb|--with-gmp | Enable using the GNU MP bignum library
This feature allows the exact simplex solver to use the GNU MP bignum
library. If it is disabled, the exact simplex solver uses the GLPK
bignum module, which provides the same functionality as GNU MP, however,
it is much less efficient.
For details about the GNU MP bignum library see its web page at
\url{http://gmplib.org/}.
\verb|--enable-dl | The same as `\verb|--enable-dl=ltdl|'
\verb|--enable-dl=ltdl | Enable shared library support (GNU)
\verb|--enable-dl=dlfcn | Enable shared library support (POSIX)
Currently this feature is only needed to provide dynamic linking to
ODBC and MySQL shared libraries (see below).
For details about the GNU shared library support see the manual at
\url{http://www.gnu.org/software/libtool/manual/}.
\verb|--enable-odbc |
Enable using ODBC table driver (\verb|libiodbc|)
\verb|--enable-odbc=unix |
Enable using ODBC table driver (\verb|libodbc|)
This feature allows transmitting data between MathProg model objects
and relational databases accessed through ODBC.
For more details about this feature see the supplement ``Using Data
Tables in the GNU MathProg Modeling Language'' (\verb|doc/tables.pdf|).
\verb|--enable-mysql |
Enable using MySQL table driver (\verb|libmysql|)
This feature allows transmitting data between MathProg model objects
and MySQL relational databases.
For more details about this feature see the supplement ``Using Data
Tables in the GNU MathProg Modeling Language'' (\verb|doc/tables.pdf|).
\section{Compiling the package}
Normally, you can compile (build) the package by typing the command:
\begin{verbatim}
make
\end{verbatim}
\noindent
It reads `\verb|Makefile|' generated by `\verb|configure|' and performs
all necessary jobs.
If you want, you can override the `\verb|make|' variables \verb|CFLAGS|
and \verb|LDFLAGS| like this:
\begin{verbatim}
make CFLAGS=-O2 LDFLAGS=-s
\end{verbatim}
To compile the package in a different directory from the one containing
the source code, you must use a version of `\verb|make|' that supports
`\verb|VPATH|' variable, such as GNU `\verb|make|'. `\verb|cd|' to the
directory where you want the object files and executables to go and run
the `\verb|configure|' script. `\verb|configure|' automatically checks
for the source code in the directory that `\verb|configure|' is in and
in `\verb|..|'. If for some reason `\verb|configure|' is not in the
source code directory that you are configuring, then it will report
that it can't find the source code. In that case, run `\verb|configure|'
with the option `\verb|--srcdir=DIR|', where \verb|DIR| is the
directory that contains the source code.
Some systems require unusual options for compilation or linking that
the `\verb|configure|' script does not know about. You can give
`\verb|configure|' initial values for variables by setting them in the
environment. Using a Bourne-compatible shell, you can do that on the
command line like this:
\begin{verbatim}
CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
\end{verbatim}
\noindent
Or on systems that have the `\verb|env|' program, you can do it like
this:
\begin{verbatim}
env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
\end{verbatim}
Here are the `\verb|make|' variables that you might want to override
with environment variables when running `\verb|configure|'.
For these variables, any value given in the environment overrides the
value that `\verb|configure|' would choose:
\verb|CC | C compiler program. The default is `\verb|cc|'.
\verb|INSTALL | Program used to install files. The default value is
`\verb|install|' if you have it,\\
\verb| | otherwise `\verb|cp|'.
For these variables, any value given in the environment is added to the
value that `\verb|configure|' chooses:
\verb|DEFS | Configuration options, in the form
`\verb|-Dfoo -Dbar| \dots'.
\verb|LIBS | Libraries to link with, in the form
`\verb|-lfoo -lbar| \dots'.
\section{Checking the package}
To check the package, i.e. to run some tests included in the package,
you can use the following command:
\begin{verbatim}
make check
\end{verbatim}
\section{Installing the package}
Normally, to install the GLPK package you should type the following
command:
\begin{verbatim}
make install
\end{verbatim}
\noindent
By default, `\verb|make install|' will install the package's files in
`\verb|usr/local/bin|', `\verb|usr/local/lib|', etc. You can specify an
installation prefix other than `\verb|/usr/local|' by giving
`\verb|configure|' the option `\verb|--prefix=PATH|'. Alternately, you
can do so by consistently giving a value for the `\verb|prefix|'
variable when you run `\verb|make|', e.g.
\begin{verbatim}
make prefix=/usr/gnu
make prefix=/usr/gnu install
\end{verbatim}
After installing you can remove the program binaries and object files
from the source directory by typing `\verb|make clean|'. To remove all
files that `\verb|configure|' created (`\verb|Makefile|',
`\verb|config.status|', etc.), just type `\verb|make distclean|'.
The file `\verb|configure.ac|' is used to create `\verb|configure|' by
a program called `\verb|autoconf|'. You only need it if you want to
remake `\verb|configure|' using a newer version of `\verb|autoconf|'.
\section{Uninstalling the package}
To uninstall the GLPK package, i.e. to remove all the package's files
from the system places, you can use the following command:
\begin{verbatim}
make uninstall
\end{verbatim}
%* eof *%

738
resources/3rdparty/glpk-4.53/doc/glpk08.tex

@ -0,0 +1,738 @@
%* glpk08.tex *%
\chapter{MPS Format}
\label{champs}
\section{Fixed MPS Format}
\label{secmps}
The MPS format\footnote{The MPS format was developed in 1960's by IBM
as input format for their mathematical programming system MPS/360.
Today the MPS format is a most widely used format understood by most
mathematical programming packages. This appendix describes only the
features of the MPS format, which are implemented in the GLPK package.}
is intended for coding LP/MIP problem data. This format assumes the
formulation of LP/MIP problem (1.1)---(1.3) (see Section \ref{seclp},
page \pageref{seclp}).
{\it MPS file} is a text file, which contains two types of
cards\footnote{In 1960's MPS file was a deck of 80-column punched
cards, so the author decided to keep the word ``card'', which may be
understood as ``line of text file''.}: indicator cards and data cards.
Indicator cards determine a kind of succeeding data. Each indicator
card has one word in uppercase letters beginning in column 1.
Data cards contain problem data. Each data card is divided into six
fixed fields:
\begin{center}
\begin{tabular}{lcccccc}
& Field 1 & Field 2 & Field 3 & Field 4 & Field 5 & Feld 6 \\
\hline
Columns & 2---3 & 5---12 & 15---22 & 25---36 & 40---47 & 50---61 \\
Contents & Code & Name & Name & Number & Name & Number \\
\end{tabular}
\end{center}
On a particular data card some fields may be optional.
Names are used to identify rows, columns, and some vectors (see below).
Aligning the indicator code in the field 1 to the left margin is
optional.
All names specified in the fields 2, 3, and 5 should contain from 1 up
to 8 arbitrary characters (except control characters). If a name is
placed in the field 3 or 5, its first character should not be the dollar
sign `\verb|$|'. If a name contains spaces, the spaces are ignored.
All numerical values in the fields 4 and 6 should be coded in the form
$sxx$\verb|E|$syy$, where $s$ is the plus `\verb|+|' or the minus
`\verb|-|' sign, $xx$ is a real number with optional decimal point,
$yy$ is an integer decimal exponent. Any number should contain up to 12
characters. If the sign $s$ is omitted, the plus sign is assumed. The
exponent part is optional. If a number contains spaces, the spaces are
ignored.
\newpage
If a card has the asterisk `\verb|*|' in the column 1, this card is
considered as a comment and ignored. Besides, if the first character in
the field 3 or 5 is the dollar sign `\verb|$|', all characters from the
dollar sign to the end of card are considered as a comment and ignored.
MPS file should contain cards in the following order:
\vspace*{-8pt}
\begin{itemize}
\item NAME indicator card;
\item ROWS indicator card;
\item data cards specifying rows (constraints);
\item COLUMNS indicator card;
\item data cards specifying columns (structural variables) and
constraint coefficients;
\item RHS indicator card;
\item data cards specifying right-hand sides of constraints;
\item RANGES indicator card;
\item data cards specifying ranges for double-bounded constraints;
\item BOUNDS indicator card;
\item data cards specifying types and bounds of structural
variables;
\item ENDATA indicator card.
\end{itemize}
\vspace*{-8pt}
{\it Section} is a group of cards consisting of an indicator card and
data cards succeeding this indicator card. For example, the ROWS section
consists of the ROWS indicator card and data cards specifying rows.
The sections RHS, RANGES, and BOUNDS are optional and may be omitted.
\section{Free MPS Format}
{\it Free MPS format} is an improved version of the standard (fixed)
MPS format described above.\footnote{This format was developed in the
beginning of 1990's by IBM as an alternative to the standard fixed MPS
format for Optimization Subroutine Library (OSL).} Note that all
changes in free MPS format concern only the coding of data while the
structure of data is the same for both fixed and free versions of the
MPS format.
In free MPS format indicator and data records\footnote{{\it Record} in
free MPS format has the same meaning as {\it card} in fixed MPS format.}
may have arbitrary length not limited to 80 characters. Fields of data
records have no predefined positions, i.e. the fields may begin in any
position, except position 1, which must be blank, and must be separated
from each other by one or more blanks. However, the fields must appear
in the same order as in fixed MPS format.
\newpage
Symbolic names in fields 2, 3, and 5 may be longer than 8
characters\footnote{GLPK allows symbolic names having up to 255
characters.} and must not contain embedded blanks.
Numeric values in fields 4 and 6 are limited to 12 characters and must
not contain embedded blanks.
Only six fields on each data record are used. Any other fields are
ignored.
If the first character of any field (not necessarily fields 3 and 5)
is the dollar sign (\$), all characters from the dollar sign to the end
of record are considered as a comment and ignored.
\section{NAME indicator card}
The NAME indicator card should be the first card in the MPS file
(except optional comment cards, which may precede the NAME card). This
card should contain the word \verb|NAME| in the columns 1---4 and the
problem name in the field 3. The problem name is optional and may be
omitted.
\section{ROWS section}
\label{secrows}
The ROWS section should start with the indicator card, which contains
the word \verb|ROWS| in the columns 1---4.
Each data card in the ROWS section specifies one row (constraint) of
the problem. All these data cards have the following format.
`\verb|N|' in the field 1 means that the row is free (unbounded):
$$-\infty < x_i = a_{i1}x_{m+1} + a_{i2}x_{m+2} + \dots + a_{in}x_{m+n}
< +\infty;$$
`\verb|L|' in the field 1 means that the row is of ``less than or equal
to'' type:
$$-\infty < x_i = a_{i1}x_{m+1} + a_{i2}x_{m+2} + \dots + a_{in}x_{m+n}
\leq b_i;$$
`\verb|G|' in the field 1 means that the row is of ``greater than or
equal to'' type:
$$b_i \leq x_i = a_{i1}x_{m+1} + a_{i2}x_{m+2} + \dots + a_{in}x_{m+n}
< +\infty;$$
`\verb|E|' in the field 1 means that the row is of ``equal to'' type:
$$x_i = a_{i1}x_{m+1} + a_{i2}x_{m+2} + \dots + a_{in}x_{m+n} \leq
b_i,$$
where $b_i$ is a right-hand side. Note that each constraint has a
corresponding implictly defined auxiliary variable ($x_i$ above), whose
value is a value of the corresponding linear form, therefore row bounds
can be considered as bounds of such auxiliary variable.
The filed 2 specifies a row name (which is considered as the name of
the corresponding auxiliary variable).
\newpage
The fields 3, 4, 5, and 6 are not used and should be empty.
Numerical values of all non-zero right-hand sides $b_i$ should be
specified in the RHS section (see below). All double-bounded (ranged)
constraints should be specified in the RANGES section (see below).
\section{COLUMNS section}
The COLUMNS section should start with the indicator card, which
contains the word \verb|COLUMNS| in the columns 1---7.
Each data card in the COLUMNS section specifies one or two constraint
coefficients $a_{ij}$ and also introduces names of columns, i.e. names
of structural variables. All these data cards have the following
format.
The field 1 is not used and should be empty.
The field 2 specifies a column name. If this field is empty, the column
name from the immediately preceeding data card is assumed.
The field 3 specifies a row name defined in the ROWS section.
The field 4 specifies a numerical value of the constraint coefficient
$a_{ij}$, which is placed in the corresponding row and column.
The fields 5 and 6 are optional. If they are used, they should contain
a second pair ``row name---constraint coefficient'' for the same column.
Elements of the constraint matrix (i.e. constraint coefficients) should
be enumerated in the column wise manner: all elements for the current
column should be specified before elements for the next column. However,
the order of rows in the COLUMNS section may differ from the order of
rows in the ROWS section.
Constraint coefficients not specified in the COLUMNS section are
considered as zeros. Therefore zero coefficients may be omitted,
although it is allowed to explicitly specify them.
\section{RHS section}
The RHS section should start with the indicator card, which contains the
word \verb|RHS| in the columns 1---3.
Each data card in the RHS section specifies one or two right-hand sides
$b_i$ (see Section \ref{secrows}, page \pageref{secrows}). All these
data cards have the following format.
The field 1 is not used and should be empty.
The field 2 specifies a name of the right-hand side (RHS)
vector\footnote{This feature allows the user to specify several RHS
vectors in the same MPS file. However, before solving the problem a
particular RHS vector should be chosen.}. If this field is empty, the
RHS vector name from the immediately preceeding data card is assumed.
\newpage
The field 3 specifies a row name defined in the ROWS section.
The field 4 specifies a right-hand side $b_i$ for the row, whose name is
specified in the field 3. Depending on the row type $b_i$ is a lower
bound (for the row of \verb|G| type), an upper bound (for the row of
\verb|L| type), or a fixed value (for the row of \verb|E|
type).\footnote{If the row is of {\tt N} type, $b_i$ is considered as
a constant term of the corresponding linear form. Should note, however,
this convention is non-standard.}
The fields 5 and 6 are optional. If they are used, they should contain
a second pair ``row name---right-hand side'' for the same RHS vector.
All right-hand sides for the current RHS vector should be specified
before right-hand sides for the next RHS vector. However, the order of
rows in the RHS section may differ from the order of rows in the ROWS
section.
Right-hand sides not specified in the RHS section are considered as
zeros. Therefore zero right-hand sides may be omitted, although it is
allowed to explicitly specify them.
\section{RANGES section}
The RANGES section should start with the indicator card, which contains
the word \verb|RANGES| in the columns 1---6.
Each data card in the RANGES section specifies one or two ranges for
double-side constraints, i.e. for constraints that are of the types
\verb|L| and \verb|G| at the same time:
$$l_i \leq x_i = a_{i1}x_{m+1} + a_{i2}x_{m+2} + \dots + a_{in}x_{m+n}
\leq u_i,$$
where $l_i$ is a lower bound, $u_i$ is an upper bound. All these data
cards have the following format.
The field 1 is not used and should be empty.
The field 2 specifies a name of the range vector\footnote{This feature
allows the user to specify several range vectors in the same MPS file.
However, before solving the problem a particular range vector should be
chosen.}. If this field is empty, the range vector name from the
immediately preceeding data card is assumed.
The field 3 specifies a row name defined in the ROWS section.
The field 4 specifies a range value $r_i$ (see the table below) for the
row, whose name is specified in the field 3.
The fields 5 and 6 are optional. If they are used, they should contain
a second pair ``row name---range value'' for the same range vector.
All range values for the current range vector should be specified before
range values for the next range vector. However, the order of rows in
the RANGES section may differ from the order of rows in the ROWS
section.
For each double-side constraint specified in the RANGES section its
lower and upper bounds are determined as follows:
\newpage
\begin{center}
\begin{tabular}{cccc}
Row type & Sign of $r_i$ & Lower bound & Upper bound \\
\hline
{\tt G} & $+$ or $-$ & $b_i$ & $b_i + |r_i|$ \\
{\tt L} & $+$ or $-$ & $b_i - |r_i|$ & $b_i$ \\
{\tt E} & $+$ & $b_i$ & $b_i + |r_i|$ \\
{\tt E} & $-$ & $b_i - |r_i|$ & $b_i$ \\
\end{tabular}
\end{center}
\noindent
where $b_i$ is a right-hand side specified in the RHS section (if $b_i$
is not specified, it is considered as zero), $r_i$ is a range value
specified in the RANGES section.
\section{BOUNDS section}
\label{secbounds}
The BOUNDS section should start with the indicator card, which contains
the word \verb|BOUNDS| in the columns 1---6.
Each data card in the BOUNDS section specifies one (lower or upper)
bound for one structural variable (column). All these data cards have
the following format.
The indicator in the field 1 specifies the bound type:
\verb|LO| --- lower bound;
\verb|UP| --- upper bound;
\verb|FX| --- fixed variable (lower and upper bounds are equal);
\verb|FR| --- free variable (no bounds);
\verb|MI| --- no lower bound (lower bound is ``minus infinity'');
\verb|PL| --- no upper bound (upper bound is ``plus infinity'').
The field 2 specifies a name of the bound vector\footnote{This feature
allows the user to specify several bound vectors in the same MPS file.
However, before solving the problem a particular bound vector should be
chosen.}. If this field is empty, the bound vector name from the
immediately preceeding data card is assumed.
The field 3 specifies a column name defined in the COLUMNS section.
The field 4 specifies a bound value. If the bound type in the field 1
differs from \verb|LO|, \verb|UP|, and \verb|FX|, the value in the field
4 is ignored and may be omitted.
The fields 5 and 6 are not used and should be empty.
All bound values for the current bound vector should be specified before
bound values for the next bound vector. However, the order of columns in
the BOUNDS section may differ from the order of columns in the COLUMNS
section. Specification of a lower bound should precede specification of
an upper bound for the same column (if both the lower and upper bounds
are explicitly specified).
By default, all columns (structural variables) are non-negative, i.e.
have zero lower bound and no upper bound. Lower ($l_j$) and upper
($u_j$) bounds of some column (structural variable $x_j$) are set in the
following way, where $s_j$ is a corresponding bound value explicitly
specified in the BOUNDS section:
\newpage
\verb|LO| sets $l_j$ to $s_j$;
\verb|UP| sets $u_j$ to $s_j$;
\verb|FX| sets both $l_j$ and $u_j$ to $s_j$;
\verb|FR| sets $l_j$ to $-\infty$ and $u_j$ to $+\infty$;
\verb|MI| sets $l_j$ to $-\infty$;
\verb|PL| sets $u_j$ to $+\infty$.
\section{ENDATA indicator card}
The ENDATA indicator card should be the last card of MPS file (except
optional comment cards, which may follow the ENDATA card). This card
should contain the word \verb|ENDATA| in the columns 1---6.
\section{Specifying objective function}
It is impossible to explicitly specify the objective function and
optimization direction in the MPS file. However, the following implicit
rule is used by default: the first row of \verb|N| type is considered
as a row of the objective function (i.e. the objective function is the
corresponding auxiliary variable), which should be {\it minimized}.
GLPK also allows specifying a constant term of the objective function
as a right-hand side of the corresponding row in the RHS section.
\section{Example of MPS file}
\label{secmpsex}
To illustrate what the MPS format is, consider the following example of
LP problem:
\def\arraystretch{1.2}
\noindent\hspace{.5in}minimize
$$
value = .03\ bin_1 + .08\ bin_2 + .17\ bin_3 + .12\ bin_4 + .15\ bin_5
+ .21\ al + .38\ si
$$
\noindent\hspace{.5in}subject to linear constraints
$$
\begin{array}{@{}l@{\:}l@{}}
yield &= \ \ \ \ \;bin_1 + \ \ \ \ \;bin_2 + \ \ \ \ \;bin_3 +
\ \ \ \ \;bin_4 + \ \ \ \ \;bin_5 + \ \ \ \ \;al +
\ \ \ \ \;si \\
FE &= .15\ bin_1 + .04\ bin_2 + .02\ bin_3 + .04\ bin_4 + .02\ bin_5
+ .01\ al + .03\ si \\
CU &= .03\ bin_1 + .05\ bin_2 + .08\ bin_3 + .02\ bin_4 + .06\ bin_5
+ .01\ al \\
MN &= .02\ bin_1 + .04\ bin_2 + .01\ bin_3 + .02\ bin_4 + .02\ bin_5
\\
MG &= .02\ bin_1 + .03\ bin_2
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ + .01\ bin_5 \\
AL &= .70\ bin_1 + .75\ bin_2 + .80\ bin_3 + .75\ bin_4 + .80\ bin_5
+ .97\ al \\
SI &= .02\ bin_1 + .06\ bin_2 + .08\ bin_3 + .12\ bin_4 + .02\ bin_5
+ .01\ al + .97\ si \\
\end{array}
$$
\newpage
\noindent\hspace{.5in}and bounds of (auxiliary and structural)
variables
$$
\begin{array}{r@{\ }l@{\ }l@{\ }l@{\ }rcr@{\ }l@{\ }l@{\ }l@{\ }r}
&&yield&=&2000&&0&\leq&bin_1&\leq&200\\
-\infty&<&FE&\leq&60&&0&\leq&bin_2&\leq&2500\\
-\infty&<&CU&\leq&100&&400&\leq&bin_3&\leq&800\\
-\infty&<&MN&\leq&40&&100&\leq&bin_4&\leq&700\\
-\infty&<&MG&\leq&30&&0&\leq&bin_5&\leq&1500\\
1500&\leq&AL&<&+\infty&&0&\leq&al&<&+\infty\\
250&\leq&SI&\leq&300&&0&\leq&si&<&+\infty\\
\end{array}
$$
\def\arraystretch{1}
A complete MPS file which specifies data for this example is shown
below (the first two comment lines show card positions).
\bigskip
\begin{footnotesize}
\begin{verbatim}
*000000001111111111222222222233333333334444444444555555555566
*234567890123456789012345678901234567890123456789012345678901
NAME PLAN
ROWS
N VALUE
E YIELD
L FE
L CU
L MN
L MG
G AL
L SI
COLUMNS
BIN1 VALUE .03000 YIELD 1.00000
FE .15000 CU .03000
MN .02000 MG .02000
AL .70000 SI .02000
BIN2 VALUE .08000 YIELD 1.00000
FE .04000 CU .05000
MN .04000 MG .03000
AL .75000 SI .06000
BIN3 VALUE .17000 YIELD 1.00000
FE .02000 CU .08000
MN .01000 AL .80000
SI .08000
BIN4 VALUE .12000 YIELD 1.00000
FE .04000 CU .02000
MN .02000 AL .75000
SI .12000
BIN5 VALUE .15000 YIELD 1.00000
FE .02000 CU .06000
MN .02000 MG .01000
AL .80000 SI .02000
ALUM VALUE .21000 YIELD 1.00000
FE .01000 CU .01000
AL .97000 SI .01000
SILICON VALUE .38000 YIELD 1.00000
FE .03000 SI .97000
RHS
RHS1 YIELD 2000.00000 FE 60.00000
CU 100.00000 MN 40.00000
SI 300.00000
MG 30.00000 AL 1500.00000
RANGES
RNG1 SI 50.00000
BOUNDS
UP BND1 BIN1 200.00000
UP BIN2 2500.00000
LO BIN3 400.00000
UP BIN3 800.00000
LO BIN4 100.00000
UP BIN4 700.00000
UP BIN5 1500.00000
ENDATA
\end{verbatim}
\end{footnotesize}
\vspace*{-6pt}
\section{MIP features}
\vspace*{-4pt}
The MPS format provides two ways for introducing integer variables into
the problem.
The first way is most general and based on using special marker cards
INTORG and INTEND. These marker cards are placed in the COLUMNS section.
The INTORG card indicates the start of a group of integer variables
(columns), and the card INTEND indicates the end of the group. The MPS
file may contain arbitrary number of the marker cards.
The marker cards have the same format as the data cards (see Section
\ref{secmps}, page \pageref{secmps}).
The fields 1, 2, and 6 are not used and should be empty.
The field 2 should contain a marker name. This name may be arbitrary.
The field 3 should contain the word \verb|'MARKER'| (including
apostrophes).
The field 5 should contain either the word \verb|'INTORG'| (including
apostrophes) for the marker card, which begins a group of integer
columns, or the word \verb|'INTEND'| (including apostrophes) for the
marker card, which ends the group.
The second way is less general but more convenient in some cases. It
allows the user declaring integer columns using three additional types
of bounds, which are specified in the field 1 of data cards in the
BOUNDS section (see Section \ref{secbounds}, page \pageref{secbounds}):
\verb|LI| --- lower integer. This bound type specifies that the
corresponding column (structural variable), whose name is specified in
field 3, is of integer kind. In this case an lower bound of the
column should be specified in field 4 (like in the case of \verb|LO|
bound type).
\verb|UI| --- upper integer. This bound type specifies that the
corresponding column (structural variable), whose name is specified in
field 3, is of integer kind. In this case an upper bound of the
column should be specified in field 4 (like in the case of \verb|UP|
bound type).
\verb|BV| --- binary variable. This bound type specifies that the
corresponding column (structural variable), whose name is specified in
the field 3, is of integer kind, its lower bound is zero, and its upper
bound is one (thus, such variable being of integer kind can have only
two values zero and one). In this case a numeric value specified in the
field 4 is ignored and may be omitted.
Consider the following example of MIP problem:
\noindent
\hspace{1in} minimize
$$Z = 3 x_1 + 7 x_2 - x_3 + x4$$
\hspace{1in} subject to linear constraints
$$
\begin{array}{c}
\nonumber r_1 = 2 x_1 - \ \ x_2 + \ \ x_3 - \ \;x_4 \\
\nonumber r_2 = \ \;x_1 - \ \;x_2 - 6 x_3 + 4 x_4 \\
\nonumber r_3 = 5 x_1 + 3 x_2 \ \ \ \ \ \ \ \ \ + \ \ x_4 \\
\end{array}
$$
\hspace{1in} and bound of variables
$$
\begin{array}{cccl}
\nonumber 1 \leq r_1 < +\infty && 0 \leq x_1 \leq 4 &{\rm(continuous)}\\
\nonumber 8 \leq r_2 < +\infty && 2 \leq x_2 \leq 5 &{\rm(integer)} \\
\nonumber 5 \leq r_3 < +\infty && 0 \leq x_3 \leq 1 &{\rm(integer)} \\
\nonumber && 3 \leq x_4 \leq 8 &{\rm(continuous)}\\
\end{array}
$$
The corresponding MPS file may look like the following:
\medskip
\begin{footnotesize}
\begin{verbatim}
NAME SAMP1
ROWS
N Z
G R1
G R2
G R3
COLUMNS
X1 R1 2.0 R2 1.0
X1 R3 5.0 Z 3.0
MARK0001 'MARKER' 'INTORG'
X2 R1 -1.0 R2 -1.0
X2 R3 3.0 Z 7.0
X3 R1 1.0 R2 -6.0
X3 Z -1.0
MARK0002 'MARKER' 'INTEND'
X4 R1 -1.0 R2 4.0
X4 R3 1.0 Z 1.0
RHS
RHS1 R1 1.0
RHS1 R2 8.0
RHS1 R3 5.0
BOUNDS
UP BND1 X1 4.0
LO BND1 X2 2.0
UP BND1 X2 5.0
UP BND1 X3 1.0
LO BND1 X4 3.0
UP BND1 X4 8.0
ENDATA
\end{verbatim}
\end{footnotesize}
\newpage
The same example may be coded without INTORG/INTEND markers using the
bound type UI for the variable $x_2$ and the bound type BV for the
variable $x_3$:
\medskip
\begin{footnotesize}
\begin{verbatim}
NAME SAMP2
ROWS
N Z
G R1
G R2
G R3
COLUMNS
X1 R1 2.0 R2 1.0
X1 R3 5.0 Z 3.0
X2 R1 -1.0 R2 -1.0
X2 R3 3.0 Z 7.0
X3 R1 1.0 R2 -6.0
X3 Z -1.0
X4 R1 -1.0 R2 4.0
X4 R3 1.0 Z 1.0
RHS
RHS1 R1 1.0
RHS1 R2 8.0
RHS1 R3 5.0
BOUNDS
UP BND1 X1 4.0
LO BND1 X2 2.0
UI BND1 X2 5.0
BV BND1 X3
LO BND1 X4 3.0
UP BND1 X4 8.0
ENDATA
\end{verbatim}
\end{footnotesize}
%\section{Specifying predefined basis}
%\label{secbas}
%
%The MPS format can also be used to specify some predefined basis for an
%LP problem, i.e. to specify which rows and columns are basic and which
%are non-basic.
%
%The order of a basis file in the MPS format is:
%
%$\bullet$ NAME indicator card;
%
%$\bullet$ data cards (can appear in arbitrary order);
%
%$\bullet$ ENDATA indicator card.
%
%Each data card specifies either a pair "basic column---non-basic row"
%or a non-basic column. All the data cards have the following format.
%
%`\verb|XL|' in the field 1 means that a column, whose name is given in
%the field 2, is basic, and a row, whose name is given in the field 3,
%is non-basic and placed on its lower bound.
%
%`\verb|XU|' in the field 1 means that a column, whose name is given in
%the field 2, is basic, and a row, whose name is given in the field 3,
%is non-basic and placed on its upper bound.
%
%`\verb|LL|' in the field 1 means that a column, whose name is given in
%the field 3, is non-basic and placed on its lower bound.
%
%`\verb|UL|' in the field 1 means that a column, whose name is given in
%the field 3, is non-basic and placed on its upper bound.
%
%The field 2 contains a column name.
%
%If the indicator given in the field 1 is `\verb|XL|' or `\verb|XU|',
%the field 3 contains a row name. Otherwise, if the indicator is
%`\verb|LL|' or `\verb|UL|', the field 3 is not used and should be
%empty.
%
%The field 4, 5, and 6 are not used and should be empty.
%
%A basis file in the MPS format acts like a patch: it doesn't specify
%a basis completely, instead that it is just shows in what a given basis
%differs from the "standard" basis, where all rows (auxiliary variables)
%are assumed to be basic and all columns (structural variables) are
%assumed to be non-basic.
%
%As an example here is a basis file that specifies an optimal basis
%for the example LP problem given in Section \ref{secmpsex},
%Page \pageref{secmpsex}:
%
%\pagebreak
%
%\begin{verbatim}
%*000000001111111111222222222233333333334444444444555555555566
%*234567890123456789012345678901234567890123456789012345678901
%NAME PLAN
% XL BIN2 YIELD
% XL BIN3 FE
% XL BIN4 MN
% XL ALUM AL
% XL SILICON SI
% LL BIN1
% LL BIN5
%ENDATA
%\end{verbatim}
%* eof *%

424
resources/3rdparty/glpk-4.53/doc/glpk09.tex

@ -0,0 +1,424 @@
%* glpk09.tex *%
\chapter{CPLEX LP Format}
\label{chacplex}
\section{Prelude}
The CPLEX LP format\footnote{The CPLEX LP format was developed in
the end of 1980's by CPLEX Optimization, Inc. as an input format for
the CPLEX linear programming system. Although the CPLEX LP format is
not as widely used as the MPS format, being row-oriented it is more
convenient for coding mathematical programming models by human. This
appendix describes only the features of the CPLEX LP format which are
implemented in the GLPK package.} is intended for coding LP/MIP problem
data. It is a row-oriented format that assumes the formulation of
LP/MIP problem (1.1)---(1.3) (see Section \ref{seclp}, page
\pageref{seclp}).
CPLEX LP file is a plain text file written in CPLEX LP format. Each
text line of this file may contain up to 255 characters\footnote{GLPK
allows text lines of arbitrary length.}. Blank lines are ignored.
If a line contains the backslash character ($\backslash$), this
character and everything that follows it until the end of line are
considered as a comment and also ignored.
An LP file is coded by the user using the following elements: keywords,
symbolic names, numeric constants, delimiters, and blanks.
{\it Keywords} which may be used in the LP file are the following:
\begin{verbatim}
minimize minimum min
maximize maximum max
subject to such that s.t. st. st
bounds bound
general generals gen
integer integers int
binary binaries bin
infinity inf
free
end
\end{verbatim}
\noindent
All the keywords are case insensitive. Keywords given above on the same
line are equivalent. Any keyword (except \verb|infinity|, \verb|inf|,
and \verb|free|) being used in the LP file must start at the beginning
of a text line.
\newpage
{\it Symbolic names} are used to identify the objective function,
constraints (rows), and variables (columns). All symbolic names are case
sensitive and may contain up to 16 alphanumeric characters\footnote{GLPK
allows symbolic names having up to 255 characters.} (\verb|a|, \dots,
\verb|z|, \verb|A|, \dots, \verb|Z|, \verb|0|, \dots, \verb|9|) as well
as the following characters:
\begin{verbatim}
! " # $ % & ( ) / , . ; ? @ _ ` ' { } | ~
\end{verbatim}
\noindent
with exception that no symbolic name can begin with a digit or
a period.
{\it Numeric constants} are used to denote constraint and objective
coefficients, right-hand sides of constraints, and bounds of variables.
They are coded in the standard form $xx$\verb|E|$syy$, where $xx$ is
a real number with optional decimal point, $s$ is a sign (\verb|+| or
\verb|-|), $yy$ is an integer decimal exponent. Numeric constants may
contain arbitrary number of characters. The exponent part is optional.
The letter `\verb|E|' can be coded as `\verb|e|'. If the sign $s$ is
omitted, plus is assumed.
{\it Delimiters} that may be used in the LP file are the following:
\begin{verbatim}
:
+
-
< <= =<
> >= =>
=
\end{verbatim}
\noindent
Delimiters given above on the same line are equivalent. The meaning of
the delimiters will be explained below.
{\it Blanks} are non-significant characters. They may be used freely to
improve readability of the LP file. Besides, blanks should be used to
separate elements from each other if there is no other way to do that
(for example, to separate a keyword from a following symbolic name).
The order of an LP file is:
\vspace*{-8pt}
\begin{itemize}
\item objective function definition;
\item constraints section;
\item bounds section;
\item general, integer, and binary sections (can appear in arbitrary
order);
\item end keyword.
\end{itemize}
\vspace*{-8pt}
These components are discussed in following sections.
\section{Objective function definition}
The objective function definition must appear first in the LP file.
It defines the objective function and specifies the optimization
direction.
The objective function definition has the following form:
$$
\left\{
\begin{array}{@{}c@{}}
{\tt minimize} \\ {\tt maximize}
\end{array}
\right\}\ f\ {\tt :}\ s\ c\ x\ s\ c\ x\ \dots\ s\ c\ x
$$
where $f$ is a symbolic name of the objective function, $s$ is a sign
\verb|+| or \verb|-|, $c$ is a numeric constant that denotes an
objective coefficient, $x$ is a symbolic name of a variable.
If necessary, the objective function definition can be continued on as
many text lines as desired.
The name of the objective function is optional and may be omitted
(together with the semicolon that follows it). In this case the default
name `\verb|obj|' is assigned to the objective function.
If the very first sign $s$ is omitted, the sign plus is assumed. Other
signs cannot be omitted.
If some objective coefficient $c$ is omitted, 1 is assumed.
Symbolic names $x$ used to denote variables are recognized by context
and therefore needn't to be declared somewhere else.
Here is an example of the objective function definition:
\begin{verbatim}
Minimize Z : - x1 + 2 x2 - 3.5 x3 + 4.997e3x(4) + x5 + x6 +
x7 - .01x8
\end{verbatim}
\section{Constraints section}
The constraints section must follow the objective function definition.
It defines a system of equality and/or inequality constraints.
The constraint section has the following form:
\begin{center}
\begin{tabular}{l}
\verb|subject to| \\
{\it constraint}$_1$ \\
{\it constraint}$_2$ \\
\hspace{20pt}\dots \\
{\it constraint}$_m$ \\
\end{tabular}
\end{center}
\noindent where {\it constraint}$_i, i=1,\dots,m,$ is a particular
constraint definition.
Each constraint definition can be continued on as many text lines as
desired. However, each constraint definition must begin on a new line
except the very first constraint definition which can begin on the same
line as the keyword `\verb|subject to|'.
Constraint definitions have the following form:
$$
r\ {\tt:}\ s\ c\ x\ s\ c\ x\ \dots\ s\ c\ x
\ \left\{
\begin{array}{@{}c@{}}
\mbox{\tt<=} \\ \mbox{\tt>=} \\ \mbox{\tt=}
\end{array}
\right\}\ b
$$
where $r$ is a symbolic name of a constraint, $s$ is a sign \verb|+| or
\verb|-|, $c$ is a numeric constant that denotes a constraint
coefficient, $x$ is a symbolic name of a variable, $b$ is a right-hand
side.
The name $r$ of a constraint (which is the name of the corresponding
auxiliary variable) is optional and may be omitted (together with the
semicolon that follows it). In this case the default names like
`\verb|r.nnn|' are assigned to unnamed constraints.
The linear form $s\ c\ x\ s\ c\ x\ \dots\ s\ c\ x$ in the left-hand
side of a constraint definition has exactly the same meaning as in the
case of the objective function definition (see above).
After the linear form one of the following delimiters that indicates
the constraint sense must be specified:
\verb|<=| \ means `less than or equal to'
\verb|>=| \ means `greater than or equal to'
\verb|= | \ means `equal to'
The right hand side $b$ is a numeric constant with an optional sign.
Here is an example of the constraints section:
\begin{verbatim}
Subject To
one: y1 + 3 a1 - a2 - b >= 1.5
y2 + 2 a3 + 2
a4 - b >= -1.5
two : y4 + 3 a1 + 4 a5 - b <= +1
.20y5 + 5 a2 - b = 0
1.7 y6 - a6 + 5 a777 - b >= 1
\end{verbatim}
Should note that it is impossible to express ranged constraints in the
CPLEX LP format. Each a ranged constraint can be coded as two
constraints with identical linear forms in the left-hand side, one of
which specifies a lower bound and other does an upper one of the
original ranged constraint. Another way is to introduce a slack
double-bounded variable; for example, the
constraint
$$10\leq x+2y+3z\leq 50$$
can be written as follows:
$$x+2y+3z+t=50,$$
where $0\leq t\leq 40$ is a slack variable.
\section{Bounds section}
The bounds section is intended to define bounds of variables. This
section is optional; if it is specified, it must follow the constraints
section. If the bound section is omitted, all variables are assumed to
be non-negative (i.e. that they have zero lower bound and no upper
bound).
The bounds section has the following form:
\begin{center}
\begin{tabular}{l}
\verb|bounds| \\
{\it definition}$_1$ \\
{\it definition}$_2$ \\
\hspace{20pt}\dots \\
{\it definition}$_p$ \\
\end{tabular}
\end{center}
\noindent
where {\it definition}$_k, k=1,\dots,p,$ is a particular bound
definition.
Each bound definition must begin on a new line\footnote{The GLPK
implementation allows several bound definitions to be placed on the
same line.} except the very first bound definition which can begin on
the same line as the keyword `\verb|bounds|'.
\newpage
Syntactically constraint definitions can have one of the following six
forms:
\begin{center}
\begin{tabular}{ll}
$x$ \verb|>=| $l$ & specifies a lower bound \\
$l$ \verb|<=| $x$ & specifies a lower bound \\
$x$ \verb|<=| $u$ & specifies an upper bound \\
$l$ \verb|<=| $x$ \verb|<=| $u$ &specifies both lower and upper bounds\\
$x$ \verb|=| $t$ &specifies a fixed value \\
$x$ \verb|free| &specifies free variable
\end{tabular}
\end{center}
\noindent
where $x$ is a symbolic name of a variable, $l$ is a numeric constant
with an optional sign that defines a lower bound of the variable or
\verb|-inf| that means that the variable has no lower bound, $u$ is a
numeric constant with an optional sign that defines an upper bound of
the variable or \verb|+inf| that means that the variable has no upper
bound, $t$ is a numeric constant with an optional sign that defines a
fixed value of the variable.
By default all variables are non-negative, i.e. have zero lower bound
and no upper bound. Therefore definitions of these default bounds can
be omitted in the bounds section.
Here is an example of the bounds section:
\begin{verbatim}
Bounds
-inf <= a1 <= 100
-100 <= a2
b <= 100
x2 = +123.456
x3 free
\end{verbatim}
\section{General, integer, and binary sections}
The general, integer, and binary sections are intended to define
some variables as integer or binary. All these sections are optional
and needed only in case of MIP problems. If they are specified, they
must follow the bounds section or, if the latter is omitted, the
constraints section.
All the general, integer, and binary sections have the same form as
follows:
\begin{center}
\begin{tabular}{l}
$
\left\{
\begin{array}{@{}l@{}}
\verb|general| \\
\verb|integer| \\
\verb|binary | \\
\end{array}
\right\}
$ \\
\hspace{10pt}$x_1$ \\
\hspace{10pt}$x_2$ \\
\hspace{10pt}\dots \\
\hspace{10pt}$x_q$ \\
\end{tabular}
\end{center}
\noindent
where $x_k$ is a symbolic name of variable, $k=1,\dots,q$.
Each symbolic name must begin on a new line\footnote{The GLPK
implementation allows several symbolic names to be placed on the same
line.} except the very first symbolic name which can begin on the same
line as the keyword `\verb|general|', `\verb|integer|', or
`\verb|binary|'.
\newpage
If a variable appears in the general or the integer section, it is
assumed to be general integer variable. If a variable appears in the
binary section, it is assumed to be binary variable, i.e. an integer
variable whose lower bound is zero and upper bound is one. (Note that
if bounds of a variable are specified in the bounds section and then
the variable appears in the binary section, its previously specified
bounds are ignored.)
Here is an example of the integer section:
\begin{verbatim}
Integer
z12
z22
z35
\end{verbatim}
\section{End keyword}
The keyword `\verb|end|' is intended to end the LP file. It must begin
on a separate line and no other elements (except comments and blank
lines) must follow it. Although this keyword is optional, it is strongly
recommended to include it in the LP file.
\section{Example of CPLEX LP file}
Here is a complete example of CPLEX LP file that corresponds to the
example given in Section \ref{secmpsex}, page \pageref{secmpsex}.
\medskip
\begin{footnotesize}
\begin{verbatim}
\* plan.lp *\
Minimize
value: .03 bin1 + .08 bin2 + .17 bin3 + .12 bin4 + .15 bin5 +
.21 alum + .38 silicon
Subject To
yield: bin1 + bin2 + bin3 + bin4 + bin5 +
alum + silicon = 2000
fe: .15 bin1 + .04 bin2 + .02 bin3 + .04 bin4 + .02 bin5 +
.01 alum + .03 silicon <= 60
cu: .03 bin1 + .05 bin2 + .08 bin3 + .02 bin4 + .06 bin5 +
.01 alum <= 100
mn: .02 bin1 + .04 bin2 + .01 bin3 + .02 bin4 + .02 bin5 <= 40
mg: .02 bin1 + .03 bin2 + .01 bin5 <= 30
al: .70 bin1 + .75 bin2 + .80 bin3 + .75 bin4 + .80 bin5 +
.97 alum >= 1500
si1: .02 bin1 + .06 bin2 + .08 bin3 + .12 bin4 + .02 bin5 +
.01 alum + .97 silicon >= 250
si2: .02 bin1 + .06 bin2 + .08 bin3 + .12 bin4 + .02 bin5 +
.01 alum + .97 silicon <= 300
Bounds
bin1 <= 200
bin2 <= 2500
400 <= bin3 <= 800
100 <= bin4 <= 700
bin5 <= 1500
End
\* eof *\
\end{verbatim}
\end{footnotesize}
%* eof *%

166
resources/3rdparty/glpk-4.53/doc/glpk10.tex

@ -0,0 +1,166 @@
%* glpk10.tex *%
\chapter{Stand-alone LP/MIP Solver}
\label{chaglpsol}
The GLPK package includes the program \verb|glpsol|, which is a
stand-alone LP/MIP solver. This program can be invoked from the command
line to read LP/MIP problem data in any format supported by GLPK, solve
the problem, and write its solution to an output text file.
\para{Usage}
\verb|glpsol| [{\it options\dots}] [{\it filename}]
\para{General options}
\begin{verbatim}
--mps read LP/MIP problem in fixed MPS format
--freemps read LP/MIP problem in free MPS format (default)
--lp read LP/MIP problem in CPLEX LP format
--glp read LP/MIP problem in GLPK format
--math read LP/MIP model written in GNU MathProg modeling
language
-m filename, --model filename
read model section and optional data section from
filename (same as --math)
-d filename, --data filename
read data section from filename (for --math only);
if model file also has data section, it is ignored
-y filename, --display filename
send display output to filename (for --math only);
by default the output is sent to terminal
--seed value initialize pseudo-random number generator used in
MathProg model with specified seed (any integer);
if seed value is ?, some random seed will be used
--mincost read min-cost flow problem in DIMACS format
--maxflow read maximum flow problem in DIMACS format
--cnf read CNF-SAT problem in DIMACS format
--simplex use simplex method (default)
--interior use interior point method (LP only)
-r filename, --read filename
read solution from filename rather to find it with
the solver
--min minimization
--max maximization
--scale scale problem (default)
--noscale do not scale problem
-o filename, --output filename
write solution to filename in printable format
-w filename, --write filename
write solution to filename in plain text format
--ranges filename
write sensitivity analysis report to filename in
printable format (simplex only)
--tmlim nnn limit solution time to nnn seconds
--memlim nnn limit available memory to nnn megabytes
--check do not solve problem, check input data only
--name probname change problem name to probname
--wmps filename write problem to filename in fixed MPS format
--wfreemps filename
write problem to filename in free MPS format
--wlp filename write problem to filename in CPLEX LP format
--wglp filename write problem to filename in GLPK format
--wcnf filename write problem to filename in DIMACS CNF-SAT format
--log filename write copy of terminal output to filename
-h, --help display this help information and exit
-v, --version display program version and exit
\end{verbatim}
\para{LP basis factorization options}
\begin{verbatim}
--luf LU + Forrest-Tomlin update
(faster, less stable; default)
--cbg LU + Schur complement + Bartels-Golub update
(slower, more stable)
--cgr LU + Schur complement + Givens rotation update
(slower, more stable)
\end{verbatim}
\para{Options specific to the simplex solver}
\begin{verbatim}
--primal use primal simplex (default)
--dual use dual simplex
--std use standard initial basis of all slacks
--adv use advanced initial basis (default)
--bib use Bixby's initial basis
--ini filename use as initial basis previously saved with -w
(disables LP presolver)
--steep use steepest edge technique (default)
--nosteep use standard "textbook" pricing
--relax use Harris' two-pass ratio test (default)
--norelax use standard "textbook" ratio test
--presol use presolver (default; assumes --scale and --adv)
--nopresol do not use presolver
--exact use simplex method based on exact arithmetic
--xcheck check final basis using exact arithmetic
\end{verbatim}
\para{Options specific to the interior-point solver}
\begin{verbatim}
--nord use natural (original) ordering
--qmd use quotient minimum degree ordering
--amd use approximate minimum degree ordering (default)
--symamd use approximate minimum degree ordering
\end{verbatim}
\para{Options specific to the MIP solver}
\begin{verbatim}
--nomip consider all integer variables as continuous
(allows solving MIP as pure LP)
--first branch on first integer variable
--last branch on last integer variable
--mostf branch on most fractional variable
--drtom branch using heuristic by Driebeck and Tomlin
(default)
--pcost branch using hybrid pseudocost heuristic (may be
useful for hard instances)
--dfs backtrack using depth first search
--bfs backtrack using breadth first search
--bestp backtrack using the best projection heuristic
--bestb backtrack using node with best local bound
(default)
--intopt use MIP presolver (default)
--nointopt do not use MIP presolver
--binarize replace general integer variables by binary ones
(assumes --intopt)
--fpump apply feasibility pump heuristic
--proxy [nnn] apply proximity search heuristic (nnn is time limit
in seconds; default is 60)
--gomory generate Gomory's mixed integer cuts
--mir generate MIR (mixed integer rounding) cuts
--cover generate mixed cover cuts
--clique generate clique cuts
--cuts generate all cuts above
--mipgap tol set relative mip gap tolerance to tol
--minisat translate integer feasibility problem to CNF-SAT
and solve it with MiniSat solver
\end{verbatim}
\newpage
\begin{verbatim}
--objbnd bound add inequality obj <= bound (minimization) or
obj >= bound (maximization) to integer feasibility
problem (assumes --minisat)
\end{verbatim}
For description of the MPS format see Appendix \ref{champs}, page
\pageref{champs}.
For description of the CPLEX LP format see Appendix \ref{chacplex},
page \pageref{chacplex}.
For description of the modeling language see the document ``Modeling
Language GNU MathProg: Language Reference'' included in the GLPK
distribution.
For description of the DIMACS min-cost flow problem format and DIMACS
maximum flow problem format see the document ``GLPK: Graph and Network
Routines'' included in the GLPK distribution.
%* eof *%

203
resources/3rdparty/glpk-4.53/doc/glpk11.tex

@ -0,0 +1,203 @@
%* glpk11.tex *%
\chapter{External Software Modules Used In GLPK}
In the GLPK package there are used some external software modules
listed in this Appendix. Note that these modules are {\it not} part of
GLPK, but are used with GLPK and included in the distribution.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{AMD}
\noindent
AMD Version 2.2, Copyright {\copyright} 2007 by Timothy A. Davis,
Patrick R. Amestoy, and Iain S. Duff. All Rights Reserved.
\para{Description}
AMD is a set of routines for pre-ordering sparse matrices prior to
Cholesky or LU factorization, using the approximate minimum degree
ordering algorithm.
\para{License}
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public License
as published by the Free Software Foundation; either version 2.1 of
the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
USA.
Permission is hereby granted to use or copy this program under the
terms of the GNU LGPL, provided that the Copyright, this License,
and the Availability of the original version is retained on all
copies. User documentation of any code that uses this code or any
modified version of this code must cite the Copyright, this License,
the Availability note, and ``Used by permission.'' Permission to
modify the code and to distribute modified code is granted, provided
the Copyright, this License, and the Availability note are retained,
and a notice that the code was modified is included.
AMD is available under alternate licences; contact T. Davis for
details.
\para{Availability}
\noindent
\url{http://www.cise.ufl.edu/research/sparse/amd}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{COLAMD/SYMAMD}
\noindent
COLAMD/SYMAMD Version 2.7, Copyright {\copyright} 1998-2007, Timothy A.
Davis, All Rights Reserved.
\para{Description}
colamd: an approximate minimum degree column ordering algorithm, for
LU factorization of symmetric or unsymmetric matrices, QR factorization,
least squares, interior point methods for linear programming problems,
and other related problems.
symamd: an approximate minimum degree ordering algorithm for Cholesky
factorization of symmetric matrices.
\para{Authors}
The authors of the code itself are Stefan I. Larimore and Timothy A.
Davis (davis at cise.ufl.edu), University of Florida. The algorithm
was developed in collaboration with John Gilbert, Xerox PARC, and
Esmond Ng, Oak Ridge National Laboratory.
\para{License}
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public License
as published by the Free Software Foundation; either version 2.1 of
the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
USA.
Permission is hereby granted to use or copy this program under the
terms of the GNU LGPL, provided that the Copyright, this License,
and the Availability of the original version is retained on all
copies. User documentation of any code that uses this code or any
modified version of this code must cite the Copyright, this License,
the Availability note, and ``Used by permission.'' Permission to
modify the code and to distribute modified code is granted, provided
the Copyright, this License, and the Availability note are retained,
and a notice that the code was modified is included.
COLAMD is also available under alternate licenses, contact T. Davis for
details.
\para{Availability}
\noindent
\url{http://www.cise.ufl.edu/research/sparse/colamd}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{MiniSat}
\noindent
MiniSat-C v1.14.1, Copyright {\copyright} 2005, Niklas Sorensson.
\para{Description}
MiniSat is a minimalistic implementation of a Chaff-like SAT solver
based on the two-literal watch scheme for fast BCP and clause learning
by conflict analysis.
\para{License}
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\para{Availability}
\noindent
\url{http://www.cs.chalmers.se/Cs/Research/FormalMethods/MiniSat}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{zlib}
\noindent
zlib version 1.2.5, Copyright {\copyright} 1995--2010 Jean-loup Gailly
and Mark Adler.
\para{Description}
zlib is a general purpose data compression library. All the code is
thread safe. The data format used by the zlib library is described by
RFCs (Request for Comments) 1950 to 1952 in the files
\verb|rfc1950.txt| (zlib format), \verb|rfc1951.txt| (deflate format)
and \verb|rfc1952.txt| (gzip format).
\para{License}
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would
be appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not
be misrepresented as being the original software.
3. This notice may not be removed or altered from any source
distribution.
\hfill Jean-loup Gailly
\hfill Mark Adler
\para{Availability}
\noindent
\url{http://www.zlib.net/}
%* eof *%

707
resources/3rdparty/glpk-4.53/doc/glpk12.tex

@ -0,0 +1,707 @@
%* glpk12.tex *%
\begin{footnotesize}
\chapter*{\sf\bfseries GNU General Public License}
\addcontentsline{toc}{chapter}{GNU General Public License}
\begin{center}
{\bf Version 3, 29 June 2007}
\end{center}
\begin{quotation}
\noindent
Copyright {\copyright} 2007 Free Software Foundation, Inc.
\verb|<http://fsf.org/>|
\end{quotation}
\begin{quotation}
\noindent
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
\end{quotation}
\section*{Preamble}
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
\section*{TERMS AND CONDITIONS}
\subsubsection*{0. Definitions.}
``This License'' refers to version 3 of the GNU General Public
License.
``Copyright'' also means copyright-like laws that apply to other kinds
of works, such as semiconductor masks.
``The Program'' refers to any copyrightable work licensed under this
License. Each licensee is addressed as ``you''. ``Licensees'' and
``recipients'' may be individuals or organizations.
To ``modify'' a work means to copy from or adapt all or part of the
work in a fashion requiring copyright permission, other than the making
of an exact copy. The resulting work is called a ``modified version''
of the earlier work or a work ``based on'' the earlier work.
A ``covered work'' means either the unmodified Program or a work based
on the Program.
To ``propagate'' a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To ``convey'' a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays ``Appropriate Legal Notices''
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
\subsubsection*{1. Source Code.}
The ``source code'' for a work means the preferred form of the work
for making modifications to it. ``Object code'' means any non-source
form of a work.
A ``Standard Interface'' means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The ``System Libraries'' of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
``Major Component'', in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The ``Corresponding Source'' for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
\subsubsection*{2. Basic Permissions.}
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
\subsubsection*{3. Protecting Users' Legal Rights From
Anti-Circumvention Law.}
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
\subsubsection*{4. Conveying Verbatim Copies.}
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
\subsubsection*{5. Conveying Modified Source Versions.}
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
``keep intact all notices''.
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
``aggregate'' if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
\subsubsection*{6. Conveying Non-Source Forms.}
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A ``User Product'' is either (1) a ``consumer product'', which means
any tangible personal property which is normally used for personal,
family, or household purposes, or (2) anything designed or sold for
incorporation into a dwelling. In determining whether a product is a
consumer product, doubtful cases shall be resolved in favor of coverage.
For a particular product received by a particular user, ``normally
used'' refers to a typical or common use of that class of product,
regardless of the status of the particular user or of the way in which
the particular user actually uses, or expects or is expected to use, the
product. A product is a consumer product regardless of whether the
product has substantial commercial, industrial or non-consumer uses,
unless such uses represent the only significant mode of use of the
product.
``Installation Information'' for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product
from a modified version of its Corresponding Source. The information
must suffice to ensure that the continued functioning of the modified
object code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to
a network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
\subsubsection*{7. Additional Terms.}
``Additional permissions'' are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders
of that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered ``further
restrictions'' within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
\subsubsection*{8. Termination.}
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
\subsubsection*{9. Acceptance Not Required for Having Copies.}
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
\subsubsection*{10. Automatic Licensing of Downstream Recipients.}
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An ``entity transaction'' is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
\subsubsection*{11. Patents.}
A ``contributor'' is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's ``contributor version''.
A contributor's ``essential patent claims'' are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, ``control'' includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a ``patent license'' is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To ``grant'' such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. ``Knowingly relying'' means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is ``discriminatory'' if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
\subsubsection*{12. No Surrender of Others' Freedom.}
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not convey it at all. For example, if you agree to terms that
obligate you to collect a royalty for further conveying from those to
whom you convey the Program, the only way you could satisfy both those
terms and this License would be to refrain entirely from conveying the
Program.
\subsubsection*{13. Use with the GNU Affero General Public License.}
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
\subsubsection*{14. Revised Versions of this License.}
The Free Software Foundation may publish revised and/or new versions
of the GNU General Public License from time to time. Such new versions
will be similar in spirit to the present version, but may differ in
detail to address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License ``or any later version'' applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
\subsubsection*{15. Disclaimer of Warranty.}
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM ``AS IS'' WITHOUT
WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE
OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU
ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
\subsubsection*{16. Limitation of Liability.}
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR
CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT
NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES
SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE
WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
\subsubsection*{17. Interpretation of Sections 15 and 16.}
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
\section*{END OF TERMS AND CONDITIONS}
\newpage
\section*{How to Apply These Terms to Your New Programs}
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these
terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the ``copyright'' line and a pointer to where the full notice is found.
\begin{verbatim}
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
\end{verbatim}
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
\begin{verbatim}
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
\end{verbatim}
\noindent
The hypothetical commands `show w' and `show c' should show the
appropriate parts of the General Public License. Of course, your
program's commands might be different; for a GUI interface, you would
use an ``about box''.
You should also get your employer (if you work as a programmer) or
school, if any, to sign a ``copyright disclaimer'' for the program, if
necessary. For more information on this, and how to apply and follow the
GNU GPL, see \verb|<http://www.gnu.org/licenses/>|.
The GNU General Public License does not permit incorporating your
program into proprietary programs. If your program is a subroutine
library, you may consider it more useful to permit linking proprietary
applications with the library. If this is what you want to do, use the
GNU Lesser General Public License instead of this License. But first,
please read \verb|<http://www.gnu.org/philosophy/why-not-lgpl.html>|.
\end{footnotesize}
%* eof *%

BIN
resources/3rdparty/glpk-4.53/doc/gmpl.pdf

4295
resources/3rdparty/glpk-4.53/doc/gmpl.tex
File diff suppressed because it is too large
View File

BIN
resources/3rdparty/glpk-4.53/doc/graphs.pdf

4150
resources/3rdparty/glpk-4.53/doc/graphs.tex
File diff suppressed because it is too large
View File

135
resources/3rdparty/glpk-4.53/doc/miplib2.txt

@ -0,0 +1,135 @@
Solver: GLPSOL 4.40 (options used: --pcost)
Computer: Intel Pentium 4, 3.0 GHz
Platform: Cygwin 1.5.25
Compiler: GCC 3.4.4 (options used: -O3)
Test set: MIPLIB 2.0 <http://miplib.zib.de/miplib3/miplib/>
Problem Optimal Solution Cuts Used Nodes Iters Time,s Mem,MB
-------- ---------------- --------- -------- ------ ------ ------
air01 +6.796000000e+03 3 41 < 1 1.2
air02 +7.810000000e+03 43 201 6 13.8
air03 +3.401600000e+05 33 414 12 21.0
air04 +5.613700000e+04 1901 109800 396 32.4
air05 +2.637400000e+04 6445 201649 452 45.0
air06 +4.964900000e+04 11 6868 31 18.1
bell3a +8.784303160e+05 --gomory 7965 42363 17 6.1
bell3b +1.178616062e+07 --gomory 6031 30467 19 3.2
bell4 +1.854148420e+07 --gomory 7203 25019 16 2.9
bell5 +8.966406492e+06 --gomory 5605 18555 8 1.5
bm23 +3.400000000e+01 373 878 < 1 0.2
cracpb1 +2.219900000e+04 47 5258 2 1.3
dcmulti +1.881820000e+05 743 3366 2 1.1
diamond infeasible 3 4 < 1 0.1
dsbmip -3.051981750e+02 --mir 217 46088 24 4.5
egout +5.681007000e+02 91 137 < 1 0.3
enigma +0.000000000e+00 16419 55071 6 3.2
fixnet3 +5.197300000e+04 81 380 < 1 1.4
fixnet4 +8.936000000e+03 211 1095 1 1.4
fixnet6 +3.983000000e+03 1031 3136 2 1.7
flugpl +1.201500000e+06 397 231 < 1 0.1
gen +1.123133627e+05 195 3991 1 1.7
khb05250 +1.069402260e+08 2163 14498 5 2.8
l152lav +4.722000000e+03 7419 95299 68 12.0
lp4l +2.967000000e+03 173 1331 2 1.7
lseu +1.120000000e+03 10821 31954 5 2.5
misc01 +5.635000000e+02 769 4593 1 0.5
misc02 +1.690000000e+03 29 282 < 1 0.2
misc03 +3.360000000e+03 957 6742 2 1.1
misc04 +2.666699247e+03 17 2052 1 7.0
misc05 +2.984500000e+03 293 2520 1 1.1
misc06 +1.285086074e+04 57 941 < 1 2.7
misc07 +2.810000000e+03 --mir 66075 579129 424 33.4
mod008 +3.070000000e+02 8185 24245 8 2.3
mod010 +6.548000000e+03 315 6283 7 5.3
mod011
mod013 +2.809500000e+02 545 1155 < 1 0.3
modglob +2.074050809e+07 --mir 5197 31985 20 2.8
noswot
p0033 +3.089000000e+03 305 955 < 1 0.2
p0040 +6.202700000e+04 17 66 < 1 0.1
p0201 +7.615000000e+03 521 3660 1 0.9
p0282 +2.584110000e+05 623 1204 1 0.8
p0291 +5.223749000e+03 71 154 < 1 0.7
p0548 +8.691000000e+03 7617 23556 9 2.9
p2756 +3.124000000e+03 --mir 3911 15157 57 10.9
p6000 -2.451377000e+06 19209 40906 570 15.8
pipex +7.882630000e+02 1569 2469 < 1 0.4
qiu -1.328731369e+02 80473 1918742 1174 69.2
rentacar +3.035676098e+07 43 1649 3 12.1
rgn +8.219999924e+01 3325 18700 2 1.2
sample2 +3.750000000e+02 163 347 < 1 0.2
sentoy -7.772000000e+03 335 723 < 1 0.4
set1al +1.586975000e+04 --mir 17 532 < 1 1.5
set1ch
set1cl +6.484250000e+03 --mir 1 502 < 1 1.1
stein15 +9.000000000e+00 87 375 < 1 0.2
stein27 +1.800000000e+01 3255 15327 2 1.0
stein45 +3.000000000e+01 52301 389140 139 19.2
stein9 +5.000000000e+00 17 45 < 1 0.1
vpm1 +2.000000000e+01 --mir 9 836 < 1 0.9
PROBLEM CHARACTERISTICS
Problem Rows Cols ( Int 0/1) Nonz Best Solution
-------- ------ ---------------------- ------ --------------------------
air01 24 771 ( all all) 4986 6796 (opt)
air02 51 6774 ( all all) 68329 7810 (opt)
air03 125 10757 ( all all) 101785 340160 (opt)
air04 824 8904 ( all all) 81869 56138 (opt)
air05 427 7195 ( all all) 59316 26402 (not opt)
air06 826 8627 ( all all) 79433 49649 (opt)
bell3a 124 133 ( 71 39) 441 878430.32 (opt)
bell3b 124 133 ( 71 39) 441 11786160.62 (opt)
bell4 106 117 ( 64 34) 385 18541484.20 (opt)
bell5 92 104 ( 58 30) 340 8966406.49 (opt)
bm23 21 27 ( all all) 505 34 (opt)
cracpb1 144 572 ( all all) 4730 22199 (opt)
dcmulti 291 548 ( 75 all) 1833 188182.0000 (opt)
diamond 5 2 ( all all) 9 integer infeasible
dsbmip 1855 1886 ( 192 160) 9768 -305.198 (opt)
egout 99 141 ( 55 all) 392 568.101 (opt)
enigma 22 100 ( all all) 298 0.0 (opt)
fixnet3 479 878 ( 378 all) 2631 51973 (opt)
fixnet4 479 878 ( 378 all) 2621 8936 (opt)
fixnet6 479 878 ( 378 all) 2550 3983 (opt)
flugpl 19 18 ( 11 none) 64 1201500 (opt)
gen 781 870 ( 150 144) 3174 112313 (opt)
khb05250 102 1350 ( 24 all) 3973 106940226 (opt)
l152lav 98 1989 ( all all) 11911 4750 (not opt)
lp4l 86 1086 ( all all) 5763 2967 (opt)
lseu 29 89 ( all all) 394 1120 (opt)
misc01 55 83 ( 82 all) 746 563.5 (opt)
misc02 40 59 ( 58 all) 414 1690 (opt)
misc03 97 160 ( 159 all) 2054 3360 (opt)
misc04 1726 4897 ( 30 all) 17253 2666.699 (opt)
misc05 301 136 ( 74 all) 2946 2984.5 (opt)
misc06 821 1808 ( 112 all) 5860 12850.8607 (opt)
misc07 213 260 ( 259 all) 8620 2810 (not opt)
mod008 7 319 ( all all) 1562 307 (opt)
mod010 147 2655 ( all all) 13858 6548 (opt)
mod011 4482 10958 ( 96 all) 37425 -54558535 (opt)
mod013 63 96 ( 48 all) 288 280.95 (opt)
modglob 292 422 ( 98 all) 1390 20740508 (opt)
noswot 183 128 ( 100 75) 760 -43 (opt)
p0033 17 33 ( all all) 131 3089 (opt)
p0040 24 40 ( all all) 150 62027 (opt)
p0201 134 201 ( all all) 2124 7615 (opt)
p0282 242 282 ( all all) 2248 258411 (opt)
p0291 253 291 ( all all) 349 5223.7490 (opt)
p0548 177 548 ( all all) 2127 8691 (opt)
p2756 756 2756 ( all all) 11103 3124 (opt)
p6000 2177 6000 ( all all) 54238 -2451377 (opt)
pipex 26 48 ( all all) 240 788.263 (opt)
qiu 1193 840 ( 48 all) 3432 -132.873137 (opt)
rentacar 6804 9557 ( 55 all) 42019 30356761 (opt)
rgn 25 180 ( 100 all) 540 82.1999 (opt)
sample2 46 67 ( 21 all) 179 375 (opt)
sentoy 31 60 ( all all) 1860 -7772 (opt)
set1al 493 712 ( 240 all) 1884 15869.7 (opt)
set1ch 493 712 ( 240 all) 1884 54537.7 (opt)
set1cl 493 712 ( 240 all) 1884 6484.25 (opt)
stein15 37 15 ( all all) 135 9 (opt)
stein27 119 27 ( all all) 405 18 (opt)
stein45 332 45 ( all all) 1079 30 (opt)
stein9 14 9 ( all all) 54 5 (opt)
vpm1 235 378 ( 168 all) 917 20 (opt)

143
resources/3rdparty/glpk-4.53/doc/miplib3.txt

@ -0,0 +1,143 @@
Solver: GLPSOL 4.40
Computer: Intel Pentium 4, 3.0 GHz
Platform: Cygwin 1.5.25
Compiler: GCC 3.4.4 (options used: -O3)
Test set: MIPLIB 3.0 <http://miplib.zib.de/miplib3/miplib.html>
Problem Optimal Solution Options Used Nodes Iters Time,s Mem,MB
-------- ---------------- ---------------- -------- ------ ------ ------
10teams +9.240000000e+02 --pcost --gomory 6013 349276 207 12.7
air03 +3.401600000e+05 --pcost 33 414 12 21.0
air04 +5.613700000e+04 --pcost 1901 109800 396 32.4
air05 +2.637400000e+04 --pcost 6445 201649 452 45.0
arki001
bell3a +8.784303160e+05 --pcost --gomory 7965 42363 17 6.1
bell5 +8.966406492e+06 --pcost --gomory 5605 18555 8 1.5
blend2 +7.598985000e+00 --pcost 7185 24256 7 2.1
cap6000 -2.451377000e+06 --pcost 19209 40906 569 15.8
dano3mip
danoint
dcmulti +1.881820000e+05 --pcost 743 3366 2 1.1
dsbmip -3.051981750e+02 --pcost --mir 217 46088 24 4.5
egout +5.681007000e+02 --pcost 91 137 < 1 0.3
enigma +0.000000000e+00 --pcost 16419 55071 6 3.2
fast0507
fiber +4.059351800e+05 --pcost --mir 407 3108 4 2.4
fixnet6 +3.983000000e+03 --pcost 1031 3136 2 1.7
flugpl +1.201500000e+06 --pcost 397 231 < 1 0.1
gen +1.123133627e+05 --pcost 195 3991 1 1.7
gesa2 +2.577985637e+07 --pcost --mir 59 2723 4 4.1
gesa2_o +2.577985637e+07 --pcost --mir 69 2588 5 3.7
gesa3 +2.799104265e+07 --pcost --mir 93 2774 5 3.7
gesa3_o +2.799104265e+07 --pcost --mir 117 3271 6 3.6
gt2 +2.116600000e+04 --pcost 5613 26115 2 1.2
harp2
khb05250 +1.069402260e+08 --pcost 2163 14498 5 2.8
l152lav +4.722000000e+03 --pcost 7419 95299 68 12.0
lseu +1.120000000e+03 --pcost 10821 31954 5 2.5
marksh1
marksh2
mas74
mas76
misc03 +3.360000000e+03 --pcost 957 6742 2 1.1
misc06 +1.285086074e+04 --pcost 57 941 < 1 2.7
misc07 +2.810000000e+03 --pcost --mir 66075 579129 424 33.4
mitre
mkc
mod008 +3.070000000e+02 --pcost 8185 24245 8 2.3
mod010 +6.548000000e+03 --pcost 315 6283 7 5.3
mod011
modglob +2.074050809e+07 --pcost --mir 5197 31985 20 2.8
noswot
nw04 +1.686200000e+04 (none) 361 5544 345 138.3
p0033 +3.089000000e+03 --pcost 305 955 < 1 0.2
p0201 +7.615000000e+03 --pcost 521 3660 1 0.9
p0282 +2.584110000e+05 --pcost 623 1204 1 0.8
p0548 +8.691000000e+03 --pcost 7617 23556 9 2.9
p2756 +3.124000000e+03 --pcost --mir 3911 15157 57 10.9
pk1
pp08a +7.350000000e+03 --pcost --mir 663 9196 4 1.3
pp08acut +7.350000000e+03 --pcost --mir 17233 260160 154 21.1
qiu -1.328731369e+02 --pcost 80473 1918742 1174 69.2
qnet1 +1.602969268e+04 --pcost --mir 183 20352 16 3.6
qnet1_o +1.602969268e+04 --pcost --mir 75 7645 9 3.3
rentacar +3.035676098e+07 --pcost 43 1649 3 12.1
rgn +8.219999924e+01 --pcost 3325 18700 2 1.2
rout
set1ch
seymour
stein27 +1.800000000e+01 --pcost 3255 15327 2 1.0
stein45 +3.000000000e+01 --pcost 52301 389140 139 19.2
swath
vpm1 +2.000000000e+01 --pcost --mir 9 836 < 1 0.9
vpm2 +1.375000000e+01 --pcost --mir 11729 164856 91 9.2
PROBLEM CHARACTERISTICS
Problem Rows Cols ( Int 0/1) Nonz Best Solution
-------- ------ ---------------------- ------ --------------------------
10teams 230 2025 ( 1800 all) 12150 924 (opt)
air03 125 10757 ( all all) 101785 340160 (opt)
air04 824 8904 ( all all) 81869 56138 (opt)
air05 427 7195 ( all all) 59316 26402 (not opt)
arki001 1048 1388 ( 538 415) 20439 7580813.0459 (not opt)
bell3a 124 133 ( 71 39) 441 878430.32 (opt)
bell5 92 104 ( 58 30) 340 8966406.49 (opt)
blend2 274 353 ( 264 231) 1409 7.598985 (opt)
cap6000 2176 6000 ( all all) 48249 -2451377 (opt)
dano3mip 3202 13873 ( 552 all) 79655 728.1111 (not opt)
danoint 664 521 ( 56 all) 3232 65.67 (opt)
dcmulti 291 548 ( 75 all) 1833 188182.0000 (opt)
dsbmip 1855 1886 ( 192 160) 9768 -305.198 (opt)
egout 99 141 ( 55 all) 392 568.101 (opt)
enigma 22 100 ( all all) 298 0.0 (opt)
fast0507 507 63009 ( all all) 409439 174 (opt)
fiber 363 1298 ( 1254 all) 2944 405935.18000 (opt)
fixnet6 479 878 ( 378 all) 2550 3983 (opt)
flugpl 19 18 ( 11 none) 64 1201500 (opt)
gen 781 870 ( 150 144) 3174 112313 (opt)
gesa2 1392 1224 ( 408 240) 5064 25779856.372 (opt)
gesa2_o 1248 1224 ( 720 384) 3672 25779856.372 (opt)
gesa3 1368 1152 ( 384 216) 4944 27991042.648 (opt)
gesa3_o 1224 1152 ( 672 336) 3624 27991042.648 (opt)
gt2 29 188 ( all 24) 376 21166.000 (opt)
harp2 112 2993 ( all all) 5840 -73899798.00 (opt)
khb05250 102 1350 ( 24 all) 3973 106940226 (opt)
l152lav 98 1989 ( all all) 11911 4750 (not opt)
lseu 29 89 ( all all) 394 1120 (opt)
marksh1 7 62 ( 50 all) 324
marksh2 8 74 ( 60 all) 448
mas74 13 151 ( 150 all) 1705 11801.1857 (opt)
mas76 12 151 ( 150 all) 1639 40005.0541 (opt)
misc03 97 160 ( 159 all) 2054 3360 (opt)
misc06 821 1808 ( 112 all) 5860 12850.8607 (opt)
misc07 213 260 ( 259 all) 8620 2810 (not opt)
mitre 2054 10724 ( all all) 39704 115155 (opt)
mkc 3412 5325 ( 5323 all) 20621
mod008 7 319 ( all all) 1562 307 (opt)
mod010 147 2655 ( all all) 13858 6548 (opt)
mod011 4482 10958 ( 96 all) 37425 -54558535 (opt)
modglob 292 422 ( 98 all) 1390 20740508 (opt)
noswot 183 128 ( 100 75) 760 -43 (opt)
nw04 36 87482 ( all all) 636666 16862 (opt)
p0033 17 33 ( all all) 131 3089 (opt)
p0201 134 201 ( all all) 2124 7615 (opt)
p0282 242 282 ( all all) 2248 258411 (opt)
p0548 177 548 ( all all) 2127 8691 (opt)
p2756 756 2756 ( all all) 11103 3124 (opt)
pk1 45 86 ( 55 all) 915 11 (opt)
pp08a 136 240 ( 64 all) 480 7350 (opt)
pp08acut 246 240 ( 64 all) 839 7350 (opt)
qiu 1193 840 ( 48 all) 3432 -132.873137 (opt)
qnet1 503 1541 ( 1417 1288) 4622 16029.692681 (opt)
qnet1_o 456 1541 ( 1417 1288) 4214 16029.692681 (opt)
rentacar 6804 9557 ( 55 all) 42019 30356761 (opt)
rgn 25 180 ( 100 all) 540 82.1999 (opt)
rout 291 556 ( 315 300) 2431 1077.56 (opt)
set1ch 493 712 ( 240 all) 1884 54537.7 (opt)
seymour 4944 1372 ( all all) 33549 423 (not opt)
stein27 119 27 ( all all) 405 18 (opt)
stein45 332 45 ( all all) 1079 30 (opt)
swath 885 6805 ( 6724 all) 34966
vpm1 235 378 ( 168 all) 917 20 (opt)
vpm2 234 378 ( 168 all) 917 13.75 (opt)

103
resources/3rdparty/glpk-4.53/doc/netlib.txt

@ -0,0 +1,103 @@
Solver: GLPSOL 4.40 (default options used)
Computer: Intel Pentium 4, 3.0 GHz
Platform: Cygwin 1.5.25
Compiler: GCC 3.4.4 (options used: -O3)
Test set: Netlib LP collection <ftp://ftp.netlib.org/lp/data/>
Problem Rows Cols Nonz Optimum Iters Time,s Mem,MB
-------- ----- ----- ------ ---------------- ------ ------ ------
25fv47 822 1571 11127 +5.501845888e+03 1651 < 1 2.1
80bau3b 2263 9799 29063 +9.872241924e+05 5358 3 6.4
adlittle 57 97 465 +2.254949632e+05 71 < 1 0.1
afiro 28 32 88 -4.647531429e+02 10 < 1 0.1
agg 489 163 2541 -3.599176729e+07 100 < 1 0.5
agg2 517 302 4515 -2.023925236e+07 178 < 1 0.8
agg3 517 302 4531 +1.031211594e+07 182 < 1 0.8
bandm 306 472 2659 -1.586280185e+02 252 < 1 0.6
beaconfd 174 262 3476 +3.359248581e+04 61 < 1 0.4
blend 75 83 521 -3.081214985e+01 41 < 1 0.1
bnl1 644 1175 6129 +1.977629562e+03 581 < 1 1.4
bnl2 2325 3489 16124 +1.811236540e+03 1730 1 3.7
boeing1 351 384 3865 -3.352135675e+02 419 < 1 0.7
boeing2 167 143 1339 -3.150187280e+02 161 < 1 0.3
bore3d 234 315 1525 +1.373080394e+03 38 < 1 0.3
brandy 221 249 2150 +1.518509896e+03 191 < 1 0.5
capri 272 353 1786 +2.690012914e+03 203 < 1 0.4
cycle 1904 2857 21322 -5.226393025e+00 953 < 1 3.5
czprob 930 3523 14173 +2.185196699e+06 754 < 1 2.6
d2q06c 2172 5167 35674 +1.227842108e+05 5368 7 6.2
d6cube 416 6184 43888 +3.154916667e+02 6596 6 6.0
degen2 445 534 4449 -1.435178000e+03 506 < 1 1.0
degen3 1504 1818 26230 -9.872940000e+02 2205 2 4.1
dfl001 6072 12230 41873 +1.126639605e+07 39863 117 11.0
e226 224 282 2767 -2.586492907e+01 206 < 1 0.5
etamacro 401 688 2489 -7.557152333e+02 444 < 1 0.7
fffff800 525 854 6235 +5.556795648e+05 167 < 1 1.0
finnis 498 614 2714 +1.727910656e+05 338 < 1 0.6
fit1d 25 1026 14430 -9.146378092e+03 488 < 1 1.7
fit1p 628 1677 10894 +9.146378092e+03 1379 < 1 1.9
fit2d 26 10500 138018 -6.846429329e+04 5751 16 15.8
fit2p 3001 13525 60784 +6.846429329e+04 11960 17 11.3
forplan 162 421 4916 -6.642189613e+02 170 < 1 0.7
ganges 1310 1681 7021 -1.095857361e+05 724 < 1 1.9
gfrd-pnc 617 1092 3467 +6.902236000e+06 416 < 1 1.0
greenbea 2393 5405 31499 -7.255524813e+07 3012 3 5.8
greenbeb 2393 5405 31499 -4.302260261e+06 2153 2 5.8
grow15 301 645 5665 -1.068709413e+08 358 < 1 1.1
grow22 441 946 8318 -1.608343365e+08 606 < 1 1.6
grow7 141 301 2633 -4.778781181e+07 159 < 1 0.5
israel 175 142 2358 -8.966448219e+05 123 < 1 0.4
kb2 44 41 291 -1.749900130e+03 38 < 1 0.1
lotfi 154 308 1086 -2.526470606e+01 104 < 1 0.3
maros 847 1443 10006 -5.806374370e+04 703 < 1 1.8
maros-r7 3137 9408 151120 +1.497185166e+06 2340 5 16.7
modszk1 688 1620 4158 +3.206197291e+02 705 < 1 1.4
nesm 663 2923 13988 +1.407603649e+07 2240 1 2.4
perold 626 1376 6026 -9.380755278e+03 1103 < 1 1.5
pilot 1442 3652 43220 -5.574831533e+02 5726 11 7.8
pilot-ja 941 1988 14706 -6.113136466e+03 1697 1 2.5
pilot-we 723 2789 9218 -2.720107533e+06 1382 1 2.3
pilot4 411 1000 5145 -2.581139259e+03 532 < 1 1.3
pilot87 2031 4883 73804 +3.017103744e+02 7573 28 12.2
pilotnov 976 2172 13129 -4.497276188e+03 988 1 2.5
recipe 92 180 752 -2.666160000e+02 17 < 1 0.2
sc105 106 103 281 -5.220206121e+01 51 < 1 0.2
sc205 206 203 552 -5.220206121e+01 124 < 1 0.3
sc50a 51 48 131 -6.457507706e+01 25 < 1 0.1
sc50b 51 48 119 -7.000000000e+01 30 < 1 0.1
scagr25 472 500 2029 -1.475343306e+07 352 < 1 0.7
scagr7 130 140 553 -2.331389824e+06 94 < 1 0.2
scfxm1 331 457 2612 +1.841675903e+04 281 < 1 0.6
scfxm2 661 914 5229 +3.666026156e+04 587 < 1 1.1
scfxm3 991 1371 7846 +5.490125455e+04 881 < 1 1.7
scorpion 389 358 1708 +1.878124823e+03 146 < 1 0.4
scrs8 491 1169 4029 +9.042969538e+02 545 < 1 1.1
scsd1 78 760 3148 +8.666666674e+00 91 < 1 0.6
scsd6 148 1350 5666 +5.050000008e+01 182 < 1 1.0
scsd8 398 2750 11334 +9.049999999e+02 397 < 1 2.1
sctap1 301 480 2052 +1.412250000e+03 196 < 1 0.5
sctap2 1091 1880 8124 +1.724807143e+03 425 < 1 1.7
sctap3 1481 2480 10734 +1.424000000e+03 729 < 1 2.4
seba 516 1028 4874 +1.571160000e+04 883 < 1 1.0
share1b 118 225 1182 -7.658931858e+04 167 < 1 0.3
share2b 97 79 730 -4.157322407e+02 87 < 1 0.2
shell 537 1775 4900 +1.208825346e+09 467 < 1 1.2
ship04l 403 2118 8450 +1.793324538e+06 373 < 1 1.5
ship04s 403 1458 5810 +1.798714700e+06 262 < 1 1.0
ship08l 779 4283 17085 +1.909055211e+06 516 < 1 2.9
ship08s 779 2387 9501 +1.920098211e+06 274 < 1 1.7
ship12l 1152 5427 21597 +1.470187919e+06 686 < 1 3.7
ship12s 1152 2763 10941 +1.489236134e+06 383 < 1 2.0
sierra 1228 2036 9252 +1.539436218e+07 857 < 1 2.1
stair 357 467 3857 -2.512669512e+02 399 < 1 1.0
standata 360 1075 3038 +1.257699500e+03 140 < 1 0.7
standgub 362 1184 3147 +1.257699500e+03 140 < 1 0.8
standmps 468 1075 3686 +1.406017500e+03 299 < 1 0.9
stocfor1 118 111 474 -4.113197622e+04 24 < 1 0.2
stocfor2 2158 2031 9492 -3.902440854e+04 499 < 1 2.6
stocfor3 16676 15695 74004 -3.997678394e+04 4456 11 19.7
truss 1001 8806 36642 +4.588158472e+05 4744 4 6.5
tuff 334 587 4523 +2.921477651e-01 61 < 1 0.8
vtp-base 199 203 914 +1.298314625e+05 69 < 1 0.2
wood1p 245 2594 70216 +1.442902412e+00 326 < 1 7.1
woodw 1099 8405 37478 +1.304476333e+00 1093 < 1 6.0

BIN
resources/3rdparty/glpk-4.53/doc/notes/dfeas.pdf

BIN
resources/3rdparty/glpk-4.53/doc/notes/gomory.pdf

BIN
resources/3rdparty/glpk-4.53/doc/notes/keller.pdf

BIN
resources/3rdparty/glpk-4.53/doc/notes/scaling.pdf

BIN
resources/3rdparty/glpk-4.53/doc/notes/updating.pdf

52
resources/3rdparty/glpk-4.53/examples/INDEX

@ -0,0 +1,52 @@
assign.mod Assignment problem
bpp.mod Bin packing problem
cal.mod Print an ASCII calendar of the given year
cf12a.mod Curve fitting problem
cf12b.mod Curve fitting problem
cflsq.mod Curve fitting problem by least squares
color.mod Graph coloring problem
cpp.mod Critical path problem
crypto.mod A crypto-arithmetic puzzle
dea.mod Data envelopment analysis (DEA)
diet.mod Stigler's nutrition model
dist.mod A product distribution model
egypt.mod A static model for fertilizer production
fctp.mod Fixed-charge transportation problem
food.mod Food manufacture model
food2.mod Food manufacture model
gap.mod Generalized assignment problem
graph.mod Graph visualization
hashi.mod A solver for the Japanese number-puzzle Hashiwokakero
huge.mod Arithmetic mean of a large number of integers
jssp.mod Job-shop scheduling problem
magic.mod Magic square
maxcut.mod Maximum cut problem
maxflow.mod Maximum flow problem
mfasp.mod Minimum feedback arc set problem
mfvsp.mod Minimum feedback vertex set problem
min01ks.mod Finding minimal equivalent 0-1 knapsack inequality
misp.mod Maximum independent set problem
money.mod A crypto-arithmetic puzzle
mvcp.mod Minimum vertex cover problem
numbrix.mod Number placement puzzle
pbn/*.* Paint-by-numbers puzzle
plan.mod A simple LP problem
prod.mod A multiperiod production model
qfit.mod Quadratic curve fitting solution
queens.mod A classic combinatorial optimization problem
sat.mod Satisfiability problem
shiftcover.mod Workforce shift coverage assignment problem
shikaku.mod A solver for the logic puzzle Shikaku
sorting.mod How to sort arrays in MathProg
spp.mod Shortest path problem
stigler.mod Original Stigler's 1939 diet problem
sudoku.mod Number placement puzzle
tas.mod Tail assignment problem
todd.mod A class of hard instances of 0-1 knapsack problems
train.mod A model of railroad passenger car allocation
transp.mod A transportation problem
trick.mod A transportation design problem
tsp.mod Traveling salesman problem
xyacfs.mod Extended yet another curve fitting solution
yacfs.mod Yet another curve fitting solution
zebra.mod Who owns the zebra?

15
resources/3rdparty/glpk-4.53/examples/Makefile.am

@ -0,0 +1,15 @@
## Process this file with automake to produce Makefile.in ##
AM_CPPFLAGS = -I$(srcdir)/../src
LDADD = ../src/libglpk.la
bin_PROGRAMS = glpsol
glpsol_SOURCES = glpsol.c
check: glpsol$(EXEEXT)
./glpsol$(EXEEXT) --version
./glpsol$(EXEEXT) --mps $(srcdir)/plan.mps
## eof ##

558
resources/3rdparty/glpk-4.53/examples/Makefile.in

@ -0,0 +1,558 @@
# Makefile.in generated by automake 1.12.5 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2012 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
am__make_dryrun = \
{ \
am__dry=no; \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \
*) \
for am__flg in $$MAKEFLAGS; do \
case $$am__flg in \
*=*|--*) ;; \
*n*) am__dry=yes; break;; \
esac; \
done;; \
esac; \
test $$am__dry = yes; \
}
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
bin_PROGRAMS = glpsol$(EXEEXT)
subdir = examples
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
$(top_srcdir)/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
am__installdirs = "$(DESTDIR)$(bindir)"
PROGRAMS = $(bin_PROGRAMS)
am_glpsol_OBJECTS = glpsol.$(OBJEXT)
glpsol_OBJECTS = $(am_glpsol_OBJECTS)
glpsol_LDADD = $(LDADD)
glpsol_DEPENDENCIES = ../src/libglpk.la
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
$(LDFLAGS) -o $@
SOURCES = $(glpsol_SOURCES)
DIST_SOURCES = $(glpsol_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
AM_CPPFLAGS = -I$(srcdir)/../src
LDADD = ../src/libglpk.la
glpsol_SOURCES = glpsol.c
all: all-am
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu examples/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
install-binPROGRAMS: $(bin_PROGRAMS)
@$(NORMAL_INSTALL)
@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
if test -n "$$list"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
$(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
fi; \
for p in $$list; do echo "$$p $$p"; done | \
sed 's/$(EXEEXT)$$//' | \
while read p p1; do if test -f $$p || test -f $$p1; \
then echo "$$p"; echo "$$p"; else :; fi; \
done | \
sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
-e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
sed 'N;N;N;s,\n, ,g' | \
$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
{ d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
if ($$2 == $$4) files[d] = files[d] " " $$1; \
else { print "f", $$3 "/" $$4, $$1; } } \
END { for (d in files) print "f", d, files[d] }' | \
while read type dir files; do \
if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
test -z "$$files" || { \
echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
$(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
} \
; done
uninstall-binPROGRAMS:
@$(NORMAL_UNINSTALL)
@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
files=`for p in $$list; do echo "$$p"; done | \
sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
-e 's/$$/$(EXEEXT)/' `; \
test -n "$$list" || exit 0; \
echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
cd "$(DESTDIR)$(bindir)" && rm -f $$files
clean-binPROGRAMS:
@list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
echo " rm -f" $$list; \
rm -f $$list || exit $$?; \
test -n "$(EXEEXT)" || exit 0; \
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
glpsol$(EXEEXT): $(glpsol_OBJECTS) $(glpsol_DEPENDENCIES) $(EXTRA_glpsol_DEPENDENCIES)
@rm -f glpsol$(EXEEXT)
$(LINK) $(glpsol_OBJECTS) $(glpsol_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glpsol.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
set x; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
if test $$# -gt 0; then \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
cscopelist: $(HEADERS) $(SOURCES) $(LISP)
list='$(SOURCES) $(HEADERS) $(LISP)'; \
case "$(srcdir)" in \
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
*) sdir=$(subdir)/$(srcdir) ;; \
esac; \
for i in $$list; do \
if test -f "$$i"; then \
echo "$(subdir)/$$i"; \
else \
echo "$$sdir/$$i"; \
fi; \
done >> $(top_builddir)/cscope.files
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(PROGRAMS)
installdirs:
for dir in "$(DESTDIR)$(bindir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
dvi: dvi-am
dvi-am:
html: html-am
html-am:
info: info-am
info-am:
install-data-am:
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am: install-binPROGRAMS
install-html: install-html-am
install-html-am:
install-info: install-info-am
install-info-am:
install-man:
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-binPROGRAMS
.MAKE: install-am install-strip
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
clean-generic clean-libtool cscopelist ctags distclean \
distclean-compile distclean-generic distclean-libtool \
distclean-tags distdir dvi dvi-am html html-am info info-am \
install install-am install-binPROGRAMS install-data \
install-data-am install-dvi install-dvi-am install-exec \
install-exec-am install-html install-html-am install-info \
install-info-am install-man install-pdf install-pdf-am \
install-ps install-ps-am install-strip installcheck \
installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags uninstall uninstall-am uninstall-binPROGRAMS
check: glpsol$(EXEEXT)
./glpsol$(EXEEXT) --version
./glpsol$(EXEEXT) --mps $(srcdir)/plan.mps
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

77
resources/3rdparty/glpk-4.53/examples/assign.mod

@ -0,0 +1,77 @@
/* ASSIGN, Assignment Problem */
/* Written in GNU MathProg by Andrew Makhorin <mao@gnu.org> */
/* The assignment problem is one of the fundamental combinatorial
optimization problems.
In its most general form, the problem is as follows:
There are a number of agents and a number of tasks. Any agent can be
assigned to perform any task, incurring some cost that may vary
depending on the agent-task assignment. It is required to perform all
tasks by assigning exactly one agent to each task in such a way that
the total cost of the assignment is minimized.
(From Wikipedia, the free encyclopedia.) */
param m, integer, > 0;
/* number of agents */
param n, integer, > 0;
/* number of tasks */
set I := 1..m;
/* set of agents */
set J := 1..n;
/* set of tasks */
param c{i in I, j in J}, >= 0;
/* cost of allocating task j to agent i */
var x{i in I, j in J}, >= 0;
/* x[i,j] = 1 means task j is assigned to agent i
note that variables x[i,j] are binary, however, there is no need to
declare them so due to the totally unimodular constraint matrix */
s.t. phi{i in I}: sum{j in J} x[i,j] <= 1;
/* each agent can perform at most one task */
s.t. psi{j in J}: sum{i in I} x[i,j] = 1;
/* each task must be assigned exactly to one agent */
minimize obj: sum{i in I, j in J} c[i,j] * x[i,j];
/* the objective is to find a cheapest assignment */
solve;
printf "\n";
printf "Agent Task Cost\n";
printf{i in I} "%5d %5d %10g\n", i, sum{j in J} j * x[i,j],
sum{j in J} c[i,j] * x[i,j];
printf "----------------------\n";
printf " Total: %10g\n", sum{i in I, j in J} c[i,j] * x[i,j];
printf "\n";
data;
/* These data correspond to an example from [Christofides]. */
/* Optimal solution is 76 */
param m := 8;
param n := 8;
param c : 1 2 3 4 5 6 7 8 :=
1 13 21 20 12 8 26 22 11
2 12 36 25 41 40 11 4 8
3 35 32 13 36 26 21 13 37
4 34 54 7 8 12 22 11 40
5 21 6 45 18 24 34 12 48
6 42 19 39 15 14 16 28 46
7 16 34 38 3 34 40 22 24
8 26 20 5 17 45 31 37 43 ;
end;

83
resources/3rdparty/glpk-4.53/examples/bpp.mod

@ -0,0 +1,83 @@
/* BPP, Bin Packing Problem */
/* Written in GNU MathProg by Andrew Makhorin <mao@gnu.org> */
/* Given a set of items I = {1,...,m} with weight w[i] > 0, the Bin
Packing Problem (BPP) is to pack the items into bins of capacity c
in such a way that the number of bins used is minimal. */
param m, integer, > 0;
/* number of items */
set I := 1..m;
/* set of items */
param w{i in 1..m}, > 0;
/* w[i] is weight of item i */
param c, > 0;
/* bin capacity */
/* We need to estimate an upper bound of the number of bins sufficient
to contain all items. The number of items m can be used, however, it
is not a good idea. To obtain a more suitable estimation an easy
heuristic is used: we put items into a bin while it is possible, and
if the bin is full, we use another bin. The number of bins used in
this way gives us a more appropriate estimation. */
param z{i in I, j in 1..m} :=
/* z[i,j] = 1 if item i is in bin j, otherwise z[i,j] = 0 */
if i = 1 and j = 1 then 1
/* put item 1 into bin 1 */
else if exists{jj in 1..j-1} z[i,jj] then 0
/* if item i is already in some bin, do not put it into bin j */
else if sum{ii in 1..i-1} w[ii] * z[ii,j] + w[i] > c then 0
/* if item i does not fit into bin j, do not put it into bin j */
else 1;
/* otherwise put item i into bin j */
check{i in I}: sum{j in 1..m} z[i,j] = 1;
/* each item must be exactly in one bin */
check{j in 1..m}: sum{i in I} w[i] * z[i,j] <= c;
/* no bin must be overflowed */
param n := sum{j in 1..m} if exists{i in I} z[i,j] then 1;
/* determine the number of bins used by the heuristic; obviously it is
an upper bound of the optimal solution */
display n;
set J := 1..n;
/* set of bins */
var x{i in I, j in J}, binary;
/* x[i,j] = 1 means item i is in bin j */
var used{j in J}, binary;
/* used[j] = 1 means bin j contains at least one item */
s.t. one{i in I}: sum{j in J} x[i,j] = 1;
/* each item must be exactly in one bin */
s.t. lim{j in J}: sum{i in I} w[i] * x[i,j] <= c * used[j];
/* if bin j is used, it must not be overflowed */
minimize obj: sum{j in J} used[j];
/* objective is to minimize the number of bins used */
data;
/* The optimal solution is 3 bins */
param m := 6;
param w := 1 50, 2 60, 3 30, 4 70, 5 50, 6 40;
param c := 100;
end;

49
resources/3rdparty/glpk-4.53/examples/cal.mod

@ -0,0 +1,49 @@
/* cal.mod - print an ASCII calendar of the given year */
/* Written in GNU MathProg by Andrew Makhorin <mao@gnu.org> */
param year, integer, >= 0001, <= 3999, default 2010;
param first_day{m in 1..12}, integer, >= 0, <= 6, :=
time2str(str2time(year & "-" & m & "-01", "%Y-%m-%d"), "%w");
param days_in_month{m in 1..12}, integer, >= 28, <= 31, :=
(str2time(year + (if m < 12 then 0 else 1) & "-" &
(if m < 12 then m+1 else 1) & "-01", "%Y-%m-%d") -
str2time(year & "-" & m & "-01", "%Y-%m-%d")) / 86400;
param foo{m in 1..12, k in 0..5, d in 0..6}, integer, :=
7 * k + d + 1 - first_day[m];
param cal{m in 1..12, k in 0..5, d in 0..6}, integer, :=
if 1 <= foo[m,k,d] and foo[m,k,d] <= days_in_month[m] then
foo[m,k,d];
printf "\n";
printf "%33s%04d\n", "", year;
printf "\n";
for {t in 1..12 by 3}
{ for {m in t..t+2}
{ printf "%7s%-14s", "", time2str(str2time(m, "%m"), "%B");
printf{0..0: m < t+2} " ";
}
printf "\n";
for {m in t..t+2}
{ printf " S M Tu W Th F S";
printf{0..0: m < t+2} " ";
}
printf "\n";
for {k in 0..5}
{ for {m in t..t+2}
{ for {d in 0..6}
{ printf{0..0: cal[m,k,d] = 0} " ";
printf{0..0: cal[m,k,d] != 0} " %2d", cal[m,k,d];
}
printf{0..0: m < t+2} " ";
}
printf "\n";
}
}
printf "\n";
end;

81
resources/3rdparty/glpk-4.53/examples/cf12a.mod

@ -0,0 +1,81 @@
/*
Curve fitting problem 12.11(a) H P Williams "Model Building in Mathematical Programming"
Dr. H J Mackenzie
HARD software
hjm@hardsoftware.com
2006-01-05
*/
# set of points
set I;
# independent variable
param x {i in I};
# dependent variable
param y {i in I};
# output input values
printf {i in I} "x = %.1f; y = %.1f\n", x[i], y[i];
# define equation variables
var a;
var b;
var u {i in I}, >= 0;
var v {i in I}, >= 0;
# define objective function
minimize error: sum {i in I} u[i] + sum {i in I} v[i];
# define equation constraint
s.t. equation {i in I} : b * x[i] + a + u[i] - v[i] = y[i];
solve;
printf "y = %.4fx + %.4f\n", b, a;
/*
*
* DATA section
*
*/
data;
param : I : x y :=
1 0 1
2 0.5 0.9
3 1 0.7
4 1.5 1.5
5 1.9 2
6 2.5 2.4
7 3 3.2
8 3.5 2
9 4 2.7
10 4.5 3.5
11 5 1
12 5.5 4
13 6 3.6
14 6.6 2.7
15 7 5.7
16 7.6 4.6
17 8.5 6
18 9 6.8
19 10 7.3
;
end;

88
resources/3rdparty/glpk-4.53/examples/cf12b.mod

@ -0,0 +1,88 @@
/*
Curve fitting problem 12.11(b) H P Williams "Model Building in Mathematical Programming"
Dr. H J Mackenzie
HARD software
hjm@hardsoftware.com
2006-01-23
*/
# set of points
set I;
# independent variable
param x {i in I};
# dependent variable
param y {i in I};
# output input values
printf {i in I} "x = %.1f; y = %.1f\n", x[i], y[i];
# define equation variables
var a;
var b;
var u {i in I}, >= 0;
var v {i in I}, >= 0;
var z;
# define objective function
minimize deviation: z;
# define equation constraint
s.t. equation {i in I} : b * x[i] + a + u[i] - v[i] = y[i];
# define deviation constrains
s.t. u_deviation {i in I} : z - u[i] >= 0;
s.t. v_deviation {i in I} : z - v[i] >= 0;
solve;
printf "y = %.4fx + %.4f Max deviation = %.4f\n", b, a, z;
/*
*
* DATA section
*
*/
data;
param : I : x y :=
1 0 1
2 0.5 0.9
3 1 0.7
4 1.5 1.5
5 1.9 2
6 2.5 2.4
7 3 3.2
8 3.5 2
9 4 2.7
10 4.5 3.5
11 5 1
12 5.5 4
13 6 3.6
14 6.6 2.7
15 7 5.7
16 7.6 4.6
17 8.5 6
18 9 6.8
19 10 7.3
;
end;

51
resources/3rdparty/glpk-4.53/examples/cflsq.mod

@ -0,0 +1,51 @@
/*Curve fitting problem by Least Squares
Nigel_Galloway@operamail.com
October 1st., 2007
*/
set Sample;
param Sx {z in Sample};
param Sy {z in Sample};
var X;
var Y;
var Ex{z in Sample};
var Ey{z in Sample};
/* sum of variances is zero for Sx*/
variencesX{z in Sample}: X + Ex[z] = Sx[z];
zumVariancesX: sum{z in Sample} Ex[z] = 0;
/* sum of variances is zero for Sy*/
variencesY{z in Sample}: Y + Ey[z] = Sy[z];
zumVariancesY: sum{z in Sample} Ey[z] = 0;
solve;
param b1 := (sum{z in Sample} Ex[z]*Ey[z])/(sum{z in Sample} Ex[z]*Ex[z]);
printf "\nbest linear fit is:\n\ty = %f %s %fx\n\n", Y-b1*X, if b1 < 0 then "-" else "+", abs(b1);
data;
param:
Sample: Sx Sy :=
1 0 1
2 0.5 0.9
3 1 0.7
4 1.5 1.5
5 1.9 2
6 2.5 2.4
7 3 3.2
8 3.5 2
9 4 2.7
10 4.5 3.5
11 5 1
12 5.5 4
13 6 3.6
14 6.6 2.7
15 7 5.7
16 7.6 4.6
17 8.5 6
18 9 6.8
19 10 7.3
;
end;

113
resources/3rdparty/glpk-4.53/examples/color.mod

@ -0,0 +1,113 @@
/* COLOR, Graph Coloring Problem */
/* Written in GNU MathProg by Andrew Makhorin <mao@gnu.org> */
/* Given an undirected loopless graph G = (V, E), where V is a set of
nodes, E <= V x V is a set of arcs, the Graph Coloring Problem is to
find a mapping (coloring) F: V -> C, where C = {1, 2, ... } is a set
of colors whose cardinality is as small as possible, such that
F(i) != F(j) for every arc (i,j) in E, that is adjacent nodes must
be assigned different colors. */
param n, integer, >= 2;
/* number of nodes */
set V := {1..n};
/* set of nodes */
set E, within V cross V;
/* set of arcs */
check{(i,j) in E}: i != j;
/* there must be no loops */
/* We need to estimate an upper bound of the number of colors |C|.
The number of nodes |V| can be used, however, for sparse graphs such
bound is not very good. To obtain a more suitable estimation we use
an easy "greedy" heuristic. Let nodes 1, ..., i-1 are already
assigned some colors. To assign a color to node i we see if there is
an existing color not used for coloring nodes adjacent to node i. If
so, we use this color, otherwise we introduce a new color. */
set EE := setof{(i,j) in E} (i,j) union setof{(i,j) in E} (j,i);
/* symmetrisized set of arcs */
param z{i in V, case in 0..1} :=
/* z[i,0] = color index assigned to node i
z[i,1] = maximal color index used for nodes 1, 2, ..., i-1 which are
adjacent to node i */
( if case = 0 then
( /* compute z[i,0] */
min{c in 1..z[i,1]}
( if not exists{j in V: j < i and (i,j) in EE} z[j,0] = c then
c
else
z[i,1] + 1
)
)
else
( /* compute z[i,1] */
if not exists{j in V: j < i} (i,j) in EE then
1
else
max{j in V: j < i and (i,j) in EE} z[j,0]
)
);
check{(i,j) in E}: z[i,0] != z[j,0];
/* check that all adjacent nodes are assigned distinct colors */
param nc := max{i in V} z[i,0];
/* number of colors used by the heuristic; obviously, it is an upper
bound of the optimal solution */
display nc;
var x{i in V, c in 1..nc}, binary;
/* x[i,c] = 1 means that node i is assigned color c */
var u{c in 1..nc}, binary;
/* u[c] = 1 means that color c is used, i.e. assigned to some node */
s.t. map{i in V}: sum{c in 1..nc} x[i,c] = 1;
/* each node must be assigned exactly one color */
s.t. arc{(i,j) in E, c in 1..nc}: x[i,c] + x[j,c] <= u[c];
/* adjacent nodes cannot be assigned the same color */
minimize obj: sum{c in 1..nc} u[c];
/* objective is to minimize the number of colors used */
data;
/* These data correspond to the instance myciel3.col from:
http://mat.gsia.cmu.edu/COLOR/instances.html */
/* The optimal solution is 4 */
param n := 11;
set E :=
1 2
1 4
1 7
1 9
2 3
2 6
2 8
3 5
3 7
3 10
4 5
4 6
4 10
5 8
5 9
6 11
7 11
8 11
9 11
10 11
;
end;

44
resources/3rdparty/glpk-4.53/examples/cplex/README

@ -0,0 +1,44 @@
The program module in this subdirectory is a crude implementation of
CPLEX-like interface to GLPK API. It consists of two files: cplex.c and
cplex.h.
NOTE that this module is NOT a clean room implementation of the CPLEX
callable library. It only implements a CPLEX-like interface to the GLPK
API routines, and its main purpose is to provide possibility to build
and run applications which normally use the CPLEX callable library.
This module approximately corresponds to CPLEX 9.0.
Currently this module can be used as a linear programming solver for
Concorde, the state-of-the-art computer code for solving the symmetric
traveling salesman problem (TSP) developed by David Applegate, Robert
Bixby, Vasek Chvatal, and William Cook. For details about Concorde see
its web page at http://www.tsp.gatech.edu/concorde.html.
To build Concorde along with GLPK you need to do the following:
1. Configure, build, and install GLPK.
2. Download the Concorde tarball co031219.tgz (version Dec 19, 2003),
unpack and unarchive it.
3. Copy files cplex.h and cplex.c to subdirectory concorde/LP/.
4. Create file named lpglpk.c in subdirectory concorde/LP/. This file
must contain the following two lines:
#include "cplex.c"
#include "lpcplex8.c"
5. Configure Concorde in usual way (./configure) and then build it with
the following command:
make CPPFLAGS=-I. LPSOLVER_INTERFACE=lpglpk.c LPSOLVER_LIB=-lglpk
The Concorde executable can be found in subdirectory concorde/TSP/.
Please note that currently this GLPK interface module does not support
some important features (namely, CPXgetijdiv, CPXmdleave, CPXpivotin,
CPXpivotout, and CPXstrongbranch), so large (more than 1000 nodes) TSP
instances cannot be solved in a reasonable time, and some instances may
cause abnormal termination of Concorde (if CPXgetijdiv is called).

121
resources/3rdparty/glpk-4.53/examples/cplex/concorde.txt

@ -0,0 +1,121 @@
Solver: Concorde-03.12.19 (options used: -s 99)
http://www.tsp.gatech.edu/concorde.html
LP Solver: GLPK 4.34 (CPLEX-like interface module examples/cplex)
Computer: Intel Pentium 4 CPU 3GHz, 2GB of RAM
Platform: Cygwin 1.5.24 (Windows XP 5.1 Build 2600 Service Pack 4)
Compiler: GCC 3.4.4 (options used: -O2)
Test set: http://www.iwr.uni-heidelberg.de/groups/comopt/software/
TSPLIB95/
Problem Solution B&B Time, s
--------- -------- --- -------
a280 2579 1 3.09
ali535 202339 1 21.88
att48 10628 1 0.20
att532 27686 7 74.31
bayg29 1610 1 0.08
bays29 2020 1 0.08
berlin52 7542 1 0.11
bier127 118282 1 0.62
brazil58 25395 1 0.23
brd14051
brg180 1950 1 0.34
burma14 3323 1 0.06
ch130 6110 1 0.92
ch150 6528 1 1.69
d1291
d15112
d1655
d18512
d198 15780 3 4.92
d2103
d493 35002 5 123.89
d657 48913 11 148.17
dantzig42 699 1 0.08
dsj1000 18660188 13 251.00
eil101 (failed due to CPXgetijdiv)
eil51 426 1 0.17
eil76 538 1 0.11
fl1400
fl1577
fl3795
fl417 11861 1 47.20
fnl4461
fri26 937 1 0.05
gil262 2378 3 10.39
gr120 6942 1 0.66
gr137 69853 1 2.09
gr17 2085 1 0.03
gr202 40160 1 3.97
gr21 2707 1 0.03
gr229 134602 7 19.45
gr24 1272 1 0.03
gr431 171414 9 40.67
gr48 5046 1 0.22
gr666 294358 3 40.23
gr96 55209 1 1.22
hk48 11461 1 0.08
kroA100 21282 1 0.41
kroA150 26524 1 2.09
kroA200 29368 1 2.44
kroB100 22141 1 1.20
kroB150 26130 1 1.66
kroB200 29437 1 1.41
kroC100 20749 1 0.42
kroD100 21294 1 0.50
kroE100 22068 1 0.94
lin105 14379 1 0.23
lin318 42029 1 4.28
nrw1379
p654 34643 1 17.08
pa561 2763 15 370.70
pcb1173 56892 11 370.30
pcb3038
pcb442 59778 13 35.86
pla33810
pla7397
pla85900
pr1002 259045 1 23.08
pr107 44303 1 0.38
pr124 59030 1 1.23
pr136 96772 1 2.19
pr144 58537 1 0.89
pr152 73682 1 2.73
pr226 80369 1 2.72
pr2392
pr264 49135 1 1.61
pr299 48191 3 14.52
pr439 107217 15 117.75
pr76 108159 1 0.95
rat195 2323 5 12.91
rat575 6773 19 202.52
rat783 8806 1 37.92
rat99 1211 1 0.50
rd100 7910 1 0.28
rd400 15281 11 74.41
rl11849
rl1304
rl1323
rl1889
rl5915
rl5934
si1032 92650 1 82.09
si175 21407 3 8.97
si535 48450 1 71.28
st70 675 1 0.20
swiss42 1273 1 0.06
ts225 126643 1 21.25
tsp225 3916 1 10.14
u1060 224094 13 507.44
u1432
u159 42080 1 0.41
u1817
u2152
u2319
u574 36905 1 32.84
u724 41910 19 238.42
ulysses16 6859 1 0.19
ulysses22 7013 1 0.47
usa13509
vm1084 239297 9 543.38
vm1748

2130
resources/3rdparty/glpk-4.53/examples/cplex/cplex.c
File diff suppressed because it is too large
View File

301
resources/3rdparty/glpk-4.53/examples/cplex/cplex.h

@ -0,0 +1,301 @@
/* cplex.h (CPLEX-like interface to GLPK API) */
/***********************************************************************
* This code is part of GLPK (GNU Linear Programming Kit).
*
* Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
* 2009, 2010, 2011, 2013 Andrew Makhorin, Department for Applied
* Informatics, Moscow Aviation Institute, Moscow, Russia. All rights
* reserved. E-mail: <mao@gnu.org>.
*
* GLPK is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* GLPK is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
* License for more details.
*
* You should have received a copy of the GNU General Public License
* along with GLPK. If not, see <http://www.gnu.org/licenses/>.
***********************************************************************/
#ifndef _CPLEX_H
#define _CPLEX_H
#ifdef __cplusplus
extern "C" {
#endif
typedef struct CPXENV CPXENV, *CPXENVptr;
typedef struct CPXLP CPXLP, *CPXLPptr;
#define CPX_VERSION 900
#define CPX_OFF 0
#define CPX_ON 1
#define CPX_INFBOUND 1e20
/* error codes: */
#define CPXERR_NO_MEMORY 1001
#define CPXERR_NO_ENVIRONMENT 1002
#define CPXERR_BAD_ARGUMENT 1003
#define CPXERR_NULL_POINTER 1004
#define CPXERR_NO_PROBLEM 1009
#define CPXERR_BAD_PARAM_NUM 1013
#define CPXERR_PARAM_TOO_SMALL 1014
#define CPXERR_PARAM_TOO_BIG 1015
#define CPXERR_INDEX_RANGE 1200
#define CPXERR_COL_INDEX_RANGE 1201
#define CPXERR_ROW_INDEX_RANGE 1203
#define CPXERR_NEGATIVE_SURPLUS 1207
#define CPXERR_BAD_SENSE 1215
#define CPXERR_NO_SOLN 1217
#define CPXERR_NOT_FIXED 1221
#define CPXERR_DUP_ENTRY 1222
#define CPXERR_NULL_NAME 1224
#define CPXERR_ARRAY_NOT_ASCENDING 1226
#define CPXERR_COUNT_RANGE 1227
#define CPXERR_BAD_LUB 1229
#define CPXERR_BAD_STATUS 1253
#define CPXERR_NO_BASIC_SOLN 1261
#define CPXERR_NO_FILENAME 1421
#define CPXERR_FAIL_OPEN_WRITE 1422
#define CPXERR_BAD_FILETYPE 1424
#define CPXERR_BAD_CTYPE 3021
/* control parameters: */
#define CPX_PARAM_ADVIND 1001
#define CPX_PARAM_AGGIND 1003
#define CPX_PARAM_DPRIIND 1009
#define CPX_PARAM_EPOPT 1014
#define CPX_PARAM_EPPER 1015
#define CPX_PARAM_EPRHS 1016
#define CPX_PARAM_FASTMIP 1017 /* ??? */
#define CPX_PARAM_SIMDISPLAY 1019
#define CPX_PARAM_ITLIM 1020
#define CPX_PARAM_OBJLLIM 1025
#define CPX_PARAM_OBJULIM 1026
#define CPX_PARAM_PERIND 1027
#define CPX_PARAM_PPRIIND 1029
#define CPX_PARAM_PREIND 1030
#define CPX_PARAM_REINV 1031
#define CPX_PARAM_SCRIND 1035
#define CPX_PARAM_DATACHECK 1056
/* CPX_PARAM_DPRIIND: */
#define CPX_DPRIIND_AUTO 0
#define CPX_DPRIIND_FULL 1
#define CPX_DPRIIND_STEEP 2
#define CPX_DPRIIND_FULL_STEEP 3
#define CPX_DPRIIND_STEEPQSTART 4
#define CPX_DPRIIND_DEVEX 5
/* CPX_PARAM_PPRIIND: */
#define CPX_PPRIIND_PARTIAL (-1)
#define CPX_PPRIIND_AUTO 0
#define CPX_PPRIIND_DEVEX 1
#define CPX_PPRIIND_STEEP 2
#define CPX_PPRIIND_STEEPQSTART 3
#define CPX_PPRIIND_FULL 4
/* CPXgetprobtype: */
#define CPXPROB_LP 0
#define CPXPROB_MIP 1
#define CPXPROB_RELAXED 2
#define CPXPROB_FIXED 3
#define CPXPROB_QP 5
#define CPXPROB_ZEROEDQP 6
/* CPXgetobjsen: */
#define CPX_MIN 1
#define CPX_MAX (-1)
/* CPXgetbase: */
#define CPX_AT_LOWER 0
#define CPX_BASIC 1
#define CPX_AT_UPPER 2
#define CPX_FREE_SUPER 3
/* CPXgetstat: */
#define CPX_STAT_OPTIMAL 1
#define CPX_STAT_UNBOUNDED 2
#define CPX_STAT_INFEASIBLE 3
#define CPX_STAT_INForUNBD 4
#define CPX_STAT_OPTIMAL_INFEAS 5
#define CPX_STAT_ABORT_IT_LIM 10
#define CPX_STAT_ABORT_OBJ_LIM 12
/* CPXgetmethod: */
#define CPX_ALG_NONE 0
#define CPX_ALG_PRIMAL 1
#define CPX_ALG_DUAL 2
#define CPX_ALG_BARRIER 4
/* CPXsolninfo: */
#define CPX_NO_SOLN 0
#define CPX_BASIC_SOLN 1
#define CPX_NONBASIC_SOLN 2
#define CPX_PRIMAL_SOLN 3
int CPXaddcols(CPXENV *env, CPXLP *lp, int ccnt, int nzcnt,
const double obj[], const int cmatbeg[], const int cmatind[],
const double cmatval[], const double lb[], const double ub[],
char *colname[]);
int CPXaddrows(CPXENV *env, CPXLP *lp, int ccnt, int rcnt, int nzcnt,
const double rhs[], const char sense[], const int rmatbeg[],
const int rmatind[], const double rmatval[], char *colname[],
char *rowname[]);
int CPXbaropt(CPXENV *env, CPXLP *lp);
int CPXbinvrow(CPXENV *env, CPXLP *lp, int i, double y[]);
int CPXchgbds(CPXENV *env, CPXLP *lp, int cnt, const int indices[],
const char lu[], const double bd[]);
int CPXchgcoeflist(CPXENV *env, CPXLP *lp, int numcoefs,
const int rowlist[], const int collist[], const double vallist[]);
void CPXchgobjsen(CPXENV *env, CPXLP *lp, int maxormin);
int CPXchgsense(CPXENV *env, CPXLP *lp, int cnt, const int indices[],
const char sense[]);
int CPXcloseCPLEX(CPXENV **env);
int CPXcopybase(CPXENV *env, CPXLP *lp, const int cstat[],
const int rstat[]);
int CPXcopybasednorms(CPXENV *env, CPXLP *lp, const int cstat[],
const int rstat[], const double dnorm[]);
int CPXcopylp(CPXENV *env, CPXLP *lp, int numcols, int numrows,
int objsen, const double obj[], const double rhs[],
const char sense[], const int matbeg[], const int matcnt[],
const int matind[], const double matval[], const double lb[],
const double ub[], const double rngval[]);
int CPXcopylpwnames(CPXENV *env, CPXLP *lp, int numcols, int numrows,
int objsen, const double obj[], const double rhs[],
const char sense[], const int matbeg[], const int matcnt[],
const int matind[], const double matval[], const double lb[],
const double ub[], const double rngval[], char *colname[],
char *rowname[]);
CPXLP *CPXcreateprob(CPXENV *env, int *status, const char *probname);
int CPXdelcols(CPXENV *env, CPXLP *lp, int begin, int end);
int CPXdelrows(CPXENV *env, CPXLP *lp, int begin, int end);
int CPXdelsetcols(CPXENV *env, CPXLP *lp, int delstat[]);
int CPXdelsetrows(CPXENV *env, CPXLP *lp, int delstat[]);
int CPXdualopt(CPXENV *env, CPXLP *lp);
int CPXfreeprob(CPXENV *env, CPXLP **lp);
int CPXgetbase(CPXENV *env, CPXLP *lp, int cstat[], int rstat[]);
int CPXgetbasednorms(CPXENV *env, CPXLP *lp, int cstat[], int rstat[],
double dnorm[]);
int CPXgetbhead(CPXENV *env, CPXLP *lp, int head[], double x[]);
int CPXgetdblparam(CPXENV *env, int whichparam, double *value);
int CPXgetdj(CPXENV *env, CPXLP *lp, double dj[], int begin, int end);
char *CPXgeterrorstring(CPXENV *env, int errcode, char *buffer);
int CPXgetijdiv(CPXENV *env, CPXLP *lp, int *idiv, int *jdiv);
int CPXgetintparam(CPXENV *env, int whichparam, int *value);
int CPXgetlb(CPXENV *env, CPXLP *lp, double lb[], int begin, int end);
int CPXgetmethod(CPXENV *env, CPXLP *lp);
int CPXgetnumcols(CPXENV *env, CPXLP *lp);
int CPXgetnumnz(CPXENV *env, CPXLP *lp);
int CPXgetnumrows(CPXENV *env, CPXLP *lp);
int CPXgetobjval(CPXENV *env, CPXLP *lp, double *objval);
int CPXgetpi(CPXENV *env, CPXLP *lp, double pi[], int begin, int end);
int CPXgetsense(CPXENV *env, CPXLP *lp, char sense[], int begin,
int end);
int CPXgetslack(CPXENV *env, CPXLP *lp, double slack[], int begin,
int end);
int CPXgetstat(CPXENV *env, CPXLP *lp);
int CPXgetub(CPXENV *env, CPXLP *lp, double ub[], int begin, int end);
int CPXgetweight(CPXENV *env, CPXLP *lp, int rcnt, const int rmatbeg[],
const int rmatind[], const double rmatval[], double weight[],
int dpriind);
int CPXgetx(CPXENV *env, CPXLP *lp, double x[], int begin, int end);
int CPXinfodblparam(CPXENV *env, int whichparam, double *defvalue,
double *minvalue, double *maxvalue);
int CPXinfointparam(CPXENV *env, int whichparam, int *defvalue,
int *minvalue, int *maxvalue);
int CPXlpopt(CPXENV *env, CPXLP *lp);
int CPXmdleave(const CPXENV *env, CPXLP *lp, const int goodlist[],
int goodlen, double downratio[], double upratio[]);
int CPXnewcols(CPXENV *env, CPXLP *lp, int ccnt, const double obj[],
const double lb[], const double ub[], const char ctype[],
char *colname[]);
int CPXnewrows(CPXENV *env, CPXLP *lp, int rcnt, const double rhs[],
const char sense[], const double rngval[], char *rowname[]);
CPXENV *CPXopenCPLEX(int *status);
int CPXpivotin(CPXENV *env, CPXLP *lp, const int rlist[], int rlen);
int CPXpivotout(CPXENV *env, CPXLP *lp, const int clist[], int clen);
int CPXprimopt(CPXENV *env, CPXLP *lp);
int CPXsavwrite(CPXENV *env, CPXLP *lp, const char *filename);
int CPXsetdblparam(CPXENV *env, int whichparam, double newvalue);
int CPXsetintparam(CPXENV *env, int whichparam, int newvalue);
int CPXsolninfo(CPXENV *env, CPXLP *lp, int *solnmethod, int *solntype,
int *pfeasind, int *dfeasind);
int CPXsolution(CPXENV *env, CPXLP *lp, int *lpstat, double *objval,
double x[], double pi[], double slack[], double dj[]);
int CPXstrongbranch(CPXENV *env, CPXLP *lp, const int goodlist[],
int goodlen, double downpen[], double uppen[], int itlim);
int CPXwriteprob(CPXENV *env, CPXLP *lp, const char *filename,
const char *filetype);
#ifdef __cplusplus
}
#endif
#endif
/* eof */

67
resources/3rdparty/glpk-4.53/examples/cpp.mod

@ -0,0 +1,67 @@
/* CPP, Critical Path Problem */
/* Written in GNU MathProg by Andrew Makhorin <mao@gnu.org> */
/* Note: Reduced costs of auxiliary variables phi[j,k] (see below)
can be only zero or one. The critical path is defined by the
constraints, whose reduced cost is one. */
set J;
/* set of jobs (activities) */
set P{j in J}, in J, default {};
/* P[j] is a subset of jobs that immediately precede job j */
param t{j in J}, >= 0;
/* duration required to perform job j */
var x{j in J}, >= 0;
/* starting time of job j */
s.t. phi{j in J, k in P[j]}: x[j] >= x[k] + t[k];
/* job j can start only after all immediately preceding jobs have been
completely performed */
var z;
/* project makespan */
s.t. fin{j in J}: z >= x[j] + t[j];
/* which is the maximum of the completion times of all the jobs */
minimize obj: z;
/* the objective is make z as small as possible */
data;
/* The optimal solution is 46 */
param : J : t :=
A 3 /* Excavate */
B 4 /* Lay foundation */
C 3 /* Rough plumbing */
D 10 /* Frame */
E 8 /* Finish exterior */
F 4 /* Install HVAC */
G 6 /* Rough electric */
H 8 /* Sheet rock */
I 5 /* Install cabinets */
J 5 /* Paint */
K 4 /* Final plumbing */
L 2 /* Final electric */
M 4 /* Install flooring */
;
set P[B] := A;
set P[C] := B;
set P[D] := B;
set P[E] := D;
set P[F] := D;
set P[G] := D;
set P[H] := C E F G;
set P[I] := H;
set P[J] := H;
set P[K] := I;
set P[L] := J;
set P[M] := K L;
end;

84
resources/3rdparty/glpk-4.53/examples/crypto.mod

@ -0,0 +1,84 @@
/* CRYPTO, a crypto-arithmetic puzzle */
/* Written in GNU MathProg by Andrew Makhorin <mao@gnu.org> */
/* This problem comes from the newsgroup rec.puzzle.
The numbers from 1 to 26 are assigned to the letters of the alphabet.
The numbers beside each word are the total of the values assigned to
the letters in the word (e.g. for LYRE: L, Y, R, E might be to equal
5, 9, 20 and 13, or any other combination that add up to 47).
Find the value of each letter under the equations:
BALLET 45 GLEE 66 POLKA 59 SONG 61
CELLO 43 JAZZ 58 QUARTET 50 SOPRANO 82
CONCERT 74 LYRE 47 SAXOPHONE 134 THEME 72
FLUTE 30 OBOE 53 SCALE 51 VIOLIN 100
FUGUE 50 OPERA 65 SOLO 37 WALTZ 34
Solution:
A, B,C, D, E,F, G, H, I, J, K,L,M, N, O, P,Q, R, S,T,U, V,W, X, Y, Z
5,13,9,16,20,4,24,21,25,17,23,2,8,12,10,19,7,11,15,3,1,26,6,22,14,18
Reference:
Koalog Constraint Solver <http://www.koalog.com/php/jcs.php>,
Simple problems, the crypto-arithmetic puzzle ALPHACIPHER. */
set LETTERS :=
{ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
};
/* set of letters */
set VALUES := 1..card(LETTERS);
/* set of values assigned to the letters */
set WORDS;
/* set of words */
param total{word in WORDS};
/* total[word] is the total of the values assigned to the letters in
the word */
var x{i in LETTERS, j in VALUES}, binary;
/* x[i,j] = 1 means that letter i is assigned value j */
s.t. phi{i in LETTERS}: sum{j in VALUES} x[i,j] = 1;
s.t. psi{j in VALUES}: sum{i in LETTERS} x[i,j] = 1;
s.t. eqn{word in WORDS}: sum{k in 1..length(word), j in VALUES}
j * x[substr(word,k,1), j] = total[word];
solve;
printf{i in LETTERS} " %s", i;
printf "\n";
printf{i in LETTERS} " %2d", sum{j in VALUES} j * x[i,j];
printf "\n";
data;
param : WORDS : total :=
BALLET 45
CELLO 43
CONCERT 74
FLUTE 30
FUGUE 50
GLEE 66
JAZZ 58
LYRE 47
OBOE 53
OPERA 65
POLKA 59
QUARTET 50
SAXOPHONE 134
SCALE 51
SOLO 37
SONG 61
SOPRANO 82
THEME 72
VIOLIN 100
WALTZ 34 ;
end;

7
resources/3rdparty/glpk-4.53/examples/csv/distances.csv

@ -0,0 +1,7 @@
plant,market,distance
"Seattle","New York",2.5
"Seattle","Chicago",1.7
"Seattle","Topeka",1.8
"San Diego","New York",2.5
"San Diego","Chicago",1.8
"San Diego","Topeka",1.4

4
resources/3rdparty/glpk-4.53/examples/csv/markets.csv

@ -0,0 +1,4 @@
market,demand
"New York",325.
"Chicago",300.
"Topeka",275.

2
resources/3rdparty/glpk-4.53/examples/csv/parameters.csv

@ -0,0 +1,2 @@
parameter,value
"transport cost",90.

3
resources/3rdparty/glpk-4.53/examples/csv/plants.csv

@ -0,0 +1,3 @@
plant,capacity
"Seattle",350.
"San Diego",600.

70
resources/3rdparty/glpk-4.53/examples/csv/transp_csv.mod

@ -0,0 +1,70 @@
# A TRANSPORTATION PROBLEM
#
# This problem finds a least cost shipping schedule that meets
# requirements at markets and supplies at factories.
#
# References:
# Dantzig G B, "Linear Programming and Extensions."
# Princeton University Press, Princeton, New Jersey, 1963,
# Chapter 3-3.
set I;
/* canning plants */
set J;
/* markets */
set K dimen 2;
/* transportation lane */
set L;
/* parameters */
param a{i in I};
/* capacity of plant i in cases */
param b{j in J};
/* demand at market j in cases */
param d{i in I, j in J};
/* distance in thousands of miles */
param e{l in L};
/* parameters */
param f;
/* freight in dollars per case per thousand miles */
table tab_plant IN "CSV" "plants.csv" :
I <- [plant], a ~ capacity;
table tab_market IN "CSV" "markets.csv" :
J <- [market], b ~ demand;
table tab_distance IN "CSV" "distances.csv" :
K <- [plant, market], d ~ distance;
table tab_parameter IN "CSV" "parameters.csv" :
L <- [parameter], e ~ value ;
param c{i in I, j in J} := e['transport cost'] * d[i,j] / 1000;
/* transport cost in thousands of dollars per case */
var x{(i,j) in K} >= 0;
/* shipment quantities in cases */
minimize cost: sum{(i,j) in K} c[i,j] * x[i,j];
/* total transportation costs in thousands of dollars */
s.t. supply{i in I}: sum{(i,j) in K} x[i,j] <= a[i];
/* observe supply limit at plant i */
s.t. demand{j in J}: sum{(i,j) in K} x[i,j] >= b[j];
/* satisfy demand at market j */
solve;
table tab_result{(i,j) in K} OUT "CSV" "result.csv" :
i ~ plant, j ~ market, x[i,j] ~ shipment;
end;

226
resources/3rdparty/glpk-4.53/examples/dbf/ForestMgt_Model_I_GIS_dbf.mod

@ -0,0 +1,226 @@
# Model I Forest Estate Modelling using GLPK/MathProg
# Reading and writing dbf files
# by Noli Sicad --- nsicad@gmail.com
# 18 December 2009
# Forest Management 4th Edition
# by Lawrence Davis, K. Norman Johnson, Pete Bettinger, Theodore Howard
# Chapter 11 - Daniel Pickett
# http://warnell.forestry.uga.edu/Warnell/Bettinger/mgtbook/index.htm
# Model I Formulation
/* Note: This is not the full LP model mentioned in the book.
Some of the constraints are deliberately omitted in this model for the purpose of clarity.
The features of MathProg in this example are:
* reading and writing dbf from regular dbf files,
* reading dbf file (database of shapefile (stands.shp)) (e.g. area parameter),
* using the area data in the constraints and
* writing dbf file from result of LP model.
Model I - Harvest Scheduling formulation for Sustainable Forest Management (SFM)
Features are:
* Net Present Value for the objective function (Revenue - Cost)
* Harvest Constraints by period - Sustainable Yield per Period
* Even-Flow Constraint / Volume - Harvest Flow Constraint - Alpha (1-Apha)
* Even-Flow Constraint / Volume - Harvest Flow Constraint - Beta (1 +Beta)
* Forest / Land Constraint -- Total Area of the forest
* Forest Stand Constraint -- Individual stands
What is next? -- Forest Mgt Carbon Accounting for Climate Change
Note: The model file that the data containing in
the dbf files is public domain material (so it is compatible with the
GNU GPL) and data can be found in
http://warnell.forestry.uga.edu/Warnell/Bettinger/mgtbook/index.htm
# Noli Sicad --- nsicad@gmail.com
*/
set G_STAND_TYPE; # A, B, C
set I_CULTURAL_PRES;
set J_MGT_YEAR;
param K_PERIOD;
param Forest_Cost{G_STAND_TYPE,I_CULTURAL_PRES, J_MGT_YEAR}; # cost
param Yield_Table_Vol{G_STAND_TYPE, I_CULTURAL_PRES, J_MGT_YEAR, 1..K_PERIOD} >= 0;
param Alpha >= 0;
param Beta >= 0;
param TCost_Table{G_STAND_TYPE, I_CULTURAL_PRES, J_MGT_YEAR, 1..K_PERIOD} >= 0;
param NetRev_Table{G_STAND_TYPE, I_CULTURAL_PRES, J_MGT_YEAR, 1..K_PERIOD};
var XForestLand{g in G_STAND_TYPE, i in I_CULTURAL_PRES, j in J_MGT_YEAR} >= 0;
#reading dbf tables
table tab IN "xBASE" "standtype.dbf": G_STAND_TYPE <- [STAND];
display G_STAND_TYPE;
table tab2 IN "xBASE" "cultural_pres.dbf": I_CULTURAL_PRES <- [CUL_PRES];
display I_CULTURAL_PRES;
table tab3 IN "xBASE" "mgt_year.dbf": J_MGT_YEAR <- [MGT_YEAR];
display J_MGT_YEAR;
/*
param Forest_Cost{G_STAND_TYPE,I_CULTURAL_PRES, J_MGT_YEAR} default 0; # cost
*/
set S1, dimen 3;
table tab4 IN "xBASE" "Forest_Cost.dbf": S1 <- [STAND, CUL_PRES, MGT_YEAR],Forest_Cost ~FCOST;
display Forest_Cost;
set S2, dimen 4;
table tab5 IN "xBASE" "Yield_Table_Vol.dbf": S2 <- [STAND, CUL_PRES, MGT_YEAR, PERIOD],Yield_Table_Vol ~YIELD;
display Yield_Table_Vol;
set S3, dimen 4;
table tab5 IN "xBASE" "TCost_Table.dbf": S3 <- [STAND, CUL_PRES, MGT_YEAR, PERIOD],TCost_Table ~TCOST;
display TCost_Table;
set S4, dimen 4;
table tab5 IN "xBASE" "NetRev_Table.dbf": S4 <- [STAND, CUL_PRES, MGT_YEAR, PERIOD],NetRev_Table ~NETREV;
display NetRev_Table;
param MGT;
param Area_Stand_Indi{g in G_STAND_TYPE, m in 1..MGT} default 0;
set ST, dimen 2;
table tab5 IN "xBASE" "stands.dbf": ST <- [VEG_TYPE, MGT], Area_Stand_Indi ~ACRES;
display Area_Stand_Indi;
param Area_Stand_Type{g in G_STAND_TYPE}:= sum {m in 1..MGT } Area_Stand_Indi[g,m];
display Area_Stand_Type;
param Total_Area := sum {g in G_STAND_TYPE, m in 1..MGT } Area_Stand_Indi[g,m];
display Total_Area;
param Harvest_Min_Vol_Period;
var NetPresentValue;
# Objective function
maximize Net_Present_Value: NetPresentValue;
subject to NPV:
NetPresentValue = sum {g in G_STAND_TYPE, i in I_CULTURAL_PRES, j in J_MGT_YEAR} Forest_Cost[g,i,j] * XForestLand[g,i,j];
# Harvest Constraint by Period
subject to Harvest_Period_H {k in 1..K_PERIOD}:
sum {g in G_STAND_TYPE, i in I_CULTURAL_PRES, j in J_MGT_YEAR} Yield_Table_Vol[g,i,j,k] * XForestLand[g,i,j] >= Harvest_Min_Vol_Period;
#Even-Flow Constraint / Volume - Harvest Flow Constraint - Alpha
subject to Even_Flow_Constaints_Alpha {k in 6..K_PERIOD-1}:
(1 - Alpha) * sum {g in G_STAND_TYPE, i in I_CULTURAL_PRES, j in J_MGT_YEAR} Yield_Table_Vol[g,i,j,k] * XForestLand[g,i,j] -
sum {g in G_STAND_TYPE,i in I_CULTURAL_PRES, j in J_MGT_YEAR} Yield_Table_Vol[g,i,j,k+1] * XForestLand[g,i,j] <= 0;
# Even-Flow Constraint / Volume - Harvest Flow Constraint - Beta
subject to Even_Flow_Constaints_Beta {k in 6..K_PERIOD-1}:
(1 + Beta) * sum {g in G_STAND_TYPE, i in I_CULTURAL_PRES, j in J_MGT_YEAR} Yield_Table_Vol[g,i,j,k] * XForestLand[g,i,j] -
sum {g in G_STAND_TYPE,i in I_CULTURAL_PRES, j in J_MGT_YEAR} Yield_Table_Vol[g,i,j,k+1] * XForestLand[g,i,j] >= 0;
# Forest / Land Constraints
subject to Total_Area_Constraint:
sum {g in G_STAND_TYPE, i in I_CULTURAL_PRES, j in J_MGT_YEAR} XForestLand[g,i,j] <= Total_Area;
display Total_Area;
# Forest / Land Constraints for A B C
subject to Area {g in G_STAND_TYPE}:
sum {i in I_CULTURAL_PRES,j in J_MGT_YEAR} XForestLand[g,i,j] = Area_Stand_Type[g];
solve;
#RESULT SECTION
printf '#################################\n';
printf 'Forest Management Model I - Noli Sicad\n';
printf '\n';
printf 'Net Present Value = %.2f\n', NetPresentValue;
printf '\n';
printf '\n';
printf 'Variables\n';
printf 'Stand_Type Age_Class Mgt_Presc Sign Value \n';
printf{g in G_STAND_TYPE, i in I_CULTURAL_PRES, j in J_MGT_YEAR}:'%5s %10s %11s = %10.2f\n', g,i,j, XForestLand[g,i,j];
printf '\n';
printf 'Constraints\n';
printf 'Period Harvest Sign \n';
for {k in 1..K_PERIOD} {
printf '%5s %10.2f >= %.3f\n', k, sum {g in G_STAND_TYPE, i in I_CULTURAL_PRES, j in J_MGT_YEAR} Yield_Table_Vol[g,i,j,k] * XForestLand[g,i,j], Harvest_Min_Vol_Period;
}
# xbase (dbf) output
table Harvest{k in 1..K_PERIOD} OUT "xBASE" "HarvestArea1.dbf" "N(5)N(15,2)" : k ~ Period, (sum {g in G_STAND_TYPE, i in I_CULTURAL_PRES, j in J_MGT_YEAR} Yield_Table_Vol[g,i,j,k] * XForestLand[g,i,j]) ~ H_Area;
# xbase (dbf) read
set S, dimen 2;
table tab2 IN "xBASE" "HarvestArea1.dbf": S <- [Period, H_Area];
display S;
printf '\n';
printf 'Constraint\n';
printf 'Harvest Period\n';
printf 'Type AgeClass PrescMgt Period Value\n';
printf{g in G_STAND_TYPE, i in I_CULTURAL_PRES, j in J_MGT_YEAR, k in 1..K_PERIOD}:'%5s %11s %11s %5s %10.2f\n', g,i,j, k, (Yield_Table_Vol[g,i,j,k] * XForestLand[g,i,j]);
printf 'Even_Flow_Constaint_Alpha (1-Alpha)\n';
printf 'Period Sign \n';
for {k in 6..K_PERIOD-1} {
printf "%s %10.2f <= %s\n", k, ((1 - Alpha) * sum {g in G_STAND_TYPE, i in I_CULTURAL_PRES, j in J_MGT_YEAR} Yield_Table_Vol[g,i,j,k] * XForestLand[g,i,j] - sum {g in G_STAND_TYPE,i in I_CULTURAL_PRES, j in J_MGT_YEAR} Yield_Table_Vol[g,i,j,k+1] * XForestLand[g,i,j]),0;
}
printf '\n';
# Forest / Land Constraints
printf '\n';
printf 'Total Area Constraint\n';
printf 'Type AgeClass PrescMgt Value Sign Total_Area \n';
printf '%5s <= %.3f\n',sum {g in G_STAND_TYPE, i in I_CULTURAL_PRES, j in J_MGT_YEAR} XForestLand[g,i,j], Total_Area;
printf 'Area\n';
printf 'Area Value Sign Areas_Stand\n';
for {g in G_STAND_TYPE} {
printf '%5s %10.2f <= %.3f\n', g, sum {i in I_CULTURAL_PRES,j in J_MGT_YEAR} XForestLand[g,i,j], Area_Stand_Type[g];
}
#DATA SECTION
data;
# Most of the data has been moved to dbf format
param MGT:=31;
param K_PERIOD:= 7;
param Alpha:= 0.20;
param Beta:= 0.20;
param Harvest_Min_Vol_Period:= 12000;
end;

BIN
resources/3rdparty/glpk-4.53/examples/dbf/Forest_Cost.dbf

BIN
resources/3rdparty/glpk-4.53/examples/dbf/NetRev_Table.dbf

2
resources/3rdparty/glpk-4.53/examples/dbf/README

@ -0,0 +1,2 @@
This subdirectory contains an example MathProg model that demonstrates
using data tables in DBF format.

BIN
resources/3rdparty/glpk-4.53/examples/dbf/TCost_Table.dbf

BIN
resources/3rdparty/glpk-4.53/examples/dbf/Yield_Table_Vol.dbf

BIN
resources/3rdparty/glpk-4.53/examples/dbf/cultural_pres.dbf

BIN
resources/3rdparty/glpk-4.53/examples/dbf/mgt_year.dbf

BIN
resources/3rdparty/glpk-4.53/examples/dbf/stands.dbf

BIN
resources/3rdparty/glpk-4.53/examples/dbf/standtype.dbf

222
resources/3rdparty/glpk-4.53/examples/dea.mod

@ -0,0 +1,222 @@
/* Data Envelopment Analysis (DEA)
*
* DEA quantifies the relative efficiency of decision making units (DMUs) by
* finding the efficient frontier in multiple input multiple output data. The
* inputs are resources (eg. number of employees, available machines, ...),
* the outputs are productive outputs (eg. contracts made, total sales, ...).
* The method is non-parametric. More details are available in the paper
* below.
*
* Models according to: Seiford, Threall, "Recent developments in DEA", 1990.
*
* Implementation: Sebastian Nowozin <nowozin@gmail.com>
*/
### SETS ###
set dmus; # Decision Making Units (DMU)
set inputs; # Input parameters
set outputs; # Output parameters
### PARAMETERS ###
param input_data{dmus,inputs} >= 0;
param output_data{dmus,outputs} >= 0;
### PROGRAM ###
var theta{dmus} >= 0;
var lambda{dmus,dmus} >= 0;
minimize inefficiency: sum{td in dmus} theta[td];
s.t. output_lower_limit{o in outputs, td in dmus}:
sum{d in dmus} lambda[d,td]*output_data[d,o] >= output_data[td,o];
s.t. input_upper_limit{i in inputs, td in dmus}:
sum{d in dmus} lambda[d,td]*input_data[d,i] <= theta[td]*input_data[td,i];
s.t. PI1{td in dmus}:
sum{d in dmus} lambda[d,td] = 1;
/*
possibilities:
i) (no constraint)
ii) s.t. PI1{td in dmus}:
sum{d in dmus} lambda[d,td] <= 1;
iii) s.t. PI1{td in dmus}:
sum{d in dmus} lambda[d,td] >= 1;
*/
### SOLVE AND PRINT SOLUTION ###
solve;
printf "DMU\tEfficiency\n";
for {td in dmus} {
printf "%s\t%1.4f\n", td, theta[td];
}
### DATA ###
data;
set dmus := 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 ;
set inputs := AvgInventory LaborCost OperatingCost Population ;
set outputs := PrescrVol kDollarValue ;
param input_data default 0.0 :
AvgInventory LaborCost OperatingCost Population :=
1 8000 17030 1280 1410
2 9000 25890 2779 1523
3 13694 29076 2372 1354
4 4250 17506 1385 822
5 6500 23208 639 746
6 7000 12946 802 1281
7 4500 18001 1130 1016
8 5000 14473 1097 1070
9 27000 31760 5559 1694
10 21560 50972 15010 1910
11 15000 39523 4799 1745
12 8500 13076 3489 1353
13 35000 35427 1704 500
14 18000 27554 2882 1016
15 59750 53848 14208 2500
16 19200 38253 1480 2293
17 40000 109404 83016 2718
18 8466 18198 1278 2877
19 16000 40891 7599 4150
20 10000 45444 5556 4421
21 25000 35623 2121 3883
22 14000 20192 5515 3519
23 12500 34973 10475 32366
24 17260 32284 14498 3393
25 7000 17920 7585 4489
26 14000 42094 3742 2217
27 16400 35422 14236 4641
28 13000 19100 3529 5968
29 30000 72167 8656 8715
30 12530 19970 1714 5968
31 31500 39183 4919 5607
32 10000 32048 3483 7324
33 22000 68877 12279 8685
34 10000 29812 3332 8685
35 16000 47686 2507 5420
36 10000 33415 4738 7703
37 9000 12359 4603 4665
38 16439 23614 2989 6317
39 14500 36069 1793 31839
40 39000 76307 9539 15619
41 24927 40706 12661 30213
42 13858 39267 4609 34719
43 33375 29509 11323 31839
44 29044 44482 5542 34719
45 32257 61365 20550 32366
46 8800 49671 3306 43561
47 47000 40425 10396 31263
48 12000 33034 4915 31263
49 28000 69163 4688 15173
50 13300 28931 16735 73064
51 13500 29758 4260 62309
52 24000 40927 8285 23166
53 16000 40403 2131 99836
54 17000 38730 2539 60348
55 25000 35978 2502 99836
56 16000 37509 6278 99836
57 20000 46950 10715 85925
58 14000 35966 3144 85925
59 22000 68318 8015 108987
60 21879 69537 7778 108987
61 15000 25425 2812 201404
62 10000 19508 2454 201404
63 20000 28191 3367 201404
64 18000 37073 8624 108987
65 19051 23763 3496 201404
66 15000 28642 3366 201404
67 10000 35919 3868 201404
68 24000 54653 26494 108987
69 1800 6276 3413 60348
;
param output_data default 0.0 :
PrescrVol kDollarValue :=
1 12293 61.00
2 18400 92.00
3 16789 92.65
4 10700 45.00
5 9800 50.00
6 6500 29.00
7 8200 56.00
8 8680 45.00
9 33800 183.00
10 23710 156.00
11 24000 120.00
12 17500 75.00
13 25000 130.00
14 26000 122.00
15 26830 178.513
16 16600 106.00
17 90000 450.00
18 11140 73.624
19 25868 136.00
20 32700 191.295
21 29117 152.864
22 18000 100.00
23 11100 60.00
24 23030 137.778
25 10656 58.00
26 24682 152.095
27 26908 120.00
28 16464 80.00
29 57000 321.00
30 17532 94.747
31 30035 168.00
32 16000 100.00
33 63700 277.00
34 18000 90.00
35 27339 139.134
36 19500 116.00
37 13000 80.00
38 15370 102.00
39 18446 90.00
40 56000 260.00
41 73845 364.951
42 28600 145.00
43 27000 243.00
44 52423 279.816
45 73759 363.388
46 20500 80.00
47 27100 115.00
48 15000 110.00
49 50895 277.852
50 19707 128.00
51 17994 78.80
52 36135 167.222
53 30000 153.00
54 26195 125.00
55 28000 216.00
56 24658 152.551
57 36850 190.00
58 29250 183.69
59 50000 250.00
60 40078 265.443
61 20200 110.00
62 12500 75.00
63 30890 195.00
64 31000 175.00
65 31277 192.992
66 11500 75.00
67 30000 175.668
68 38383 190.00
69 2075 8.650
;
end;

99
resources/3rdparty/glpk-4.53/examples/diet.mod

@ -0,0 +1,99 @@
# STIGLER'S NUTRITION MODEL
#
# This model determines a least cost diet which meets the daily
# allowances of nutrients for a moderately active man weighing 154 lbs.
#
# References:
# Dantzig G B, "Linear Programming and Extensions."
# Princeton University Press, Princeton, New Jersey, 1963,
# Chapter 27-1.
set N;
/* nutrients */
set F;
/* foods */
param b{N};
/* required daily allowances of nutrients */
param a{F,N};
/* nutritive value of foods (per dollar spent) */
var x{f in F} >= 0;
/* dollars of food f to be purchased daily */
s.t. nb{n in N}: sum{f in F} a[f,n] * x[f] = b[n];
/* nutrient balance (units) */
minimize cost: sum{f in F} x[f];
/* total food bill (dollars) */
data;
param : N : b :=
Calorie 3 /* thousands */
Protein 70 /* grams */
Calcium 0.8 /* grams */
Iron 12 /* milligrams */
Vitamin-A 5 /* thousands IUs */
Vitamin-B1 1.8 /* milligrams */
Vitamin-B2 2.7 /* milligrams */
Niacin 18 /* milligrams */
Vitamin-C 75 /* milligrams */ ;
set F := Wheat Cornmeal Cannedmilk Margarine Cheese Peanut-B Lard
Liver Porkroast Salmon Greenbeans Cabbage Onions Potatoes
Spinach Sweet-Pot Peaches Prunes Limabeans Navybeans;
param a default 0
: Calorie Protein Calcium Iron Vitamin-A Vitamin-B1 :=
# (1000) (g) (g) (mg) (1000IU) (mg)
Wheat 44.7 1411 2.0 365 . 55.4
Cornmeal 36 897 1.7 99 30.9 17.4
Cannedmilk 8.4 422 15.1 9 26 3
Margarine 20.6 17 .6 6 55.8 .2
Cheese 7.4 448 16.4 19 28.1 .8
Peanut-B 15.7 661 1 48 . 9.6
Lard 41.7 . . . .2 .
Liver 2.2 333 .2 139 169.2 6.4
Porkroast 4.4 249 .3 37 . 18.2
Salmon 5.8 705 6.8 45 3.5 1
Greenbeans 2.4 138 3.7 80 69 4.3
Cabbage 2.6 125 4 36 7.2 9
Onions 5.8 166 3.8 59 16.6 4.7
Potatoes 14.3 336 1.8 118 6.7 29.4
Spinach 1.1 106 . 138 918.4 5.7
Sweet-Pot 9.6 138 2.7 54 290.7 8.4
Peaches 8.5 87 1.7 173 86.8 1.2
Prunes 12.8 99 2.5 154 85.7 3.9
Limabeans 17.4 1055 3.7 459 5.1 26.9
Navybeans 26.9 1691 11.4 792 . 38.4
: Vitamin-B2 Niacin Vitamin-C :=
# (mg) (mg) (mg)
Wheat 33.3 441 .
Cornmeal 7.9 106 .
Cannedmilk 23.5 11 60
Margarine . . .
Cheese 10.3 4 .
Peanut-B 8.1 471 .
Lard .5 5 .
Liver 50.8 316 525
Porkroast 3.6 79 .
Salmon 4.9 209 .
Greenbeans 5.8 37 862
Cabbage 4.5 26 5369
Onions 5.9 21 1184
Potatoes 7.1 198 2522
Spinach 13.8 33 2755
Sweet-Pot 5.4 83 1912
Peaches 4.3 55 57
Prunes 4.3 65 257
Limabeans 38.2 93 .
Navybeans 24.6 217 . ;
end;

565
resources/3rdparty/glpk-4.53/examples/dist.mod

@ -0,0 +1,565 @@
# DIST, a product distribution model
#
# References:
# Robert Fourer, David M. Gay and Brian W. Kernighan, "A Modeling Language
# for Mathematical Programming." Management Science 36 (1990) 519-554.
### SHIPPING SETS AND PARAMETERS ###
set whse 'warehouses'; # Locations from which demand is satisfied
set dctr 'distribution centers' within whse;
# Locations from which product may be shipped
param sc 'shipping cost' {dctr,whse} >= 0;
# Shipping costs, to whse from dctr, in $ / 100 lb
param huge 'largest shipping cost' > 0;
# Largest cost allowed for a usable shipping route
param msr 'minimum size restriction' {dctr,whse} logical;
# True indicates a minimum-size restriction on
# direct shipments using this dctr --> whse route
param dsr 'direct shipment requirement' {dctr} >= 0;
# Minimum total demand, in pallets, needed to
# allow shipment on routes subject to the
# minimum size restriction
### PLANT SETS AND PARAMETERS ###
set fact 'factories' within dctr;
# Locations where product is manufactured
param rtmin 'regular-time total minimum' >= 0;
# Lower limit on (average) total regular-time
# crews employed at all factories
param rtmax 'regular-time total maximum' >= rtmin;
# Upper limit on (average) total regular-time
# crews employed at all factories
param otmin 'overtime total minimum' >= 0;
# Lower limit on total overtime hours at all factories
param otmax 'overtime total maximum' >= otmin;
# Upper limit on total overtime hours at all factories
param rmin 'regular-time minimums' {fact} >= 0;
# Lower limits on (average) regular-time crews
param rmax 'regular-time maximums' {f in fact} >= rmin[f];
# Upper limits on (average) regular-time crews
param omin 'overtime minimums' {fact} >= 0;
# Lower limits on overtime hours
param omax 'overtime maximums' {f in fact} >= omin[f];
# Upper limits on overtime hours
param hd 'hours per day' {fact} >= 0;
# Regular-time hours per working day
param dp 'days in period' {fact} > 0;
# Working days in the current planning period
### PRODUCT SETS AND PARAMETERS ###
set prd 'products'; # Elements of the product group
param wt 'weight' {prd} > 0;
# Weight in 100 lb / 1000 cases
param cpp 'cases per pallet' {prd} > 0;
# Cases of product per shipping pallet
param tc 'transshipment cost' {prd} >= 0;
# Transshipment cost in $ / 1000 cases
param pt 'production time' {prd,fact} >= 0;
# Crew-hours to produce 1000 cases
param rpc 'regular-time production cost' {prd,fact} >= 0;
# Cost of production on regular time,
# in $ / 1000 cases
param opc 'overtime production cost' {prd,fact} >= 0;
# Cost of production on overtime, in $ / 1000 cases
### DEMAND SETS AND PARAMETERS ###
param dt 'total demand' {prd} >= 0;
# Total demands for products, in 1000s
param ds 'demand shares' {prd,whse} >= 0.0, <= 1.0;
# Historical demand data, from which each
# warehouse's share of total demand is deduced
param dstot {p in prd} := sum {w in whse} ds[p,w];
# Total of demand shares; should be 1, but often isn't
param dem 'demand' {p in prd, w in whse} := dt[p] * ds[p,w] / dstot[p];
# Projected demands to be satisfied, in 1000s
set rt 'shipping routes available' :=
{d in dctr, w in whse:
d <> w and sc[d,w] < huge and
(w in dctr or sum {p in prd} dem[p,w] > 0) and
not (msr[d,w] and sum {p in prd} 1000*dem[p,w]/cpp[p] < dsr[d]) };
# List of ordered pairs that represent routes
# on which shipments are allowed
### VARIABLES ###
var Rprd 'regular-time production' {prd,fact} >= 0;
# Regular-time production of each product
# at each factory, in 1000s of cases
var Oprd 'overtime production' {prd,fact} >= 0;
# Overtime production of each product
# at each factory, in 1000s of cases
var Ship 'shipments' {prd,rt} >= 0;
# Shipments of each product on each allowed route,
# in 1000s of cases
var Trans 'transshipments' {prd,dctr} >= 0;
# Transshipments of each product at each
# distribution center, in 1000s of cases
### OBJECTIVE ###
minimize cost: sum {p in prd, f in fact} rpc[p,f] * Rprd[p,f] +
sum {p in prd, f in fact} opc[p,f] * Oprd[p,f] +
sum {p in prd, (d,w) in rt} sc[d,w] * wt[p] * Ship[p,d,w] +
sum {p in prd, d in dctr} tc[p] * Trans[p,d];
# Total cost: regular production, overtime
# production, shipping, and transshipment
### CONSTRAINTS ###
rtlim 'regular-time total limits':
rtmin <= sum {p in prd, f in fact}
(pt[p,f] * Rprd[p,f]) / (dp[f] * hd[f]) <= rtmax;
# Total crews must lie between limits
otlim 'overtime total limits':
otmin <= sum {p in prd, f in fact} pt[p,f] * Oprd[p,f] <= otmax;
# Total overtime must lie between limits
rlim 'regular-time limits' {f in fact}:
rmin[f] <= sum {p in prd}
(pt[p,f] * Rprd[p,f]) / (dp[f] * hd[f]) <= rmax[f];
# Crews at each factory must lie between limits
olim 'overtime limits' {f in fact}:
omin[f] <= sum {p in prd} pt[p,f] * Oprd[p,f] <= omax[f];
# Overtime at each factory must lie between limits
noRprd 'no regular production' {p in prd, f in fact: rpc[p,f] = 0}:
Rprd[p,f] = 0;
noOprd 'no overtime production' {p in prd, f in fact: opc[p,f] = 0}:
Oprd[p,f] = 0; # Do not produce where specified cost is zero
bal 'material balance' {p in prd, w in whse}:
sum {(v,w) in rt}
Ship [p,v,w] + (if w in fact then Rprd[p,w] + Oprd[p,w]) =
dem[p,w] + (if w in dctr then sum {(w,v) in rt} Ship[p,w,v]);
# Demand is satisfied by shipment into warehouse
# plus production (if it is a factory)
# minus shipment out (if it is a distn. center)
trdef 'transshipment definition' {p in prd, d in dctr}:
Trans[p,d] >= sum {(d,w) in rt} Ship [p,d,w] -
(if d in fact then Rprd[p,d] + Oprd[p,d]);
# Transshipment at a distribution center is
# shipments out less production (if any)
### DATA -- 3 PRODUCTS ###
data;
set prd := 18REG 24REG 24PRO ;
set whse := w01 w02 w03 w04 w05 w06 w08 w09 w12 w14 w15 w17
w18 w19 w20 w21 w24 w25 w26 w27 w28 w29 w30 w31
w32 w33 w34 w35 w36 w37 w38 w39 w40 w41 w42 w43
w44 w45 w46 w47 w48 w49 w50 w51 w53 w54 w55 w56
w57 w59 w60 w61 w62 w63 w64 w65 w66 w68 w69 w71
w72 w73 w74 w75 w76 w77 w78 w79 w80 w81 w82 w83
w84 w85 w86 w87 w89 w90 w91 w92 w93 w94 w95 w96
w98 x22 x23 ;
set dctr := w01 w02 w03 w04 w05 w62 w76 w96 ;
set fact := w01 w05 w96 ;
param huge := 99. ;
param rtmin := 0.0 ;
param rtmax := 8.0 ;
param otmin := 0.0 ;
param otmax := 96.0 ;
param rmin := w01 0.00 w05 0.00 w96 0.00 ;
param rmax := w01 3.00 w05 2.00 w96 3.00 ;
param omin := w01 0.0 w05 0.0 w96 0.0 ;
param omax := w01 48.0 w05 0.0 w96 48.0 ;
param hd := w01 8.0 w05 8.0 w96 8.0 ;
param dp := w01 19.0 w05 19.0 w96 19.0 ;
param wt := 18REG 47.3 24REG 63.0 24PRO 63.0 ;
param tc := 18REG 40.00 24REG 45.00 24PRO 45.00 ;
param dt := 18REG 376.0 24REG 172.4 24PRO 316.3 ;
param cpp := 18REG 102. 24REG 91. 24PRO 91. ;
param dsr := w01 96. w02 96. w03 96. w04 96. w05 96.
w62 96. w76 96. w96 96. ;
param pt (tr) :
18REG 24REG 24PRO :=
w01 1.194 1.429 1.429
w05 1.194 1.509 1.509
w96 0.000 1.600 1.600 ;
param rpc (tr) :
18REG 24REG 24PRO :=
w01 2119. 2653. 2617.
w05 2489. 3182. 3176.
w96 0. 2925. 2918. ;
param opc (tr) :
18REG 24REG 24PRO :=
w01 2903. 3585. 3579.
w05 0. 0. 0.
w96 0. 3629. 3622. ;
param sc default 99.99 (tr) :
w01 w02 w03 w04 w05 w62 w76 w96 :=
w01 . 2.97 1.14 2.08 2.37 1.26 2.42 1.43
w02 4.74 . 4.17 6.12 7.41 3.78 7.04 5.21
w03 2.45 4.74 . 3.67 2.84 0.90 2.41 2.55
w04 1.74 5.03 2.43 . 3.19 2.45 2.69 0.58
w05 2.70 5.16 2.84 2.85 . 3.26 3.34 2.71
w06 1.99 4.17 2.13 2.19 2.52 2.06 2.00 1.51
w08 0.21 2.92 1.24 2.07 2.29 1.25 2.32 1.55
w09 0.66 3.76 1.41 2.47 1.82 1.66 . 1.87
w12 1.38 3.83 1.68 2.53 2.39 . 1.96 1.94
w14 2.47 1.58 2.40 3.59 3.85 2.25 . 3.05
w15 1.06 4.95 2.48 1.39 3.41 1.96 . 1.02
w17 0.88 3.39 1.46 2.00 2.67 1.45 . 1.46
w18 7.90 6.57 7.79 9.59 10.81 . . 6.70
w19 1.42 4.12 1.96 1.99 3.52 1.88 . 1.26
w20 3.03 1.59 2.34 4.76 3.98 1.88 . 3.73
w24 1.58 2.80 2.27 2.87 3.19 1.31 . 2.05
w25 1.51 5.05 2.74 0.57 2.98 . 2.95 0.27
w26 1.75 3.61 2.70 1.54 4.07 3.52 . 1.03
w27 2.48 6.87 3.17 1.59 2.08 3.45 . 0.99
w28 2.05 6.83 2.97 1.13 2.91 . . 1.26
w29 4.03 3.68 4.46 3.20 5.50 . . 3.20
w30 2.48 5.78 2.99 2.24 1.79 3.10 . 1.39
w31 2.34 5.41 2.87 1.67 1.66 . . 1.39
w32 14.36 . . . . . . .
w33 3.87 4.27 5.11 3.48 5.66 4.03 . 3.05
w34 3.26 4.80 3.21 2.70 4.14 . . 1.77
w35 2.34 2.84 2.89 3.35 3.78 2.68 . 2.52
w36 2.43 5.69 2.96 2.95 1.02 2.61 1.07 2.54
w37 2.23 4.64 2.41 1.99 4.30 2.61 . 1.44
w38 4.66 4.36 5.23 3.04 4.46 . . 3.82
w39 1.11 3.51 1.10 2.53 3.07 1.12 . 2.23
w40 2.99 4.78 4.23 1.57 3.92 . . 1.80
w41 4.93 4.00 5.43 4.45 6.31 . . 3.81
w42 3.86 6.55 5.03 2.11 4.41 . . 2.63
w43 4.61 4.45 3.77 1.22 4.31 . . 2.35
w44 2.05 4.48 1.06 3.70 3.46 1.10 . 3.21
w45 0.92 3.42 1.58 3.04 1.82 1.94 . 2.52
w46 1.36 2.44 0.95 3.08 2.78 0.39 2.16 2.37
w47 1.30 3.39 1.60 2.49 4.29 2.04 . 1.68
w48 1.65 3.78 1.03 2.97 2.21 1.31 . 2.74
w49 1.96 3.00 1.50 3.24 3.68 1.00 . 2.99
w50 0.90 4.14 1.60 1.95 3.61 1.61 . 1.52
w51 1.59 3.95 0.25 2.96 2.58 1.00 2.41 2.71
w53 1.59 3.79 1.28 3.12 3.10 0.89 . 2.98
w54 1.72 4.36 1.61 2.92 2.34 1.91 1.97 3.05
w55 2.45 2.73 2.21 4.47 4.30 2.57 . 4.48
w56 1.10 3.73 1.59 2.74 2.33 1.45 . 2.44
w57 0.95 3.39 1.37 2.30 2.47 1.15 . 1.95
w59 3.29 5.35 3.32 3.81 1.52 3.38 1.34 4.08
w60 2.41 6.12 2.46 3.65 2.35 . 1.37 4.06
w61 3.32 5.50 3.41 3.38 1.23 . 0.99 4.28
w62 1.12 3.00 0.82 3.22 2.95 . 3.33 2.53
w63 3.59 6.36 3.25 4.12 1.84 3.59 1.46 4.03
w64 1.85 4.45 2.17 3.43 2.13 2.03 . 4.02
w65 2.78 4.79 2.81 2.94 1.54 2.90 1.07 2.94
w66 3.90 5.79 3.05 3.65 1.36 3.39 1.22 3.57
w68 2.61 5.20 2.90 2.34 1.68 3.19 1.48 2.31
w69 2.94 5.21 2.78 3.43 0.21 3.26 0.68 2.54
w71 2.06 4.98 2.38 2.44 1.59 2.97 1.05 2.55
w72 2.61 5.50 2.83 3.12 1.35 3.23 0.88 2.99
w73 8.52 6.16 8.03 8.83 10.44 7.38 10.26 .
w74 6.11 5.46 9.07 9.38 10.80 . . 8.25
w75 2.66 4.94 2.87 3.69 1.52 3.15 1.24 4.00
w76 1.99 5.26 2.23 3.36 0.58 3.17 . 2.50
w77 4.32 3.07 5.05 3.88 6.04 . . 4.15
w78 5.60 2.59 5.78 5.56 7.10 . . 5.60
w79 4.25 2.32 4.93 4.57 6.04 . . 4.58
w80 5.94 4.00 5.60 7.02 9.46 . . 7.51
w81 5.39 2.21 5.10 6.22 6.46 . . 6.58
w82 8.80 5.69 9.29 9.88 11.69 8.63 11.52 .
w83 4.40 . 5.24 5.21 5.81 3.91 7.04 5.33
w84 5.87 5.43 6.17 5.70 7.63 . . 5.70
w85 3.90 3.65 3.38 4.57 5.64 3.05 . 5.04
w86 5.48 2.10 5.70 6.37 7.33 . . 6.19
w87 8.88 5.54 9.50 9.71 11.64 8.85 11.68 .
w89 4.62 4.01 4.03 6.30 6.30 3.81 . 7.77
w90 4.35 2.72 4.61 4.01 5.60 . . 3.20
w91 7.61 4.42 7.83 6.85 8.79 . . 7.66
w92 7.15 2.69 6.91 7.20 . . . 7.06
w93 3.17 3.95 4.37 3.74 5.05 . . 2.40
w94 1.21 3.07 0.90 2.74 3.17 . 2.63 2.39
w95 5.82 3.29 6.55 7.06 11.47 . . 7.83
w96 1.77 5.20 2.72 0.59 3.47 2.48 . .
w98 3.04 1.92 3.64 3.70 4.90 3.05 . 3.88
x22 4.08 6.25 4.15 4.30 1.77 . 1.77 .
x23 3.39 5.74 3.55 4.08 1.69 . 1.47 . ;
param msr (tr) :
w01 w02 w03 w04 w05 w62 w76 w96 :=
w01 0 0 0 0 0 0 1 0
w02 0 0 0 0 0 0 1 0
w03 0 0 0 0 0 0 1 0
w04 0 0 0 0 0 0 1 0
w05 0 0 0 0 0 0 0 0
w06 0 1 1 1 1 1 1 1
w08 0 1 1 1 1 1 1 1
w09 0 1 1 1 1 1 0 1
w12 0 1 1 1 1 0 1 1
w14 1 1 1 1 1 0 0 1
w15 0 1 1 1 1 1 0 1
w17 0 1 1 1 1 1 0 1
w18 0 1 1 1 1 0 0 1
w19 0 1 1 1 1 0 0 1
w20 1 1 1 1 1 0 0 1
w24 0 1 1 1 1 0 0 1
w25 0 1 1 1 1 0 1 0
w26 1 1 1 0 1 1 0 1
w27 1 1 1 0 1 1 0 1
w28 1 1 1 0 1 0 0 1
w29 0 1 1 1 1 0 0 1
w30 1 1 1 0 1 1 0 1
w31 1 1 1 0 1 0 0 1
w32 0 0 0 0 0 0 0 0
w33 1 0 1 1 1 1 0 1
w34 1 1 1 0 1 0 0 1
w35 1 1 1 1 1 0 0 1
w36 0 1 1 1 0 1 1 1
w37 1 1 1 0 1 1 0 1
w38 1 1 1 0 1 0 0 1
w39 0 1 1 1 1 1 0 1
w40 1 1 1 0 1 0 0 1
w41 1 0 1 1 1 0 0 1
w42 1 1 1 0 1 0 0 1
w43 1 1 1 0 1 0 0 1
w44 1 1 1 1 1 0 0 1
w45 0 1 1 1 1 1 0 1
w46 0 1 1 1 1 0 1 1
w47 0 1 1 1 1 1 0 1
w48 0 1 1 1 1 0 0 1
w49 1 1 1 1 1 0 0 1
w50 0 1 1 1 1 1 0 1
w51 0 1 1 1 1 0 1 1
w53 1 1 1 1 1 0 0 1
w54 0 1 1 1 1 1 1 1
w55 0 1 1 1 1 0 0 1
w56 0 1 1 1 1 1 0 1
w57 0 1 1 1 1 1 0 1
w59 0 1 1 1 0 1 1 1
w60 0 1 1 1 1 0 1 1
w61 0 1 1 1 0 0 1 1
w62 0 0 0 0 0 0 1 0
w63 0 1 1 1 0 1 1 1
w64 0 1 1 1 1 1 0 1
w65 0 1 1 1 0 1 1 1
w66 0 1 1 1 0 1 1 1
w68 0 1 1 1 0 1 1 1
w69 0 1 1 1 0 1 1 1
w71 0 1 1 1 0 1 1 1
w72 0 1 1 1 0 1 1 1
w73 0 1 1 1 0 1 1 0
w74 0 1 1 1 0 0 0 1
w75 0 1 1 1 0 1 1 1
w76 0 0 0 0 0 0 0 0
w77 1 0 1 1 1 0 0 1
w78 1 0 1 1 1 0 0 1
w79 1 0 1 1 1 0 0 1
w80 1 0 1 1 1 0 0 1
w81 1 0 1 1 1 0 0 1
w82 1 0 1 1 1 1 1 0
w83 1 0 1 1 1 0 1 1
w84 1 0 1 1 1 0 0 1
w85 1 1 1 1 1 0 0 1
w86 1 0 1 1 1 0 0 1
w87 1 0 1 1 1 1 1 0
w89 1 0 1 1 1 1 0 1
w90 0 1 1 1 1 0 0 1
w91 1 0 1 1 1 0 0 1
w92 1 0 1 1 1 0 0 1
w93 1 1 1 0 1 0 0 1
w94 0 0 1 1 1 0 1 1
w95 1 0 1 1 1 0 0 1
w96 0 0 0 0 0 0 0 0
w98 1 0 1 1 1 1 0 1
x22 1 1 1 1 0 0 1 0
x23 1 1 1 1 0 0 1 0 ;
param ds default 0.000 (tr) :
18REG 24REG 24PRO :=
w01 0.000 0.000 0.008
w02 0.004 0.000 0.000
w03 0.000 0.000 0.000
w04 0.010 0.002 0.000
w05 0.000 0.000 0.000
w06 0.010 0.008 0.008
w08 0.030 0.024 0.024
w09 0.014 0.018 0.020
w12 0.014 0.012 0.010
w14 0.007 0.007 0.012
w15 0.010 0.019 0.018
w17 0.013 0.010 0.011
w19 0.015 0.012 0.009
w20 0.012 0.021 0.022
w21 0.000 0.000 0.000
w24 0.012 0.022 0.018
w25 0.019 0.025 0.020
w26 0.006 0.015 0.021
w27 0.008 0.010 0.015
w28 0.011 0.016 0.019
w29 0.008 0.020 0.013
w30 0.011 0.013 0.015
w31 0.011 0.013 0.017
w32 0.006 0.000 0.000
w33 0.000 0.015 0.014
w34 0.008 0.007 0.005
w35 0.002 0.006 0.014
w36 0.015 0.013 0.005
w37 0.017 0.016 0.015
w38 0.015 0.009 0.012
w39 0.007 0.017 0.022
w40 0.009 0.014 0.020
w41 0.003 0.014 0.011
w42 0.017 0.011 0.012
w43 0.009 0.013 0.011
w44 0.002 0.012 0.012
w45 0.016 0.025 0.028
w46 0.038 0.062 0.040
w47 0.007 0.010 0.010
w48 0.003 0.015 0.016
w49 0.005 0.016 0.017
w50 0.011 0.008 0.007
w51 0.010 0.022 0.021
w53 0.004 0.026 0.020
w54 0.020 0.017 0.025
w55 0.004 0.019 0.028
w56 0.004 0.010 0.008
w57 0.014 0.020 0.018
w59 0.012 0.006 0.007
w60 0.019 0.010 0.009
w61 0.028 0.010 0.012
w62 0.000 0.000 0.000
w63 0.070 0.027 0.037
w64 0.009 0.004 0.005
w65 0.022 0.015 0.016
w66 0.046 0.017 0.020
w68 0.005 0.012 0.016
w69 0.085 0.036 0.039
w71 0.011 0.013 0.010
w72 0.089 0.031 0.034
w75 0.026 0.012 0.010
w77 0.001 0.004 0.002
w78 0.002 0.004 0.002
w79 0.001 0.004 0.002
w80 0.001 0.001 0.002
w81 0.001 0.003 0.002
w83 0.009 0.010 0.008
w84 0.001 0.002 0.002
w85 0.001 0.004 0.005
w86 0.001 0.002 0.002
w87 0.002 0.003 0.000
w89 0.001 0.001 0.002
w90 0.006 0.017 0.013
w91 0.002 0.010 0.013
w92 0.000 0.003 0.002
w93 0.002 0.006 0.007
w95 0.001 0.007 0.007
w96 0.000 0.000 0.000
w98 0.006 0.005 0.002 ;
end;

519
resources/3rdparty/glpk-4.53/examples/egypt.mod

@ -0,0 +1,519 @@
# EGYPT, a static model of fertilizer production
#
# References:
# Robert Fourer, David M. Gay and Brian W. Kernighan, "A Modeling Language
# for Mathematical Programming." Management Science 36 (1990) 519-554.
### SETS ###
set center; # Locations from which final product may be shipped
set port within center; # Locations at which imports can be received
set plant within center; # Locations of plants
set region; # Demand regions
set unit; # Productive units
set proc; # Processes
set nutr; # Nutrients
set c_final; # Final products (fertilizers)
set c_inter; # Intermediate products
set c_ship within c_inter; # Intermediates for shipment
set c_raw; # Domestic raw materials and miscellaneous inputs
set commod := c_final union c_inter union c_raw;
# All commodities
### PARAMETERS ###
param cf75 {region,c_final} >= 0;
# Consumption of fertilizer 1974-75 (1000 tpy)
param fn {c_final,nutr} >= 0;
# Nutrient content of fertilizers
param cn75 {r in region, n in nutr} := sum {c in c_final} cf75[r,c] * fn[c,n];
# Consumption of nutrients 1974-75 (1000 tpy)
param road {region,center} >= 0;
# Road distances
param rail_half {plant,plant} >= 0;
param rail {p1 in plant, p2 in plant} :=
if rail_half[p1,p2] > 0 then rail_half[p1,p2] else rail_half[p2,p1];
# Interplant rail distances (kms)
param impd_barg {plant} >= 0;
param impd_road {plant} >= 0;
# Import distances (kms) by barge and road
param tran_final {pl in plant, r in region} :=
if road[r,pl] > 0 then .5 + .0144 * road[r,pl] else 0;
param tran_import {r in region, po in port} :=
if road[r,po] > 0 then .5 + .0144 * road[r,po] else 0;
param tran_inter {p1 in plant, p2 in plant} :=
if rail[p1,p2] > 0 then 3.5 + .03 * rail[p1,p2] else 0;
param tran_raw {pl in plant} :=
(if impd_barg[pl] > 0 then 1.0 + .0030 * impd_barg[pl] else 0)
+ (if impd_road[pl] > 0 then 0.5 + .0144 * impd_road[pl] else 0);
# Transport cost (le per ton) for:
# final products, imported final products,
# interplant shipment, imported raw materials
param io {commod,proc}; # Input-output coefficients
param util {unit,proc} >= 0;
# Capacity utilization coefficients
param p_imp {commod} >= 0; # Import Price (cif US$ per ton 1975)
param p_r {c_raw} >= 0;
param p_pr {plant,c_raw} >= 0;
param p_dom {pl in plant, c in c_raw} :=
if p_r[c] > 0 then p_r[c] else p_pr[pl,c];
# Domestic raw material prices
param dcap {plant,unit} >= 0;
# Design capacity of plants (t/day)
param icap {u in unit, pl in plant} := 0.33 * dcap[pl,u];
# Initial capacity of plants (t/day)
param exch := 0.4; # Exchange rate
param util_pct := 0.85; # Utilization percent for initial capacity
### DERIVED SETS OF "POSSIBILITIES" ###
set m_pos {pl in plant} := {u in unit: icap[u,pl] > 0};
# At each plant, set of units for which there is
# initial capacity
set p_cap {pl in plant} :=
{pr in proc: forall {u in unit: util[u,pr] > 0} u in m_pos[pl] };
# At each plant, set of processes for which
# all necessary units have some initial capacity
set p_except {plant} within proc;
# At each plant, list of processes that are
# arbitrarily ruled out
set p_pos {pl in plant} := p_cap[pl] diff p_except[pl];
# At each plant, set of possible processes
set cp_pos {c in commod} := {pl in plant: sum {pr in p_pos[pl]} io[c,pr] > 0};
set cc_pos {c in commod} := {pl in plant: sum {pr in p_pos[pl]} io[c,pr] < 0};
set c_pos {c in commod} := cp_pos[c] union cc_pos[c];
# For each commodity, set of plants that can
# produce it (cp_pos) or consume it (cc_pos),
# and their union (c_pos)
### VARIABLES ###
var Z {pl in plant, p_pos[pl]} >= 0;
# Z[pl,pr] is level of process pr at plant pl
var Xf {c in c_final, cp_pos[c], region} >= 0;
# Xf[c,pl,r] is amount of final product c
# shipped from plant pl to region r
var Xi {c in c_ship, cp_pos[c], cc_pos[c]} >= 0;
# Xi[c,p1,p2] is amount of intermediate c
# shipped from plant p1 to plant p2
var Vf {c_final,region,port} >= 0;
# Vf[c,r,po] is amount of final product c
# imported by region r from port po
var Vr {c in c_raw, cc_pos[c]} >= 0;
# Vr[c,pl] is amount of raw material c
# imported for use at plant pl
var U {c in c_raw, cc_pos[c]} >= 0;
# U[c,pl] is amount of raw material c
# purchased domestically for use at plant pl
var Psip; # Domestic recurrent cost
var Psil; # Transport cost
var Psii; # Import cost
### OBJECTIVE ###
minimize Psi: Psip + Psil + Psii;
### CONSTRAINTS ###
subject to mbd {n in nutr, r in region}:
sum {c in c_final} fn[c,n] *
(sum {po in port} Vf[c,r,po] +
sum {pl in cp_pos[c]} Xf[c,pl,r]) >= cn75[r,n];
# Total nutrients supplied to a region by all
# final products (sum of imports plus internal
# shipments from plants) must meet requirements
subject to mbdb {c in c_final, r in region: cf75[r,c] > 0}:
sum {po in port} Vf[c,r,po] +
sum {pl in cp_pos[c]} Xf[c,pl,r] >= cf75[r,c];
# Total of each final product supplied to each
# region (as in previous constraint) must meet
# requirements
subject to mb {c in commod, pl in plant}:
sum {pr in p_pos[pl]} io[c,pr] * Z[pl,pr]
+ ( if c in c_ship then
( if pl in cp_pos[c] then sum {p2 in cc_pos[c]} Xi[c,pl,p2] )
- ( if pl in cc_pos[c] then sum {p2 in cp_pos[c]} Xi[c,p2,pl] ))
+ ( if (c in c_raw and pl in cc_pos[c]) then
(( if p_imp[c] > 0 then Vr[c,pl] )
+ ( if p_dom[pl,c] > 0 then U[c,pl] )))
>= if (c in c_final and pl in cp_pos[c]) then sum {r in region} Xf[c,pl,r];
# For each commodity at each plant: sum of
# (1) production or consumption at plant,
# (2) inter-plant shipments in or out,
# (3) import and domestic purchases (raw only)
# is >= 0 for raw materials and intermediates;
# is >= the total shipped for final products
subject to cc {pl in plant, u in m_pos[pl]}:
sum {pr in p_pos[pl]} util[u,pr] * Z[pl,pr] <= util_pct * icap[u,pl];
# For each productive unit at each plant,
# total utilization by all processes
# may not exceed the unit's capacity
subject to ap:
Psip = sum {c in c_raw, pl in cc_pos[c]} p_dom[pl,c] * U[c,pl];
# Psip is the cost of domestic raw materials,
# summed over all plants that consume them
subject to al:
Psil = sum {c in c_final} (
sum {pl in cp_pos[c], r in region}
tran_final[pl,r] * Xf[c,pl,r]
+ sum {po in port, r in region} tran_import[r,po] * Vf[c,r,po] )
+ sum {c in c_ship, p1 in cp_pos[c], p2 in cc_pos[c]}
tran_inter[p1,p2] * Xi[c,p1,p2]
+ sum {c in c_raw, pl in cc_pos[c]: p_imp[c] > 0}
tran_raw[pl] * Vr[c,pl];
# Total transport cost is sum of shipping costs for
# (1) all final products from all plants,
# (2) all imports of final products,
# (3) all intermediates shipped between plants,
# (4) all imports of raw materials
subject to ai:
Psii / exch = sum {c in c_final, r in region, po in port}
p_imp[c] * Vf[c,r,po]
+ sum {c in c_raw, pl in cc_pos[c]} p_imp[c] * Vr[c,pl];
# Total import cost -- at exchange rate --
# is sum of import costs for final products
# in each region and raw materials at each plant
### DATA ###
data;
set center := ASWAN HELWAN ASSIOUT KAFR_EL_ZT ABU_ZAABAL ABU_KIR TALKHA SUEZ ;
set port := ABU_KIR ;
set plant := ASWAN HELWAN ASSIOUT KAFR_EL_ZT ABU_ZAABAL ;
set region := ALEXANDRIA BEHERA GHARBIA KAFR_EL_SH DAKAHLIA DAMIETTA
SHARKIA ISMAILIA SUEZ MENOUFIA KALUBIA GIZA BENI_SUEF FAYOUM
MINIA ASSIOUT NEW_VALLEY SOHAG QUENA ASWAN ;
set unit := SULF_A_S SULF_A_P NITR_ACID AMM_ELEC AMM_C_GAS C_AMM_NITR
AMM_SULF SSP ;
set proc := SULF_A_S SULF_A_P NITR_ACID AMM_ELEC AMM_C_GAS CAN_310 CAN_335
AMM_SULF SSP_155 ;
set nutr := N P205 ;
set c_final := UREA CAN_260 CAN_310 CAN_335 AMM_SULF DAP SSP_155 C_250_55
C_300_100 ;
set c_inter := AMMONIA NITR_ACID SULF_ACID ;
set c_ship := AMMONIA SULF_ACID ;
set c_raw := EL_ASWAN COKE_GAS PHOS_ROCK LIMESTONE EL_SULFUR PYRITES
ELECTRIC BF_GAS WATER STEAM BAGS ;
set p_except[ASWAN] := CAN_335 ;
set p_except[HELWAN] := CAN_310 ;
set p_except[ASSIOUT] := ;
set p_except[KAFR_EL_ZT] := ;
set p_except[ABU_ZAABAL] := ;
param cf75 default 0.0 :
CAN_260 CAN_310 CAN_335 AMM_SULF UREA :=
ALEXANDRIA . . 5.0 3.0 1.0
ASSIOUT 1.0 20.0 26.0 1.0 27.0
ASWAN . 40.0 . . .
BEHERA 1.0 . 25.0 90.0 35.0
BENI_SUEF 1.0 . 15.0 1.0 20.0
DAKAHLIA 1.0 . 26.0 60.0 20.0
DAMIETTA . . 2.0 15.0 8.0
FAYOUM 1.0 . 20.0 6.0 20.0
GHARBIA . . 17.0 60.0 28.0
GIZA . . 40.0 6.0 2.0
ISMAILIA . . 4.0 6.0 2.0
KAFR_EL_SH 1.0 . 10.0 45.0 22.0
KALUBIA . . 25.0 16.0 7.0
MENOUFIA 1.0 . 24.0 21.0 30.0
MINIA 2.0 15.0 35.0 1.0 41.0
NEW_VALLEY . . . . 1.0
QUENA . 95.0 2.0 . 3.0
SHARKIA 1.0 . 31.0 50.0 28.0
SOHAG . 65.0 3.0 . 7.0
SUEZ . . 1.0 . .
: SSP_155 C_250_55 C_300_100 DAP :=
ALEXANDRIA 8.0 . . .
ASSIOUT 35.0 5.0 .1 .
ASWAN 8.0 . . .
BEHERA 64.0 1.0 .1 .1
BENI_SUEF 13.0 3.0 . .
DAKAHLIA 52.0 1.0 . .
DAMIETTA 5.0 . . .
FAYOUM 17.0 1.0 . .
GHARBIA 57.0 1.0 .2 .1
GIZA 14.0 1.0 .1 .
ISMAILIA 4.0 . . .
KAFR_EL_SH 25.0 2.0 .1 .
KALUBIA 22.0 1.0 . .1
MENOUFIA 33.0 2.0 .1 .1
MINIA 50.0 3.0 .2 .1
NEW_VALLEY 1.0 . . .
QUENA 8.0 . . .
SHARKIA 43.0 1.0 .1 .
SOHAG 20.0 1.0 . .
SUEZ 1.0 . . . ;
param fn default 0.0 : N P205 :=
AMM_SULF .206 .
CAN_260 .26 .
CAN_310 .31 .
CAN_335 .335 .
C_250_55 .25 .055
C_300_100 .30 .10
DAP .18 .46
SSP_155 . .15
UREA .46 . ;
param road default 0.0 :
ABU_KIR ABU_ZAABAL ASSIOUT ASWAN HELWAN KAFR_EL_ZT SUEZ TALKHA :=
ALEXANDRIA 16 210 607 1135 244 119 362 187
ASSIOUT 616 420 . 518 362 504 527 518
ASWAN 1134 938 518 . 880 1022 1045 1036
BEHERA 76 50 547 1065 184 42 288 120
BENI_SUEF 359 163 257 775 105 248 270 261
DAKAHLIA 208 138 515 1033 152 58 219 3
DAMIETTA 267 216 596 1114 233 131 286 66
FAYOUM 341 145 308 826 88 230 252 243
GHARBIA 150 65 485 1003 122 20 226 55
GIZA 287 48 372 890 .9 133 169 146
ISMAILIA 365 142 536 1054 173 241 89 146
KAFR_EL_SH 145 105 525 1043 162 20 266 35
KALUBIA 190 97 439 957 76 66 180 81
MENOUFIA 157 154 472 990 109 33 213 90
MINIA 384 288 132 650 230 372 394 386
NEW_VALLEY 815 619 199 519 561 703 726 717
QUENA 858 662 242 276 604 746 769 760
SHARKIA 240 60 473 991 110 78 214 58
SOHAG 715 519 99 419 461 603 626 617
SUEZ 370 224 541 1059 178 246 . 298 ;
param rail_half default 0 :
KAFR_EL_ZT ABU_ZAABAL HELWAN ASSIOUT :=
ABU_ZAABAL 85 . . .
HELWAN 142 57 . .
ASSIOUT 504 420 362 .
ASWAN 1022 938 880 518 ;
param : impd_barg impd_road :=
ABU_ZAABAL 210 .1
ASSIOUT 583 0
ASWAN 1087 10
HELWAN 183 0
KAFR_EL_ZT 104 6 ;
param io default 0.0 :=
[*,AMM_C_GAS] AMMONIA 1.0
BF_GAS -609.
COKE_GAS -2.0
ELECTRIC -1960.
STEAM -4.
WATER -700.
[*,AMM_ELEC] AMMONIA 1.0
EL_ASWAN -12.0
[*,AMM_SULF] AMMONIA -.26
AMM_SULF 1.0
BAGS -22.
ELECTRIC -19.
SULF_ACID -.76
WATER -17.
[*,CAN_310] AMMONIA -.20
BAGS -23.
CAN_310 1.0
LIMESTONE -.12
NITR_ACID -.71
STEAM -.4
WATER -49.
[*,CAN_335] AMMONIA -.21
BAGS -23.
CAN_335 1.0
LIMESTONE -.04
NITR_ACID -.76
STEAM -.4
WATER -49.
[*,NITR_ACID] AMMONIA -.292
ELECTRIC -231.
NITR_ACID 1.0
WATER -.6
[*,SSP_155] BAGS -22.
ELECTRIC -14.
PHOS_ROCK -.62
SSP_155 1.0
SULF_ACID -.41
WATER -6.
[*,SULF_A_P] ELECTRIC -75.
PYRITES -.826
SULF_ACID 1.0
WATER -60.
[*,SULF_A_S] ELECTRIC -50.
EL_SULFUR -.334
SULF_ACID 1.0
WATER -20. ;
param util default 0 :=
[*,*] SULF_A_S SULF_A_S 1 SULF_A_P SULF_A_P 1
NITR_ACID NITR_ACID 1 AMM_ELEC AMM_ELEC 1
AMM_C_GAS AMM_C_GAS 1 SSP SSP_155 1
C_AMM_NITR CAN_310 1 C_AMM_NITR CAN_335 1
AMM_SULF AMM_SULF 1 ;
param p_imp default 0.0 :=
PYRITES 17.5 AMM_SULF 75.
EL_SULFUR 55. DAP 175.
UREA 150. SSP_155 80.
CAN_260 75. C_250_55 100.
CAN_310 90. C_300_100 130.
CAN_335 100. ;
param p_r default 0.0 :=
ELECTRIC .007
BF_GAS .007
WATER .031
STEAM 1.25
BAGS .28 ;
param p_pr default 0.0 :=
[HELWAN,COKE_GAS] 16.0
[ASWAN,EL_ASWAN] 1.0
[*,LIMESTONE] ASWAN 1.2
HELWAN 1.2
[*,PHOS_ROCK] ABU_ZAABAL 4.0
ASSIOUT 3.5
KAFR_EL_ZT 5.0 ;
param dcap default 0.0 :=
[ABU_ZAABAL,*] SSP 600
SULF_A_P 227
SULF_A_S 242
[ASSIOUT,*] SSP 600
SULF_A_S 250
[ASWAN,*] AMM_ELEC 450
C_AMM_NITR 1100
NITR_ACID 800
[HELWAN,*] AMM_C_GAS 172
AMM_SULF 24
C_AMM_NITR 364
NITR_ACID 282
[KAFR_EL_ZT,*] SSP 600
SULF_A_P 50
SULF_A_S 200 ;
end;

93
resources/3rdparty/glpk-4.53/examples/fctp.mod

@ -0,0 +1,93 @@
/* FCTP, Fixed-Charge Transportation Problem */
/* Written in GNU MathProg by Andrew Makhorin <mao@gnu.org> */
/* The Fixed-Charge Transportation Problem (FCTP) is obtained from
classical transportation problem by imposing a fixed cost on each
transportation link if there is a positive flow on that link. */
param m, integer, > 0;
/* number of sources */
param n, integer, > 0;
/* number of customers */
set I := 1..m;
/* set of sources */
set J := 1..n;
/* set of customers */
param supply{i in I}, >= 0;
/* supply at source i */
param demand{j in J}, >= 0;
/* demand at customer j */
param varcost{i in I, j in J}, >= 0;
/* variable cost (a cost per one unit shipped from i to j) */
param fixcost{i in I, j in J}, >= 0;
/* fixed cost (a cost for shipping any amount from i to j) */
var x{i in I, j in J}, >= 0;
/* amount shipped from source i to customer j */
s.t. f{i in I}: sum{j in J} x[i,j] = supply[i];
/* observe supply at source i */
s.t. g{j in J}: sum{i in I} x[i,j] = demand[j];
/* satisfy demand at customer j */
var y{i in I, j in J}, binary;
/* y[i,j] = 1 means some amount is shipped from i to j */
s.t. h{i in I, j in J}: x[i,j] <= min(supply[i], demand[j]) * y[i,j];
/* if y[i,j] is 0, force x[i,j] to be 0 (may note that supply[i] and
demand[j] are implicit upper bounds for x[i,j] as follows from the
constraints f[i] and g[j]) */
minimize cost: sum{i in I, j in J} varcost[i,j] * x[i,j] +
sum{i in I, j in J} fixcost[i,j] * y[i,j];
/* total transportation costs */
data;
/* These data correspond to the instance bal8x12 from [Balinski]. */
/* The optimal solution is 471.55 */
param m := 8;
param n := 12;
param supply := 1 15.00, 2 20.00, 3 45.00, 4 35.00,
5 25.00, 6 35.00, 7 10.00, 8 25.00;
param demand := 1 20.00, 2 15.00, 3 20.00, 4 15.00,
5 5.00, 6 20.00, 7 30.00, 8 10.00,
9 35.00, 10 25.00, 11 10.00, 12 5.00;
param varcost
: 1 2 3 4 5 6 7 8 9 10 11 12 :=
1 0.69 0.64 0.71 0.79 1.70 2.83 2.02 5.64 5.94 5.94 5.94 7.68
2 1.01 0.75 0.88 0.59 1.50 2.63 2.26 5.64 5.85 5.62 5.85 4.94
3 1.05 1.06 1.08 0.64 1.22 2.37 1.66 5.64 5.91 5.62 5.91 4.94
4 1.94 1.50 1.56 1.22 1.98 1.98 1.36 6.99 6.99 6.99 6.99 3.68
5 1.61 1.40 1.61 1.33 1.68 2.83 1.54 4.26 4.26 4.26 4.26 2.99
6 5.29 5.94 6.08 5.29 5.96 6.77 5.08 0.31 0.21 0.17 0.31 1.53
7 5.29 5.94 6.08 5.29 5.96 6.77 5.08 0.55 0.35 0.40 0.19 1.53
8 5.29 6.08 6.08 5.29 5.96 6.45 5.08 2.43 2.30 2.33 1.81 2.50 ;
param fixcost
: 1 2 3 4 5 6 7 8 9 10 11 12 :=
1 11.0 16.0 18.0 17.0 10.0 20.0 17.0 13.0 15.0 12.0 14.0 14.0
2 14.0 17.0 17.0 13.0 15.0 13.0 16.0 11.0 20.0 11.0 15.0 10.0
3 12.0 13.0 20.0 17.0 13.0 15.0 16.0 13.0 12.0 13.0 10.0 18.0
4 16.0 19.0 16.0 11.0 15.0 12.0 18.0 12.0 18.0 13.0 13.0 14.0
5 19.0 18.0 15.0 16.0 12.0 14.0 20.0 19.0 11.0 17.0 16.0 18.0
6 13.0 20.0 20.0 17.0 15.0 12.0 14.0 11.0 12.0 19.0 15.0 16.0
7 11.0 12.0 15.0 10.0 17.0 11.0 11.0 16.0 10.0 18.0 17.0 12.0
8 17.0 10.0 20.0 12.0 17.0 20.0 16.0 15.0 10.0 12.0 16.0 18.0 ;
end;

127
resources/3rdparty/glpk-4.53/examples/food.mod

@ -0,0 +1,127 @@
/* Food Manufacture 1, section 12.1 in
* Williams, "Model Building in Mathematical Programming"
*
* Sebastian Nowozin <nowozin@gmail.com>
*/
set oils;
set month;
/* Buying prices of the raw oils in the next six month. */
param buyingprices{month,oils};
/* Actual amount bought in each month. */
var buys{month,oils} >= 0;
/* Stock for each oil. */
var stock{month,oils} >= 0;
/* Price of the produced product */
param productprice >= 0;
param storagecost;
param oilhardness{oils} >= 0;
/* Actual amount of output oil produced in each month */
var production{m in month} >= 0;
var useoil{m in month, o in oils} >= 0;
maximize totalprofit:
sum{m in month} productprice*production[m]
- sum{m in month, o in oils} buyingprices[m,o]*buys[m,o]
- sum{m in month, o in oils} storagecost*stock[m,o];
/* Constraints */
/* 1. Starting stock */
s.t. startstock{o in oils}:
stock[1,o] = 500;
s.t. endstock{o in oils}:
stock[6,o] + buys[6,o] - useoil[6,o] >= 500;
/* 2. Stock constraints */
s.t. stocklimit{m in month, o in oils}:
stock[m,o] <= 1000;
s.t. production1{m in month, o in oils}:
useoil[m,o] <= stock[m,o] + buys[m,o];
s.t. production2{m1 in month, m2 in month, o in oils : m2 = m1+1}:
stock[m2,o] = stock[m1,o] + buys[m1,o] - useoil[m1,o];
s.t. production3a{m in month}:
sum{o in oils} oilhardness[o]*useoil[m,o] >= 3*production[m];
s.t. production3b{m in month}:
sum{o in oils} oilhardness[o]*useoil[m,o] <= 6*production[m];
s.t. production4{m in month}:
production[m] = sum{o in oils} useoil[m,o];
/* 3. Refining constraints */
s.t. refine1{m in month}:
useoil[m,"VEG1"]+useoil[m,"VEG2"] <= 200;
s.t. refine2{m in month}:
useoil[m,"OIL1"]+useoil[m,"OIL2"]+useoil[m,"OIL3"] <= 250;
solve;
for {m in month} {
printf "Month %d\n", m;
printf "PRODUCE %4.2f tons, hardness %4.2f\n", production[m],
(sum{o in oils} oilhardness[o]*useoil[m,o]) / (sum{o in oils} useoil[m,o]);
printf "\tVEG1\tVEG2\tOIL1\tOIL2\tOIL3\n";
printf "STOCK";
printf "%d", m;
for {o in oils} {
printf "\t%4.2f", stock[m,o];
}
printf "\nBUY";
for {o in oils} {
printf "\t%4.2f", buys[m,o];
}
printf "\nUSE";
printf "%d", m;
for {o in oils} {
printf "\t%4.2f", useoil[m,o];
}
printf "\n";
printf "\n";
}
printf "Total profit: %4.2f\n",
(sum{m in month} productprice*production[m]
- sum{m in month, o in oils} buyingprices[m,o]*buys[m,o]
- sum{m in month, o in oils} storagecost*stock[m,o]);
printf " turnover: %4.2f\n",
sum{m in month} productprice*production[m];
printf " buying costs: %4.2f\n",
sum{m in month, o in oils} buyingprices[m,o]*buys[m,o];
printf " storage costs: %4.2f\n",
sum{m in month, o in oils} storagecost*stock[m,o];
data;
param : oils : oilhardness :=
VEG1 8.8
VEG2 6.1
OIL1 2.0
OIL2 4.2
OIL3 5.0 ;
set month := 1 2 3 4 5 6;
param buyingprices
: VEG1 VEG2 OIL1 OIL2 OIL3 :=
1 110 120 130 110 115
2 130 130 110 90 115
3 110 140 130 100 95
4 120 110 120 120 125
5 100 120 150 110 105
6 90 100 140 80 135 ;
param productprice := 150;
param storagecost := 5;
end;

150
resources/3rdparty/glpk-4.53/examples/food2.mod

@ -0,0 +1,150 @@
/* Food Manufacture 2, section 12.2 in
* Williams, "Model Building in Mathematical Programming"
*
* Sebastian Nowozin <nowozin@gmail.com>
*/
set oils;
set month;
/* Buying prices of the raw oils in the next six month. */
param buyingprices{month,oils};
/* Actual amount bought in each month. */
var buys{month,oils} >= 0;
/* Stock for each oil. */
var stock{month,oils} >= 0;
/* Price of the produced product */
param productprice >= 0;
param storagecost;
param oilhardness{oils} >= 0;
param M >= 0;
/* Actual amount of output oil produced in each month */
var production{m in month} >= 0;
var useoil{m in month, o in oils} >= 0, <= M;
var useoilb{m in month, o in oils}, binary;
maximize totalprofit:
sum{m in month} productprice*production[m]
- sum{m in month, o in oils} buyingprices[m,o]*buys[m,o]
- sum{m in month, o in oils} storagecost*stock[m,o];
/* Constraints */
/* 1. Starting stock */
s.t. startstock{o in oils}:
stock[1,o] = 500;
s.t. endstock{o in oils}:
stock[6,o] + buys[6,o] - useoil[6,o] >= 500;
/* 2. Stock constraints */
s.t. stocklimit{m in month, o in oils}:
stock[m,o] <= 1000;
s.t. production1{m in month, o in oils}:
useoil[m,o] <= stock[m,o] + buys[m,o];
s.t. production2{m1 in month, m2 in month, o in oils : m2 = m1+1}:
stock[m2,o] = stock[m1,o] + buys[m1,o] - useoil[m1,o];
s.t. production3a{m in month}:
sum{o in oils} oilhardness[o]*useoil[m,o] >= 3*production[m];
s.t. production3b{m in month}:
sum{o in oils} oilhardness[o]*useoil[m,o] <= 6*production[m];
s.t. production4{m in month}:
production[m] = sum{o in oils} useoil[m,o];
/* 3. Refining constraints */
s.t. refine1{m in month}:
useoil[m,"VEG1"]+useoil[m,"VEG2"] <= 200;
s.t. refine2{m in month}:
useoil[m,"OIL1"]+useoil[m,"OIL2"]+useoil[m,"OIL3"] <= 250;
/* 4. Additional conditions:
* i) The food may never be made up of more than three oils every month
*/
s.t. useoilb_calc{m in month, o in oils}:
M*useoilb[m,o] >= useoil[m,o];
s.t. useoilb_limit{m in month}:
sum{o in oils} useoilb[m,o] <= 3;
/* ii) If an oil is used in a month, at least 20 tons must be used.
*/
s.t. useminimum{m in month, o in oils}:
20*useoilb[m,o] <= useoil[m,o];
/* iii) If either of VEG1 or VEG2 is used in a month, OIL2 must also be used
*/
s.t. use_oil2a{m in month}:
useoilb[m,"VEG1"] <= useoilb[m,"OIL3"];
s.t. use_oil2b{m in month}:
useoilb[m,"VEG2"] <= useoilb[m,"OIL3"];
solve;
for {m in month} {
printf "Month %d\n", m;
printf "PRODUCE %4.2f tons, hardness %4.2f\n", production[m],
(sum{o in oils} oilhardness[o]*useoil[m,o]) / (sum{o in oils} useoil[m,o]);
printf "\tVEG1\tVEG2\tOIL1\tOIL2\tOIL3\n";
printf "STOCK";
printf "%d", m;
for {o in oils} {
printf "\t%4.2f", stock[m,o];
}
printf "\nBUY";
for {o in oils} {
printf "\t%4.2f", buys[m,o];
}
printf "\nUSE";
printf "%d", m;
for {o in oils} {
printf "\t%4.2f", useoil[m,o];
}
printf "\n";
printf "\n";
}
printf "Total profit: %4.2f\n",
(sum{m in month} productprice*production[m]
- sum{m in month, o in oils} buyingprices[m,o]*buys[m,o]
- sum{m in month, o in oils} storagecost*stock[m,o]);
printf " turnover: %4.2f\n",
sum{m in month} productprice*production[m];
printf " buying costs: %4.2f\n",
sum{m in month, o in oils} buyingprices[m,o]*buys[m,o];
printf " storage costs: %4.2f\n",
sum{m in month, o in oils} storagecost*stock[m,o];
data;
param : oils : oilhardness :=
VEG1 8.8
VEG2 6.1
OIL1 2.0
OIL2 4.2
OIL3 5.0 ;
set month := 1 2 3 4 5 6;
param buyingprices
: VEG1 VEG2 OIL1 OIL2 OIL3 :=
1 110 120 130 110 115
2 130 130 110 90 115
3 110 140 130 100 95
4 120 110 120 120 125
5 100 120 150 110 105
6 90 100 140 80 135 ;
param productprice := 150;
param storagecost := 5;
param M := 1000;
end;

79
resources/3rdparty/glpk-4.53/examples/gap.mod

@ -0,0 +1,79 @@
/* GAP, Generalized Assignment Problem */
/* Written in GNU MathProg by Andrew Makhorin <mao@gnu.org> */
/* The Generalized Assignment Problem (GAP) is to assign a set of jobs
to a set of agents subject to the constraints that each job must be
assigned exactly to one agent and the total resources consumed by all
jobs assigned to an agent must not exceed the agent's capacity. */
param m, integer, > 0;
/* number of agents */
param n, integer, > 0;
/* number of jobs */
set I := 1..m;
/* set of agents */
set J := 1..n;
/* set of jobs */
param a{i in I, j in J}, >= 0;
/* resource consumed in allocating job j to agent i */
param b{i in I}, >= 0;
/* resource capacity of agent i */
param c{i in I, j in J}, >= 0;
/* cost of allocating job j to agent i */
var x{i in I, j in J}, binary;
/* x[i,j] = 1 means job j is assigned to agent i */
s.t. one{j in J}: sum{i in I} x[i,j] = 1;
/* job j must be assigned exactly to one agent */
s.t. lim{i in I}: sum{j in J} a[i,j] * x[i,j] <= b[i];
/* total amount of resources consumed by all jobs assigned to agent i
must not exceed the agent's capacity */
minimize obj: sum{i in I, j in J} c[i,j] * x[i,j];
/* the objective is to find cheapest assignment (note that gap can also
be formulated as maximization problem) */
data;
/* These data correspond to the instance c515-1 (gap1) from:
I.H. Osman, "Heuristics for the Generalised Assignment Problem:
Simulated Annealing and Tabu Search Approaches", OR Spektrum, Volume
17, 211-225, 1995
D. Cattrysse, M. Salomon and L.N. Van Wassenhove, "A set partitioning
heuristic for the generalized assignment problem", European Journal
of Operational Research, Volume 72, 167-174, 1994 */
/* The optimal solution is 261 (minimization) or 336 (maximization) */
param m := 5;
param n := 15;
param a : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 :=
1 8 15 14 23 8 16 8 25 9 17 25 15 10 8 24
2 15 7 23 22 11 11 12 10 17 16 7 16 10 18 22
3 21 20 6 22 24 10 24 9 21 14 11 14 11 19 16
4 20 11 8 14 9 5 6 19 19 7 6 6 13 9 18
5 8 13 13 13 10 20 25 16 16 17 10 10 5 12 23 ;
param b := 1 36, 2 34, 3 38, 4 27, 5 33;
param c : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 :=
1 17 21 22 18 24 15 20 18 19 18 16 22 24 24 16
2 23 16 21 16 17 16 19 25 18 21 17 15 25 17 24
3 16 20 16 25 24 16 17 19 19 18 20 16 17 21 24
4 19 19 22 22 20 16 19 17 21 19 25 23 25 25 25
5 18 19 15 15 21 25 16 16 23 15 22 17 19 22 24 ;
end;

10
resources/3rdparty/glpk-4.53/examples/glpsol.c

@ -0,0 +1,10 @@
/* glpsol.c */
#include <glpk.h>
int main(int argc, const char *argv[])
{ /* stand-alone LP/MIP solver */
return glp_main(argc, argv);
}
/* eof */

98
resources/3rdparty/glpk-4.53/examples/graph.mod

@ -0,0 +1,98 @@
/* graph.mod - graph visualization */
/* Written in GNU MathProg by Andrew Makhorin <mao@gnu.org> */
/* This model creates a picture in EPS format to visualize a graph. */
param file, symbolic, default "graph.eps";
/* output file to write the picture */
param R, default 2;
/* radius to draw vertices, in mm */
param n, integer, > 0;
/* number of vertices */
set V, default 1..n;
/* set of vertices */
set E, within V cross V;
/* set of edges */
param x{i in V}, default 50 * cos((i - 1) / card(V) * 8 * atan(1));
param y{i in V}, default 50 * sin((i - 1) / card(V) * 8 * atan(1));
/* x[i] and y[i] are coordinates of node i, in mm */
param x0 := (min{i in V} x[i]) - R - 3.0;
param y0 := (min{i in V} y[i]) - R - 3.0;
param x1 := (max{i in V} x[i]) + R + 3.0;
param y1 := (max{i in V} y[i]) + R + 3.0;
printf "%%!PS-Adobe-3.0 EPSF-3.0\n" > file;
printf "%%%%BoundingBox: 0 0 %d %d\n",
(72 / 25.4) * (x1 - x0), (72 / 25.4) * (y1 - y0) >> file;
printf "/Helvetica findfont 6 scalefont setfont\n" >> file;
printf "/mm { 72 mul 25.4 div } def\n" >> file;
for {(i,j) in E}
{ printf "newpath\n" >> file;
printf "%g mm %g mm moveto\n", x[i] - x0, y[i] - y0 >> file;
printf "%g mm %g mm lineto\n", x[j] - x0, y[j] - y0 >> file;
printf "closepath\n" >> file;
printf "stroke\n" >> file;
}
for {i in V}
{ printf "newpath\n" >> file;
printf "%g mm %g mm %g mm 0 360 arc\n",
x[i] - x0, y[i] - y0, R >> file;
printf "closepath\n" >> file;
printf "gsave 1 1 1 setrgbcolor fill grestore\n" >> file;
printf "stroke\n" >> file;
printf "%g mm %g mm moveto\n",
x[i] - (if i <= 9 then 1.2 else 1.8) - x0,
y[i] - 0.8 - y0 >> file;
printf "( %d ) show\n", i >> file;
}
printf "showpage\n" >> file;
printf "%%%%EOF\n" >> file;
data;
param
: V : x y :=
1 0 40
2 38 12
3 24 -32
4 -24 -32
5 -38 12
6 -19 26
7 19 26
8 31 -10
9 0 -32
10 -31 -10
11 -9 12
12 9 12
13 14 -5
14 0 -15
15 -14 -5
16 0 0 ;
set E :=
(1,*) 6 10 16 12 7
(2,*) 7 6 16 13 8
(3,*) 8 7 16 14 9
(4,*) 9 8 16 15 10
(5,*) 10 9 16 11 6
(6,*) 14
(7,*) 15
(8,*) 11
(9,*) 12
(10,*) 13
(11,*) 12 15
(12,*) 13
(13,*) 14
(14,*) 15 ;
end;

168
resources/3rdparty/glpk-4.53/examples/hashi.mod

@ -0,0 +1,168 @@
/* A solver for the Japanese number-puzzle Hashiwokakero
* (http://en.wikipedia.org/wiki/Hashiwokakero)
*
* Sebastian Nowozin <nowozin@gmail.com>, 13th January 2009
*/
param n := 25;
set rows := 1..n;
set cols := 1..n;
param givens{rows, cols}, integer, >= 0, <= 8, default 0;
/* Set of vertices as (row,col) coordinates */
set V := { (i,j) in { rows, cols }: givens[i,j] != 0 };
/* Set of feasible horizontal edges from (i,j) to (k,l) rightwards */
set Eh := { (i,j,k,l) in { V, V }:
i = k and j < l and # Same row and left to right
card({ (s,t) in V: s = i and t > j and t < l }) = 0 # No vertex inbetween
};
/* Set of feasible vertical edges from (i,j) to (k,l) downwards */
set Ev := { (i,j,k,l) in { V, V }:
j = l and i < k and # Same column and top to bottom
card({ (s,t) in V: t = j and s > i and s < k }) = 0 # No vertex inbetween
};
set E := Eh union Ev;
/* Indicators: use edge once/twice */
var xe1{E}, binary;
var xe2{E}, binary;
/* Constraint: Do not use edge or do use once or do use twice */
s.t. edge_sel{(i,j,k,l) in E}:
xe1[i,j,k,l] + xe2[i,j,k,l] <= 1;
/* Constraint: There must be as many edges used as the node value */
s.t. satisfy_vertex_demand{(s,t) in V}:
sum{(i,j,k,l) in E: (i = s and j = t) or (k = s and l = t)}
(xe1[i,j,k,l] + 2.0*xe2[i,j,k,l]) = givens[s,t];
/* Constraint: No crossings */
s.t. no_crossing1{(i,j,k,l) in Eh, (s,t,u,v) in Ev:
s < i and u > i and j < t and l > t}:
xe1[i,j,k,l] + xe1[s,t,u,v] <= 1;
s.t. no_crossing2{(i,j,k,l) in Eh, (s,t,u,v) in Ev:
s < i and u > i and j < t and l > t}:
xe1[i,j,k,l] + xe2[s,t,u,v] <= 1;
s.t. no_crossing3{(i,j,k,l) in Eh, (s,t,u,v) in Ev:
s < i and u > i and j < t and l > t}:
xe2[i,j,k,l] + xe1[s,t,u,v] <= 1;
s.t. no_crossing4{(i,j,k,l) in Eh, (s,t,u,v) in Ev:
s < i and u > i and j < t and l > t}:
xe2[i,j,k,l] + xe2[s,t,u,v] <= 1;
/* Model connectivity by auxiliary network flow problem:
* One vertex becomes a target node and all other vertices send a unit flow
* to it. The edge selection variables xe1/xe2 are VUB constraints and
* therefore xe1/xe2 select the feasible graph for the max-flow problems.
*/
set node_target := { (s,t) in V:
card({ (i,j) in V: i < s or (i = s and j < t) }) = 0};
set node_sources := { (s,t) in V: (s,t) not in node_target };
var flow_forward{ E }, >= 0;
var flow_backward{ E }, >= 0;
s.t. flow_conservation{ (s,t) in node_target, (p,q) in V }:
/* All incoming flows */
- sum{(i,j,k,l) in E: k = p and l = q} flow_forward[i,j,k,l]
- sum{(i,j,k,l) in E: i = p and j = q} flow_backward[i,j,k,l]
/* All outgoing flows */
+ sum{(i,j,k,l) in E: k = p and l = q} flow_backward[i,j,k,l]
+ sum{(i,j,k,l) in E: i = p and j = q} flow_forward[i,j,k,l]
= 0 + (if (p = s and q = t) then card(node_sources) else -1);
/* Variable-Upper-Bound (VUB) constraints: xe1/xe2 bound the flows.
*/
s.t. connectivity_vub1{(i,j,k,l) in E}:
flow_forward[i,j,k,l] <= card(node_sources)*(xe1[i,j,k,l] + xe2[i,j,k,l]);
s.t. connectivity_vub2{(i,j,k,l) in E}:
flow_backward[i,j,k,l] <= card(node_sources)*(xe1[i,j,k,l] + xe2[i,j,k,l]);
/* A feasible solution is enough
*/
minimize cost: 0;
solve;
/* Output solution graphically */
printf "\nSolution:\n";
for { row in rows } {
for { col in cols } {
/* First print this cell information: givens or space */
printf{0..0: givens[row,col] != 0} "%d", givens[row,col];
printf{0..0: givens[row,col] = 0 and
card({(i,j,k,l) in Eh: i = row and col >= j and col < l and
xe1[i,j,k,l] = 1}) = 1} "-";
printf{0..0: givens[row,col] = 0 and
card({(i,j,k,l) in Eh: i = row and col >= j and col < l and
xe2[i,j,k,l] = 1}) = 1} "=";
printf{0..0: givens[row,col] = 0
and card({(i,j,k,l) in Ev: j = col and row >= i and row < k and
xe1[i,j,k,l] = 1}) = 1} "|";
printf{0..0: givens[row,col] = 0
and card({(i,j,k,l) in Ev: j = col and row >= i and row < k and
xe2[i,j,k,l] = 1}) = 1} '"';
printf{0..0: givens[row,col] = 0
and card({(i,j,k,l) in Eh: i = row and col >= j and col < l and
(xe1[i,j,k,l] = 1 or xe2[i,j,k,l] = 1)}) = 0
and card({(i,j,k,l) in Ev: j = col and row >= i and row < k and
(xe1[i,j,k,l] = 1 or xe2[i,j,k,l] = 1)}) = 0} " ";
/* Now print any edges */
printf{(i,j,k,l) in Eh: i = row and col >= j and col < l and xe1[i,j,k,l] = 1} "-";
printf{(i,j,k,l) in Eh: i = row and col >= j and col < l and xe2[i,j,k,l] = 1} "=";
printf{(i,j,k,l) in Eh: i = row and col >= j and col < l and
xe1[i,j,k,l] = 0 and xe2[i,j,k,l] = 0} " ";
printf{0..0: card({(i,j,k,l) in Eh: i = row and col >= j and col < l}) = 0} " ";
}
printf "\n";
for { col in cols } {
printf{(i,j,k,l) in Ev: j = col and row >= i and row < k and xe1[i,j,k,l] = 1} "|";
printf{(i,j,k,l) in Ev: j = col and row >= i and row < k and xe2[i,j,k,l] = 1} '"';
printf{(i,j,k,l) in Ev: j = col and row >= i and row < k and
xe1[i,j,k,l] = 0 and xe2[i,j,k,l] = 0} " ";
/* No vertical edges: skip also a field */
printf{0..0: card({(i,j,k,l) in Ev: j = col and row >= i and row < k}) = 0} " ";
printf " ";
}
printf "\n";
}
data;
/* This is a difficult 25x25 Hashiwokakero.
*/
param givens : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
25 :=
1 2 . 2 . 2 . . 2 . 2 . . 2 . . . . 2 . 2 . 2 . 2 .
2 . 1 . . . . 2 . . . 4 . . 5 . 2 . . 1 . 2 . 2 . 1
3 2 . . 5 . 4 . . 3 . . . . . 1 . . 4 . 5 . 1 . 1 .
4 . . . . . . . . . . . 1 . 3 . . 1 . . . . . . . .
5 2 . . 6 . 6 . . 8 . 5 . 2 . . 3 . 5 . 7 . . 2 . .
6 . 1 . . . . . . . . . 1 . . 2 . . . . . 1 . . . 3
7 2 . . . . 5 . . 6 . 4 . . 2 . . . 2 . 5 . 4 . 2 .
8 . 2 . 2 . . . . . . . . . . . 3 . . 3 . . . 1 . 2
9 . . . . . . . . . . 4 . 2 . 2 . . 1 . . . 3 . 1 .
10 2 . 3 . . 6 . . 2 . . . . . . . . . . 3 . . . . .
11 . . . . 1 . . 2 . . 5 . . 1 . 4 . 3 . . . . 2 . 4
12 . . 2 . . 1 . . . . . . 5 . 4 . . . . 4 . 3 . . .
13 2 . . . 3 . 1 . . . . . . . . 3 . . 5 . 5 . . 2 .
14 . . . . . 2 . 5 . . 7 . 5 . 3 . 1 . . 1 . . 1 . 4
15 2 . 5 . 3 . . . . 1 . 2 . 1 . . . . 2 . 4 . . 2 .
16 . . . . . 1 . . . . . . . . . . 2 . . 2 . 1 . . 3
17 2 . 6 . 6 . . 2 . . 2 . 2 . 5 . . . . . 2 . . . .
18 . . . . . 1 . . . 3 . . . . . 1 . . 1 . . 4 . 3 .
19 . . 4 . 5 . . 2 . . . 2 . . 6 . 6 . . 3 . . . . 3
20 2 . . . . . . . . . 2 . . 1 . . . . . . 1 . . 1 .
21 . . 3 . . 3 . 5 . 5 . . 4 . 6 . 7 . . 4 . 6 . . 4
22 2 . . . 3 . 5 . 2 . 1 . . . . . . . . . . . . . .
23 . . . . . . . . . 1 . . . . . . 3 . 2 . . 5 . . 5
24 2 . 3 . 3 . 5 . 4 . 3 . 3 . 4 . . 2 . 2 . . . 1 .
25 . 1 . 2 . 2 . . . 2 . 2 . . . 2 . . . . 2 . 2 . 2
;
end;

25
resources/3rdparty/glpk-4.53/examples/huge.mod

@ -0,0 +1,25 @@
/*Arithmetic Mean of a large number of Integers
- or - solve a very large constraint matrix
over 1 million rows and columns
Nigel_Galloway@operamail.com
March 18th., 2008.
*/
param e := 20;
/* set Sample := {-2**e..2**e-1}; */
set Sample := {1..2**e-1};
var Mean;
var E{z in Sample};
/* sum of variances is zero */
zumVariance: sum{z in Sample} E[z] = 0;
/* Mean + variance[n] = Sample[n] */
variances{z in Sample}: Mean + E[z] = z;
solve;
printf "The arithmetic mean of the integers from 1 to %d is %f\n", 2**e-1, Mean;
end;

17
resources/3rdparty/glpk-4.53/examples/iptsamp.c

@ -0,0 +1,17 @@
/* iptsamp.c */
#include <stdio.h>
#include <stdlib.h>
#include <glpk.h>
int main(void)
{ glp_prob *P;
P = glp_create_prob();
glp_read_mps(P, GLP_MPS_DECK, NULL, "25fv47.mps");
glp_interior(P, NULL);
glp_print_ipt(P, "25fv47.txt");
glp_delete_prob(P);
return 0;
}
/* eof */

114
resources/3rdparty/glpk-4.53/examples/jssp.mod

@ -0,0 +1,114 @@
/* JSSP, Job-Shop Scheduling Problem */
/* Written in GNU MathProg by Andrew Makhorin <mao@gnu.org> */
/* The Job-Shop Scheduling Problem (JSSP) is to schedule a set of jobs
on a set of machines, subject to the constraint that each machine can
handle at most one job at a time and the fact that each job has a
specified processing order through the machines. The objective is to
schedule the jobs so as to minimize the maximum of their completion
times.
Reference:
D. Applegate and W. Cook, "A Computational Study of the Job-Shop
Scheduling Problem", ORSA J. On Comput., Vol. 3, No. 2, Spring 1991,
pp. 149-156. */
param n, integer, > 0;
/* number of jobs */
param m, integer, > 0;
/* number of machines */
set J := 1..n;
/* set of jobs */
set M := 1..m;
/* set of machines */
param sigma{j in J, t in 1..m}, in M;
/* permutation of the machines, which represents the processing order
of j through the machines: j must be processed first on sigma[j,1],
then on sigma[j,2], etc. */
check{j in J, t1 in 1..m, t2 in 1..m: t1 <> t2}:
sigma[j,t1] != sigma[j,t2];
/* sigma must be permutation */
param p{j in J, a in M}, >= 0;
/* processing time of j on a */
var x{j in J, a in M}, >= 0;
/* starting time of j on a */
s.t. ord{j in J, t in 2..m}:
x[j, sigma[j,t]] >= x[j, sigma[j,t-1]] + p[j, sigma[j,t-1]];
/* j can be processed on sigma[j,t] only after it has been completely
processed on sigma[j,t-1] */
/* The disjunctive condition that each machine can handle at most one
job at a time is the following:
x[i,a] >= x[j,a] + p[j,a] or x[j,a] >= x[i,a] + p[i,a]
for all i, j in J, a in M. This condition is modeled through binary
variables Y as shown below. */
var Y{i in J, j in J, a in M}, binary;
/* Y[i,j,a] is 1 if i scheduled before j on machine a, and 0 if j is
scheduled before i */
param K := sum{j in J, a in M} p[j,a];
/* some large constant */
display K;
s.t. phi{i in J, j in J, a in M: i <> j}:
x[i,a] >= x[j,a] + p[j,a] - K * Y[i,j,a];
/* x[i,a] >= x[j,a] + p[j,a] iff Y[i,j,a] is 0 */
s.t. psi{i in J, j in J, a in M: i <> j}:
x[j,a] >= x[i,a] + p[i,a] - K * (1 - Y[i,j,a]);
/* x[j,a] >= x[i,a] + p[i,a] iff Y[i,j,a] is 1 */
var z;
/* so-called makespan */
s.t. fin{j in J}: z >= x[j, sigma[j,m]] + p[j, sigma[j,m]];
/* which is the maximum of the completion times of all the jobs */
minimize obj: z;
/* the objective is to make z as small as possible */
data;
/* These data correspond to the instance ft06 (mt06) from:
H. Fisher, G.L. Thompson (1963), Probabilistic learning combinations
of local job-shop scheduling rules, J.F. Muth, G.L. Thompson (eds.),
Industrial Scheduling, Prentice Hall, Englewood Cliffs, New Jersey,
225-251 */
/* The optimal solution is 55 */
param n := 6;
param m := 6;
param sigma : 1 2 3 4 5 6 :=
1 3 1 2 4 6 5
2 2 3 5 6 1 4
3 3 4 6 1 2 5
4 2 1 3 4 5 6
5 3 2 5 6 1 4
6 2 4 6 1 5 3 ;
param p : 1 2 3 4 5 6 :=
1 3 6 1 7 6 3
2 10 8 5 4 10 10
3 9 1 5 4 7 8
4 5 5 5 3 8 9
5 3 3 9 1 5 4
6 10 3 1 3 4 9 ;
end;

54
resources/3rdparty/glpk-4.53/examples/magic.mod

@ -0,0 +1,54 @@
/* MAGIC, Magic Square */
/* Written in GNU MathProg by Andrew Makhorin <mao@gnu.org> */
/* In recreational mathematics, a magic square of order n is an
arrangement of n^2 numbers, usually distinct integers, in a square,
such that n numbers in all rows, all columns, and both diagonals sum
to the same constant. A normal magic square contains the integers
from 1 to n^2.
(From Wikipedia, the free encyclopedia.) */
param n, integer, > 0, default 4;
/* square order */
set N := 1..n^2;
/* integers to be placed */
var x{i in 1..n, j in 1..n, k in N}, binary;
/* x[i,j,k] = 1 means that cell (i,j) contains integer k */
s.t. a{i in 1..n, j in 1..n}: sum{k in N} x[i,j,k] = 1;
/* each cell must be assigned exactly one integer */
s.t. b{k in N}: sum{i in 1..n, j in 1..n} x[i,j,k] = 1;
/* each integer must be assigned exactly to one cell */
var s;
/* the magic sum */
s.t. r{i in 1..n}: sum{j in 1..n, k in N} k * x[i,j,k] = s;
/* the sum in each row must be the magic sum */
s.t. c{j in 1..n}: sum{i in 1..n, k in N} k * x[i,j,k] = s;
/* the sum in each column must be the magic sum */
s.t. d: sum{i in 1..n, k in N} k * x[i,i,k] = s;
/* the sum in the diagonal must be the magic sum */
s.t. e: sum{i in 1..n, k in N} k * x[i,n-i+1,k] = s;
/* the sum in the co-diagonal must be the magic sum */
solve;
printf "\n";
printf "Magic sum is %d\n", s;
printf "\n";
for{i in 1..n}
{ printf{j in 1..n} "%3d", sum{k in N} k * x[i,j,k];
printf "\n";
}
printf "\n";
end;

85
resources/3rdparty/glpk-4.53/examples/maxcut.mod

@ -0,0 +1,85 @@
/* MAXCUT, Maximum Cut Problem */
/* Written in GNU MathProg by Andrew Makhorin <mao@gnu.org> */
/* The Maximum Cut Problem in a network G = (V, E), where V is a set
of nodes, E is a set of edges, is to find the partition of V into
disjoint sets V1 and V2, which maximizes the sum of edge weights
w(e), where edge e has one endpoint in V1 and other endpoint in V2.
Reference:
Garey, M.R., and Johnson, D.S. (1979), Computers and Intractability:
A guide to the theory of NP-completeness [Network design, Cuts and
Connectivity, Maximum Cut, ND16]. */
set E, dimen 2;
/* set of edges */
param w{(i,j) in E}, >= 0, default 1;
/* w[i,j] is weight of edge (i,j) */
set V := (setof{(i,j) in E} i) union (setof{(i,j) in E} j);
/* set of nodes */
var x{i in V}, binary;
/* x[i] = 0 means that node i is in set V1
x[i] = 1 means that node i is in set V2 */
/* We need to include in the objective function only that edges (i,j)
from E, for which x[i] != x[j]. This can be modeled through binary
variables s[i,j] as follows:
s[i,j] = x[i] xor x[j] = (x[i] + x[j]) mod 2, (1)
where s[i,j] = 1 iff x[i] != x[j], that leads to the following
objective function:
z = sum{(i,j) in E} w[i,j] * s[i,j]. (2)
To describe "exclusive or" (1) we could think that s[i,j] is a minor
bit of the sum x[i] + x[j]. Then introducing binary variables t[i,j],
which represent a major bit of the sum x[i] + x[j], we can write:
x[i] + x[j] = s[i,j] + 2 * t[i,j]. (3)
An easy check shows that conditions (1) and (3) are equivalent.
Note that condition (3) can be simplified by eliminating variables
s[i,j]. Indeed, from (3) it follows that:
s[i,j] = x[i] + x[j] - 2 * t[i,j]. (4)
Since the expression in the right-hand side of (4) is integral, this
condition can be rewritten in the equivalent form:
0 <= x[i] + x[j] - 2 * t[i,j] <= 1. (5)
(One might note that (5) means t[i,j] = x[i] and x[j].)
Substituting s[i,j] from (4) to (2) leads to the following objective
function:
z = sum{(i,j) in E} w[i,j] * (x[i] + x[j] - 2 * t[i,j]), (6)
which does not include variables s[i,j]. */
var t{(i,j) in E}, binary;
/* t[i,j] = x[i] and x[j] = (x[i] + x[j]) div 2 */
s.t. xor{(i,j) in E}: 0 <= x[i] + x[j] - 2 * t[i,j] <= 1;
/* see (4) */
maximize z: sum{(i,j) in E} w[i,j] * (x[i] + x[j] - 2 * t[i,j]);
/* see (6) */
data;
/* In this example the network has 15 nodes and 22 edges. */
/* Optimal solution is 20 */
set E :=
1 2, 1 5, 2 3, 2 6, 3 4, 3 8, 4 9, 5 6, 5 7, 6 8, 7 8, 7 12, 8 9,
8 12, 9 10, 9 14, 10 11, 10 14, 11 15, 12 13, 13 14, 14 15;
end;

83
resources/3rdparty/glpk-4.53/examples/maxflow.mod

@ -0,0 +1,83 @@
/* MAXFLOW, Maximum Flow Problem */
/* Written in GNU MathProg by Andrew Makhorin <mao@gnu.org> */
/* The Maximum Flow Problem in a network G = (V, E), where V is a set
of nodes, E within V x V is a set of arcs, is to maximize the flow
from one given node s (source) to another given node t (sink) subject
to conservation of flow constraints at each node and flow capacities
on each arc. */
param n, integer, >= 2;
/* number of nodes */
set V, default {1..n};
/* set of nodes */
set E, within V cross V;
/* set of arcs */
param a{(i,j) in E}, > 0;
/* a[i,j] is capacity of arc (i,j) */
param s, symbolic, in V, default 1;
/* source node */
param t, symbolic, in V, != s, default n;
/* sink node */
var x{(i,j) in E}, >= 0, <= a[i,j];
/* x[i,j] is elementary flow through arc (i,j) to be found */
var flow, >= 0;
/* total flow from s to t */
s.t. node{i in V}:
/* node[i] is conservation constraint for node i */
sum{(j,i) in E} x[j,i] + (if i = s then flow)
/* summary flow into node i through all ingoing arcs */
= /* must be equal to */
sum{(i,j) in E} x[i,j] + (if i = t then flow);
/* summary flow from node i through all outgoing arcs */
maximize obj: flow;
/* objective is to maximize the total flow through the network */
solve;
printf{1..56} "="; printf "\n";
printf "Maximum flow from node %s to node %s is %g\n\n", s, t, flow;
printf "Starting node Ending node Arc capacity Flow in arc\n";
printf "------------- ----------- ------------ -----------\n";
printf{(i,j) in E: x[i,j] != 0}: "%13s %11s %12g %11g\n", i, j,
a[i,j], x[i,j];
printf{1..56} "="; printf "\n";
data;
/* These data correspond to an example from [Christofides]. */
/* Optimal solution is 29 */
param n := 9;
param : E : a :=
1 2 14
1 4 23
2 3 10
2 4 9
3 5 12
3 8 18
4 5 26
5 2 11
5 6 25
5 7 4
6 7 7
6 8 8
7 9 15
8 9 20;
end;

62
resources/3rdparty/glpk-4.53/examples/mfasp.mod

@ -0,0 +1,62 @@
/* MFASP, Minimum Feedback Arc Set Problem */
/* Written in GNU MathProg by Andrew Makhorin <mao@gnu.org> */
/* The Minimum Feedback Arc Set Problem for a given directed graph
G = (V, E), where V is a set of vertices and E is a set of arcs, is
to find a minimal subset of arcs, which being removed from the graph
make it acyclic.
Reference:
Garey, M.R., and Johnson, D.S. (1979), Computers and Intractability:
A guide to the theory of NP-completeness [Graph Theory, Covering and
Partitioning, Minimum Feedback Arc Set, GT9]. */
param n, integer, >= 0;
/* number of vertices */
set V, default 1..n;
/* set of vertices */
set E, within V cross V,
default setof{i in V, j in V: i <> j and Uniform(0,1) <= 0.15} (i,j);
/* set of arcs */
printf "Graph has %d vertices and %d arcs\n", card(V), card(E);
var x{(i,j) in E}, binary;
/* x[i,j] = 1 means that (i->j) is a feedback arc */
/* It is known that a digraph G = (V, E) is acyclic if and only if its
vertices can be assigned numbers from 1 to |V| in such a way that
k[i] + 1 <= k[j] for every arc (i->j) in E, where k[i] is a number
assigned to vertex i. We may use this condition to require that the
digraph G = (V, E \ E'), where E' is a subset of feedback arcs, is
acyclic. */
var k{i in V}, >= 1, <= card(V);
/* k[i] is a number assigned to vertex i */
s.t. r{(i,j) in E}: k[j] - k[i] >= 1 - card(V) * x[i,j];
/* note that x[i,j] = 1 leads to a redundant constraint */
minimize obj: sum{(i,j) in E} x[i,j];
/* the objective is to minimize the cardinality of a subset of feedback
arcs */
solve;
printf "Minimum feedback arc set:\n";
printf{(i,j) in E: x[i,j]} "%d %d\n", i, j;
data;
/* The optimal solution is 3 */
param n := 15;
set E := 1 2, 2 3, 3 4, 3 8, 4 9, 5 1, 6 5, 7 5, 8 6, 8 7, 8 9, 9 10,
10 11, 10 14, 11 15, 12 7, 12 8, 12 13, 13 8, 13 12, 13 14,
14 9, 15 14;
end;

62
resources/3rdparty/glpk-4.53/examples/mfvsp.mod

@ -0,0 +1,62 @@
/* MFVSP, Minimum Feedback Vertex Set Problem */
/* Written in GNU MathProg by Andrew Makhorin <mao@gnu.org> */
/* The Minimum Feedback Vertex Set Problem for a given directed graph
G = (V, E), where V is a set of vertices and E is a set of arcs, is
to find a minimal subset of vertices, which being removed from the
graph make it acyclic.
Reference:
Garey, M.R., and Johnson, D.S. (1979), Computers and Intractability:
A guide to the theory of NP-completeness [Graph Theory, Covering and
Partitioning, Minimum Feedback Vertex Set, GT8]. */
param n, integer, >= 0;
/* number of vertices */
set V, default 1..n;
/* set of vertices */
set E, within V cross V,
default setof{i in V, j in V: i <> j and Uniform(0,1) <= 0.15} (i,j);
/* set of arcs */
printf "Graph has %d vertices and %d arcs\n", card(V), card(E);
var x{i in V}, binary;
/* x[i] = 1 means that i is a feedback vertex */
/* It is known that a digraph G = (V, E) is acyclic if and only if its
vertices can be assigned numbers from 1 to |V| in such a way that
k[i] + 1 <= k[j] for every arc (i->j) in E, where k[i] is a number
assigned to vertex i. We may use this condition to require that the
digraph G = (V, E \ E'), where E' is a subset of feedback arcs, is
acyclic. */
var k{i in V}, >= 1, <= card(V);
/* k[i] is a number assigned to vertex i */
s.t. r{(i,j) in E}: k[j] - k[i] >= 1 - card(V) * (x[i] + x[j]);
/* note that x[i] = 1 or x[j] = 1 leads to a redundant constraint */
minimize obj: sum{i in V} x[i];
/* the objective is to minimize the cardinality of a subset of feedback
vertices */
solve;
printf "Minimum feedback vertex set:\n";
printf{i in V: x[i]} "%d\n", i;
data;
/* The optimal solution is 3 */
param n := 15;
set E := 1 2, 2 3, 3 4, 3 8, 4 9, 5 1, 6 5, 7 5, 8 6, 8 7, 8 9, 9 10,
10 11, 10 14, 11 15, 12 7, 12 8, 12 13, 13 8, 13 12, 13 14,
14 9, 15 14;
end;

111
resources/3rdparty/glpk-4.53/examples/min01ks.mod

@ -0,0 +1,111 @@
/* min01ks.mod - finding minimal equivalent 0-1 knapsack inequality */
/* Written in GNU MathProg by Andrew Makhorin <mao@gnu.org> */
/* It is obvious that for a given 0-1 knapsack inequality
a[1] x[1] + ... + a[n] x[n] <= b, x[j] in {0, 1} (1)
there exist infinitely many equivalent inequalities with exactly the
same feasible solutions.
Given a[j]'s and b this model allows to find an inequality
alfa[1] x[1] + ... + alfa[n] x[n] <= beta, x[j] in {0, 1}, (2)
which is equivalent to (1) and where alfa[j]'s and beta are smallest
non-negative integers.
This model has the following formulation:
minimize
z = |alfa[1]| + ... + |alfa[n]| + |beta| = (3)
= alfa[1] + ... + alfa[n] + beta
subject to
alfa[1] x[1] + ... + alfa[n] x[n] <= beta (4)
for all x satisfying to (1)
alfa[1] x[1] + ... + alfa[n] x[n] >= beta + 1 (5)
for all x not satisfying to (1)
alfa[1], ..., alfa[n], beta are non-negative integers.
Note that this model has n+1 variables and 2^n constraints.
It is interesting, as noticed in [1] and explained in [2], that
in most cases LP relaxation of the MIP formulation above has integer
optimal solution.
References
1. G.H.Bradley, P.L.Hammer, L.Wolsey, "Coefficient Reduction for
Inequalities in 0-1 Variables", Math.Prog.7 (1974), 263-282.
2. G.J.Koehler, "A Study on Coefficient Reduction of Binary Knapsack
Inequalities", University of Florida, 2001. */
param n, integer, > 0;
/* number of variables in the knapsack inequality */
set N := 1..n;
/* set of knapsack items */
/* all binary n-vectors are numbered by 0, 1, ..., 2^n-1, where vector
0 is 00...00, vector 1 is 00...01, etc. */
set U := 0..2^n-1;
/* set of numbers of all binary n-vectors */
param x{i in U, j in N}, binary, := (i div 2^(j-1)) mod 2;
/* x[i,j] is j-th component of i-th binary n-vector */
param a{j in N}, >= 0;
/* original coefficients */
param b, >= 0;
/* original right-hand side */
set D := setof{i in U: sum{j in N} a[j] * x[i,j] <= b} i;
/* set of numbers of binary n-vectors, which (vectors) are feasible,
i.e. satisfy to the original knapsack inequality (1) */
var alfa{j in N}, integer, >= 0;
/* coefficients to be found */
var beta, integer, >= 0;
/* right-hand side to be found */
minimize z: sum{j in N} alfa[j] + beta; /* (3) */
phi{i in D}: sum{j in N} alfa[j] * x[i,j] <= beta; /* (4) */
psi{i in U diff D}: sum{j in N} alfa[j] * x[i,j] >= beta + 1; /* (5) */
solve;
printf "\nOriginal 0-1 knapsack inequality:\n";
for {j in 1..n} printf (if j = 1 then "" else " + ") & "%g x%d",
a[j], j;
printf " <= %g\n", b;
printf "\nMinimized equivalent inequality:\n";
for {j in 1..n} printf (if j = 1 then "" else " + ") & "%g x%d",
alfa[j], j;
printf " <= %g\n\n", beta;
data;
/* These data correspond to the very first example from [1]. */
param n := 8;
param a := [1]65, [2]64, [3]41, [4]22, [5]13, [6]12, [7]8, [8]2;
param b := 80;
end;

665
resources/3rdparty/glpk-4.53/examples/misp.mod

@ -0,0 +1,665 @@
/* MISP, Maximum Independent Set Problem */
/* Written in GNU MathProg by Andrew Makhorin <mao@gnu.org> */
/* Let G = (V,E) be an undirected graph with vertex set V and edge set
* E. Vertices u, v in V are non-adjacent if (u,v) not in E. A subset
* of the vertices S within V is independent if all vertices in S are
* pairwise non-adjacent. The Maximum Independent Set Problem (MISP) is
* to find an independent set having the largest cardinality. */
param n, integer, > 0;
/* number of vertices */
set V := 1..n;
/* set of vertices */
set E within V cross V;
/* set of edges */
var x{i in V}, binary;
/* x[i] = 1 means vertex i belongs to independent set */
s.t. edge{(i,j) in E}: x[i] + x[j] <= 1;
/* if there is edge (i,j), vertices i and j cannot belong to the same
independent set */
maximize obj: sum{i in V} x[i];
/* the objective is to maximize the cardinality of independent set */
data;
/* These data corresponds to the test instance from:
*
* M.G.C. Resende, T.A.Feo, S.H.Smith, "Algorithm 787 -- FORTRAN
* subroutines for approximate solution of the maximum independent set
* problem using GRASP," Trans. on Math. Softw., Vol. 24, No. 4,
* December 1998, pp. 386-394. */
/* The optimal solution is 7. */
param n := 50;
set E :=
1 2
1 3
1 5
1 7
1 8
1 12
1 15
1 16
1 19
1 20
1 21
1 22
1 28
1 30
1 34
1 35
1 37
1 41
1 42
1 47
1 50
2 3
2 5
2 6
2 7
2 8
2 9
2 10
2 13
2 17
2 19
2 20
2 21
2 23
2 25
2 26
2 29
2 31
2 35
2 36
2 44
2 45
2 46
2 50
3 5
3 6
3 8
3 9
3 10
3 11
3 14
3 16
3 23
3 24
3 26
3 27
3 28
3 29
3 30
3 31
3 34
3 35
3 36
3 39
3 41
3 42
3 43
3 44
3 50
4 6
4 7
4 9
4 10
4 11
4 13
4 14
4 15
4 17
4 21
4 22
4 23
4 24
4 25
4 27
4 28
4 30
4 31
4 33
4 34
4 35
4 36
4 37
4 38
4 40
4 41
4 42
4 46
4 49
5 6
5 11
5 14
5 21
5 24
5 25
5 28
5 35
5 38
5 39
5 41
5 44
5 49
5 50
6 8
6 9
6 10
6 13
6 14
6 16
6 17
6 19
6 22
6 23
6 26
6 27
6 30
6 34
6 35
6 38
6 39
6 40
6 41
6 44
6 45
6 47
6 50
7 8
7 9
7 10
7 11
7 13
7 15
7 16
7 18
7 20
7 22
7 23
7 24
7 25
7 33
7 35
7 36
7 38
7 43
7 45
7 46
7 47
8 10
8 11
8 13
8 16
8 17
8 18
8 19
8 20
8 21
8 22
8 23
8 24
8 25
8 26
8 33
8 35
8 36
8 39
8 42
8 44
8 48
8 49
9 12
9 14
9 17
9 19
9 20
9 23
9 28
9 30
9 31
9 32
9 33
9 34
9 38
9 39
9 42
9 44
9 45
9 46
10 11
10 13
10 15
10 16
10 17
10 20
10 21
10 22
10 23
10 25
10 26
10 27
10 28
10 30
10 31
10 32
10 37
10 38
10 41
10 43
10 44
10 45
10 50
11 12
11 14
11 15
11 18
11 21
11 24
11 25
11 26
11 29
11 32
11 33
11 35
11 36
11 37
11 39
11 40
11 42
11 43
11 45
11 47
11 49
11 50
12 13
12 16
12 17
12 19
12 24
12 25
12 26
12 30
12 31
12 32
12 34
12 36
12 37
12 39
12 41
12 44
12 47
12 48
12 49
13 15
13 16
13 18
13 19
13 20
13 22
13 23
13 24
13 27
13 28
13 29
13 31
13 33
13 35
13 36
13 37
13 44
13 47
13 49
13 50
14 15
14 16
14 17
14 18
14 19
14 20
14 21
14 26
14 28
14 29
14 30
14 31
14 32
14 34
14 35
14 36
14 38
14 39
14 41
14 44
14 46
14 47
14 48
15 18
15 21
15 22
15 23
15 25
15 28
15 29
15 30
15 33
15 34
15 36
15 37
15 38
15 39
15 40
15 43
15 44
15 46
15 50
16 17
16 19
16 20
16 25
16 26
16 29
16 35
16 38
16 39
16 40
16 41
16 42
16 44
17 18
17 19
17 21
17 22
17 23
17 25
17 26
17 28
17 29
17 33
17 37
17 44
17 45
17 48
18 20
18 24
18 27
18 28
18 31
18 32
18 34
18 35
18 36
18 37
18 38
18 45
18 48
18 49
18 50
19 22
19 24
19 28
19 29
19 36
19 37
19 39
19 41
19 43
19 45
19 48
19 49
20 21
20 22
20 24
20 25
20 26
20 27
20 29
20 30
20 31
20 33
20 34
20 35
20 38
20 39
20 41
20 42
20 43
20 44
20 45
20 46
20 48
20 49
21 22
21 23
21 29
21 31
21 35
21 38
21 42
21 46
21 47
22 23
22 26
22 27
22 28
22 29
22 30
22 39
22 40
22 41
22 42
22 44
22 45
22 46
22 47
22 49
22 50
23 28
23 31
23 32
23 33
23 34
23 35
23 36
23 39
23 40
23 41
23 42
23 44
23 45
23 48
23 49
23 50
24 25
24 27
24 29
24 30
24 31
24 33
24 34
24 38
24 42
24 43
24 44
24 49
24 50
25 26
25 27
25 29
25 30
25 33
25 34
25 36
25 38
25 40
25 41
25 42
25 44
25 46
25 47
25 48
25 49
26 28
26 31
26 32
26 33
26 37
26 38
26 39
26 40
26 41
26 42
26 45
26 47
26 48
26 49
27 29
27 30
27 33
27 34
27 35
27 39
27 40
27 46
27 48
28 29
28 37
28 40
28 42
28 44
28 46
28 47
28 50
29 35
29 38
29 39
29 41
29 42
29 48
30 31
30 32
30 35
30 37
30 38
30 40
30 43
30 45
30 46
30 47
30 48
31 33
31 35
31 38
31 40
31 41
31 42
31 44
31 46
31 47
31 50
32 33
32 35
32 39
32 40
32 46
32 49
32 50
33 34
33 36
33 37
33 40
33 42
33 43
33 44
33 45
33 50
34 35
34 36
34 37
34 38
34 40
34 43
34 44
34 49
34 50
35 36
35 38
35 41
35 42
35 43
35 45
35 46
35 47
35 49
35 50
36 37
36 39
36 40
36 41
36 42
36 43
36 48
36 50
37 38
37 41
37 43
37 46
37 47
37 48
37 49
37 50
38 41
38 45
38 46
38 48
38 49
38 50
39 43
39 46
39 47
39 48
39 49
40 43
40 45
40 48
40 50
41 42
41 43
41 44
41 45
41 46
41 48
41 49
42 43
42 44
42 46
42 48
42 49
43 45
43 46
43 48
43 50
44 45
44 48
45 46
45 47
45 48
46 49
47 49
47 50
48 49
48 50
49 50
;
end;

1489
resources/3rdparty/glpk-4.53/examples/misp1.dat
File diff suppressed because it is too large
View File

Some files were not shown because too many files changed in this diff

|||||||
100:0
Loading…
Cancel
Save