2013-05-09 45 views
7

所以我有一個沒有匈牙利方法所需的傳統成本的工作分配問題。工作分配與NO成本,匈牙利方法工作?

例如:

I have 3 workers - A, B and C 
I have 5 jobs - 1, 2, 3, 4 and 5 

每個工人都有一個任務列表,他可以執行,像這樣:

worker A can work on job 1, 2, 5 
worker B can work on job 1, 2 
worker C can work on job 1 

最終的結果(因爲沒有成本)是分配的最大數量我可以實現。

worker A on job 5 
worker B on job 2 
worker C on job 1 

是匈牙利的方法來解決這個問題的好辦法:在這個例子中,我最多可以3個分配實現?我應該只使用「虛擬」成本嗎?我想可能會使用工作偏好指數作爲成本;這是一個好主意嗎?

+0

由於沒有成本,您如何比較兩個不同的作業? – 2013-05-09 14:13:16

+0

我正在考慮根據工作偏好指數添加「虛擬」成本,例如,工作5的工作人員A的成本爲3(因爲它是該工作清單中的第三工作),這是個好主意嗎? – sap 2013-05-09 14:16:34

回答

5

將成本-1分配給他們可以的工作,其他成員爲零。

然後運行匈牙利算法,它會給你答案(它會返回-answer,實際上)。

不要用一些大數字來做,它可能會導致溢出(除非您非常仔細地實施匈牙利語)。

事實上,它在二分圖最大匹配問題,有這麼多的方式來解決這個問題,請參閱wiki頁面:

http://en.wikipedia.org/wiki/Matching_(graph_theory)#Maximum_matchings_in_bipartite_graphs

PS:霍普克洛夫特 - 卡普算法比快匈牙利,也更簡單。值得一試。一些合成的方法比這兩種方法更快,但不建議一開始就學習這些算法。

PSS:您的ID在stackoverflow是解決這個問題的方法。這是一種網絡流量方式。它被稱爲最短參數路徑(sap)。請參閱:http://coral.ie.lehigh.edu/~ted/files/ie411/lectures/Lecture11.pdf

+0

你忽略了喜好。可能你可以做水暖工,但你會開心多久(開玩笑)? – 2013-05-09 14:23:44

+0

對不起,我應該說,偏好並不重要,只要我可以分配最大數量的工作可能。 – sap 2013-05-09 14:25:03

+0

@ZiyaoWei我不明白什麼是偏好。 – Sayakiss 2013-05-09 14:25:41

2

虛擬成本應該有所斬獲。爲他們可以做的任何工作分配1的成本,並且無限的成本(如果你的系統允許的話)分配給他們不能做的工作。匈牙利算法旨在最大限度地減少所有任務的總成本,因此它會自然而然地解決問題。不應該有任何需要說明你認爲他們的工作偏好是什麼;這是算法的工作。

+0

感謝您的回答,我首先想到了這一點,但擔心在行和列最小化(除了無限成本的位置除外)後,結束矩陣會填滿0,但也許這不是問題?我對這個算法還很陌生,並試圖學習它。 – sap 2013-05-09 14:21:42

+0

這不應該是一個問題 - 所有這一切意味着可能有不止一個同樣好的解決方案。 – 2013-05-09 14:43:21

1

匈牙利算法會給你一個答案,但不要使用無限的成本,因爲你不能比較(infinity + infinity)infinity(除非你自己比較成本)。

A: 1, 2, 3 

B: 1 

C: 1 

的矩陣形式:

1 2 3 

A 1 2 3 

B 1 inf inf 

C 1 inf inf 

如何在您的計算機比較1, inf, inf2, 1, inf

相反,使用一些非常大的成本,以保證不被分配(是的,小心溢出)。

+0

不幸的是,在一般情況下不可能確定這樣的成本。 – 2013-05-09 14:30:45

+0

的確如此 - 雖然匈牙利人沒有看過相當長的一段時間,但有了一個不太明確的喜好,很難修改它(我懷疑),除非像你和其他答案一樣,忽視喜好。 – 2013-05-09 14:34:18

6

匈牙利算法可以由在這裏工作,但對於加權最大二分匹配算法像Hopcroft–Karp會更快。