This data set contains the solver and constraint programming models that were proposed in the conference paper:
"A Two-Stage Constraint Programming Approach for Artificial Teeth Scheduling", Felix Winter, CP 2026 (https://cp2026.a4cp.org/)

=======================
Folder structure:
=======================
- 2stage_solver.py: The main python file to run the 2 stage solver approach
- stage1/: Folder containing scripts, instances, cp models, and the column generation solver for stage 1
- stage2/: Folder containing scripts, instances, cp models for stage 2
- results/: Summarized experimental results that are discussed in the paper
- configs/: Folder containing configuration templates that can be used with the 2stage_solver.py script

=======================
Requirements:
=======================
The solver needs the following software installed:
- Python >= 3.11 (https://www.python.org/)
- MiniZinc >= 2.9.5 (https://www.minizinc.org/) (MiniZinc commands must be in PATH environment variable).
- Gurobi >= 9 (https://www.gurobi.com/), and the gurobipy python package


NOTE: The provided configurations assume a MiniZinc installation with a solver registered under the tag cp-sat (e.g., OR-Tools CP-SAT).
If this solver is not available in the local environment, the configuration must be adapted to an installed MiniZinc backend such as gecode or chuffed to ensure successful execution of the pipeline.

=======================
Run the 2-stage solver:
=======================

To start the two-stage solver approach, use the following command:

python 2stage_solver.py -i <Input.json> -t <timelimit_msecs> -c <config.json>

An example call using instance1, a 30-second time limit, and the template config would be:

python 2stage_solver.py -i stage1/instances/instance1.json -t 30000 -c configs/config-cp-template.json

=======================
Contact:
=======================
Feel free to contact me in case of questions:
felix.winter@tuwien.ac.at