It Purple Hack
- Support MS Project .xml file format
- Tasks and task groups
- 3 kinds of schedule optimizations:
- by min duration
- by min cost
- by min resources
- MultiOptimization - sequential optimization by different combinations (e.g. cost, then duration) (EXTRA FEATURE)
- Multi skills per resources, e.g. when SA can work on analysis & development (EXTRA FEATURE)
- Fixed assignments, e.g. Only specific worker should perform a specific task (EXTRA FEATURE)
- Weighted optimization -> specify weights on cost, duration, resources (EXTRA FEATURE)
- Configure different profile to run: either draft solution or fine-tuned (EXTRA FEATURE)
- Hardware constraints, e.g. max 4 cpu to use (EXTRA FEATURE)
- nice cli & outputs :)
export PYTHONPATH=<hack-it-purple-2024 directory>python main.py -i "./inputs/new/исходные данные.xml" -o ./results/duration.xml -m durationConsole output for duration
[('2', 40, 'Аналитика', []),
('3', 80, 'Разработка', [0]),
('4', 40, 'Тестирование', [1]),
('6', 80, 'Аналитика', []),
('7', 160, 'Разработка', [3]),
('8', 80, 'Тестирование', [4]),
('10', 120, 'Аналитика', []),
('11', 240, 'Разработка', [6]),
('12', 120, 'Тестирование', [7])]
[('2', 4000, ['Разработка']),
('3', 2000, ['Аналитика']),
('4', 3000, ['Разработка']),
('5', 2000, ['Разработка']),
('6', 1500, ['Тестирование']),
('7', 1000, ['Тестирование'])]
Solving started...
Solution 0, time = 0.39 s, objective = 76
Solution 1, time = 0.39 s, objective = 75
Solution 2, time = 0.40 s, objective = 60
Solution found. Total objective func = 60.0
Task assignments:
2 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ ■ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ : 3
3 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ □ □ : 5
4 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ ■ ■ ■ : 6
6 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ : 3
7 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ : 5
8 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ □ □ : 6
10 : ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ : 3
11 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ : 2
12 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ : 7
=============================
Resources assignments:
2 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
3 : © © © © © © © © © © © © © © © ♠ ♠ ♠ ♠ ♠ ♠ ♠ ♠ ♠ ♠ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ♥ ♥ ♥ ♥ ♥ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
4 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
5 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ♦ ♦ ♦ ♦ ♦ ♦ ♦ ♦ ♦ ♦ □ □ □ □ □
6 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ♣ ♣ ♣ ♣ ♣
7 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
--- Legend ---
♥: 2
♦: 3
♣: 4
♠: 6
▲: 7
▼: 8
©: 10
*: 11
0: 12Duration file result duration.xml
python main.py -i "./inputs/new/исходные данные.xml" -o ./results/cost.xml -m costConsole output for cost
[('2', 40, 'Аналитика', []),
('3', 80, 'Разработка', [0]),
('4', 40, 'Тестирование', [1]),
('6', 80, 'Аналитика', []),
('7', 160, 'Разработка', [3]),
('8', 80, 'Тестирование', [4]),
('10', 120, 'Аналитика', []),
('11', 240, 'Разработка', [6]),
('12', 120, 'Тестирование', [7])]
[('2', 4000, ['Разработка']),
('3', 2000, ['Аналитика']),
('4', 3000, ['Разработка']),
('5', 2000, ['Разработка']),
('6', 1500, ['Тестирование']),
('7', 1000, ['Тестирование'])]
Solving started...
Solution 0, time = 0.71 s, objective = 2300000
Solution 1, time = 0.73 s, objective = 2240000
Solution 2, time = 0.75 s, objective = 2080000
Solution 3, time = 0.77 s, objective = 2000000
Solution 4, time = 0.78 s, objective = 1840000
Solution 5, time = 0.81 s, objective = 1760000
Solution 6, time = 0.82 s, objective = 1740000
Solution 7, time = 0.84 s, objective = 1720000
Solution 8, time = 0.85 s, objective = 1700000
Solution 9, time = 0.85 s, objective = 1680000
Solution found. Total objective func = 1680000.0
Task assignments:
2 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ ■ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ : 3
3 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ □ □ : 5
4 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ ■ ■ ■ : 7
6 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ : 3
7 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ : 5
8 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ □ □ : 7
10 : ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ : 3
11 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ : 5
12 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ : 7
=============================
Resources assignments:
2 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
3 : © © © © © © © © © © © © © © © ♠ ♠ ♠ ♠ ♠ ♠ ♠ ♠ ♠ ♠ ♥ ♥ ♥ ♥ ♥ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
4 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
5 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ♦ ♦ ♦ ♦ ♦ ♦ ♦ ♦ ♦ ♦ □ □ □ □ □
6 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
7 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 □ □ □ □ □ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ♣ ♣ ♣ ♣ ♣
--- Legend ---
♥: 2
♦: 3
♣: 4
♠: 6
▲: 7
▼: 8
©: 10
*: 11
0: 12Cost file result cost.xml
python main.py -i "./inputs/new/исходные данные.xml" -o ./results/resources.xml -m resourcesConsole output for resources
[('2', 40, 'Аналитика', []),
('3', 80, 'Разработка', [0]),
('4', 40, 'Тестирование', [1]),
('6', 80, 'Аналитика', []),
('7', 160, 'Разработка', [3]),
('8', 80, 'Тестирование', [4]),
('10', 120, 'Аналитика', []),
('11', 240, 'Разработка', [6]),
('12', 120, 'Тестирование', [7])]
[('2', 4000, ['Разработка']),
('3', 2000, ['Аналитика']),
('4', 3000, ['Разработка']),
('5', 2000, ['Разработка']),
('6', 1500, ['Тестирование']),
('7', 1000, ['Тестирование'])]
Solving started...
Solution 0, time = 0.55 s, objective = 4
Solution 1, time = 0.59 s, objective = 3
Solution found. Total objective func = 3.0
Task assignments:
2 : □ □ □ ■ ■ ■ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ : 3
3 : □ □ □ □ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ : 5
4 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ ■ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ : 7
6 : □ □ □ □ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ : 3
7 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ : 5
8 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ : 7
10 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ : 3
11 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ : 5
12 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ : 7
=============================
Resources assignments:
2 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
3 : □ □ □ ♥ ♥ ♥ ♥ ♥ ♠ ♠ ♠ ♠ ♠ ♠ ♠ ♠ ♠ ♠ © © © © © © © © © © © © © © © □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
4 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
5 : □ □ □ □ □ □ □ □ ♦ ♦ ♦ ♦ ♦ ♦ ♦ ♦ ♦ ♦ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
6 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
7 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ♣ ♣ ♣ ♣ ♣ □ □ □ □ □ □ □ □ □ □ □ □ □ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
--- Legend ---
♥: 2
♦: 3
♣: 4
♠: 6
▲: 7
▼: 8
©: 10
*: 11
0: 12Resources file result resources.xml
python main.py -i "./inputs/new/исходные данные.xml" -o ./results/duration_cost.xml -m duration costConsole output for duration cost
[('2', 40, 'Аналитика', []),
('3', 80, 'Разработка', [0]),
('4', 40, 'Тестирование', [1]),
('6', 80, 'Аналитика', []),
('7', 160, 'Разработка', [3]),
('8', 80, 'Тестирование', [4]),
('10', 120, 'Аналитика', []),
('11', 240, 'Разработка', [6]),
('12', 120, 'Тестирование', [7])]
[('2', 4000, ['Разработка']),
('3', 2000, ['Аналитика']),
('4', 3000, ['Разработка']),
('5', 2000, ['Разработка']),
('6', 1500, ['Тестирование']),
('7', 1000, ['Тестирование'])]
Solving started...
Solution 0, time = 0.38 s, objective = 76
Solution 1, time = 0.39 s, objective = 75
Solution 2, time = 0.42 s, objective = 60
Solution found. Total objective func = 60.0
Solving started...
Solution 0, time = 0.08 s, objective = 2300000
Solution 1, time = 0.08 s, objective = 2280000
Solution 2, time = 0.09 s, objective = 2060000
Solution 3, time = 0.09 s, objective = 2040000
Solution 4, time = 0.09 s, objective = 1960000
Solution 5, time = 0.09 s, objective = 1900000
Solution found. Total objective func = 1900000.0
Task assignments:
2 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ ■ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ : 3
3 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ □ □ : 5
4 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ ■ ■ ■ : 7
6 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ : 3
7 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ : 4
8 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ □ □ : 7
10 : ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ : 3
11 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ : 5
12 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ : 6
=============================
Resources assignments:
2 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
3 : © © © © © © © © © © © © © © © ♠ ♠ ♠ ♠ ♠ ♠ ♠ ♠ ♠ ♠ ♥ ♥ ♥ ♥ ♥ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
4 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
5 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ♦ ♦ ♦ ♦ ♦ ♦ ♦ ♦ ♦ ♦ □ □ □ □ □
6 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
7 : □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ♣ ♣ ♣ ♣ ♣
--- Legend ---
♥: 2
♦: 3
♣: 4
♠: 6
▲: 7
▼: 8
©: 10
*: 11
0: 12


