(1)若從效率 矩陣 (cij)的行(或列)的各元素中分別減去該行(或列)的最小元素後得到壹個新矩陣(bij),則以(bij)為效率矩陣的指派問題與原問題有相同的最優解。
經過上述變換後,(bij)中的每行和每列都至少含有壹個0元素,稱位於不同行不同列的0元素為獨立的0元素。
(2)若(bij)有n個獨立的0元素,由此可得壹個解矩陣,方法為在X中令對應於(bij)的0元素位置的元素為1,其它位置的元素為0,則X為 指派問題 的最優解。
(3)矩陣中獨立0元素的最多個數等於能覆蓋所有0元素的最少直線數。
匈牙利法的算法步驟如下:
(1)對指派問題的系數矩陣進行變換,使每行每列至少有壹個元素為“0”.
①讓系數矩陣的每行元素去減去該行的最小元素;
②再讓系數矩陣的每列元素減去該列的最小元素。
(2)從第壹行開始,若該行只有壹個零元素,就對這個零元素加括號,對加括號的零元素所在的列畫壹條線覆蓋該列,若該行沒有零元素或者有兩個以上零元素(已劃去的不算在內),則轉下壹行,依次進行到最後壹行。
(3)從第壹列開始,若該列只有壹個零元素。就對這個零元素加括號(同樣不、考慮已劃去的零元素)。再對加括號的零元素所在行畫壹條直線覆蓋該列。若該列沒有零元素或有兩個以上零元素,則轉下壹列,依次進行到最後壹列為止。
(4)重復上述步驟(1)和(2)可能出現3種情況:
①效率矩陣每行都有加括號的零元素,只要對應這些元素令
就找到了最優解。
②加括號的零元素個數少於m,但未被劃去的零元素之間存在閉回路,這時順著閉回路的走向,對每個間隔的零元素加壹個括號,然後對所有加括號的零元素所在行(或列)畫壹條直線,同樣得到最優解。
③矩陣中所有零元素或被劃去,或加上括號.但加括號的零元素少於m,這時轉入(5).
(5)按定理進行如下變換:
①從矩陣未被直線覆蓋的數字中找出壹個最小的k;
②當矩陣中的第i行有直線覆蓋時,令Ui=0;無直線覆蓋時。令Ui=K;
③當矩陣中的第j列有直線覆蓋時,令Vj=-K;無直線覆蓋時,令Vj=0;
④令原矩陣的每個元素Aij分別減去Ui和Vj.
(6)回到(2),反復進行,直到矩陣的每壹行都有壹個加括號的零元素為止。即找到最優分配方案。[1]
在實際的任務分配中,還可能出現人員(或設備)數與任務數不相等的情況,而且要求每個人員只先完成壹件任務(在人員數少於任務數時),或者有些人員可暫不安排任務(在人員數多余任務數時),可稱這樣的問題為不平衡的指派問題,此時,可通過虛擬人員或虛擬任務使之轉化為壹般(平衡)的指派問題,即在原矩陣中增加壹些行或者列,使之成為方陣,在極小型問題中所增加的元素應充分的大,如為原矩陣中最大的元素的值,而在極大型問題中增加的元素應足夠的小。如可取零值。