SMS++ is a set of C++ classes intended to provide a system for modeling complex, block-structured mathematical models (in particular, but not exclusively, single-real-objective optimization problems), and solving them via sophisticated, structure-exploiting algorithms (in particular, but not exclusively, decomposition approaches and structured Interior-Point methods).
For further information on the SMS++ Project and the SMS++ core library, you can see:
Note: This is the repository of the SMS++ core library. If you are looking for the SMS++ Project repository, you will find it here.
These instructions will let you build and install SMS++ on your system. If you encounter issues, see the troubleshooting section.
For further details on software dependencies, see this page. If you can't or won't install the required libraries, you will need to specify their custom path, see here.
Configure and build the library with:
mkdir build
cd build
cmake ..
cmake --build .Some configuration options are available, see here.
Optionally, install the library in the system with:
cmake --install .After the library is built, you can use it in your CMake project with:
find_package(SMS++)
target_link_libraries(<my_target> SMS++::SMS++)Some unit tests will be built with the library. Launch ctest from
the build directory to run them. To disable them, set the option
BUILD_TESTING to OFF.
Note: The test
AbstractPath_testmay take 10 minutes or more.
Carefully hand-crafted makefiles have also been developed for those unwilling to use CMake. Makefiles build the executable in-source (in the same directory tree where the code is) as opposed to out-of-source (in the copy of the directory tree constructed in the build/ folder) and therefore it is more convenient when having to recompile often, such as when developing/debugging a new module, as opposed to the compile-and-forget usage envisioned by CMake.
A makefile for building the "core" SMS++ library in available in
SMS++/lib/makefile-libThe makefile allow to choose the compiler name and the optimization/debug,
and builds the lib/libSMS++ library that can be linked upon. This is
useful for compile-and-forget of a stable version of the "core" SMS++
library. Alternatively, the
SMS++/lib/makefile-incfile is provided for allowing external makefiles to ensure that the library
is up-to-date, which is useful in case one is actually developing it. Each
executable using SMS++ will necessarily have to include one of those for
the "core" SMS++, plus that of the other modules required to model and solve
some specific optimization problems (the "core" SMS++ itself does not provide
a ton of useful :Block and :Solver, but it does provide the "plumbing"
for developing problem-specific ones). In fact, typically the makefiles for
the other modules already include those for the "core" SMS++ (but there is
a difference between makefile-c and makefile-s, check the individual
modules) so that one does not have to do it at the level of the "main
makefile". The simplest way to learn how to use it is to check e.g. the
makefiles of the modules in the System Test
repository. The makefiles in turn
recursively include all the required other makefiles, hence one should
only need to edit the "main makefile" for compilation type (C++ compiler
and its options) and it all should be good to go. In case some of the
external libraries are not at their default location, it should only be
necessary to create the ../extlib/makefile-paths out of the
extlib/makefile-default-paths-* for your OS * and edit the relevant
bits (commenting out all the rest).
Check the SMS++ installation wiki for further details.
If you need support, you want to submit bugs or propose a new feature, you can open a new issue.
Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting merge requests to us.
-
Antonio Frangioni
Dipartimento di Informatica
Università di Pisa -
Rafael Durbano Lobato
Dipartimento di Informatica
Università di Pisa
-
Kostas Tavlaridis-Gyparakis
Dipartimento di Informatica
Università di Pisa -
Utz-Uwe Haus
Cray EMEA Research Lab -
Niccolò Iardella
Dipartimento di Informatica
Università di Pisa
This code is provided free of charge under the GNU Lesser General Public License version 3.0 - see the LICENSE file for details.
The code is currently provided free of charge under an open-source license. As such, it is provided "as is", without any explicit or implicit warranty that it will properly behave or it will suit your needs. The Authors of the code cannot be considered liable, either directly or indirectly, for any damage or loss that anybody could suffer for having used it. More details about the non-warranty attached to this code are available in the license description file.
For a list of contributions to the development of this module, see the corresponding section in the SMS++ umbrella project
