This repository contains a docker stack for the PACE Challenge 2025, consisting of four containers; one for each problem and track. The evaluation of all solvers will take place within this environment to ensure fairness. To be precise, we provide one core and 16 GB of RAM for all solvers.
This repository contains a small demo solver and a small set of test instances for both problems.
First of all, install docker and the docker compose plugin on your machine if not already present. We recommend to use Docker Desktop which contains everything you need and is easy to install. However, note that the commercial use of Docker Desktop for larger enterprises requires a paid subscription.
Afterwards, build the docker images using the following command.
docker compose buildFinally, you can start the evaluation process for all tracks by using the following command.
docker compose upThis starts the execution of four containers (one for each combination of problem and track) and evaluates a demo solver. Each container terminates once the evaluation process has finished.
You can also start the execution of a single container by using the following command instead.
docker compose up [name]where [name] is one of the following elements reflecting the problem and track: ds-exact, ds-heuristic, hs-exact, hs-heuristic.
If the process succeeded, find the output directory containing a .csv file for each track. This file contains the results of the evaluation process, including the status per instance (ok, exception, ...), the runtime, the solution size, and possibly an error message.
You are now ready to install your own solver.
If you would like to replace the demo solver, you need to modify some things. First clone this repository. Then:
-
If your solver is provided as an executable file, e.g., a python script, an executable jar or a static binary, simply replace our demo solver in the respective
solverdirectory. Finally, you need to adjust the respectiveSOLVER_CMDfield in thedocker-compose.yamlto specify how to execute your solver. In our demo case, the solver is a python script which is executed py runningpython3 ds_greedy.py, hence theSOLVER_CMDis set to"python3,/solver/ds_greedy.py". Observe that the comma serves as a delimeter. -
If you want to build your solver from source, copy your source folder into the respective
solverdirectory. Afterwards, you need to modify the respectiveDockerfiledepending on the installation process of your solver. In eachDockerfile, you will find a comment at the place you need to modify. We provide some examples.- If you need to execute a make file, add the line
RUN makeinto theDockerfile. It might be the case that you need to make the files executable, eg by runningchmod 777. - If you need to compile a
.cppsource file usingg++add the lineRUN g++ -O2 -std=c++17 solver.cpp -o solverinto theDockerfile. - If you need to compile a
.javasource file usingjavac, add the lineRUN javac solver.javainto theDockerfile.
In case you need to install third-party dependencies, we recommend the use of different build stages in order to reduce the size of the image. We refer to multi-stage-builds for further explanation.
Finally, you need to adjust the
SOLVER_CMDfield in thedocker-compose.yamlas in the first case. - If you need to execute a make file, add the line
This project contains only three test instances per track in the instances directory. If you want to run the evaluation process on other instances, simply replace (or add) your instances into the instances folder.
For example, you can find the official set of public instances for PACE 2025 also on Github. Note that the folder structure in the instance repository matches the one required here.
The docker compose file docker-compose.yaml specifies the configuration for each track. This includes resource limitations and the specification of time limits. In particular, we allow only one core and 16GB of RAM for each track. For heuristic solvers, we allow 5 minutes before sending a SIGTERM signal with a mercy time of 25 seconds (that is, the time before your solver is killed after sending SIGTERM), while we allow 30 minutes for exact solvers with a mercy time of 30 seconds.
This configuration reflects exactly the configuration we will use for the final evaluation of the submitted solvers. However, you can modify the resource limitations by editing the cpus and memory values for each track. Similarly, you can modify the mentioned time limits by editing MAX_TIME and MERCY_TIME values for each track.
Copyright 2025 Mario Grobler
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
A big “Thank You” goes to Yannik (Putzzmunta) for assisting with the docker setup.