scipopt / papilo Goto Github PK
View Code? Open in Web Editor NEWParallel Presolve for Integer and Linear Optimization
License: GNU Lesser General Public License v3.0
Parallel Presolve for Integer and Linear Optimization
License: GNU Lesser General Public License v3.0
PaPILO is killed while trying to presolve a MILP model stored in a 9.6 GB MPS file. The computer has a AMD Ryzen Threadripper 3960X 24-Core Processor, which has 48 logical cores due to hyper-threading, has 128 GB RAM, and runs Ubuntu 20.04.5 LTS. Is PaPILO running out of memory?
$ /home/muck/papilo-2.1.0/build/bin/papilo presolve -f /data/muck/gen_MPS_files/p10_fix0_MILP_binary_x.mps -r /data/muck/PaPILO_files_MILP_binary_x/p10_fix0_red.mps -v /data/muck/PaPILO_files_MILP_binary_x/p10_fix0_red.postsolve
PaPILO version 2.1.0 [mode: debug][Solvers: none][GitHash: ]
Copyright (C) 2020-2022 Zuse Institute Berlin (ZIB)
External libraries:
Boost 1.79.0 (https://www.boost.org/)
TBB Thread building block https://github.com/oneapi-src/oneTBB developed by Intel
reading took 188.0 seconds
Numerical Statistics:
Matrix range [1e+00,1e+00]
Objective range [2e+01,1e+04]
Bounds range [1e+00,1e+00]
RHS range [1e+00,1e+01]
Dynamism Variables: 1e+00
Dynamism Rows : 1e+00
starting presolve of problem /data/muck/gen_MPS_files/p10_fix0_MILP_binary_x.mps:
rows: 47261300
columns: 47251695
int. columns: 47251695
cont. columns: 0
nonzeros: 141744517
round 0 ( Trivial ): 2 del cols, 14889 del rows, 2 chg bounds, 0 chg sides, 0 chg coeffs, 0 tsx applied, 0 tsx conflicts
Killed
Does PaPILO presolve change the objective function value between the original and presolved space? That is, if the PaPILO presolved model is solved to optimality, is the optimal objective value in the presolved space the same as that in the original space? If not, is there a simple way to transform the objective value in the presolved space to the objective value in the original space?
I am dealing with a problem on SCIP 8.0.3, but it can't get the optimal value, which turns out infeasible. I permutate constraints and variables, then get the optimal value.
What may cause it to happen? Are there any suggestions to prevent this error?
I am seeing segfaults while running the papilo 2.2.0 testsuite on some architectures. The segfault is repeatable on s390x. Valgrind shows an out-of-bounds array access on all architectures, although it doesn't necessarily lead to a segfault:
$ valgrind --leak-check=no --enable-debuginfod=yes --read-inline-info=yes --read-var-info=yes --track-origins=yes bin/papilo solve -a r -f /builddir/build/BUILD/papilo-2.2.0/check/instances/MIP/gt2.mps -o 21166 -p /builddir/build/BUILD/papilo-2.2.0/settings/default.set
==145== Memcheck, a memory error detector
==145== Copyright (C) 2002-2022, and GNU GPL'd, by Julian Seward et al.
==145== Using Valgrind-3.22.0 and LibVEX; rerun with -h for copyright info
==145== Command: bin/papilo solve -a r -f /builddir/build/BUILD/papilo-2.2.0/check/instances/MIP/gt2.mps -o 21166 -p /builddir/build/BUILD/papilo-2.2.0/settings/default.set
==145==
PaPILO version 2.2.0 [mode: optimized][Solvers: SCIP,SoPlex][GitHash: ]
Copyright (C) 2020-2023 Zuse Institute Berlin (ZIB)
External libraries:
Boost 1.83.0 (https://www.boost.org/)
TBB Thread building block https://github.com/oneapi-src/oneTBB developed by Intel
GMP 6.3.0 GNU Multiple Precision Arithmetic Library developed by T. Granlund (gmplib.org)
SCIP 9.0.0 Mixed Integer Programming Solver developed at Zuse Institute Berlin (scip.zib.de) [GitHash: NoGitInfo]
SoPlex 7.0.0 Linear Programming Solver developed at Zuse Institute Berlin (soplex.zib.de) [GitHash: NoGitInfo]
reading took 2.72 seconds
Numerical Statistics:
Matrix range [1e+00,3e+03]
Objective range [1e+03,8e+03]
Bounds range [1e+00,2e+01]
RHS range [1e+00,6e+03]
Dynamism Variables: 3e+03
Dynamism Rows : 2e+02
starting presolve of problem /builddir/build/BUILD/papilo-2.2.0/check/instances/MIP/gt2.mps:
rows: 29
columns: 188
int. columns: 188
cont. columns: 0
nonzeros: 376
round 0 ( Trivial ): 0 del cols, 1 del rows, 0 chg bounds, 0 chg sides, 0 chg coeffs, 0 tsx applied, 0 tsx conflicts
round 1 ( Fast ): 15 del cols, 1 del rows, 16 chg bounds, 0 chg sides, 10 chg coeffs, 27 tsx applied, 0 tsx conflicts
round 2 ( Fast ): 15 del cols, 1 del rows, 26 chg bounds, 1 chg sides, 11 chg coeffs, 48 tsx applied, 0 tsx conflicts
==145== Invalid read of size 8
==145== at 0x48BAFA6: boost::multiprecision::backends::gmp_rational::gmp_rational(boost::multiprecision::backends::gmp_rational const&) (gmp.hpp:2387)
==145== by 0x4A071EE: UnknownInlinedFun (number.hpp:54)
==145== by 0x4A071EE: papilo::ParallelColDetection<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1> >::execute(papilo::Problem<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1> > const&, papilo::ProblemUpdate<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1> > const&, papilo::Num<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1> > const&, papilo::Reductions<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1> >&, papilo::Timer const&, int&)::{lambda(int, int)#1}::operator()(int, int) const (ParallelColDetection.hpp:595)
==145== by 0x4A07848: UnknownInlinedFun (pdqsort.h:152)
==145== by 0x4A07848: UnknownInlinedFun (pdqsort.h:158)
==145== by 0x4A07848: void pdqsort_detail::pdqsort_loop<int*, papilo::ParallelColDetection<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1> >::execute(papilo::Problem<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1> > const&, papilo::ProblemUpdate<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1> > const&, papilo::Num<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1> > const&, papilo::Reductions<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1> >&, papilo::Timer const&, int&)::{lambda(int, int)#1}, false>(int*, int*, papilo::ParallelColDetection<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1> >::execute(papilo::Problem<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1> > const&, papilo::ProblemUpdate<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1> > const&, papilo::Num<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1> > const&, papilo::Reductions<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1> >&, papilo::Timer const&, int&)::{lambda(int, int)#1}, int, bool) (pdqsort.h:420)
==145== by 0x4A0875A: UnknownInlinedFun (pdqsort.h:502)
==145== by 0x4A0875A: papilo::ParallelColDetection<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1> >::execute(papilo::Problem<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1> > const&, papilo::ProblemUpdate<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1> > const&, papilo::Num<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1> > const&, papilo::Reductions<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1> >&, papilo::Timer const&, int&) (ParallelColDetection.hpp:575)
==145== by 0x494EC94: UnknownInlinedFun (PresolveMethod.hpp:167)
==145== by 0x494EC94: UnknownInlinedFun (Presolve.hpp:1028)
==145== by 0x494EC94: UnknownInlinedFun (_utils.h:362)
==145== by 0x494EC94: UnknownInlinedFun (parallel_for.h:117)
==145== by 0x494EC94: UnknownInlinedFun (partitioner.h:513)
==145== by 0x494EC94: tbb::detail::d1::start_for<tbb::detail::d1::blocked_range<int>, papilo::Presolve<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1> >::run_presolvers(papilo::Problem<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1> > const&, std::pair<int, int> const&, papilo::ProblemUpdate<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1> >&, bool&, papilo::Timer const&)::{lambda(tbb::detail::d1::blocked_range<int> const&)#1}, tbb::detail::d1::simple_partitioner const>::execute(tbb::detail::d1::execution_data&) (parallel_for.h:170)
==145== by 0x6374A8A: UnknownInlinedFun (task_dispatcher.h:323)
==145== by 0x6374A8A: UnknownInlinedFun (task_dispatcher.h:459)
==145== by 0x6374A8A: tbb::detail::r1::task_dispatcher::execute_and_wait(tbb::detail::d1::task*, tbb::detail::d1::wait_context&, tbb::detail::d1::task_group_context&) (task_dispatcher.cpp:168)
==145== by 0x49371EA: papilo::Presolve<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1> >::run_presolvers(papilo::Problem<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1> > const&, std::pair<int, int> const&, papilo::ProblemUpdate<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1> >&, bool&, papilo::Timer const&) (_task.h:191)
==145== by 0x49433FD: papilo::Presolve<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1> >::apply(papilo::Problem<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1> >&, bool)::{lambda()#1}::operator()() const (Presolve.hpp:557)
==145== by 0x494E8D8: tbb::detail::d1::task_arena_function<papilo::Presolve<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1> >::apply(papilo::Problem<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1> >&, bool)::{lambda()#1}, papilo::PresolveResult<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1> > >::operator()() const (task_arena.h:47)
==145== by 0x636056D: tbb::detail::r1::task_arena_impl::execute(tbb::detail::d1::task_arena_base&, tbb::detail::d1::delegate_base&) (arena.cpp:796)
==145== by 0x4A780BA: papilo::PresolveResult<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1> > tbb::detail::d1::task_arena::execute_impl<papilo::PresolveResult<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1> >, papilo::Presolve<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1> >::apply(papilo::Problem<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1> >&, bool)::{lambda()#1}>(papilo::Presolve<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1> >::apply(papilo::Problem<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1> >&, bool)::{lambda()#1}&) [clone .constprop.0] (task_arena.h:251)
==145== by 0x4933DC9: UnknownInlinedFun (task_arena.h:404)
==145== by 0x4933DC9: papilo::Presolve<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1> >::apply(papilo::Problem<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1> >&, bool) (Presolve.hpp:979)
==145== Address 0x751f758 is 8 bytes after a block of size 48,128 alloc'd
==145== at 0x4842F95: operator new(unsigned long) (vg_replace_malloc.c:483)
==145== by 0x33AEE4: UnknownInlinedFun (new_allocator.h:151)
==145== by 0x33AEE4: UnknownInlinedFun (alloc_traits.h:475)
==145== by 0x33AEE4: UnknownInlinedFun (stl_vector.h:377)
==145== by 0x33AEE4: UnknownInlinedFun (stl_vector.h:1618)
==145== by 0x33AEE4: std::vector<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>, std::allocator<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1> > >::operator=(std::vector<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>, std::allocator<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1> > > const&) [clone .isra.0] (vector.tcc:238)
==145== by 0x154FCA: UnknownInlinedFun (SparseStorage.hpp:67)
==145== by 0x154FCA: UnknownInlinedFun (ConstraintMatrix.hpp:139)
==145== by 0x154FCA: UnknownInlinedFun (Problem.hpp:64)
==145== by 0x154FCA: UnknownInlinedFun (Wrappers.hpp:84)
==145== by 0x154FCA: main (papilo.cpp:216)
(followed by a few more with the same stacktraces).
My log is as follows
I have latest tbb
& boost
cmake -DCMAKE_INSTALL_PREFIX=$PREFIX/local ..
-- The C compiler identification is Clang 14.0.6
-- The CXX compiler identification is Clang 14.0.6
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /data/data/com.termux/files/usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /data/data/com.termux/files/usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found Boost: /data/data/com.termux/files/usr/lib/cmake/Boost-1.78.0/BoostConfig.cmake (found suitable version "1.78.0", minimum required is "1.65") found components: program_options
-- Found GMP: /data/data/com.termux/files/usr/include
-- Performing Test Quadmath_USE_DIRECTLY
-- Performing Test Quadmath_USE_DIRECTLY - Failed
-- Could NOT find Quadmath (missing: Quadmath_LIBRARY Quadmath_INCLUDE_DIR)
-- Git hash: dea16d4
-- Found TBB: /data/data/com.termux/files/usr/lib/cmake/TBB/TBBConfig.cmake (found suitable version "2021.5.0", minimum required is "2018")
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE
-- Looking for a Fortran compiler
-- Looking for a Fortran compiler - NOTFOUND
-- Looking for sgemm_
-- Looking for sgemm_ - not found
-- Looking for sgemm_
-- Looking for sgemm_ - found
-- Found BLAS: /data/data/com.termux/files/usr/lib/libopenblas.so
-- LUSOL is not built
-- Performing Test HAVE_FLAG_STD_CXX14
-- Performing Test HAVE_FLAG_STD_CXX14 - Success
-- Performing Test PAPILO_BYTELL_HASHMAP_WORKS
-- Performing Test PAPILO_BYTELL_HASHMAP_WORKS - Success
-- Found Boost: /data/data/com.termux/files/usr/lib/cmake/Boost-1.78.0/BoostConfig.cmake (found version "1.78.0") found components: iostreams serialization program_options
-- Performing Test PAPILO_USE_BOOST_IOSTREAMS_WITH_ZLIB
-- Performing Test PAPILO_USE_BOOST_IOSTREAMS_WITH_ZLIB - Success
-- Performing Test PAPILO_USE_BOOST_IOSTREAMS_WITH_BZIP2
-- Performing Test PAPILO_USE_BOOST_IOSTREAMS_WITH_BZIP2 - Success
-- No solvers linked
-- Found Boost: /data/data/com.termux/files/usr/lib/cmake/Boost-1.78.0/BoostConfig.cmake (found version "1.78.0") found components: serialization program_options iostreams
-- Configuring done
-- Generating done
-- Build files have been written to: /data/data/com.termux/files/home/papilo/build
~/papilo/build $ make -j4
[ 1%] Building CXX object test/CMakeFiles/unit_test.dir/TestMain.cpp.o
[ 3%] Building CXX object CMakeFiles/papilo-core.dir/src/papilo/core/VariableDomains.cpp.o
[ 5%] Building CXX object CMakeFiles/papilo-core.dir/src/papilo/core/SparseStorage.cpp.o
[ 7%] Building CXX object test/CMakeFiles/unit_test.dir/papilo/core/MatrixBufferTest.cpp.o
[ 9%] Building CXX object CMakeFiles/papilo-core.dir/src/papilo/core/ConstraintMatrix.cpp.o
[ 11%] Building CXX object CMakeFiles/papilo-core.dir/src/papilo/core/ProblemUpdate.cpp.o
[ 12%] Building CXX object test/CMakeFiles/unit_test.dir/papilo/core/SparseStorageTest.cpp.o
[ 14%] Building CXX object test/CMakeFiles/unit_test.dir/papilo/core/PresolveTest.cpp.o
[ 16%] Building CXX object CMakeFiles/papilo-core.dir/src/papilo/core/Presolve.cpp.o
[ 18%] Building CXX object test/CMakeFiles/unit_test.dir/papilo/core/ProblemUpdateTest.cpp.o
[ 20%] Building CXX object CMakeFiles/papilo-core.dir/src/papilo/core/postsolve/PostsolveStorage.cpp.o
[ 22%] Building CXX object test/CMakeFiles/unit_test.dir/papilo/misc/VectorUtilsTest.cpp.o
[ 24%] Building CXX object test/CMakeFiles/unit_test.dir/papilo/presolve/CoefficientStrengtheningTest.cpp.o
[ 25%] Building CXX object CMakeFiles/papilo-core.dir/src/papilo/core/postsolve/Postsolve.cpp.o
[ 27%] Building CXX object CMakeFiles/papilo-core.dir/src/papilo/core/ProbingView.cpp.o
[ 29%] Building CXX object test/CMakeFiles/unit_test.dir/papilo/presolve/ConstraintPropagationTest.cpp.o
[ 31%] Building CXX object test/CMakeFiles/unit_test.dir/papilo/presolve/DualFixTest.cpp.o
[ 33%] Building CXX object CMakeFiles/papilo-core.dir/src/papilo/presolvers/CoefficientStrengthening.cpp.o
[ 35%] Building CXX object test/CMakeFiles/unit_test.dir/papilo/presolve/DominatedColsTest.cpp.o
[ 37%] Building CXX object CMakeFiles/papilo-core.dir/src/papilo/presolvers/ConstraintPropagation.cpp.o
[ 38%] Building CXX object CMakeFiles/papilo-core.dir/src/papilo/presolvers/DominatedCols.cpp.o
[ 40%] Building CXX object test/CMakeFiles/unit_test.dir/papilo/presolve/FixContinuousTest.cpp.o
[ 42%] Building CXX object CMakeFiles/papilo-core.dir/src/papilo/presolvers/DualFix.cpp.o
[ 44%] Building CXX object CMakeFiles/papilo-core.dir/src/papilo/presolvers/DualInfer.cpp.o
[ 46%] Building CXX object test/CMakeFiles/unit_test.dir/papilo/presolve/FreeVarSubstitutionTest.cpp.o
[ 48%] Building CXX object test/CMakeFiles/unit_test.dir/papilo/presolve/ImplIntDetectionTest.cpp.o
[ 50%] Building CXX object test/CMakeFiles/unit_test.dir/papilo/presolve/ParallelRowDetectionTest.cpp.o
[ 51%] Building CXX object CMakeFiles/papilo-core.dir/src/papilo/presolvers/FixContinuous.cpp.o
[ 53%] Building CXX object test/CMakeFiles/unit_test.dir/papilo/presolve/ParallelColDetectionTest.cpp.o
[ 55%] Building CXX object CMakeFiles/papilo-core.dir/src/papilo/presolvers/FreeVarSubstitution.cpp.o
[ 57%] Building CXX object CMakeFiles/papilo-core.dir/src/papilo/presolvers/ImplIntDetection.cpp.o
[ 59%] Building CXX object test/CMakeFiles/unit_test.dir/papilo/presolve/ProbingTest.cpp.o
[ 61%] Building CXX object CMakeFiles/papilo-core.dir/src/papilo/presolvers/ParallelColDetection.cpp.o
[ 62%] Building CXX object test/CMakeFiles/unit_test.dir/papilo/presolve/SingletonColsTest.cpp.o
[ 64%] Building CXX object CMakeFiles/papilo-core.dir/src/papilo/presolvers/ParallelRowDetection.cpp.o
[ 66%] Building CXX object CMakeFiles/papilo-core.dir/src/papilo/presolvers/Probing.cpp.o
[ 68%] Building CXX object test/CMakeFiles/unit_test.dir/papilo/presolve/SingletonStuffingTest.cpp.o
[ 70%] Building CXX object test/CMakeFiles/unit_test.dir/papilo/presolve/SimpleProbingTest.cpp.o
[ 72%] Building CXX object CMakeFiles/papilo-core.dir/src/papilo/presolvers/SimpleProbing.cpp.o
[ 74%] Building CXX object test/CMakeFiles/unit_test.dir/papilo/presolve/SimpleSubstitutionTest.cpp.o
[ 75%] Building CXX object test/CMakeFiles/unit_test.dir/papilo/presolve/SimplifyInequalitiesTest.cpp.o
[ 77%] Building CXX object CMakeFiles/papilo-core.dir/src/papilo/presolvers/SimpleSubstitution.cpp.o
[ 79%] Building CXX object CMakeFiles/papilo-core.dir/src/papilo/presolvers/SingletonCols.cpp.o
[ 81%] Building CXX object test/CMakeFiles/unit_test.dir/papilo/presolve/SparsifyTest.cpp.o
[ 83%] Building CXX object CMakeFiles/papilo-core.dir/src/papilo/presolvers/SingletonStuffing.cpp.o
[ 85%] Building CXX object test/CMakeFiles/unit_test.dir/papilo/io/MpsParserTest.cpp.o
[ 87%] Building CXX object CMakeFiles/papilo-core.dir/src/papilo/presolvers/Sparsify.cpp.o
[ 88%] Building CXX object CMakeFiles/papilo-core.dir/src/papilo/presolvers/SimplifyInequalities.cpp.o
[ 90%] Linking CXX executable unit_test
ld.lld: error: undefined symbol: __android_log_write
>>> referenced by catch.hpp:10367 (/data/data/com.termux/files/home/papilo/src/papilo/external/catch/catch.hpp:10367)
>>> CMakeFiles/unit_test.dir/TestMain.cpp.o:(Catch::writeToDebugConsole(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&))
>>> referenced by catch.hpp:10367 (/data/data/com.termux/files/home/papilo/src/papilo/external/catch/catch.hpp:10367)
>>> CMakeFiles/unit_test.dir/TestMain.cpp.o:(Catch::Detail::(anonymous namespace)::StreamBufImpl<Catch::Detail::(anonymous namespace)::OutputDebugWriter, 256ul>::sync())
>>> referenced by catch.hpp:10367 (/data/data/com.termux/files/home/papilo/src/papilo/external/catch/catch.hpp:10367)
>>> CMakeFiles/unit_test.dir/TestMain.cpp.o:(Catch::Detail::(anonymous namespace)::StreamBufImpl<Catch::Detail::(anonymous namespace)::OutputDebugWriter, 256ul>::overflow(int))
clang-14: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [test/CMakeFiles/unit_test.dir/build.make:455: test/unit_test] Error 1
make[1]: *** [CMakeFiles/Makefile2:225: test/CMakeFiles/unit_test.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 92%] Linking CXX static library libpapilo-core.a
[ 92%] Built target papilo-core
make: *** [Makefile:146: all] Error 2
CMakeLists.txt says that the version is 2.0.0, but repository has no such tag.
.opb
is a file format to specify 0-1 Integer programs. However it is already supported in the larger SCIP ecosystem. I am aware that this format also contains products of binary variables, so working with the linearization of products of binaries would be enough. I would not expect writing out .opb
s with recovered product structures, although it would be nice.
What would be required to make papilo support reading .opb
?
For reference SCIP supports the following formats:
cip, cnf, flatzinc, rlp, lp, mps, opb, pip, wbo, zimpl
I understand that supporting flatzinc
and similar constraint based formats is really complicated and recovery of those constraint structures from a an presolved MILP quiet hard. So a full support for all filetypes SCIP can support is unrealistic given the linear framework of papilo.
Hi , if I wish to use Papilo simply as library, do I need to download the source and then build and make? or just include the head files directly?
Thanks :)
[papilo-2.1.1] from /sage/local/var/tmp/sage/build/papilo-2.1.1/src/src/papilo/io/MpsParser.hpp:28,
[papilo-2.1.1] from /sage/local/var/tmp/sage/build/papilo-2.1.1/src/test/papilo/io/MpsParserTest.cpp:24:
[papilo-2.1.1] /usr/include/boost/multiprecision/float128.hpp: In member function 'std::string boost::multiprecision::backends::float128_backend::str(std::streamsize, std::ios_base::fmtflags) const':
[papilo-2.1.1] /usr/include/boost/multiprecision/float128.hpp:260:15: error: 'unique_ptr' is not a member of 'std'
[papilo-2.1.1] 260 | std::unique_ptr<char[]> buf2;
[papilo-2.1.1] | ^~~~~~~~~~
[papilo-2.1.1] /usr/include/boost/multiprecision/float128.hpp:12:1: note: 'std::unique_ptr' is defined in header '<memory>'; did you forget to '#include <memory>'?
https://github.com/mkoeppe/PySCIPOpt/actions/runs/3506612801/jobs/5873771362
Hi, Thank you for your great work!
I was wondering if there is any plan to support the Python interface, such that one could easily invoke your algorithms for fast prototyping.
If PaPILO does not find oneTBB and it tries to download and use v2021.4.0, does it install oneTBB in the folder external/? If not, does PaPILO need root access in order to install oneTBB?
Hello,
After I execute the "cmake ..." command, I was prompted that TBB was not installed and an error was reported during the installation process:
“
lto1: fatal error: bytecode stream in file ‘CMakeFiles/tbbmalloc.dir/backend.cpp.o’ generated with LTO version 8.1 instead of the expected 6.2
compilation terminated.
lto-wrapper: fatal error: /usr/bin/gcc returned 1 exit status
compilation terminated.
/usr/bin/ld: error: lto-wrapper failed
collect2: error: ld returned 1 exit status
make[2]: ***
[src/tbbmalloc/CMakeFiles/tbbmalloc.dir/build.make:160:gnu_9.4_cxx11_64_relwithdebinfo/libtbbmalloc.so.2.4]
错误 1
make[1]: ***
[CMakeFiles/Makefile2:205:src/tbbmalloc/CMakeFiles/tbbmalloc.dir/all]
错误 2
make: *** [Makefile:152:all] 错误 2
“
How can I solve this problem?
Are you planning to tag PaPILO v2.1.4, which is provided with SCIP v8.1.0? https://scipopt.org/
Both projects have options to link with each other.
FAILED: bin/duplicates
: && /usr/bin/c++ -O2 -pipe -fno-omit-frame-pointer -fstack-protector-strong -fno-strict-aliasing -fno-omit-frame-pointer -O2 -pipe -fno-omit-frame-pointer -fstack-protector-strong -fno-strict-aliasing -fno-omit-frame-pointer -fstack-protector-strong binaries/CMakeFiles/duplicates.dir/__/src/duplicates.cpp.o -o bin/duplicates -Wl,-rpath,/usr/local/lib libpapilo-core.a /usr/local/lib/libboost_iostreams.so /usr/local/lib/libboost_serialization.so /usr/local/lib/libboost_program_options.so /usr/local/lib/libboost_regex.so /usr/local/lib/libtbb.so /usr/local/lib/libgmp.so /usr/local/lib/libgmpxx.so && :
ld: error: undefined symbol: tbb::task_group_context::init()
>>> referenced by ConstraintMatrix.cpp
>>> ConstraintMatrix.cpp.o:(papilo::ConstraintMatrix<double>::compress(bool)) in archive libpapilo-core.a
>>> referenced by ConstraintMatrix.cpp
>>> ConstraintMatrix.cpp.o:(papilo::ConstraintMatrix<double>::compress(bool)) in archive libpapilo-core.a
>>> referenced by ConstraintMatrix.cpp
>>> ConstraintMatrix.cpp.o:(papilo::ConstraintMatrix<double>::deleteRowsAndCols(std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<papilo::RowActivity<double>, std::__1::allocator<papilo::RowActivity<double> > >&, std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<int, std::__1::allocator<int> >&)) in archive libpapilo-core.a
>>> referenced 12 more times
OS: FreeBSD 13
If I have a solution (or partial solution) to the original problem defined in a .sol file, is there a way to construct the corresponding solution (or partial solution) in the presolved reduced space?
This might be useful if a good solution (or partial solution) to the original problem is known (for example from a metaheuristic) and I want to provide this initial feasible solution (or partial solution) and the presolved reduced problem to the solver (e.g., Gurobi).
If PaPILO is built with OR-Tools and the solve command is used to solve an LP (papilo solve -f problem.mps -l problem.sol), does PaPILO write the presolved problem to an MPS file and then call GLOP or PDLP on the presolved MPS file? From the command line, how does one select whether solve uses GLOP vs PDLP?
Hello,
I'm installing PAPILO on ubuntu following the instruction. I have succeeded in building the package.
According to the README.md, the excutable binary file can be called by
bin/papilo presolve -f problem.mps -r reduced.mps -v reduced.postsolve
but I do not find any folder named "bin" or binary file named "papilo".
Looking forward to your reply.
What is the default number of threads used by PaPILO? Is it 1 or the number of physical cores or the number of logical cores? I don't see the number of threads used listed in the console output.
Is PaPILO able to exploit SOS1 constraints? That is, is there a difference between the presolve reduction of a problem defined with SOS1 constraints and the presolve reduction of the same problem with its SOS1 constraints removed, assuming that both original problems are equivalent mathematically?
Ubuntu 20.10. Running cmake ..
all fine but I noticed boost/iostreams,serialization,program_options were not found. I installed them, reran cmake. Then ran it with -DCMAKE_BUILD_TYPE=Release
. Still successful. Then ran cmake.. -DCMAKE_BUILD_TYPE=Release -DCMAKE_VERBOSE_MAKEFILE=on
and got the below error.
Strangely, wiping out the build directory, and even re-cloning papilo and deinstalling the optional boost components did not help.
...
-- Found Boost: /usr/lib/x86_64-linux-gnu/cmake/Boost-1.74.0/BoostConfig.cmake (found version "1.74.0") found components: iostreams serialization program_options
-- Performing Test PAPILO_USE_BOOST_IOSTREAMS_WITH_ZLIB
-- Performing Test PAPILO_USE_BOOST_IOSTREAMS_WITH_ZLIB - Success
-- Performing Test PAPILO_USE_BOOST_IOSTREAMS_WITH_BZIP2
-- Performing Test PAPILO_USE_BOOST_IOSTREAMS_WITH_BZIP2 - Success
-- Linking solvers: SCIP
-- Found Boost: /usr/lib/x86_64-linux-gnu/cmake/Boost-1.74.0/BoostConfig.cmake (found version "1.74.0") found components: serialization program_options iostreams
-- Configuring done
CMake Error at binaries/CMakeLists.txt:53 (add_executable):
Target "papilo-executable" links to target "ZLIB::ZLIB" but the target was
not found. Perhaps a find_package() call is missing for an IMPORTED
target, or an ALIAS target is missing?
If oneTBB is installed on Ubuntu 18.04 (or another Linux distribution) in a custom directory (e.g. in my home directory or in /tmp, as is done in the example in the link below) will PaPILO find it automatically? If not, is it possible to tell PaPILO where oneTBB is installed during the build process?
===> Building for papilo-2.1.2
[ 9% 7/11] : && /usr/local/libexec/ccache/c++ -O2 -pipe -fstack-protector-strong -fno-strict-aliasing -O2 -pipe -fstack-protector-strong -fno-strict-aliasing -DNDEBUG -fstack-protector-strong binaries/CMakeFiles/duplicates.dir/__/src/duplicates.cpp.o -o bin/duplicates -Wl,-rpath,/usr/ports/math/papilo/work/.build:/usr/local/lib: libpapilo-core.so /usr/local/lib/libboost_iostreams.so /usr/local/lib/libboost_serialization.so /usr/local/lib/libboost_program_options.so /usr/local/lib/libboost_regex.so /usr/local/lib/libtbb.so.12.9 -lpthread /usr/local/lib/libgmp.so /usr/local/lib/libgmpxx.so && :
FAILED: bin/duplicates
: && /usr/local/libexec/ccache/c++ -O2 -pipe -fstack-protector-strong -fno-strict-aliasing -O2 -pipe -fstack-protector-strong -fno-strict-aliasing -DNDEBUG -fstack-protector-strong binaries/CMakeFiles/duplicates.dir/__/src/duplicates.cpp.o -o bin/duplicates -Wl,-rpath,/usr/ports/math/papilo/work/.build:/usr/local/lib: libpapilo-core.so /usr/local/lib/libboost_iostreams.so /usr/local/lib/libboost_serialization.so /usr/local/lib/libboost_program_options.so /usr/local/lib/libboost_regex.so /usr/local/lib/libtbb.so.12.9 -lpthread /usr/local/lib/libgmp.so /usr/local/lib/libgmpxx.so && :
ld: error: undefined symbol: papilo::SparseStorage<double>::SparseStorage(std::__1::vector<std::__1::tuple<int, int, double>, std::__1::allocator<std::__1::tuple<int, int, double>>>, int, int, bool, double, int)
>>> referenced by duplicates.cpp
>>> binaries/CMakeFiles/duplicates.dir/__/src/duplicates.cpp.o:(papilo::MpsParser<double>::loadProblem(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&))
ld: error: undefined symbol: papilo::SparseStorage<double>::getTranspose() const
>>> referenced by duplicates.cpp
>>> binaries/CMakeFiles/duplicates.dir/__/src/duplicates.cpp.o:(papilo::Problem<double>::setConstraintMatrix(papilo::SparseStorage<double>, std::__1::vector<double, std::__1::allocator<double>>, std::__1::vector<double, std::__1::allocator<double>>, std::__1::vector<papilo::Flags<papilo::RowFlag>, std::__1::allocator<papilo::Flags<papilo::RowFlag>>>, bool))
ld: error: undefined symbol: papilo::ConstraintMatrix<double>::ConstraintMatrix(papilo::SparseStorage<double>, papilo::SparseStorage<double>, std::__1::vector<double, std::__1::allocator<double>>, std::__1::vector<double, std::__1::allocator<double>>, std::__1::vector<papilo::Flags<papilo::RowFlag>, std::__1::allocator<papilo::Flags<papilo::RowFlag>>>)
>>> referenced by duplicates.cpp
>>> binaries/CMakeFiles/duplicates.dir/__/src/duplicates.cpp.o:(papilo::Problem<double>::setConstraintMatrix(papilo::SparseStorage<double>, std::__1::vector<double, std::__1::allocator<double>>, std::__1::vector<double, std::__1::allocator<double>>, std::__1::vector<papilo::Flags<papilo::RowFlag>, std::__1::allocator<papilo::Flags<papilo::RowFlag>>>, bool))
>>> referenced by duplicates.cpp
>>> binaries/CMakeFiles/duplicates.dir/__/src/duplicates.cpp.o:(papilo::Problem<double>::setConstraintMatrix(papilo::SparseStorage<double>, std::__1::vector<double, std::__1::allocator<double>>, std::__1::vector<double, std::__1::allocator<double>>, std::__1::vector<papilo::Flags<papilo::RowFlag>, std::__1::allocator<papilo::Flags<papilo::RowFlag>>>, bool))
c++: error: linker command failed with exit code 1 (use -v to see invocation)
[ 18% 7/11] : && /usr/local/libexec/ccache/c++ -O2 -pipe -fstack-protector-strong -fno-strict-aliasing -O2 -pipe -fstack-protector-strong -fno-strict-aliasing -DNDEBUG -fstack-protector-strong binaries/CMakeFiles/papilo-executable.dir/__/src/papilo.cpp.o -o bin/papilo -Wl,-rpath,/usr/ports/math/papilo/work/.build:/usr/local/lib: libpapilo-core.so /usr/local/lib/libsoplex.so.6.0.3.0 /usr/local/lib/libboost_iostreams.so /usr/local/lib/libboost_serialization.so /usr/local/lib/libboost_program_options.so /usr/local/lib/libboost_regex.so /usr/local/lib/libtbb.so.12.9 -lpthread /usr/lib/libz.so /usr/local/lib/libgmp.so /usr/local/lib/libgmpxx.so && :
FAILED: bin/papilo
: && /usr/local/libexec/ccache/c++ -O2 -pipe -fstack-protector-strong -fno-strict-aliasing -O2 -pipe -fstack-protector-strong -fno-strict-aliasing -DNDEBUG -fstack-protector-strong binaries/CMakeFiles/papilo-executable.dir/__/src/papilo.cpp.o -o bin/papilo -Wl,-rpath,/usr/ports/math/papilo/work/.build:/usr/local/lib: libpapilo-core.so /usr/local/lib/libsoplex.so.6.0.3.0 /usr/local/lib/libboost_iostreams.so /usr/local/lib/libboost_serialization.so /usr/local/lib/libboost_program_options.so /usr/local/lib/libboost_regex.so /usr/local/lib/libtbb.so.12.9 -lpthread /usr/lib/libz.so /usr/local/lib/libgmp.so /usr/local/lib/libgmpxx.so && :
ld: error: undefined symbol: papilo::Presolve<double>::addDefaultPresolvers()
>>> referenced by papilo.cpp
>>> binaries/CMakeFiles/papilo-executable.dir/__/src/papilo.cpp.o:(papilo::ResultStatus papilo::presolve_and_solve<double>(papilo::OptionsInfo const&, std::__1::unique_ptr<papilo::SolverFactory<double>, std::__1::default_delete<papilo::SolverFactory<double>>>, std::__1::unique_ptr<papilo::SolverFactory<double>, std::__1::default_delete<papilo::SolverFactory<double>>>))
ld: error: undefined symbol: papilo::Presolve<double>::apply(papilo::Problem<double>&, bool)
>>> referenced by papilo.cpp
>>> binaries/CMakeFiles/papilo-executable.dir/__/src/papilo.cpp.o:(papilo::ResultStatus papilo::presolve_and_solve<double>(papilo::OptionsInfo const&, std::__1::unique_ptr<papilo::SolverFactory<double>, std::__1::default_delete<papilo::SolverFactory<double>>>, std::__1::unique_ptr<papilo::SolverFactory<double>, std::__1::default_delete<papilo::SolverFactory<double>>>))
ld: error: undefined symbol: papilo::Presolve<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>::addDefaultPresolvers()
>>> referenced by papilo.cpp
>>> binaries/CMakeFiles/papilo-executable.dir/__/src/papilo.cpp.o:(papilo::ResultStatus papilo::presolve_and_solve<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>(papilo::OptionsInfo const&, std::__1::unique_ptr<papilo::SolverFactory<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>, std::__1::default_delete<papilo::SolverFactory<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>>>, std::__1::unique_ptr<papilo::SolverFactory<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>, std::__1::default_delete<papilo::SolverFactory<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>>>))
ld: error: undefined symbol: papilo::Presolve<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>::apply(papilo::Problem<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>&, bool)
>>> referenced by papilo.cpp
>>> binaries/CMakeFiles/papilo-executable.dir/__/src/papilo.cpp.o:(papilo::ResultStatus papilo::presolve_and_solve<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>(papilo::OptionsInfo const&, std::__1::unique_ptr<papilo::SolverFactory<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>, std::__1::default_delete<papilo::SolverFactory<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>>>, std::__1::unique_ptr<papilo::SolverFactory<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>, std::__1::default_delete<papilo::SolverFactory<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>>>))
ld: error: undefined symbol: papilo::Presolve<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>::addDefaultPresolvers()
>>> referenced by papilo.cpp
>>> binaries/CMakeFiles/papilo-executable.dir/__/src/papilo.cpp.o:(papilo::ResultStatus papilo::presolve_and_solve<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>(papilo::OptionsInfo const&, std::__1::unique_ptr<papilo::SolverFactory<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>, std::__1::default_delete<papilo::SolverFactory<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>>>, std::__1::unique_ptr<papilo::SolverFactory<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>, std::__1::default_delete<papilo::SolverFactory<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>>>))
ld: error: undefined symbol: papilo::Presolve<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>::apply(papilo::Problem<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>&, bool)
>>> referenced by papilo.cpp
>>> binaries/CMakeFiles/papilo-executable.dir/__/src/papilo.cpp.o:(papilo::ResultStatus papilo::presolve_and_solve<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>(papilo::OptionsInfo const&, std::__1::unique_ptr<papilo::SolverFactory<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>, std::__1::default_delete<papilo::SolverFactory<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>>>, std::__1::unique_ptr<papilo::SolverFactory<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>, std::__1::default_delete<papilo::SolverFactory<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>>>))
ld: error: undefined symbol: papilo::SparseStorage<double>::SparseStorage(std::__1::vector<std::__1::tuple<int, int, double>, std::__1::allocator<std::__1::tuple<int, int, double>>>, int, int, bool, double, int)
>>> referenced by papilo.cpp
>>> binaries/CMakeFiles/papilo-executable.dir/__/src/papilo.cpp.o:(papilo::MpsParser<double>::loadProblem(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&))
ld: error: undefined symbol: papilo::Postsolve<double>::undo(papilo::Solution<double> const&, papilo::Solution<double>&, papilo::PostsolveStorage<double>, bool) const
>>> referenced by papilo.cpp
>>> binaries/CMakeFiles/papilo-executable.dir/__/src/papilo.cpp.o:(void papilo::postsolve<double>(papilo::PostsolveStorage<double>&, papilo::Solution<double> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&))
>>> referenced by papilo.cpp
>>> binaries/CMakeFiles/papilo-executable.dir/__/src/papilo.cpp.o:(papilo::Validation<double>::can_reduced_solution_be_recalculated(papilo::Problem<double> const&, papilo::PostsolveStorage<double> const&, papilo::Solution<double> const&))
ld: error: undefined symbol: papilo::SparseStorage<double>::getTranspose() const
>>> referenced by papilo.cpp
>>> binaries/CMakeFiles/papilo-executable.dir/__/src/papilo.cpp.o:(papilo::Problem<double>::setConstraintMatrix(papilo::SparseStorage<double>, std::__1::vector<double, std::__1::allocator<double>>, std::__1::vector<double, std::__1::allocator<double>>, std::__1::vector<papilo::Flags<papilo::RowFlag>, std::__1::allocator<papilo::Flags<papilo::RowFlag>>>, bool))
>>> referenced by papilo.cpp
>>> binaries/CMakeFiles/papilo-executable.dir/__/src/papilo.cpp.o:(void papilo::ConstraintMatrix<double>::serialize<boost::archive::binary_iarchive>(boost::archive::binary_iarchive&, unsigned int))
ld: error: undefined symbol: papilo::ConstraintMatrix<double>::ConstraintMatrix(papilo::SparseStorage<double>, papilo::SparseStorage<double>, std::__1::vector<double, std::__1::allocator<double>>, std::__1::vector<double, std::__1::allocator<double>>, std::__1::vector<papilo::Flags<papilo::RowFlag>, std::__1::allocator<papilo::Flags<papilo::RowFlag>>>)
>>> referenced by papilo.cpp
>>> binaries/CMakeFiles/papilo-executable.dir/__/src/papilo.cpp.o:(papilo::Problem<double>::setConstraintMatrix(papilo::SparseStorage<double>, std::__1::vector<double, std::__1::allocator<double>>, std::__1::vector<double, std::__1::allocator<double>>, std::__1::vector<papilo::Flags<papilo::RowFlag>, std::__1::allocator<papilo::Flags<papilo::RowFlag>>>, bool))
>>> referenced by papilo.cpp
>>> binaries/CMakeFiles/papilo-executable.dir/__/src/papilo.cpp.o:(papilo::Problem<double>::setConstraintMatrix(papilo::SparseStorage<double>, std::__1::vector<double, std::__1::allocator<double>>, std::__1::vector<double, std::__1::allocator<double>>, std::__1::vector<papilo::Flags<papilo::RowFlag>, std::__1::allocator<papilo::Flags<papilo::RowFlag>>>, bool))
ld: error: undefined symbol: papilo::SparseStorage<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>::SparseStorage(std::__1::vector<std::__1::tuple<int, int, boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>, std::__1::allocator<std::__1::tuple<int, int, boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>>>, int, int, bool, double, int)
>>> referenced by papilo.cpp
>>> binaries/CMakeFiles/papilo-executable.dir/__/src/papilo.cpp.o:(papilo::MpsParser<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>::loadProblem(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&))
ld: error: undefined symbol: papilo::Postsolve<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>::undo(papilo::Solution<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>> const&, papilo::Solution<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>&, papilo::PostsolveStorage<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>, bool) const
>>> referenced by papilo.cpp
>>> binaries/CMakeFiles/papilo-executable.dir/__/src/papilo.cpp.o:(void papilo::postsolve<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>(papilo::PostsolveStorage<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>&, papilo::Solution<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&))
>>> referenced by papilo.cpp
>>> binaries/CMakeFiles/papilo-executable.dir/__/src/papilo.cpp.o:(papilo::Validation<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>::can_reduced_solution_be_recalculated(papilo::Problem<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>> const&, papilo::PostsolveStorage<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>> const&, papilo::Solution<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>> const&))
ld: error: undefined symbol: papilo::SparseStorage<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>::getTranspose() const
>>> referenced by papilo.cpp
>>> binaries/CMakeFiles/papilo-executable.dir/__/src/papilo.cpp.o:(papilo::Problem<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>::setConstraintMatrix(papilo::SparseStorage<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>, std::__1::vector<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>, std::__1::allocator<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>>, std::__1::vector<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>, std::__1::allocator<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>>, std::__1::vector<papilo::Flags<papilo::RowFlag>, std::__1::allocator<papilo::Flags<papilo::RowFlag>>>, bool))
>>> referenced by papilo.cpp
>>> binaries/CMakeFiles/papilo-executable.dir/__/src/papilo.cpp.o:(void papilo::ConstraintMatrix<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>::serialize<boost::archive::binary_iarchive>(boost::archive::binary_iarchive&, unsigned int))
ld: error: undefined symbol: papilo::ConstraintMatrix<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>::ConstraintMatrix(papilo::SparseStorage<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>, papilo::SparseStorage<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>, std::__1::vector<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>, std::__1::allocator<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>>, std::__1::vector<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>, std::__1::allocator<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>>, std::__1::vector<papilo::Flags<papilo::RowFlag>, std::__1::allocator<papilo::Flags<papilo::RowFlag>>>)
>>> referenced by papilo.cpp
>>> binaries/CMakeFiles/papilo-executable.dir/__/src/papilo.cpp.o:(papilo::Problem<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>::setConstraintMatrix(papilo::SparseStorage<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>, std::__1::vector<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>, std::__1::allocator<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>>, std::__1::vector<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>, std::__1::allocator<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>>, std::__1::vector<papilo::Flags<papilo::RowFlag>, std::__1::allocator<papilo::Flags<papilo::RowFlag>>>, bool))
>>> referenced by papilo.cpp
>>> binaries/CMakeFiles/papilo-executable.dir/__/src/papilo.cpp.o:(papilo::Problem<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>::setConstraintMatrix(papilo::SparseStorage<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>, std::__1::vector<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>, std::__1::allocator<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>>, std::__1::vector<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>, std::__1::allocator<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1>>>, std::__1::vector<papilo::Flags<papilo::RowFlag>, std::__1::allocator<papilo::Flags<papilo::RowFlag>>>, bool))
ld: error: undefined symbol: papilo::SparseStorage<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>::SparseStorage(std::__1::vector<std::__1::tuple<int, int, boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>, std::__1::allocator<std::__1::tuple<int, int, boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>>>, int, int, bool, double, int)
>>> referenced by papilo.cpp
>>> binaries/CMakeFiles/papilo-executable.dir/__/src/papilo.cpp.o:(papilo::MpsParser<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>::loadProblem(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&))
ld: error: undefined symbol: papilo::Postsolve<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>::Postsolve(papilo::Message, papilo::Num<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>)
>>> referenced by papilo.cpp
>>> binaries/CMakeFiles/papilo-executable.dir/__/src/papilo.cpp.o:(void papilo::postsolve<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>(papilo::PostsolveStorage<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>&, papilo::Solution<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&))
>>> referenced by papilo.cpp
>>> binaries/CMakeFiles/papilo-executable.dir/__/src/papilo.cpp.o:(papilo::Validation<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>::can_reduced_solution_be_recalculated(papilo::Problem<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>> const&, papilo::PostsolveStorage<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>> const&, papilo::Solution<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>> const&))
ld: error: undefined symbol: papilo::Postsolve<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>::undo(papilo::Solution<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>> const&, papilo::Solution<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>&, papilo::PostsolveStorage<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>, bool) const
>>> referenced by papilo.cpp
>>> binaries/CMakeFiles/papilo-executable.dir/__/src/papilo.cpp.o:(void papilo::postsolve<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>(papilo::PostsolveStorage<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>&, papilo::Solution<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&))
>>> referenced by papilo.cpp
>>> binaries/CMakeFiles/papilo-executable.dir/__/src/papilo.cpp.o:(papilo::Validation<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>::can_reduced_solution_be_recalculated(papilo::Problem<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>> const&, papilo::PostsolveStorage<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>> const&, papilo::Solution<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>> const&))
ld: error: undefined symbol: papilo::SparseStorage<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>::getTranspose() const
>>> referenced by papilo.cpp
>>> binaries/CMakeFiles/papilo-executable.dir/__/src/papilo.cpp.o:(papilo::Problem<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>::setConstraintMatrix(papilo::SparseStorage<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>, std::__1::vector<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>, std::__1::allocator<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>>, std::__1::vector<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>, std::__1::allocator<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>>, std::__1::vector<papilo::Flags<papilo::RowFlag>, std::__1::allocator<papilo::Flags<papilo::RowFlag>>>, bool))
>>> referenced by papilo.cpp
>>> binaries/CMakeFiles/papilo-executable.dir/__/src/papilo.cpp.o:(void papilo::ConstraintMatrix<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>::serialize<boost::archive::binary_iarchive>(boost::archive::binary_iarchive&, unsigned int))
ld: error: undefined symbol: papilo::ConstraintMatrix<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>::ConstraintMatrix(papilo::SparseStorage<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>, papilo::SparseStorage<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>, std::__1::vector<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>, std::__1::allocator<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>>, std::__1::vector<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>, std::__1::allocator<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>>, std::__1::vector<papilo::Flags<papilo::RowFlag>, std::__1::allocator<papilo::Flags<papilo::RowFlag>>>)
>>> referenced by papilo.cpp
>>> binaries/CMakeFiles/papilo-executable.dir/__/src/papilo.cpp.o:(papilo::Problem<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>::setConstraintMatrix(papilo::SparseStorage<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>, std::__1::vector<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>, std::__1::allocator<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>>, std::__1::vector<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>, std::__1::allocator<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>>, std::__1::vector<papilo::Flags<papilo::RowFlag>, std::__1::allocator<papilo::Flags<papilo::RowFlag>>>, bool))
>>> referenced by papilo.cpp
>>> binaries/CMakeFiles/papilo-executable.dir/__/src/papilo.cpp.o:(papilo::Problem<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>::setConstraintMatrix(papilo::SparseStorage<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>, std::__1::vector<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>, std::__1::allocator<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>>, std::__1::vector<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>, std::__1::allocator<boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, (boost::multiprecision::expression_template_option)1>>>, std::__1::vector<papilo::Flags<papilo::RowFlag>, std::__1::allocator<papilo::Flags<papilo::RowFlag>>>, bool))
c++: error: linker command failed with exit code 1 (use -v to see invocation)
Version: 2.1.2
clang-15
FreeBSD 13.2
What is the cmake flag ("-DORTOOLS_DIR=" ?) to specify the location of OR-Tools when trying to build PaPILO with OR-Tools in order to use GLOP and PDLP? Will CP-SAT also be added as a possible OR-Tools solver integrated with PaPILO? CP-SAT can solve pure integer linear programs.
mkdir build
cd build
cmake -DORTOOLS_DIR=PATH_TO_ORTOOLS_BUILD_DIR ..
make
Hi, I'm trying to use the C API found in src/papilolib.h, but this includes "papilolib_export.h" which I can't find anywhere. Without it PAPILOLIB_EXPORT is not defined.
I've build papilo using the basic build instructions
mkdir build
cd build
cmake ..
make
Is using the API in src/papilolib.h supported, and if yes how do I obtain/create papilolib_export.h?
Why isn't PaPILO v2.1.0, which is provided with SCIP v8.0.1 beta, tagged? https://www.scipopt.org/
Is the corrected dual solution, obtained for a presolved problem, a lower bound for the original problem? If the solution to the presolved problem is y, then let r = c-A^T*y be the reduced costs, where c and A are defined for the presolved problem. The corrected dual solution is obtained by evaluating the dual objective defined here: https://developers.google.com/optimization/lp/pdlp_math#dual
I am interested in obtaining a tight lower bound of the original problem. I do not believe PaPILO is able to save off the dual solution, so I cannot evaluate the corrected dual solution from the postsolved solution.
There is a C implementation of the LP method PDLP that runs on an Nvidia GPU. Are there plans to integrate/link this GPU LP solver into PaPILO?
https://arxiv.org/abs/2311.12180
https://github.com/jinwen-yang/cuPDLP.jl
https://github.com/COPT-Public/cuPDLP-C
Perhaps the program duplicates
could be renamed to papilo_duplicates
which would make it easier to distinguish from other similarly named programs.
What is the correct way to account for an available dual solution when manually solving the presolved instance? I'm writing a .mps
file, calling presolve
, and then solve the resulting problem (using JuMP -> HiGHS
). I then write a .sol
file with the extracted (primal) values of all variables
x 0.3
...
z -1.2
and call postsolve
on that, which gives me
=obj= 1234.00
x ... obj(0.0)
...
I assume the obj(...)
is "only" the objective coefficient (based on an information from SCIP: (obj: <objective coefficient of variable>)
). I've provided parameters using -p lp_presolvers_with_basis.set
.
/usr/ports/math/papilo/work/papilo-2.1.2/src/papilo/interfaces/HighsInterface.hpp:97:13: error: no member named 'a_index_' in 'HighsLp'
model.a_index_.resize( consMatrix.getNnz() );
~~~~~ ^
/usr/ports/math/papilo/work/papilo-2.1.2/src/papilo/interfaces/HighsInterface.hpp:98:13: error: no member named 'a_value_' in 'HighsLp'
model.a_value_.resize( consMatrix.getNnz() );
~~~~~ ^
/usr/ports/math/papilo/work/papilo-2.1.2/src/papilo/interfaces/HighsInterface.hpp:99:13: error: no member named 'a_start_' in 'HighsLp'
model.a_start_.resize( ncols + 1 );
~~~~~ ^
/usr/ports/math/papilo/work/papilo-2.1.2/src/papilo/interfaces/HighsInterface.hpp:100:13: error: no member named 'a_start_' in 'HighsLp'
model.a_start_[ncols] = consMatrix.getNnz();
~~~~~ ^
/usr/ports/math/papilo/work/papilo-2.1.2/src/papilo/interfaces/HighsInterface.hpp:130:16: error: no member named 'a_start_' in 'HighsLp'
model.a_start_[i] = start;
~~~~~ ^
/usr/ports/math/papilo/work/papilo-2.1.2/src/papilo/interfaces/HighsInterface.hpp:134:19: error: no member named 'a_value_' in 'HighsLp'
model.a_value_[start + k] = double( colvals[k] );
~~~~~ ^
/usr/ports/math/papilo/work/papilo-2.1.2/src/papilo/interfaces/HighsInterface.hpp:135:19: error: no member named 'a_index_' in 'HighsLp'
model.a_index_[start + k] = colrows[k];
~~~~~ ^
/usr/ports/math/papilo/work/papilo-2.1.2/src/papilo/interfaces/HighsInterface.hpp:193:13: error: no member named 'a_index_' in 'HighsLp'
model.a_index_.resize( component.nnonz );
~~~~~ ^
/usr/ports/math/papilo/work/papilo-2.1.2/src/papilo/interfaces/HighsInterface.hpp:194:13: error: no member named 'a_value_' in 'HighsLp'
model.a_value_.resize( component.nnonz );
~~~~~ ^
/usr/ports/math/papilo/work/papilo-2.1.2/src/papilo/interfaces/HighsInterface.hpp:195:13: error: no member named 'a_start_' in 'HighsLp'
model.a_start_.resize( numcols + 1 );
~~~~~ ^
/usr/ports/math/papilo/work/papilo-2.1.2/src/papilo/interfaces/HighsInterface.hpp:196:13: error: no member named 'a_start_' in 'HighsLp'
model.a_start_[numcols] = component.nnonz;
~~~~~ ^
Version: 2.1.2
coin-or-highs-1.5.1
clang-15
FreeBSD 13.2
Hi, for testing purpose I installed Arch WSL that always have latest version of libraries in linux. I installed some required packages and compiled IPOPT without any problem. Then, I moved on SCIP and started compiling from Papilo. I directly pulling github files with clone command.
log1.txt file is output of "cmake .." command.
log2.txt file is output of "make -j12" command.
I also attaching CMake log files.
CMakeError.log
CMakeOutput.log
I think these files will be helpful to identify error.
Are you planning to make a release for PaPILO v2.1.3, which is provided with SCIP v8.0.4? https://scipopt.org/
papilo/src/papilo/core/Presolve.hpp
Line 1152 in 2836a3d
for( ; k != static_cast<int>( reds.size() ); ++k )
{
result = probUpdate.applyTransaction( &reds[k], &reds.data()[k + 1] );
reds.data()[k+1] is clearly out of bounds in the last iteration of this loop. If compiled with Visual C++ in debug mode, an assert will be triggered within th VC++ implementation of std::vector.
Building SCIPOptSuite from source with this recipe, and also when that recipe is updated to use version 8.0.0
, compilation fails on my end with the following two errors:
/[…]/scipoptsuite-8.0.0/papilo/src/papilo/presolvers/SimplifyInequalities.hpp:144:21: error: ‘gcd’ is not a member of ‘boost’
144 | return boost::gcd( static_cast<int64_t>( val1 ),
/[…]/scipoptsuite-8.0.0/papilo/src/papilo/presolvers/SimplifyInequalities.hpp:164:21: error: ‘gcd’ is not a member of ‘boost’
164 | return boost::gcd( static_cast<int64_t>( val1 * multiplier ),
This is on Arch Linux (rolling, last full update today).
Replacing both occurences of boost::gcd
with boost::integer::gcd
appears to resolve this issue for me (i.e. the build of papilo-core
succeeds, though there is now a new error in a different part of SCIPOptSuite).
... to resolve the circular dependencies scip -> papilo -> scip and soplex -> papilo -> soplex.
Using Papilo 2.2.0 with only col singleton enabled I got an issue when reducing this problem.
It should be trivally reduced to 0 but instead it is trivially reduced to -10:
Minimize
obj: 100000 x1 + 100000 x2
Subject To
c1: - 0.000555555555555556 x1 + 0.000555555555555556 x2
- 0.000555555555555556 x3 + 0.000555555555555556 x4 = 0
Bounds
0 <= x3 <= 0.0001
0 <= x4 <= 0.0001
End
ttt1.zip
Attached is a zip file containing the lp file, mps file and params for papilo cli.
I can reproduced it with older versions of papilo (2.1.0) at least
While trying to presolve instances from the MIPLIB collection and found that instance supportcase21i
https://miplib.zib.de/instance_details_supportcase21i.html
with command papilo presolve -f supportcase21i.mps
returns the error unknown bound type INDICATORS
From these references it seems that this is not part of the standard mps format and I don't need the exact structure of the problem instance, so ignoring the INDICATORS section in the mps file would work for me, but I was wondering if Papilo has a better way of handling this.
https://www-eio.upc.es/lceio/manuals/cplex-11/html/reffileformatscplex/reffileformatscplex15.html
https://documentation.aimms.com/platform/solvers/cplex.html#cplex-indicator-constraints
Thanks in advance!
Full output:
PaPILO version 2.1.2 [mode: optimized][Solvers: SCIP,SoPlex][GitHash: 2fe2543]
Copyright (C) 2020-2022 Zuse Institute Berlin (ZIB)
External libraries:
Boost 1.76.0 (https://www.boost.org/)
TBB Thread building block https://github.com/oneapi-src/oneTBB developed by Intel
GMP 6.2.0 GNU Multiple Precision Arithmetic Library developed by T. Granlund (gmplib.org)
SCIP 8.0.3 Mixed Integer Programming Solver developed at Zuse Institute Berlin (scip.zib.de) [GitHash: 62fab8a2e3]
SoPlex 6.0.3 Linear Programming Solver developed at Zuse Institute Berlin (soplex.zib.de) [GitHash: f900e3d0]
unknown bound type INDICATORS
Have you considered integrating PaPILO with COPT? COPT is competitive with Gurobi according to the benchmarks linked below. At least for now, COPT has a generous license.
Benchmarks: https://plato.asu.edu/bench.html
COPT software: https://github.com/COPT-Public/COPT-Release
COPT license: https://www.shanshu.ai/copt/
COPT user guide: https://guide.coap.online/copt/en-doc/index.html
This is due to boost auto linking:
Not sure which compilers are affected. I'm using MSVC and Papilo 2.2.0.
Workaround:
removing those includes in the for files mentioned above worked for me. Not sure whether there are cases they are needed.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.