/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* */
/* This file is part of the program and library */
/* PaPILO --- Parallel Presolve for Integer and Linear Optimization */
/* */
/* Copyright (C) 2020-2022 Konrad-Zuse-Zentrum */
/* fuer Informationstechnik Berlin */
/* */
/* This program 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 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 Lesser General Public License for more details. */
/* */
/* You should have received a copy of the GNU Lesser General Public License */
/* along with this program. If not, see . */
/* */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#ifndef _PAPILO_MISC_VERSION_LOGGER_HPP_
#define _PAPILO_MISC_VERSION_LOGGER_HPP_
#include "papilo/core/Presolve.hpp"
#include "papilo/core/postsolve/Postsolve.hpp"
#include "papilo/io/MpsParser.hpp"
#include "papilo/io/MpsWriter.hpp"
#include "papilo/io/SolParser.hpp"
#include "papilo/io/SolWriter.hpp"
#include "papilo/misc/NumericalStatistics.hpp"
#include "papilo/misc/OptionsParser.hpp"
#ifdef PAPILO_TBB
#include "papilo/misc/tbb.hpp"
#endif
#ifdef PAPILO_HAVE_SOPLEX
#include "soplex.h"
#include "soplex/spxgithash.h"
#endif
#ifdef PAPILO_HAVE_SCIP
#include "scip/scipgithash.h"
#endif
#ifdef PAPILO_HAVE_GLOP
#include "ortools/base/version.h"
#endif
#include
#include
#include
#include
#include
#include
namespace papilo
{
void
join( const Vec& v, char c, std::string& s )
{
s.clear();
for( auto p = v.begin(); p != v.end(); ++p )
{
s += *p;
if( p != v.end() - 1 )
s += c;
}
}
void
print_header()
{
std::string mode = "optimized";
#ifndef NDEBUG
mode = "debug";
#endif
Vec list_of_solvers;
std::string solvers = "";
#ifdef PAPILO_HAVE_HIGHS
list_of_solvers.push_back( "HiGHS" );
#endif
#ifdef PAPILO_HAVE_SCIP
list_of_solvers.push_back( "SCIP" );
#endif
#ifdef PAPILO_HAVE_GUROBI
list_of_solvers.push_back( "Gurobi" );
#endif
#ifdef PAPILO_HAVE_GLOP
list_of_solvers.push_back( "Ortools" );
#endif
#ifdef PAPILO_HAVE_SOPLEX
list_of_solvers.push_back( "SoPlex" );
#endif
if( list_of_solvers.empty() )
solvers = "none";
else
join( list_of_solvers, ',', solvers );
#ifdef PAPILO_GITHASH_AVAILABLE
fmt::print( "PaPILO version {}.{}.{} [mode: {}][Solvers: {}][GitHash: {}]\n",
PAPILO_VERSION_MAJOR, PAPILO_VERSION_MINOR, PAPILO_VERSION_PATCH,
mode, solvers, PAPILO_GITHASH );
#else
fmt::print( "PaPILO version {}.{}.{} [mode: {}][Solvers: {}][GitHash: ]\n",
PAPILO_VERSION_MAJOR, PAPILO_VERSION_MINOR, PAPILO_VERSION_PATCH,
mode, solvers );
#endif
fmt::print( "Copyright (C) 2020-2022 Zuse Institute Berlin (ZIB)\n" );
fmt::print( "\n" );
fmt::print( "External libraries: \n" );
#ifdef BOOST_FOUND
fmt::print( " Boost {}.{}.{} \t (https://www.boost.org/)\n",
BOOST_VERSION_NUMBER_MINOR( BOOST_VERSION ),
BOOST_VERSION_NUMBER_PATCH( BOOST_VERSION ) / 100,
BOOST_VERSION_NUMBER_MAJOR( BOOST_VERSION ) );
#endif
#ifdef PAPILO_TBB
// TODO: TBB is missing not able to retrieve version
fmt::print( " TBB \t Thread building block https://github.com/oneapi-src/oneTBB developed by Intel\n");
#endif
#ifdef PAPILO_HAVE_GMP
fmt::print( " GMP {} \t GNU Multiple Precision Arithmetic Library "
"developed by T. Granlund (gmplib.org)\n",
GMP_VERSION );
#endif
#ifdef PAPILO_HAVE_HIGHS
// TODO: add Highs Solver -> waiting for official release
fmt::print( " HiGHS {} \t high performance software "
"for linear optimization (https://www.maths.ed.ac.uk/hall/HiGHS/) [GitHash: {}]\n" , "pre-release",
"TBD");
#endif
//TODO
#ifdef PAPILO_HAVE_GLOP
fmt::print( " ORTOOLS {}.{} \t fast and portable software for combinatorial optimization developed by Google.\n" ,
operations_research::OrToolsMajorVersion(), operations_research::OrToolsMinorVersion() );
#endif
#ifdef PAPILO_HAVE_SCIP
fmt::print( " SCIP {}.{}.{} \t Mixed Integer Programming Solver "
"developed at Zuse "
"Institute Berlin (scip.zib.de) [GitHash: {}]\n",
SCIP_VERSION_MAJOR, SCIP_VERSION_MINOR, SCIP_VERSION_PATCH,
SCIPgetGitHash() );
#endif
#ifdef PAPILO_HAVE_GUROBI
fmt::print( " Gurobi \t Gurobi Optimizer \n" );
#endif
#ifdef PAPILO_HAVE_SOPLEX
fmt::print(
" SoPlex {}.{}.{} \t Linear Programming Solver developed at Zuse "
"Institute Berlin (soplex.zib.de) [GitHash: {}]\n",
SOPLEX_VERSION / 100, ( SOPLEX_VERSION % 100 ) / 10, SOPLEX_VERSION % 10,
soplex::getGitHash() );
#endif
fmt::print( "\n" );
}
} // namespace papilo
#endif