A production scheduling application for the Hybrid Flow Shop problem with sequence-dependent setup times (SDST) and learning effects.
The project combines:
- a JavaFX UI layer for instance definition and result presentation,
- a Python optimization engine,
- JSON-based data exchange through
data/andresults/.
The main objective is to minimize
The addressed problem is HFS-SDST:
- HFS (Hybrid Flow Shop): jobs pass through consecutive production stages, with multiple parallel machines available at each stage.
- SDST (Sequence-Dependent Setup Times): setup time depends on the order of jobs.
- Learning effect: processing times may decrease with the job position in the sequence.
In practice, this is a complex combinatorial optimization problem where schedule quality depends on both job sequencing and machine assignment.
- Java 17 - desktop application and UI logic.
- JavaFX 21.0.1 - user interface and result visualization.
- Maven 3.6+ - Java module build system.
- Python 3.8+ - optimization engine.
- Matplotlib - Gantt chart generation.
- Pytest - unit testing for the Python module.
Hybrid-Flow-Shop-Solver/
├── start.bat
├── README.md
├── Demo_Ui/
│ ├── README.md
│ └── javafx-ui/
├── Python/
│ ├── README.md
│ ├── TESTING.md
│ ├── main.py
│ ├── algorithms/
│ ├── core/
│ ├── utils/
│ └── tests/
├── data/
│ └── README.md
└── results/
Module documentation:
- UI: Demo_Ui/README.md
- Python backend: Python/README.md
- Python tests: Python/TESTING.md
- Input data: data/README.md
- Greedy MSTF - fast baseline heuristic.
- Tabu Search - metaheuristic with a strong quality/time tradeoff.
- Branch and Bound - exact method, recommended for small instances.
- Java 17+
- Maven 3.6+
- Python 3.8+
From the project root:
start.batThe startup script prepares the environment and launches the application.
- Install Python dependencies:
cd Python
pip install -r requirements.txt
cd ..- Start the JavaFX interface:
cd Demo_Ui/javafx-ui
mvn clean javafx:run- The user defines a problem instance in the UI.
- The UI writes input to
data/input_<timestamp>.json. - The Python module runs optimization.
- The result is written to
results/result.json. - The UI presents metrics and a Gantt chart.
Input example (JSON):
{
"algorithm": "tabu",
"num_stages": 2,
"num_jobs": 3,
"machines_per_stage": [1, 2],
"learning_coeff": 0.15,
"learning_stages": "10",
"processing_times": [...],
"setup_times": [...]
}Output example (JSON):
{
"time_in_ms": 3123,
"Algorithm": "Tabu Search",
"C_max": 101.48,
"gant_diagram": "<path-to-png>",
"schedule": [...]
}- Up to around 10 jobs: Branch and Bound can be considered.
- Medium instances: Tabu Search is usually the best compromise.
- Large instances: use Greedy for fast feasible solutions.
Unit test coverage is 94% for optimization-related code (Branch and Bound, Greedy, Tabu Search) and key domain classes (Job, Machine, Schedule).
Quick command:
cd Python
python -m pytest tests -vDetailed testing and coverage guide: Python/TESTING.md.
Bartłomiej Adam Kuk
Politechnika Wrocławska, Wydział Informatyki i Telekomunikacji
Project prepared as part of an engineering thesis.