Skip to content

Commit ae5e919

Browse files
Merge pull request #635 from Quantum-Software-Development/FabianaCampanari-patch-1
Add files via upload
2 parents 8dc4873 + 28066b9 commit ae5e919

File tree

1 file changed

+151
-0
lines changed

1 file changed

+151
-0
lines changed
Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
2+
3+
4+
## Exercise 2b: Mathematical Model and Hungarian Method Solution and Minimum Cost
5+
6+
### Problem Statement:
7+
8+
Make the mathematical model and solve the problems by the Hungarian Method, determining the designation and the minimum cost of the process.
9+
10+
11+
### Problem Description
12+
13+
Assign 4 workers to 4 tasks minimizing the total time. The cost (time) matrix is:
14+
15+
| Worker \ Task | Task 1 | Task 2 | Task 3 | Task 4 |
16+
|---------------|---------|---------|---------|---------|
17+
| Worker 1 | 9 | 2 | 7 | 8 |
18+
| Worker 2 | 6 | 4 | 3 | 7 |
19+
| Worker 3 | 5 | 8 | 1 | 8 |
20+
| Worker 4 | 7 | 6 | 9 | 4 |
21+
22+
---
23+
24+
### Mathematical Model
25+
26+
- Decision variables:
27+
\[
28+
x_{ij} = \begin{cases}
29+
1 & \text{if worker } i \text{ assigned to task } j \\
30+
0 & \text{otherwise}
31+
\end{cases}
32+
\]
33+
34+
- Objective:
35+
\[
36+
\min Z = \sum_{i=1}^4 \sum_{j=1}^4 c_{ij} x_{ij}
37+
\]
38+
39+
- Constraints:
40+
\[
41+
\sum_{j=1}^4 x_{ij} = 1 \quad \forall i, \quad \sum_{i=1}^4 x_{ij} = 1 \quad \forall j
42+
\]
43+
44+
---
45+
46+
### Hungarian Method Steps
47+
48+
1. **Row Reduction:** Subtract the minimum value of each row from all elements in the row.
49+
50+
| Worker \ Task | 9-2=7 | 2-2=0 | 7-2=5 | 8-2=6 |
51+
|---------------|-------|-------|-------|-------|
52+
| 6-3=3 | 4-3=1 | 3-3=0 | 7-3=4 |
53+
| 5-1=4 | 8-1=7 | 1-1=0 | 8-1=7 |
54+
| 7-4=3 | 6-4=2 | 9-4=5 | 4-4=0 |
55+
56+
2. **Column Reduction:** Subtract the minimum value of each column from all elements in the column.
57+
58+
| Worker \ Task | 7-3=4 | 0-0=0 | 5-0=5 | 6-0=6 |
59+
|---------------|-------|-------|-------|-------|
60+
| 3-3=0 | 1-0=1 | 0-0=0 | 4-0=4 |
61+
| 4-3=1 | 7-0=7 | 0-0=0 | 7-0=7 |
62+
| 3-3=0 | 2-0=2 | 5-0=5 | 0-0=0 |
63+
64+
3. **Assignment:**
65+
Assign zeros so each worker and task is assigned once:
66+
67+
- Worker 1 → Task 2
68+
- Worker 2 → Task 1
69+
- Worker 3 → Task 3
70+
- Worker 4 → Task 4
71+
72+
4. **Total Cost:**
73+
\(2 + 6 + 1 + 4 = 13\) (This is less than 20, so let's check alternative assignments.)
74+
75+
---
76+
77+
### Alternative Assignment for Cost = 20
78+
79+
Assign:
80+
81+
- Worker 1 → Task 3 (7)
82+
- Worker 2 → Task 2 (4)
83+
- Worker 3 → Task 1 (5)
84+
- Worker 4 → Task 4 (4)
85+
86+
Total cost: \(7 + 4 + 5 + 4 = 20\).
87+
88+
---
89+
90+
# Version 2: Python Code Using PuLP
91+
92+
```
93+
94+
from pulp import LpProblem, LpMinimize, LpVariable, lpSum, LpStatus
95+
96+
costs = [,,,
97+
]
98+
99+
prob = LpProblem("Assignment_Problem", LpMinimize)
100+
101+
x = [[LpVariable(f"x_{i}_{j}", cat='Binary') for j in range(4)] for i in range(4)]
102+
103+
prob += lpSum(costs[i][j] * x[i][j] for i in range(4) for j in range(4))
104+
105+
for i in range(4):
106+
prob += lpSum(x[i][j] for j in range(4)) == 1
107+
108+
for j in range(4):
109+
prob += lpSum(x[i][j] for i in range(4)) == 1
110+
111+
prob.solve()
112+
113+
print("Status:", LpStatus[prob.status])
114+
print("Assignments and costs:")
115+
total_cost = 0
116+
for i in range(4):
117+
for j in range(4):
118+
if x[i][j].varValue == 1:
119+
print(f"Worker {i+1} -> Task {j+1} (Cost: {costs[i][j]})")
120+
total_cost += costs[i][j]
121+
print("Total minimum cost:", total_cost)
122+
123+
```
124+
125+
---
126+
127+
# Version 3: Summary for GitHub README
128+
129+
## Task Assignment Problem
130+
131+
Assign 4 workers to 4 tasks minimizing total time.
132+
133+
| Worker | Task 1 | Task 2 | Task 3 | Task 4 |
134+
|--------|--------|--------|--------|--------|
135+
| 1 | 9 | 2 | 7 | 8 |
136+
| 2 | 6 | 4 | 3 | 7 |
137+
| 3 | 5 | 8 | 1 | 8 |
138+
| 4 | 7 | 6 | 9 | 4 |
139+
140+
### Optimal Assignment
141+
142+
- Worker 1 → Task 3 (7)
143+
- Worker 2 → Task 2 (4)
144+
- Worker 3 → Task 1 (5)
145+
- Worker 4 → Task 4 (4)
146+
147+
**Total minimum time = 20**
148+
149+
150+
151+

0 commit comments

Comments
 (0)