⍝ Hungarian method cost assignment:
⎕ml←0
costs←↑(72 99 88)(23 30 35)(51 59 84)
costs ⍝ example cost matrix
72 99 88
23 30 35
51 59 84
assign costs ⍝ minimum cost assignment
1 0 0
0 0 1
0 1 0
assign -costs ⍝ maximum benefit assignment
0 1 0
1 0 0
0 0 1
+/+/ ×∘assign⍨ costs ⍝ total minimum cost
166
+/+/ -×∘assign⍨ -costs ⍝ total maximum benefit
206
costs←↑(7 38 23 27 11 3 34 34 47 20)(26 42 2 3 27 34 1 20 4 21)(35 30 47 43 27 5 33 21 36 46)(39 14 3 37 17 32 38 50 19 13)(50 37 38 33 4 32 45 14 22 39)(24 12 14 18 9 25 45 46 4 46)
costs
7 38 23 27 11 3 34 34 47 20
26 42 2 3 27 34 1 20 4 21
35 30 47 43 27 5 33 21 36 46
39 14 3 37 17 32 38 50 19 13
50 37 38 33 4 32 45 14 22 39
24 12 14 18 9 25 45 46 4 46
assign costs ⍝ minimum cost assignment
1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 1 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 0 0 0 1 0
{⍵×assign ⍵} costs ⍝ cost per assignment
7 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 5 0 0 0 0
0 0 3 0 0 0 0 0 0 0
0 0 0 0 4 0 0 0 0 0
0 0 0 0 0 0 0 0 4 0
{+/+/⍵×assign ⍵} costs ⍝ total minimum cost
24
assign -costs ⍝ maximum benefit assignment
0 0 0 0 0 0 0 0 1 0
0 1 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 0 0
1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1
{-⍵×assign ⍵} -costs ⍝ cost per assignment
0 0 0 0 0 0 0 0 47 0
0 42 0 0 0 0 0 0 0 0
0 0 47 0 0 0 0 0 0 0
0 0 0 0 0 0 0 50 0 0
50 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 46
{+/+/-⍵×assign ⍵} -costs ⍝ total maximum benefit
282
costs←↑(14 1 21 2 36 47)(12 10 16 45 33 8)(35 20 20 25 8 30)(43 30 48 28 8 50)(21 8 29 13 25 24)(49 7 10 16 32 7)(33 32 41 13 24 20)(11 2 46 22 8 48)(21 7 45 5 9 4)(19 13 7 40 23 18)
costs
14 1 21 2 36 47
12 10 16 45 33 8
35 20 20 25 8 30
43 30 48 28 8 50
21 8 29 13 25 24
49 7 10 16 32 7
33 32 41 13 24 20
11 2 46 22 8 48
21 7 45 5 9 4
19 13 7 40 23 18
assign costs ⍝ minimum cost assignment
0 1 0 0 0 0
1 0 0 0 0 0
0 0 0 0 1 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 1
0 0 0 1 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 1 0 0 0
⍝∇ assign
Back to: code
Back to: Workspaces