一種基于規(guī)則的軟件體系結(jié)構(gòu)層性能演化優(yōu)化方法
【專利摘要】本發(fā)明涉及一種基于規(guī)則的軟件體系結(jié)構(gòu)層性能演化優(yōu)化方法,采用遺傳算法進(jìn)行軟件體系結(jié)構(gòu)層性能演化優(yōu)化:A.進(jìn)行種群初始化;B.輸入個(gè)體編碼(規(guī)則號(hào)序列)、初始軟件體系結(jié)構(gòu)和規(guī)則使用歷史表,計(jì)算種群中每個(gè)個(gè)體的適應(yīng)度值;C.采用基于精英保留的輪盤賭選擇策略進(jìn)行選擇操作;D.采用帶約束檢查機(jī)制的一點(diǎn)交叉進(jìn)行交叉操作;E.采用帶約束檢查機(jī)制的一點(diǎn)變異進(jìn)行變異操作;F.判斷是否滿足終止條件,是則轉(zhuǎn)步驟G,否則基于步驟E得到的下一代種群,返回步驟B進(jìn)行下一次迭代;步驟G.將最優(yōu)個(gè)體中出現(xiàn)的0及沒有改進(jìn)效果的規(guī)則號(hào)依次刪除,獲得最優(yōu)改進(jìn)方案并輸出。該方法可降低軟件體系結(jié)構(gòu)層性能的優(yōu)化成本,提高優(yōu)化質(zhì)量。
【專利說明】一種基于規(guī)則的軟件體系結(jié)構(gòu)層性能演化優(yōu)化方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及軟件性能優(yōu)化【技術(shù)領(lǐng)域】,特別涉及一種基于規(guī)則的軟件體系結(jié)構(gòu)層性 能演化優(yōu)化方法。
【背景技術(shù)】
[0002] 軟件的性能是衡量軟件系統(tǒng)質(zhì)量的一個(gè)重要屬性,性能的優(yōu)劣已經(jīng)成為系統(tǒng)成敗 的關(guān)鍵因素。在軟件體系結(jié)構(gòu)(Software Architecture,簡(jiǎn)記為SA)設(shè)計(jì)階段進(jìn)行性能優(yōu) 化,可以盡早發(fā)現(xiàn)資源使用率過高、響應(yīng)時(shí)間過長(zhǎng)和吞吐量過小等性能問題,并通過相應(yīng)的 設(shè)計(jì)改進(jìn)緩解或消除這些問題,從而獲得滿足性能需求的SA設(shè)計(jì)方案,進(jìn)而可在軟件生命 周期的早期達(dá)到性能優(yōu)化的目的?;赟A進(jìn)行性能優(yōu)化,不僅可以顯著減少軟件性能優(yōu)化 的時(shí)間,而且能夠有效降低優(yōu)化的成本。
[0003] SA層性能優(yōu)化一直是軟件工程學(xué)術(shù)界和工業(yè)界高度關(guān)注的主題。經(jīng)過多年研究 和實(shí)踐,已產(chǎn)生一些普適性的SA層性能改進(jìn)知識(shí)。這些知識(shí)已被系統(tǒng)歸納和總結(jié)過,并用 自然語言描述的性能反模式進(jìn)行了適當(dāng)?shù)谋硎?。為了提高SA層性能優(yōu)化的自動(dòng)化程度,近 年來涌現(xiàn)出一些基于規(guī)則的優(yōu)化方法。這些方法以機(jī)器可處理的性能改進(jìn)規(guī)則形式精確地 描述了 SA層性能反模式,并通過研發(fā)規(guī)則執(zhí)行引擎,使得性能優(yōu)化過程可以自動(dòng)地使用這 些規(guī)則。然而這些方法在優(yōu)化過程中未充分考慮規(guī)則組合使用場(chǎng)景下各規(guī)則的使用次數(shù) 和使用順序不確定性的問題,使得它們只能搜索相對(duì)較小的性能改進(jìn)空間,往往難以獲得 最優(yōu)的性能改進(jìn)方案。例如:文獻(xiàn)《An approach for modeling and detecting software performance antipatterns based on first-order logics))針對(duì)文獻(xiàn)〈〈Performance solutions: a practical guide to creating responsive, scalable software))> 《Software Performance Antipatterns》中的12種SA層性能反模式,給出了對(duì)應(yīng)的12條 改進(jìn)規(guī)則。即使不考慮規(guī)則可以重復(fù)使用的情景,由這12條規(guī)則不同組合的情況而構(gòu)成的 改進(jìn)空間也將高達(dá)12 12 (近9000萬億)個(gè)改進(jìn)方案。在如此龐大的SA層性能改進(jìn)空間中, 如何找出最優(yōu)性能改進(jìn)方案仍是一個(gè)亟待解決的問題。
【發(fā)明內(nèi)容】
[0004] 本發(fā)明的目的在于提供一種基于規(guī)則的軟件體系結(jié)構(gòu)層性能演化優(yōu)化方法,該方 法可降低軟件體系結(jié)構(gòu)層性能的優(yōu)化成本,提高優(yōu)化質(zhì)量。
[0005] 為實(shí)現(xiàn)上述目的,本發(fā)明的技術(shù)方案是:一種基于規(guī)則的軟件體系結(jié)構(gòu)層性能演 化優(yōu)化方法,采用遺傳算法進(jìn)行軟件體系結(jié)構(gòu)層性能演化優(yōu)化,包括以下步驟: 步驟A.進(jìn)行種群初始化:設(shè)置種群規(guī)模、交叉概率、變異概率、最大進(jìn)化代數(shù)、迭代數(shù) ?=〇,并采用一定的個(gè)體編碼方法,隨機(jī)生成初始種群PU)中的每個(gè)個(gè)體;所述個(gè)體編碼方 法為: 任意個(gè)體的編碼^^=<_:111>尤^,--_-3:^|^---,' /,,__>均采用定長(zhǎng)自然數(shù)編碼, 碼長(zhǎng)7,由下式定義:
【權(quán)利要求】
1. 一種基于規(guī)則的軟件體系結(jié)構(gòu)層性能演化優(yōu)化方法,其特征在于,采用遺傳算法進(jìn) 行軟件體系結(jié)構(gòu)層性能演化優(yōu)化,包括以下步驟:
步驟A.進(jìn)行種群初始化:設(shè)置種群規(guī)模、交叉概率、變異概率、最大進(jìn)化代數(shù)、迭代數(shù) ^0,并采用一定的個(gè)體編碼方法,隨機(jī)生成初始種群PU)中的每個(gè)個(gè)體;所述個(gè)體編碼方 法為: 任意個(gè)體的編碼 均采用定長(zhǎng)自然數(shù)編碼, 碼長(zhǎng)由下式定義:
其中^表示i號(hào)規(guī)則最多可使用的次數(shù);規(guī)則號(hào)1到n表示對(duì)n條性能改進(jìn)規(guī)則的依 次編號(hào);特別地,引入〇號(hào)規(guī)則表示不做任何動(dòng)作的空規(guī)則,并令:1)〇號(hào)規(guī)則最多可使用的 次數(shù)《〇=廠;2) 〇號(hào)規(guī)則作用在任何軟件體系結(jié)構(gòu)說上都沒有性能改進(jìn);3)由0號(hào)規(guī)則構(gòu) 成的單規(guī)則序列作用在任何軟件體系結(jié)構(gòu)5?上得到的改進(jìn)后的軟件體系結(jié)構(gòu)仍是5? ; 的每位X%滿足下式:
其中表示自然數(shù); 中i號(hào)規(guī)則出現(xiàn)的次數(shù)記為AiCT),其滿足下式:
步驟B.適應(yīng)度計(jì)算:輸入個(gè)體編碼Z'初始軟件體系結(jié)構(gòu)SAc^P空的規(guī)則使用歷史表T_RuleUseInHis,采用solveFitness算法計(jì)算/*(()中每個(gè)個(gè)體的適應(yīng)度值fitness,并更 新T_RuleUseInHis表;T_RuleUseInHis表包括rulNum、loc、nxtRulNum、impNum、totNum五 個(gè)字段,rulNum表示規(guī)則號(hào),Ioc表示規(guī)則號(hào)在編碼中的位置,nxtRulNum表示loc+1位置 的規(guī)則號(hào),若l〇c+l大于碼長(zhǎng),則其值為-1,impNum表不在Ioc和loc+1位置的規(guī)則號(hào)分別 是rulNum和nxtRulNum的情景下,rulNum對(duì)應(yīng)規(guī)則有改進(jìn)效果的使用次數(shù),totNum表示在 Ioc和loc+1位置的規(guī)則號(hào)分別是rulNum和nxtRulNum的情景下,rulNum對(duì)應(yīng)規(guī)則的使用 總數(shù);所述solveFitness算法包括以下步驟: BI.將個(gè)體編碼中的0號(hào)規(guī)則依次全部刪除,獲得規(guī)則號(hào)序列 B2.將初始軟件體系結(jié)構(gòu)SAci和規(guī)則號(hào)序列Z作為一定的規(guī)則序列執(zhí)行算法的輸入, 運(yùn)行所述規(guī)則序列執(zhí)行算法,輸出X對(duì)應(yīng)規(guī)則序列執(zhí)行前的系統(tǒng)響應(yīng)時(shí)間BRT和執(zhí)行后的 系統(tǒng)響應(yīng)時(shí)間ART,以及序列中規(guī)則使用情況表T_RuleUseInSeq;T_RuleUseInSeq表包括 rulNum、loc、islmp三個(gè)字段,rulNum表示規(guī)則號(hào),Ioc表示規(guī)則號(hào)在X中的位置,islmp表 示根據(jù)Ioc位置上編號(hào)為rulNum的規(guī)則執(zhí)行前后的系統(tǒng)響應(yīng)時(shí)間,判定該規(guī)則的應(yīng)用是否 有性能改進(jìn)效果,是則islmp為1,否則為0 ; B3.根據(jù)Z對(duì)應(yīng)規(guī)則序列執(zhí)行前的系統(tǒng)響應(yīng)時(shí)間BRT和執(zhí)行后的系統(tǒng)響應(yīng)時(shí)間ART,計(jì) 算兩者的差值A(chǔ)jff; B4.根據(jù)T_RuleUSeInSeq表,統(tǒng)計(jì)有性能改進(jìn)效果的規(guī)則數(shù)OO和使用的 總規(guī)則數(shù),按下式計(jì)算出個(gè)體編碼r的適應(yīng)度值fitness:
其中,Z為刪除中出現(xiàn)的O號(hào)規(guī)則得到的規(guī)則號(hào)序列; B5?根據(jù) T_RuleUseInSeq 表,更新 T_RuleUseInHis 表; B6.輸出適應(yīng)度值fitness和更新后的T_RuleUseInHis表,算法結(jié)束; 步驟C.選擇操作:采用基于精英保留的輪盤賭選擇策略在PU)上進(jìn)行個(gè)體選擇,并 生成臨時(shí)種群Z71 (0 ; 步驟D.交叉操作:采用帶約束檢查機(jī)制的一點(diǎn)交叉,對(duì)交叉操作生成的兩個(gè)新個(gè)體, 從交叉位開始至最后一位依次檢查每位上的規(guī)則號(hào)是否違反最大出現(xiàn)次數(shù)的約束,若違反 則將該位賦值為〇;按此方法在上進(jìn)行交叉操作生成臨時(shí)種群Aa); 步驟E.變異操作:采用帶約束檢查機(jī)制的一點(diǎn)變異,變異操作后執(zhí)行約束檢查,若變 異后的規(guī)則號(hào)違反最大出現(xiàn)次數(shù)的約束,則將變異位賦值為〇;按此方法在AU)上進(jìn)行變 異操作生成下一代種群; 步驟F.判斷是否滿足終止條件:最優(yōu)個(gè)體經(jīng)過多次迭代后其適應(yīng)度不再發(fā)生變化, 或者迭代次數(shù)達(dá)到最大進(jìn)化代數(shù),是則轉(zhuǎn)步驟G,否則基于步驟E得到的下一代種群,返回 步驟B進(jìn)行下一次迭代; 步驟G.將最優(yōu)個(gè)體中出現(xiàn)0及沒有改進(jìn)效果的規(guī)則號(hào)依次刪除,獲得最優(yōu)改進(jìn)方案X并輸出。
2. 根據(jù)權(quán)利要求1所述的一種基于規(guī)則的軟件體系結(jié)構(gòu)層性能演化優(yōu)化方法,其特征 在于,在步驟B2中,所述規(guī)則序列執(zhí)行算法包括以下步驟: B201.分別將待改進(jìn)軟件體系結(jié)構(gòu)說、當(dāng)前位置i、T_RuleUseInSeq表、BRT和ART賦 值為初始軟件體系結(jié)構(gòu)SAtlU、空、-1和-1 ; B202.判斷i是否大于Z的長(zhǎng)度,是則轉(zhuǎn)步驟B206,否則轉(zhuǎn)步驟B203 ; B203.取Z的第i個(gè)元素并根據(jù)編號(hào)^從規(guī)則庫(kù)取出對(duì)應(yīng)的規(guī)則,并與待改進(jìn)軟件 體系結(jié)構(gòu)5? -并交由規(guī)則執(zhí)行引擎執(zhí)行; B204.根據(jù)規(guī)則執(zhí)行引擎返回的執(zhí)行前系統(tǒng)響應(yīng)時(shí)間BRTi和執(zhí)行后系統(tǒng)響應(yīng)時(shí)間 ARTi,計(jì)算BRTi與ARTi兩者的差值: B2041.若BRT為-1,則把BRTi賦值給BRT; B2042.將ARTi 賦值給ART; B2043?若 AjlffX),將記錄 Oi,i, 1)插入 T_RuleUseInSeq 表中,否則將記錄 Oi,i, 〇)插入 T_RuleUseInSeq 表中; B2044.若△#>0,則將規(guī)則執(zhí)行引擎返回的改進(jìn)后軟件體系結(jié)構(gòu)賦值給說,使其成為 下一條規(guī)則執(zhí)行時(shí)的待改進(jìn)軟件體系結(jié)構(gòu); B205.令i=i+l,并轉(zhuǎn)步驟B203; B206?輸出 BRT、ARI^P T_RuleUseInSeq 表,算法結(jié)束。
3. 根據(jù)權(quán)利要求1所述的一種基于規(guī)則的軟件體系結(jié)構(gòu)層性能演化優(yōu)化方法,其特征 在于,在步驟B5中,根據(jù)T_RuleUseInSeq表,按以下步驟更新T_RuleUseInHis表: B501.給變量i和7洲分別賦值1和T_RuleUseInSeq表的記錄數(shù); B502?若i<7洲,則轉(zhuǎn)步驟B503,否則更新結(jié)束; B503?從 T_RuleUseInSeq 中取出第/條記錄的值hq.,isJ聲; B504.在1'_1?11161]861111^8 表中按主碼值為 = 八 應(yīng)=77/77?%.八 nxtRulNum- 進(jìn)行查找,并將查找結(jié)果賦值給記錄; B505?若=IArecortZi 不空)條件成立,將recort/^ci錄中的impNum和totNum字段的值分別加1,并更新T_RuleUseInHis表中與recort/,.對(duì)應(yīng)的記錄; B506.若(Y1S1TffljDi =OArecortZi不空)條件成立,將TecortZi記錄中的totNum字段值 加1,并更新T_RuleUseInHis表中的對(duì)應(yīng)記錄; B507.若(is/聲>,=I八recort/,為空八TrOci尹Z的長(zhǎng)度)條件成立,將記錄
插入 T_RuleUseInHis 表中; B508.若(Y1S1T^i = IArecortZi 為空八 TrOci =Z的長(zhǎng)度)條件成立,將記錄(rw/Mffl?,., ^Zoci, _1,1,1)插入 T_RuleUseInHis 表中; B509.若(Y1S1TffljDi =O八TecortZi為空八TrOci尹Z的長(zhǎng)度)條件成立,將記錄
插入 T_RuleUseInHis 表中; B510.若(Y1S1TffljDi =OArecortZi 為空八TrOci=Z的長(zhǎng)度)條件成立,將記錄(/WMffl?,., ^Zoci, _1,0,1)插入T_RuleUseInHis表中; B511.令i=i+l,并轉(zhuǎn)步驟B502。
4.根據(jù)權(quán)利要求1所述的一種基于規(guī)則的軟件體系結(jié)構(gòu)層性能演化優(yōu)化方法,其特征 在于,在步驟E中,基于一定的條件變異概率進(jìn)行變異操作,所述條件變異概率按如下方法 得到: 基于規(guī)則使用歷史表T_RuleUseInHis定義以下3個(gè)函數(shù): 1) 函數(shù)八(/,左,?)表示在T_RuleUseInHis表中按主碼值為JrOc=j?八=左 八= ?進(jìn)行查找,若查找不到返回0,否則返回記錄中impNum和totNum字段值 的比值; 2) 定義函數(shù)左)表示在T_RuleUseInHis表中按條件/oc=J'八=左進(jìn)行 查找,若查找不到返回空集0,否則返回所有滿足條件記錄中nxtRulNum字段值構(gòu)成的集 H^nxtRulNum>
O
【文檔編號(hào)】G06N3/12GK104268278SQ201410546025
【公開日】2015年1月7日 申請(qǐng)日期:2014年10月16日 優(yōu)先權(quán)日:2014年10月16日
【發(fā)明者】杜欣, 倪友聰, 葉鵬, 謝大同, 肖如良, 汪春燕, 昂鳳平, 王曉紅, 李松 申請(qǐng)人:福建師范大學(xué)