Implementation of different Block for the Satellite Constellation Design
Problem (SCDP) for the minimization of the number of satellites in the
constellation or of the sum of the maximum revisit times per target. In the
continuous case these are SatelliteBlock, SingleTargetBlock,
MultiTargetBlock (with its MultiTargetBlockv2 variant) and the
ConstellationBlock that aggregates them, together with the SatelliteSolver
that solves a SatelliteBlock by inspection; in the discrete case, where the
observability threshold of each satellite takes one of finitely many levels,
they are DiscreteSatelliteBlock and DiscreteConstellationBlock, together
with the DiscreteSatelliteSolver. The two Solver are meant for the
sub-problems of a Lagrangian decomposition of the corresponding
constellation, e.g., by the LagrangianDualSolver.
Two small instances, one for the constellation Blocks and one for
MultiTargetBlock, are in data/txt.
The formulations implemented here are described in the working papers "A MILP approach to minimize the average of maximum revisit times in small satellite constellation design problems" and "On the Lagrangian relaxation for the satellite constellation design problem" by L. Mencarelli (2025).
These instructions will let you build the SatellitesBlock module on
your system.
The channels that distribute SMS++ are listed in its installation guide; what follows is about building the module yourself.
- The SMS++ core library and its requirements.
Configure and build the library with:
mkdir build
cd build
cmake ..
cmake --build .The library has the same configuration options of SMS++.
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(SatellitesBlock)
target_link_libraries(<my_target> SMS++::SatellitesBlock)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.
Each executable using SatellitesBlock has to include a "main makefile" of
the module, which typically is either makefile-c including all
necessary libraries comprised the "core SMS++" one, or
makefile-s including all necessary libraries but not the "core
SMS++" one (for the common case in which this is used together with other
modules that already include them). These 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.
- Luca Mencarelli
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.