File size: 2,149 Bytes
79deb5f
50f82a1
 
 
 
79deb5f
50f82a1
79deb5f
 
50f82a1
79deb5f
 
50f82a1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
---
title: Maintenance Scheduling (Python)
emoji: 🔧
colorFrom: gray
colorTo: green
sdk: docker
app_port: 8080
pinned: false
license: apache-2.0
short_description: SolverForge Maintenance Scheduling problem
---

# Maintenance Scheduling (Python)

Assign maintenance jobs to crews and schedule them over time, avoiding conflicts and meeting deadlines.

- [Prerequisites](#prerequisites)
- [Run the application](#run-the-application)
- [Test the application](#test-the-application)

## Prerequisites

1. Install [Python 3.10, 3.11 or 3.12](https://www.python.org/downloads/).

2. Install JDK 17+, for example with [Sdkman](https://sdkman.io):
    ```sh
    $ sdk install java
    ```

## Run the application

1. Git clone the solverforge-quickstarts repo and navigate to this directory:
   ```sh
   $ git clone https://github.com/SolverForge/solverforge-quickstarts.git
   ...
   $ cd solverforge-quickstarts/fast/maintenance-scheduling-fast
   ```

2. Create a virtual environment:
   ```sh
   $ python -m venv .venv
   ```

3. Activate the virtual environment:
   ```sh
   $ . .venv/bin/activate
   ```

4. Install the application:
   ```sh
   $ pip install -e .
   ```

5. Run the application:
   ```sh
   $ run-app
   ```

6. Visit [http://localhost:8080](http://localhost:8080) in your browser.

7. Click on the **Solve** button.

## Problem Description

The maintenance scheduling problem assigns maintenance jobs to crews over a planning period while respecting constraints:

### Hard Constraints
- **Crew conflict**: A crew can only work on one job at a time
- **Min start date**: Jobs cannot start before their ready date
- **Max end date**: Jobs must complete before their deadline

### Soft Constraints
- **Before ideal end date**: Slight penalty for finishing too early (maintenance cycles restart sooner)
- **After ideal end date**: Heavy penalty for finishing late (risk of missing deadline)
- **Tag conflict**: Avoid scheduling jobs with the same tag (e.g., same area) at overlapping times

## Test the application

1. Run tests:
   ```sh
   $ pytest
   ```

## More information

Visit [solverforge.org](https://www.solverforge.org).