本發(fā)明屬于計(jì)算機(jī)優(yōu)化方法技術(shù)領(lǐng)域,具體涉及一種對(duì)象與角色多對(duì)一優(yōu)化匹配的方法。
背景技術(shù):
隨著我國(guó)科學(xué)技術(shù)和社會(huì)的快速發(fā)展,協(xié)同作業(yè)在越來(lái)越多的行業(yè)中變得日益重要,例如:工廠流水線的人員安排、軍事行動(dòng)的組織等。對(duì)象與角色多對(duì)一優(yōu)化匹配問(wèn)題便是協(xié)同作業(yè)中的一種基本問(wèn)題,其表現(xiàn)形式為:有一定數(shù)量的角色各需匹配一定數(shù)量的對(duì)象,任意一個(gè)對(duì)象可以被匹配在任意一個(gè)角色上,并產(chǎn)生其在該角色上的成本或回報(bào),要求為各角色匹配與其要求數(shù)量相等對(duì)象的同時(shí),要保證所作出的匹配方案的最優(yōu)性,即該匹配方案是所有可能方案中總成本最小或總回報(bào)最大的匹配方案。
在計(jì)算機(jī)優(yōu)化算法領(lǐng)域,對(duì)象與角色多對(duì)一優(yōu)化匹配問(wèn)題通常被歸為np類問(wèn)題,即難以用計(jì)算機(jī)算法高效解決的問(wèn)題,但在實(shí)際應(yīng)用中,該問(wèn)題又是工程管理與人力資源管理中常會(huì)遇到的一類難題,所做出的匹配方案的優(yōu)劣直接影響著最終的成本或回報(bào)。由此可見(jiàn),設(shè)計(jì)出相應(yīng)的計(jì)算機(jī)算法,以有效解決對(duì)象與角色多對(duì)一優(yōu)化匹配問(wèn)題具有重要的實(shí)用價(jià)值與廣泛的實(shí)用空間。
現(xiàn)如今,針對(duì)對(duì)象與角色多對(duì)一優(yōu)化匹配問(wèn)題的方法只有枚舉法與貪婪法兩類;其中,枚舉法可以保證匹配方案的最優(yōu)性,但算法復(fù)雜度過(guò)高,為o(n!),不具備實(shí)用價(jià)值,而貪婪法盡管有較優(yōu)的算法復(fù)雜度,為o(n2),但其無(wú)法保證匹配方案的最優(yōu)性。可以看出:目前尚沒(méi)有一個(gè)針對(duì)對(duì)象與角色多對(duì)一優(yōu)化匹配問(wèn)題的方法可以同時(shí)滿足以下幾個(gè)目標(biāo):
(1)保證匹配方案的最優(yōu)性;(2)較低的算法復(fù)雜度;(3)靈活的優(yōu)化目標(biāo),既能解決回報(bào)最大化問(wèn)題,也能解決成本最小化問(wèn)題;(4)對(duì)參與優(yōu)化匹配的對(duì)象與角色的數(shù)量沒(méi)有限制。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于提供一種對(duì)象與角色多對(duì)一優(yōu)化匹配的方法,能在確保匹配方案最優(yōu)性的同時(shí),具有較低的算法復(fù)雜度和靈活的優(yōu)化目標(biāo)。
本發(fā)明所采用的技術(shù)方案是,對(duì)象與角色多對(duì)一優(yōu)化匹配的方法,具體按照以下步驟實(shí)施:
步驟1、建立用以描述對(duì)象與角色多對(duì)一優(yōu)化問(wèn)題的數(shù)學(xué)模型;
步驟2、對(duì)經(jīng)步驟1建立的數(shù)學(xué)模型進(jìn)行預(yù)處理;
步驟3、經(jīng)過(guò)步驟2后,將對(duì)象與角色多對(duì)一優(yōu)化匹配問(wèn)題轉(zhuǎn)化為等價(jià)的對(duì)象與角色一對(duì)一優(yōu)化匹配問(wèn)題;
步驟4、針對(duì)步驟3得到的對(duì)象與角色一對(duì)一優(yōu)化匹配問(wèn)題,建立相應(yīng)的輔助標(biāo)記數(shù)據(jù);
步驟5、利用步驟4中建立的輔助標(biāo)記數(shù)據(jù),對(duì)步驟3得到的對(duì)象與角色一對(duì)一優(yōu)化匹配問(wèn)題進(jìn)行優(yōu)化處理,獲取對(duì)象與角色一對(duì)一優(yōu)化匹配問(wèn)題的最優(yōu)匹配方案;
步驟6、對(duì)步驟5獲得的對(duì)象與角色一對(duì)一優(yōu)化匹配問(wèn)題的最優(yōu)匹配方案進(jìn)行壓縮,獲取對(duì)象與角色多對(duì)一優(yōu)化匹配問(wèn)題的最優(yōu)匹配方案。
本發(fā)明的特點(diǎn)還在于:
步驟1中的數(shù)學(xué)模型包括如下四個(gè)部分:
第一部分:用m表示參與匹配的對(duì)象的數(shù)量;
第二部分:用n表示參與匹配的角色的數(shù)量;
第三部分:角色需求數(shù)組,使用數(shù)組l表示各角色需求的對(duì)象的具體數(shù)量;l的大小為n,l[t](0≤t<n),表示t號(hào)角色要求的對(duì)象數(shù)量;
第四部分:匹配度矩陣;
使用矩陣c表示各參與匹配對(duì)象在各角色上的匹配度,c的大小為m×n,c[i][j](0≤i<m,0≤j<n)表示i號(hào)對(duì)象在j號(hào)角色上的匹配度。
步驟2具體按照以下步驟實(shí)施:
步驟2.1、經(jīng)步驟1后,進(jìn)行合法性檢查;
檢查是否有足夠數(shù)量的對(duì)象以滿足所有角色的需求,即檢查是否滿足如下條件:
若不滿足此條件,則說(shuō)明對(duì)象數(shù)量不足,無(wú)法滿足匹配要求,則退出優(yōu)化程序;
若滿足此條件,則進(jìn)入下一步驟,即進(jìn)入步驟2.2中;
步驟2.2、根據(jù)優(yōu)化目標(biāo)對(duì)匹配度矩陣c進(jìn)行預(yù)處理:
若實(shí)際問(wèn)題是求成本最小化類的問(wèn)題,則保持匹配度矩陣不變;
若是求回報(bào)最大化類的問(wèn)題,對(duì)匹配度矩陣中的每一單元,用匹配度取值上限max減去單元的實(shí)際匹配用度,用所得的結(jié)果替換單元中的值,即c[i][j]=max-c[i][j](0≤i<m,0≤j<n)。
步驟3具體按照以下方法實(shí)施:
步驟3.1、建立拓展匹配度矩陣tc,用以表示對(duì)象與角色一對(duì)一優(yōu)化匹配問(wèn)題中各參與匹配對(duì)象在各角色上的匹配度,tc的大小為:
其中:m表示參與匹配的對(duì)象的數(shù)量;n表示參與匹配的角色的數(shù)量;l[t](0≤t<n),表示t號(hào)角色要求的對(duì)象數(shù)量;
步驟3.2、經(jīng)步驟3.1后,建立拓展匹配度矩陣c中的每一列,逐次寫(xiě)入拓展匹配度矩陣tc,每一列寫(xiě)入的次數(shù)與該列所對(duì)應(yīng)的角色在角色需求數(shù)組l中要有的對(duì)象數(shù)量相等;
步驟3.2中要將對(duì)象與角色多對(duì)一優(yōu)化匹配問(wèn)題中的每一角色按其需求的角色數(shù)量進(jìn)行分解。
步驟4中具體包括以下四部分:
第一部分:匹配標(biāo)記矩陣;
使用矩陣m表示對(duì)象與角色一對(duì)一優(yōu)化匹配過(guò)程中,各對(duì)象在各角色上的匹配狀態(tài),m的大小為:
該算法表示i號(hào)對(duì)象在j號(hào)角色上的匹配狀態(tài),匹配狀態(tài)分為:“未匹配”、“已匹配”和“潛在匹配”三種,分別用數(shù)字“0”、“1”、“2”表示;
“未匹配”是指在當(dāng)前狀態(tài)下該對(duì)象不能做為該角色的最優(yōu)匹配;
“已匹配”是指在當(dāng)前狀態(tài)下該對(duì)象已有限做為該角色的最優(yōu)匹配;
“潛在匹配”是指在當(dāng)前狀態(tài)下該對(duì)象能作為該角色的最優(yōu)匹配;
在建立時(shí)將m中所有單元設(shè)置為初始至0;
第二部分:行標(biāo)記數(shù)組,使用數(shù)組row表示對(duì)象與角色一對(duì)一優(yōu)化匹配過(guò)程中,各對(duì)象的狀態(tài),row的大小為m,row[i](0≤i<m)表示i號(hào)對(duì)象的狀態(tài);對(duì)象的狀態(tài)分為“沒(méi)有潛在匹配的角色”與“有潛在匹配的角色”兩種,分別用數(shù)字“0”、“1”表示;
“潛在匹配的角色”是指該對(duì)象作為某角色的“潛在匹配”單元;
在建立時(shí)將row中所有單元設(shè)置為初始值0;
第三部分:列標(biāo)記數(shù)組;
使用數(shù)組col表示對(duì)象與角色一對(duì)一優(yōu)化過(guò)程中,各角色的狀態(tài),col的大小
“唯一匹配的對(duì)象”是指該角色已匹配某一對(duì)象且該對(duì)象不存在潛在匹配的另一角色;
在建立時(shí)將col中所有單元設(shè)置為初始值為0;
第四部分,增益路徑數(shù)組;
使用二維數(shù)組path存儲(chǔ)對(duì)象與角色一對(duì)一優(yōu)化匹配過(guò)程中查找出的增益路徑上的各增益點(diǎn),在匹配標(biāo)記矩陣m中的位置坐標(biāo);path的大小為
步驟5具體按照以下步驟實(shí)施:
步驟5.1、對(duì)拓展匹配度矩陣tc中的每一列,找出該列中最小值,并對(duì)該列中的每一單元減去該最小值,進(jìn)入下一步驟,即步驟5.2;
步驟5.2、經(jīng)步驟5.1后,逐一檢查拓展匹配矩陣tc中的每一單元;
若某單元的值為0,且其所在行路徑數(shù)組清空,與列中沒(méi)有其他單元被標(biāo)記為“已匹配”,則將該單元標(biāo)記為“已匹配”,將匹配標(biāo)記矩陣m中對(duì)應(yīng)位置的單元值設(shè)置為1,進(jìn)入下一步驟,即進(jìn)入步驟5.3;
步驟5.3、經(jīng)步驟5.2后,逐列檢查匹配標(biāo)記矩陣m,若某列中存在標(biāo)記為“已匹配”的單元,則將該列標(biāo)記為“已唯一匹配對(duì)象”,將列標(biāo)記數(shù)組col中對(duì)應(yīng)單元的值設(shè)置為1;
若最終列標(biāo)記數(shù)組中所有單元的值均為1,則當(dāng)前匹配標(biāo)記矩陣中所有標(biāo)記為“已匹配”的單元構(gòu)成對(duì)象與角色一對(duì)一優(yōu)化匹配問(wèn)題的最優(yōu)匹配方案,則步驟5結(jié)束,否則進(jìn)入步驟5.4;
步驟5.4、逐一檢查拓展匹配度矩陣tc中的每一個(gè)單元;
若某單元的值為0,且該單元對(duì)應(yīng)的行標(biāo)記與列標(biāo)記值均為0,則將該單元標(biāo)記為“潛在匹配”單元,將匹配標(biāo)記矩陣m中對(duì)應(yīng)單元的值設(shè)置為2,同時(shí)將該單元所在行的標(biāo)記設(shè)置為1;進(jìn)而檢查該“潛在匹配”單元:若其所在行中不存在“已匹配”的單元,則該“潛在匹配”單元為增益路徑的起點(diǎn),將該單元的位置坐標(biāo)計(jì)入增益路徑數(shù)組path后,進(jìn)入步驟5.5,否則將該“潛在匹配”單元所在行中的“已匹配”的單元所在對(duì)應(yīng)列的列標(biāo)記i設(shè)置為0;
若在步驟5.4中未找到任何“潛在匹配”單元或增益路徑的起點(diǎn),進(jìn)入步驟5.6中;
步驟5.5、建立增益路徑,自步驟5.4中找到的作為增益路徑起點(diǎn)的“潛在匹配”單元開(kāi)始,在匹配標(biāo)記矩陣中檢查:
若該“潛在匹配”單元所在列中有在標(biāo)記為“已匹配”的單元開(kāi)始,在匹配標(biāo)記矩陣中檢查;
若該“潛在匹配”單元所在列中有在標(biāo)記為“已匹配”的單元,則將該“已匹配”的單元和該“已匹配”的單元所在行中的“潛在匹配”單元作為增益點(diǎn)添加到增益路徑數(shù)組中,并按照上述方式繼續(xù)檢查此新加入增益路徑的“潛在匹配”單元,直至找到某一“潛在匹配”單元其所在列中不存在“已匹配”的單元,將此“潛在匹配”單元作為增益路徑的終點(diǎn);
在匹配標(biāo)記矩陣m中,將增益路徑上所有的“已匹配”的單元標(biāo)記為“未匹配”的單元,將增益路徑上所有的“潛在匹配”的單元標(biāo)記為“已匹配”的單元;將匹配標(biāo)記矩陣中其余的“潛在匹配”的單元標(biāo)記為“未匹配”的單元,將行標(biāo)記數(shù)組與列標(biāo)記數(shù)組恢復(fù)初始值,將增益路徑數(shù)組清空,重新進(jìn)入步驟5.3中;
步驟5.6、找出拓展匹配度矩陣中所有對(duì)應(yīng)行標(biāo)記與列標(biāo)記均為0的單元,這些單元構(gòu)成了潛在匹配區(qū)域,找出潛在匹配區(qū)域中最小的值,并對(duì)區(qū)域中的每一單元減去該最小值,然后再次進(jìn)入步驟5.4中。
步驟6具體按照以下步驟實(shí)施:
步驟6.1、建立對(duì)象與角色多對(duì)一優(yōu)化匹配方案矩陣fm,fm的大小為m×n,fm[i][j](0≤i<m,0≤j<n)表示對(duì)象與角色多對(duì)一優(yōu)化匹配方案中i號(hào)對(duì)象在j號(hào)角色上的匹配情況,分別用數(shù)字0和1表示未匹配和已匹配;
步驟6.2、在經(jīng)步驟5獲得的對(duì)象與角色一對(duì)一優(yōu)化匹配方案中,將所有對(duì)應(yīng)對(duì)象與角色多對(duì)一優(yōu)化匹配問(wèn)題中同一角色的列,按列做加法運(yùn)算,將得出的結(jié)果逐次寫(xiě)入fm中。
本發(fā)明的有益效果在于:
(1)本發(fā)明對(duì)象與角色多對(duì)一優(yōu)化匹配的方法,其主要優(yōu)點(diǎn)是:能在確保匹配方案最優(yōu)性的同時(shí),具有較低的算法復(fù)雜度(為o(n3)),因此具有運(yùn)算速度快且優(yōu)化目標(biāo)靈活的特點(diǎn),對(duì)參與匹配的對(duì)象與角色的數(shù)量沒(méi)有限制。
(2)本發(fā)明對(duì)象與角色多對(duì)一優(yōu)化匹配的方法,其解決問(wèn)題的主要思想是:首先采用分而治之的方式將對(duì)象與角色多對(duì)一優(yōu)化匹配問(wèn)題等價(jià)分解為對(duì)象與角色一對(duì)一優(yōu)化匹配問(wèn)題這一形式,再通過(guò)尋找潛在的匹配單元,建立增益路徑的方式逐步增加最優(yōu)匹配的對(duì)數(shù),直至獲得對(duì)象與角色一對(duì)一優(yōu)化匹配問(wèn)題的最優(yōu)匹配方案;最后將獲得的最優(yōu)匹配方案進(jìn)行壓縮,得到對(duì)象與角色多對(duì)一優(yōu)化匹配的最優(yōu)匹配方案;該方法打破了傳統(tǒng)的枚舉法與貪婪法的思想,在保證匹配方案最優(yōu)性的同時(shí),極大的降低了算法復(fù)雜度,進(jìn)而極大的提高了可應(yīng)用問(wèn)題的規(guī)模限制,為解決此類np問(wèn)題提供了高效、準(zhǔn)確、靈活的解決方案,是一種優(yōu)化的匹配算法。
(3)本發(fā)明對(duì)象與角色多對(duì)一優(yōu)化匹配的方法,為解決管理學(xué)中資源配置,人力資源管理領(lǐng)域中的相關(guān)問(wèn)題提供了準(zhǔn)確、高效的算法工具,具有重要的實(shí)用價(jià)值與廣泛的應(yīng)用空間。
具體實(shí)施方式
下面結(jié)合具體實(shí)施方式對(duì)本發(fā)明進(jìn)行詳細(xì)說(shuō)明。
本發(fā)明對(duì)象與角色多對(duì)一優(yōu)化匹配的方法,具體按照以下步驟實(shí)施:
步驟1、建立用以描述對(duì)象與角色多對(duì)一優(yōu)化問(wèn)題的數(shù)學(xué)模型,具體包括以下四個(gè)部分:
第一部分:用m表示參與匹配的對(duì)象的數(shù)量;
第二部分:用n表示參與匹配的角色的數(shù)量;
第三部分:角色需求數(shù)組,使用數(shù)組l表示各角色需求的對(duì)象的具體數(shù)量;l的大小為n,l[t](0≤t<n),表示t號(hào)角色要求的對(duì)象數(shù)量;
第四部分:匹配度矩陣;
使用矩陣c表示各參與匹配對(duì)象在各角色上的匹配度,c的大小為m×n,c[i][j](0≤i<m,0≤j<n)表示i號(hào)對(duì)象在j號(hào)角色上的匹配度。
步驟2,對(duì)經(jīng)步驟1建立的數(shù)學(xué)模型進(jìn)行預(yù)處理,具體按照以下步驟實(shí)施:
步驟2.1、經(jīng)步驟1后,進(jìn)行合法性檢查:
檢查是否有足夠數(shù)量的對(duì)象以滿足所有角色的需求,即檢查是否滿足如下條件:
若不滿足此條件,則說(shuō)明對(duì)象數(shù)量不足,無(wú)法滿足匹配要求,則退出優(yōu)化程序;
若滿足此條件,則進(jìn)入下一步驟,即進(jìn)入步驟2.2中;
步驟2.2、根據(jù)優(yōu)化目標(biāo)對(duì)匹配度矩陣c進(jìn)行預(yù)處理:
若實(shí)際問(wèn)題是求成本最小化類的問(wèn)題,則保持匹配度矩陣不變;
若是求回報(bào)最大化類的問(wèn)題,對(duì)匹配度矩陣中的每一單元,用匹配度取值上限max減去單元的實(shí)際匹配用度,用所得的結(jié)果替換單元中的值,即c[i][j]=max-c[i][j](0≤i<m,0≤j<n);這一步驟中通過(guò)將各單元的值進(jìn)行相對(duì)于匹配度上限的反轉(zhuǎn),從而將最大化問(wèn)題轉(zhuǎn)化成等價(jià)的最小化問(wèn)題,達(dá)到了統(tǒng)一優(yōu)化目標(biāo)的目的,便于后續(xù)優(yōu)化過(guò)程的處理。
步驟3、經(jīng)過(guò)步驟2后,將對(duì)象與角色多對(duì)一優(yōu)化匹配問(wèn)題轉(zhuǎn)化為等價(jià)的對(duì)象與角色一對(duì)一優(yōu)化匹配問(wèn)題,具體按照以下步驟實(shí)施:
步驟3.1、建立拓展匹配度矩陣tc,用以表示對(duì)象與角色一對(duì)一優(yōu)化匹配問(wèn)題中各參與匹配對(duì)象在各角色上的匹配度,tc的大小為:
步驟3.2、經(jīng)步驟3.1后,建立拓展匹配度矩陣c中的每一列,逐次寫(xiě)入拓展匹配度矩陣tc,每一列寫(xiě)入的次數(shù)與該列所對(duì)應(yīng)的角色在角色需求數(shù)組l中要有的對(duì)象數(shù)量相等;
步驟3.2中要將對(duì)象與角色多對(duì)一優(yōu)化匹配問(wèn)題中的每一角色按其需求的角色數(shù)量進(jìn)行分解,例如:某角色需要x個(gè)對(duì)象,通過(guò)將該角色在匹配度矩陣c中對(duì)應(yīng)的列復(fù)制成x個(gè)相同的列,從而將該角色需要x個(gè)對(duì)象等價(jià)分解成x個(gè)需要1個(gè)對(duì)象的該角色,將所有角色分解后添加至拓展匹配度矩陣tc中,tc即構(gòu)成與對(duì)象與角色多對(duì)一優(yōu)化匹配問(wèn)題等價(jià)的對(duì)象與角色一對(duì)一優(yōu)化匹配問(wèn)題的匹配度矩陣。
步驟4、針對(duì)步驟3得到的對(duì)象與角色一對(duì)一優(yōu)化匹配問(wèn)題,建立相應(yīng)的輔助標(biāo)記數(shù)據(jù),具體包括以下四部分:
第一部分:匹配標(biāo)記矩陣;
使用矩陣m表示對(duì)象與角色一對(duì)一優(yōu)化匹配過(guò)程中,各對(duì)象在各角色上的匹配狀態(tài),m的大小為:
該算法表示i號(hào)對(duì)象在j號(hào)角色上的匹配狀態(tài),匹配狀態(tài)分為:“未匹配”、“已匹配”和“潛在匹配”三種,分別用數(shù)字“0”、“1”、“2”表示;
“未匹配”是指在當(dāng)前狀態(tài)下該對(duì)象不能做為該角色的最優(yōu)匹配;
“已匹配”是指在當(dāng)前狀態(tài)下該對(duì)象已有限做為該角色的最優(yōu)匹配;
“潛在匹配”是指在當(dāng)前狀態(tài)下該對(duì)象能作為該角色的最優(yōu)匹配;
在建立時(shí)將m中所有單元設(shè)置為初始至0。
第二部分:行標(biāo)記數(shù)組,使用數(shù)組row表示對(duì)象與角色一對(duì)一優(yōu)化匹配過(guò)程中,各對(duì)象的狀態(tài),row的大小為m,row[i](0≤i<m)表示i號(hào)對(duì)象的狀態(tài);對(duì)象的狀態(tài)分為“沒(méi)有潛在匹配的角色”與“有潛在匹配的角色”兩種,分別用數(shù)字“0”、“1”表示;
“潛在匹配的角色”是指該對(duì)象作為某角色的“潛在匹配”單元,在建立時(shí)將row中所有單元設(shè)置為初始值0。
第三部分:列標(biāo)記數(shù)組;
使用數(shù)組col表示對(duì)象與角色一對(duì)一匹配優(yōu)化過(guò)程中,各角色的狀態(tài),col的大小
“唯一匹配的對(duì)象”是指該角色已匹配某一對(duì)象且該對(duì)象不存在潛在匹配的另一角色;在建立時(shí)將col中所有單元設(shè)置為初始值為0。
第四部分,增益路徑數(shù)組;
使用二維數(shù)組path存儲(chǔ)對(duì)象與角色一對(duì)一優(yōu)化匹配過(guò)程中查找出的增益路徑上的各增益點(diǎn),在匹配標(biāo)記矩陣m中的位置坐標(biāo);path的大小為
步驟5,利用步驟4中建立的輔助標(biāo)記數(shù)據(jù),對(duì)步驟3得到的對(duì)象與角色一對(duì)一優(yōu)化匹配問(wèn)題進(jìn)行優(yōu)化處理,獲取對(duì)象與角色一對(duì)一優(yōu)化匹配問(wèn)題的最優(yōu)匹配方案,具體按照以下步驟實(shí)施:
步驟5.1、對(duì)拓展匹配度矩陣tc中的每一列,找出該列中最小值,并對(duì)該列中的每一單元減去該最小值,進(jìn)入下一步驟,即步驟5.2;
步驟5.2、經(jīng)步驟5.1后,逐一檢查拓展匹配矩陣tc中的每一單元;
若某單元的值為0,且其所在行路徑數(shù)組清空,與列中沒(méi)有其他單元被標(biāo)記為“已匹配”,則將該單元標(biāo)記為“已匹配”,將匹配標(biāo)記矩陣m中對(duì)應(yīng)位置的單元值設(shè)置為1,進(jìn)入下一步驟,即進(jìn)入步驟5.3;
步驟5.3、經(jīng)步驟5.2后,逐列檢查匹配標(biāo)記矩陣m,若某列中存在標(biāo)記為“已匹配”的單元,則將該列標(biāo)記為“已唯一匹配對(duì)象”,將列標(biāo)記數(shù)組col中對(duì)應(yīng)單元的值設(shè)置為1;
若最終列標(biāo)記數(shù)組中所有單元的值均為1,則當(dāng)前匹配標(biāo)記矩陣中所有標(biāo)記為“已匹配”的單元構(gòu)成對(duì)象與角色一對(duì)一優(yōu)化匹配問(wèn)題的最優(yōu)匹配方案,則步驟5結(jié)束,否則進(jìn)入步驟5.4;
步驟5.4、逐一檢查拓展匹配度矩陣tc中的每一個(gè)單元;
若某單元的值為0,且該單元對(duì)應(yīng)的行標(biāo)記與列標(biāo)記值均為0,則將該單元標(biāo)記為“潛在匹配”單元,將匹配標(biāo)記矩陣m中對(duì)應(yīng)單元的值設(shè)置為2,同時(shí)將該單元所在行的標(biāo)記設(shè)置為1;進(jìn)而檢查該“潛在匹配”單元:若其所在行中不存在“已匹配”的單元,則該“潛在匹配”單元為增益路徑的起點(diǎn),將該單元的位置坐標(biāo)計(jì)入增益路徑數(shù)組path后,進(jìn)入步驟5.5,否則將該“潛在匹配”單元所在行中的“已匹配”的單元所在對(duì)應(yīng)列的列標(biāo)記i設(shè)置為0;
若在步驟5.4中未找到任何“潛在匹配”單元或增益路徑的起點(diǎn),進(jìn)入步驟5.6中;
步驟5.5,建立增益路徑,自步驟5.4中找到的作為增益路徑起點(diǎn)的“潛在匹配”單元開(kāi)始,在匹配標(biāo)記矩陣中檢查:
若該“潛在匹配”單元所在列中有在標(biāo)記為“已匹配”的單元開(kāi)始,在匹配標(biāo)記矩陣中檢查;
若該“潛在匹配”單元所在列中有在標(biāo)記為“已匹配”的單元,則將該“已匹配”的單元和該“已匹配”的單元所在行中的“潛在匹配”單元作為增益點(diǎn)添加到增益路徑數(shù)組中,并按照上述方式繼續(xù)檢查此新加入增益路徑的“潛在匹配”單元,直至找到某一“潛在匹配”單元其所在列中不存在“已匹配”的單元,將此“潛在匹配”單元作為增益路徑的終點(diǎn);
在匹配標(biāo)記矩陣m中,將增益路徑上所有的“已匹配”的單元標(biāo)記為“未匹配”的單元,將增益路徑上所有的“潛在匹配”的單元標(biāo)記為“已匹配”的單元;將匹配標(biāo)記矩陣中其余的“潛在匹配”的單元標(biāo)記為“未匹配”的單元,將行標(biāo)記數(shù)組與列標(biāo)記數(shù)組恢復(fù)初始值,將增益路徑數(shù)組清空,重新進(jìn)入步驟5.3中;
步驟5.6、找出拓展匹配度矩陣中所有對(duì)應(yīng)行標(biāo)記與列標(biāo)記均為0的單元,這些單元構(gòu)成了潛在匹配區(qū)域,找出潛在匹配區(qū)域中最小的值,并對(duì)區(qū)域中的每一單元減去該最小值,然后再次進(jìn)入步驟5.4中。
在步驟5中,先由步驟5.1計(jì)算出對(duì)象與角色一對(duì)一優(yōu)化匹配問(wèn)題中各角色的最近匹配位置,同時(shí)保持各對(duì)象在各角色上的匹配優(yōu)先順序不變,在通過(guò)步驟5.2將對(duì)象與角色進(jìn)行初步優(yōu)化匹配;之后由步驟5.3檢測(cè)是否所有對(duì)象均有匹配對(duì)象,若是則優(yōu)化匹配完成,否則交由后續(xù)步驟逐步增加匹配的對(duì)象與角色的對(duì)數(shù),直到滿足所有角色均有對(duì)象;步驟5.4的主要作用是查找并標(biāo)記潛在的匹配單元,并檢測(cè)“潛在匹配”單元是否是增益路徑的起點(diǎn),若未能找到任何“潛在匹配”的單元或增益路徑的起點(diǎn),則交由步驟5.6通過(guò)計(jì)算,在不改變匹配有限順序的前提下,在潛在匹配區(qū)域增加新的“潛在匹配”的單元,每次對(duì)步驟5.6的調(diào)用保證至少可能加1個(gè)“潛在匹配”的單元;若找到增益路徑的起點(diǎn),則由步驟5.5建立增益路徑,增加匹配的對(duì)象與角色的對(duì)數(shù),每次對(duì)步驟5.5的調(diào)用,可增加一對(duì)匹配的對(duì)象與角色,完成增益后,交由步驟5.3重新檢測(cè)是否已完成優(yōu)化匹配。
步驟6、對(duì)步驟5獲得的對(duì)象與角色一對(duì)一優(yōu)化匹配問(wèn)題的最優(yōu)匹配方案進(jìn)行壓縮,獲取對(duì)象與角色多對(duì)一優(yōu)化匹配問(wèn)題的最優(yōu)匹配方案,具體按照以下步驟實(shí)施:
步驟6.1、建立對(duì)象與角色多對(duì)一優(yōu)化匹配方案矩陣fm,fm的大小為m×n,fm[i][j](0≤i<m,0≤j<n)表示對(duì)象與角色多對(duì)一優(yōu)化匹配方案中i號(hào)對(duì)象在j號(hào)角色上的匹配情況,分別用數(shù)字0和1表示未匹配和已匹配;
步驟6.2、在經(jīng)步驟5獲得的對(duì)象與角色一對(duì)一優(yōu)化匹配方案中,將所有對(duì)應(yīng)對(duì)象與角色多對(duì)一優(yōu)化匹配問(wèn)題中同一角色的列,按列做加法運(yùn)算,將得出的結(jié)果逐次寫(xiě)入fm中。
由于步驟3將隊(duì)友與角色多對(duì)一優(yōu)化匹配問(wèn)題以等價(jià)分解的方式轉(zhuǎn)化成了對(duì)象與角色一對(duì)一優(yōu)化匹配問(wèn)題,因?yàn)椴襟E6實(shí)際是對(duì)對(duì)象與角色一對(duì)一優(yōu)化匹配的最優(yōu)匹配方案執(zhí)行步驟3的逆運(yùn)算,從而得到對(duì)象與角色多對(duì)一優(yōu)化匹配的最優(yōu)匹配方案。
實(shí)施例:
設(shè)定某it公司有一個(gè)項(xiàng)目需要完成,該項(xiàng)目對(duì)人員的要求如下:
需程序員3人,美工1人,測(cè)試員2人;
該公司現(xiàn)有6人可供選用,經(jīng)人力資源部門(mén)評(píng)估,這6人在上述三項(xiàng)工作上的能力評(píng)估結(jié)果如表1所示,(滿分為100分);
表1三項(xiàng)工作上的能力評(píng)估結(jié)果
現(xiàn)要求在不兼職的情況下,做出滿足各工作需求且評(píng)估結(jié)果最好的匹配方案,具體實(shí)施方法如下:
步驟1,建立用以描述對(duì)象與角色多對(duì)一優(yōu)化問(wèn)題的數(shù)學(xué)模型,該數(shù)學(xué)模型具體包括以下四個(gè)部分:
第一部分:在此實(shí)施例中有1名人員參與匹配,m=6;
第二部分:在此實(shí)施范例中有3項(xiàng)工作需要人員參與,n=3;
第三部分:在此實(shí)施例中,l的大小為3;
l={3,1,2}表示需程序員3人,美工1人,測(cè)試員2人;
第四部分:在此實(shí)施例中,由人員評(píng)估結(jié)果組成大小為6×3的匹配度矩陣,由表1可得:
步驟2,對(duì)步驟1建立的數(shù)學(xué)模型進(jìn)行預(yù)處理,具體按照以下步驟實(shí)施:
步驟2.1、檢查是否有足夠數(shù)量的對(duì)象以滿足所有角色的需求,即檢查是否滿足條件:
若不滿足此條件,則說(shuō)明對(duì)象數(shù)量不足,無(wú)法滿足匹配要求,退出優(yōu)化程序;若滿足此條件,進(jìn)入步驟2.2;
步驟2.2、根據(jù)優(yōu)化目標(biāo)對(duì)匹配度矩陣c進(jìn)行預(yù)處理:
在此實(shí)施例中,優(yōu)化目標(biāo)是求總評(píng)估結(jié)果最好的方案,評(píng)估分?jǐn)?shù)的上限是100,經(jīng)步驟2.2后,匹配度矩陣具體如下:
步驟3、經(jīng)步驟2,將對(duì)象與角色多對(duì)優(yōu)化匹配問(wèn)題轉(zhuǎn)化為等價(jià)的對(duì)象與角色一對(duì)一優(yōu)化匹配問(wèn)題,具體按照以下步驟實(shí)施;
步驟3.1,建立拓展匹配度矩陣tc,tc的大小為
步驟3.2,將匹配度矩陣c中的每一列,逐次寫(xiě)入拓展匹配度矩陣tc,每一列寫(xiě)入的次數(shù)與該列所對(duì)應(yīng)角色在角色需求數(shù)組l中要去的對(duì)象數(shù)量相等,在此實(shí)施例中,有匹配度矩陣與角色需求數(shù)組得到的拓展匹配度矩陣具體如下:
步驟4,針對(duì)步驟3得到的對(duì)象與角色一對(duì)一優(yōu)化匹配問(wèn)題,建立相應(yīng)的輔助標(biāo)記數(shù)據(jù),具體包括如下四個(gè)部分:
第一部分:匹配標(biāo)記矩陣使用矩陣m表示對(duì)象與角色一對(duì)一優(yōu)化匹配過(guò)程中,各對(duì)象在各角色上的匹配狀態(tài);m的大小為
第二部分:使用數(shù)組row表示對(duì)象與角色一對(duì)一優(yōu)化匹配過(guò)程中,各對(duì)象的狀態(tài),row的大小為m,row[i](0≤i<m)表示i號(hào)對(duì)象的狀態(tài),對(duì)象的狀態(tài)分為“沒(méi)有潛在匹配的角色”與“有潛在角色”,分別用數(shù)字“0”與“1”表示;在建立時(shí)將row中所有單元設(shè)置為初始值0,在此實(shí)施例中,建立大小為6的行標(biāo)記數(shù)組,并初始化為如下形式:
row={0,0,0,0,0,0};
第三部分:使用數(shù)組col表示對(duì)象與角色一對(duì)一優(yōu)化過(guò)程中,各角色的狀態(tài),col的大小
在建立時(shí)將col中所有單元設(shè)置為初始值0;
在此實(shí)施例中,建立大小為6的列標(biāo)記數(shù)組,并初始化為如下形式:
col={0,0,0,0,0,0};
第四部分:使用二維數(shù)組path存儲(chǔ)對(duì)象與角色一對(duì)一優(yōu)化匹配過(guò)程中查找出的增益路徑上的各增益點(diǎn),在匹配標(biāo)記矩陣m中的位置坐標(biāo);path的大小為
在此實(shí)施例中,建立大小為12×2的增益路徑數(shù)組,并初始化為空數(shù)組;
步驟5,利用步驟4中建立的輔助標(biāo)記數(shù)據(jù),對(duì)步驟3得到的對(duì)象與角色一對(duì)一優(yōu)化匹配問(wèn)題進(jìn)行優(yōu)化處理,獲取對(duì)象與角色一對(duì)一優(yōu)化匹配問(wèn)題的最優(yōu)匹配方案,具體按照以下步驟實(shí)施:
步驟5.1、對(duì)拓展匹配度矩陣tc中的每一列,找出該列中最小值,并對(duì)該列中的每一單元減去該最小值,進(jìn)入步驟5.2;
步驟5.2,逐一檢查拓展匹配矩陣tc中的每一單元,若某單元的值為0,且其所在行與列中沒(méi)有其他單元被標(biāo)記為“已匹配”,則將該單元標(biāo)記為“已匹配”,將匹配標(biāo)記矩陣m中對(duì)應(yīng)位置的單元的值設(shè)置為1,進(jìn)入步驟5.3;
步驟5.3,逐列檢查匹配表姐矩陣m,若某列中標(biāo)記為“已匹配”的單元,則將該列標(biāo)記為“有唯一匹配的對(duì)象”,將列標(biāo)記數(shù)組col中對(duì)應(yīng)單元的值設(shè)置為1,若最終列標(biāo)記數(shù)組中所有單元的值為1,則當(dāng)前匹配標(biāo)記矩陣m中所有標(biāo)記為“已匹配”的單元構(gòu)成對(duì)象與角色一對(duì)一優(yōu)化匹配問(wèn)題的最優(yōu)匹配方案,步驟5結(jié)束,否則進(jìn)入步驟5.4;
步驟5.4,逐一檢查拓展匹配度矩陣tc中的每一單元,若某單元的值為0,且該單元對(duì)應(yīng)的行標(biāo)記與列標(biāo)記的值均為0,則將該單元標(biāo)記為“潛在匹配”單元,將匹配標(biāo)記矩陣m中對(duì)應(yīng)單元的值設(shè)置為2,同時(shí)將該單元所在行的行標(biāo)記設(shè)置為1,進(jìn)而檢查該“潛在匹配”,若其所在行中不存在“已匹配”的單元,則該“潛在匹配”為增益路徑的起點(diǎn),將該單元的位置坐標(biāo)記入增益路徑數(shù)組path后,進(jìn)入步驟5.5否則將該“潛在匹配”單元所在行中的“已匹配”單元所對(duì)應(yīng)列的列標(biāo)記設(shè)置為0,若在此步驟中未找到任何“潛在匹配”單元或增益路徑的起點(diǎn),則進(jìn)入步驟5.6;
步驟5.5,建立增益路徑,自步驟5.4中找到的作為增益路徑起點(diǎn)的“潛在匹配”單元開(kāi)始,在匹配標(biāo)記矩陣中檢查:若該“潛在匹配”單元所在列中存在標(biāo)記為“已匹配”的單元,則將該“已匹配”的單元和該“已匹配”單元所在行中的“潛在匹配”單元作為增益點(diǎn)添加到增益路徑數(shù)組中,并按照上述方式繼續(xù)檢查此新加入增益路徑的“潛在匹配”單元,直至找到某一“潛在匹配”單元其所在列中不存在“已匹配”的單元,將此“潛在匹配”單元作為增益路徑的終點(diǎn);在匹配標(biāo)記矩陣m中,將增益路徑上所有的“已匹配”的單元標(biāo)記為“未匹配”的單元,將增益路徑上所有的“潛在匹配”的單元標(biāo)記為“已匹配”的單元;將匹配標(biāo)記矩陣中其余的“潛在匹配”的單元標(biāo)記為“未匹配”的單元,將行標(biāo)記數(shù)組與列標(biāo)記數(shù)組恢復(fù)初始值,將增益路徑數(shù)組清空,重新進(jìn)入步驟5.3中;
步驟5.6、找出拓展匹配度矩陣中所有對(duì)應(yīng)行標(biāo)記與列標(biāo)記均為0的單元,這些單元構(gòu)成了潛在匹配區(qū)域,找出潛在匹配區(qū)域中最小的值,并對(duì)區(qū)域中的每一單元減去該最小值,然后再次進(jìn)入步驟5.4中;
在此實(shí)例中,步驟5首先調(diào)用步驟5.1,得到的拓展匹配度矩陣如下:
再調(diào)用步驟5.2進(jìn)行初步匹配,得到的匹配度標(biāo)記矩陣如下:
調(diào)用步驟5.3對(duì)匹配標(biāo)記矩陣進(jìn)行檢查,得到列標(biāo)記數(shù)組為如下形式:
col={1,0,0,1,1,0};
由于col中存在0值,即存在角色尚未匹配對(duì)象,所以進(jìn)入步驟5.4;
調(diào)用步驟5.4,對(duì)潛在匹配單元進(jìn)行標(biāo)記,得到匹配標(biāo)記矩陣如下:
行標(biāo)記數(shù)組為:row={0,1,0,0,1,0},列標(biāo)記數(shù)組為:col={0,0,0,1,0,0}
因?yàn)槲凑业皆鲆媛窂狡瘘c(diǎn),所以進(jìn)入步驟5.6;
調(diào)用步驟5.6,找到潛在匹配區(qū)域中的最小值16,對(duì)潛在匹配區(qū)域各單元減去16后,得到的拓展匹配度矩陣如下:
調(diào)用步驟5.4,標(biāo)記新增的“潛在匹配”單元,得到匹配標(biāo)記矩陣如下:
行標(biāo)記數(shù)組為:row={0,1,1,0,1,0},列標(biāo)記數(shù)組為:col={0,0,0,1,0,0}
因未找到增益路徑起點(diǎn),進(jìn)入步驟5.6;
調(diào)用步驟5.6,找到潛在匹配區(qū)域中的最小值10,對(duì)潛在匹配區(qū)域各單元減去10后,得到的拓展匹配度矩陣如下:
調(diào)用步驟5.4,標(biāo)記新增的“潛在匹配”單元,得到匹配標(biāo)記矩陣如下:
在標(biāo)記過(guò)程中,檢測(cè)到“潛在匹配”單元m[0][0]為增益路徑起點(diǎn),進(jìn)入步驟5.5;
調(diào)用步驟5.5,建立增益路徑,得到增益路徑為:
m[0][0]→m[4][0]→m[4][1]
經(jīng)增益操作后,得到匹配標(biāo)記矩陣如下:
將行標(biāo)記數(shù)組與列標(biāo)記數(shù)組回復(fù)初始值,將增益路徑數(shù)組清空后,進(jìn)入步驟5.3,調(diào)用步驟5.3對(duì)匹配標(biāo)記矩陣進(jìn)行檢查,得到列標(biāo)記數(shù)組為:
col={1,1,0,1,1,0};
由于col中存在0值單元,即存在角色尚未匹配對(duì)象,則進(jìn)入步驟5.4;
調(diào)用步驟5.4,對(duì)“潛在匹配”單元進(jìn)行標(biāo)記,得到匹配標(biāo)記矩陣如下:
行標(biāo)記數(shù)組為:row={1,1,1,0,1,0},列標(biāo)記數(shù)組為:col={0,0,0,0,0,0};
因未找到增益路徑起點(diǎn),所以進(jìn)入步驟5.6;
調(diào)用步驟5.6,找到潛在匹配區(qū)域中的最小值13,對(duì)潛在匹配區(qū)域各單元減去13后,得到的拓展匹配度矩陣如下:
調(diào)用步驟5.4,對(duì)新增的“潛在匹配”單元進(jìn)行標(biāo)記,得到匹配標(biāo)記矩陣如下:
在標(biāo)記過(guò)程中,檢測(cè)到“潛在匹配”單元m[5][0]為增益路徑起點(diǎn),進(jìn)入步驟5.5;調(diào)用步驟5.5,建立增益路徑,得到增益路徑為:
m[5][0]→m[0][0]→m[0][1]→m[4][1]→m[4][2]
經(jīng)增益操作后,得到匹配標(biāo)記矩陣如下:
將行標(biāo)記數(shù)組與列標(biāo)記數(shù)組恢復(fù)初始值,將增益路徑數(shù)組清空后,進(jìn)入步驟5.3,調(diào)用步驟5.3對(duì)匹配標(biāo)記矩陣進(jìn)行檢查,得到列標(biāo)記數(shù)組為:
col={1,1,1,1,1,0};
由于col中存在0值單元,即存在角色尚未匹配對(duì)象,所以進(jìn)入步驟5.4;調(diào)用步驟5.4,對(duì)“潛在匹配”單元進(jìn)行標(biāo)記,得到匹配標(biāo)記矩陣如下:
行標(biāo)記數(shù)組為:row={0,1,1,0,0,0},列標(biāo)記數(shù)組為:col={1,1,1,0,0,0};
因未找到增益路徑起點(diǎn),所以進(jìn)入步驟5.6;
調(diào)用步驟5.6,找到潛在匹配區(qū)域中的最小值11,對(duì)潛在匹配區(qū)域各單元減去11后,得到的拓展匹配度矩陣如下:
調(diào)用步驟5.4,對(duì)新增的“潛在匹配”單元進(jìn)行標(biāo)記,得到匹配標(biāo)記矩陣如下:
行標(biāo)記數(shù)組為:row={0,1,1,0,1,1},列標(biāo)記數(shù)組為:col={0,1,0,0,0,0},因未找到增益路徑的起點(diǎn),進(jìn)入步驟5.6;
調(diào)用步驟5.6,找到潛在匹配區(qū)域最小值為0,因此保持拓展匹配度矩陣不變;
調(diào)用步驟5.4,對(duì)新增的“潛在匹配”單元進(jìn)行標(biāo)記,得到匹配標(biāo)記矩陣如下:
行標(biāo)記數(shù)組為row={1,1,1,0,1,1},列標(biāo)記數(shù)組為col={0,0,0,0,0,0},因未找到增益路徑的起點(diǎn),進(jìn)入步驟5.6;
調(diào)用步驟5.6,找到潛在匹配區(qū)域最小值為15,對(duì)潛在匹配區(qū)域各單元減去15后,得到拓展匹配度矩陣如下:
調(diào)用步驟5.4對(duì)新增的“潛在匹配”單元進(jìn)行標(biāo)記,得到匹配標(biāo)記矩陣如下:
在標(biāo)記過(guò)程中檢測(cè)到“潛在匹配”單元m[3][3]為增益路徑起點(diǎn),進(jìn)入步驟5.5;
調(diào)用步驟為5.5,建立增益路徑,得到增益路徑為:
m[3][3]→m[2][3]→m[2][4]→m[1][4]→m[1][5]
經(jīng)增益操作后,得匹配標(biāo)記矩陣如下:
將行標(biāo)記數(shù)組與列標(biāo)記數(shù)組恢復(fù)初始值,將增益路徑數(shù)組清空后,進(jìn)入步驟5.3;
調(diào)用步驟5.3對(duì)匹配標(biāo)記矩陣進(jìn)行檢查,得到列標(biāo)記數(shù)組如下:
col={1,1,1,1,1,1};
由于col所有值均為1,當(dāng)前的匹配標(biāo)記矩陣為對(duì)象與角色一對(duì)一優(yōu)化匹配的最優(yōu)匹配方案,步驟5結(jié)束;
步驟6,對(duì)步驟5獲得的對(duì)象與角色一對(duì)一優(yōu)化匹配問(wèn)題的最優(yōu)匹配方案進(jìn)行壓縮,獲取對(duì)象與角色多對(duì)一優(yōu)化匹配問(wèn)題的最優(yōu)匹配方案,具體按照以下步驟實(shí)施:
步驟6.1、建立對(duì)象與角色多對(duì)一優(yōu)化匹配方案矩陣fm,fm的大小為m×n,m[i][j](0≤i<m,0≤j<n)表示對(duì)象與角色多對(duì)一優(yōu)化匹配方案中,i號(hào)對(duì)象在j號(hào)角色上的匹配情況,分別用數(shù)字0,1表示未匹配和已匹配,在此實(shí)施例中,應(yīng)建立大小為6×3的對(duì)象與角色多對(duì)一優(yōu)化匹配方案矩陣;
步驟6.2、將步驟5獲得的對(duì)象與角色一對(duì)一優(yōu)化匹配方案中,所有對(duì)應(yīng)對(duì)象與角色多對(duì)一優(yōu)化匹配問(wèn)題中同一角色的列,按列做加法運(yùn)算,將得出的結(jié)果逐次寫(xiě)入fm中,在此實(shí)施例中,將步驟5得到的對(duì)象與角色一對(duì)一優(yōu)化匹配方案進(jìn)行壓縮,得到的對(duì)象與角色多對(duì)一優(yōu)化匹配方案矩陣如下:
按此最優(yōu)方案,0號(hào)、4號(hào)和5號(hào)員工擔(dān)任程序員,3號(hào)員工擔(dān)任美工,1號(hào)和2號(hào)員工擔(dān)任測(cè)試員,該方案的總評(píng)估成績(jī)?yōu)?15,是在不兼職情況下的最優(yōu)匹配方案,符合問(wèn)題要求。
本發(fā)明對(duì)象與角色多對(duì)一優(yōu)化匹配的方法,實(shí)現(xiàn)了在確保匹配方案最優(yōu)性的同時(shí),具有算法復(fù)雜度低,優(yōu)化目標(biāo)靈活的特點(diǎn),提高了可處理問(wèn)題的規(guī)模限制,為解決實(shí)際問(wèn)題應(yīng)用中各類對(duì)象與角色多對(duì)一優(yōu)化匹配問(wèn)題提供了高效,準(zhǔn)確,靈活的解決方案。