遺傳算法:動(dòng)態(tài)調(diào)參原理與工程實(shí)踐詳解)
1. 從“固定參數(shù)”到“動(dòng)態(tài)調(diào)參”的進(jìn)化之路在優(yōu)化算法的世界里遺傳算法Genetic Algorithm, GA一直以其強(qiáng)大的全局搜索能力和對(duì)問題模型依賴度低的特點(diǎn)吸引著眾多研究者和工程師。無(wú)論是解決經(jīng)典的旅行商問題TSP還是處理復(fù)雜的物流配送中心選址、機(jī)器人路徑規(guī)劃GA都展現(xiàn)出了不俗的潛力。然而但凡真正動(dòng)手實(shí)現(xiàn)過(guò)GA的朋友幾乎都繞不開一個(gè)核心的“玄學(xué)”問題交叉概率Pc和變異概率Pm到底該設(shè)成多少我剛開始接觸GA時(shí)也和大家一樣習(xí)慣性地從經(jīng)典教材或論文里抄來(lái)一組“經(jīng)驗(yàn)值”比如Pc0.8 Pm0.01。在簡(jiǎn)單的測(cè)試函數(shù)上這組參數(shù)或許能跑出不錯(cuò)的結(jié)果。但一旦問題規(guī)模變大、復(fù)雜度變高或者目標(biāo)函數(shù)變得崎嶇不平這套固定的參數(shù)組合就顯得力不從心了。要么收斂過(guò)早陷入局部最優(yōu)要么收斂過(guò)慢計(jì)算資源被白白消耗。這背后的根本矛盾在于在算法搜索的不同階段種群對(duì)“探索”和“開發(fā)”的需求是動(dòng)態(tài)變化的。早期種群多樣性高我們需要較強(qiáng)的“探索”能力通過(guò)交叉產(chǎn)生新結(jié)構(gòu)和一定的“擾動(dòng)”能力通過(guò)變異跳出局部以快速覆蓋解空間。后期種群趨于收斂我們需要更強(qiáng)的“開發(fā)”能力精細(xì)地在優(yōu)質(zhì)解附近搜索此時(shí)過(guò)高的交叉和變異反而會(huì)破壞已找到的好模式導(dǎo)致算法震蕩。固定參數(shù)無(wú)法響應(yīng)這種內(nèi)在的動(dòng)態(tài)需求這就催生了“自適應(yīng)方法”的誕生。自適應(yīng)方法的核心思想是讓交叉概率Pc和變異概率Pm不再是程序員預(yù)先設(shè)定的固定值而是能夠根據(jù)算法運(yùn)行過(guò)程中的實(shí)時(shí)反饋如種群適應(yīng)度、進(jìn)化代數(shù)、個(gè)體差異等進(jìn)行動(dòng)態(tài)調(diào)整的變量。這相當(dāng)于給遺傳算法裝上了一套“自動(dòng)駕駛”系統(tǒng)讓它能根據(jù)路況搜索狀態(tài)自動(dòng)調(diào)節(jié)油門探索力度和方向盤開發(fā)精度從而在求解效率和解的質(zhì)量之間找到更優(yōu)的平衡點(diǎn)。接下來(lái)我將深入拆解幾種主流且實(shí)用的自適應(yīng)策略并分享在實(shí)際編碼和調(diào)參中的心得體會(huì)。2. 基于種群適應(yīng)度統(tǒng)計(jì)的自適應(yīng)策略這是最直觀、也最常用的一類自適應(yīng)方法。其基本邏輯是種群的適應(yīng)度分布情況直接反映了搜索的狀態(tài)。如果種群中個(gè)體適應(yīng)度都很高且很接近說(shuō)明可能接近收斂應(yīng)降低探索力度如果適應(yīng)度差異很大說(shuō)明還在廣泛探索階段應(yīng)保持或增強(qiáng)探索。2.1 經(jīng)典Srinivas Patnaik方法這是自適應(yīng)遺傳算法Adaptive GA, AGA中一篇被廣泛引用的經(jīng)典工作。它根據(jù)個(gè)體適應(yīng)度與種群平均適應(yīng)度、最大適應(yīng)度的關(guān)系來(lái)調(diào)整Pc和Pm。交叉概率Pc的自適應(yīng)公式對(duì)于要進(jìn)行交叉的兩個(gè)父代個(gè)體其交叉概率不是固定的而是分別計(jì)算Pc k1 * (f_max - f) / (f_max - f_avg) 當(dāng)f f_avgPc k3 當(dāng)f f_avg變異概率Pm的自適應(yīng)公式對(duì)于要進(jìn)行變異的個(gè)體Pm k2 * (f_max - f) / (f_max - f_avg) 當(dāng)f f_avgPm k4 當(dāng)f f_avg公式解讀與實(shí)操要點(diǎn)f_max當(dāng)前種群中最大適應(yīng)度值。f_avg當(dāng)前種群平均適應(yīng)度值。f參與交叉的兩個(gè)個(gè)體中較大的適應(yīng)度值。f要進(jìn)行變異的個(gè)體適應(yīng)度值。k1, k2, k3, k4是常數(shù)需要預(yù)先設(shè)定且滿足0 k1, k2, k3, k4 1。通常k3和k4會(huì)設(shè)得比k1和k2大以確保適應(yīng)度低于平均的個(gè)體有更高的概率被交叉和變異促進(jìn)淘汰和更新。這個(gè)設(shè)計(jì)的精妙之處在于保護(hù)優(yōu)良模式對(duì)于適應(yīng)度高于平均的優(yōu)良個(gè)體f f_avg其交叉概率Pc與(f_max - f)成正比。這意味著個(gè)體越優(yōu)秀越接近f_max其Pc越小。這保護(hù)了優(yōu)質(zhì)基因不被輕易破壞。促進(jìn)劣勢(shì)個(gè)體更新對(duì)于適應(yīng)度低于平均的個(gè)體f f_avg直接賦予一個(gè)較高的固定交叉概率k3增加其被改變的機(jī)會(huì)加速淘汰或進(jìn)化。變異同理變異概率Pm的設(shè)計(jì)邏輯與Pc完全一致優(yōu)秀個(gè)體變異概率小劣勢(shì)個(gè)體變異概率大。編碼實(shí)現(xiàn)與坑點(diǎn)def adaptive_pc_pm(population, fitness, k10.8, k20.1, k30.9, k40.2): 計(jì)算當(dāng)前種群每個(gè)個(gè)體對(duì)應(yīng)的自適應(yīng)Pc和Pm :param population: 種群列表 :param fitness: 對(duì)應(yīng)的適應(yīng)度列表 :param k1, k2, k3, k4: 控制參數(shù) :return: pc_list, pm_list 每個(gè)個(gè)體對(duì)應(yīng)的概率 f_max max(fitness) f_avg sum(fitness) / len(fitness) pc_list [] pm_list [] for f in fitness: # 計(jì)算變異概率Pm if f f_avg: pm k2 * (f_max - f) / (f_max - f_avg) # 防止除零當(dāng)種群收斂時(shí)f_max可能等于f_avg if f_max f_avg: pm k4 # 或一個(gè)很小的值如0.001 else: pm k4 pm_list.append(pm) # 注意交叉概率是針對(duì)“配對(duì)”的這里先計(jì)算一個(gè)基礎(chǔ)值配對(duì)時(shí)再根據(jù)兩個(gè)個(gè)體的f確定 # 此處先計(jì)算每個(gè)個(gè)體如果作為“較優(yōu)父代”時(shí)的Pc基礎(chǔ)值 if f f_avg: pc_base k1 * (f_max - f) / (f_max - f_avg) if f_max f_avg: pc_base k3 else: pc_base k3 # 存儲(chǔ)這個(gè)基礎(chǔ)值在配對(duì)選擇時(shí)取兩個(gè)個(gè)體pc_base的均值或較小值作為本次交叉的Pc # 更常見的做法是在配對(duì)時(shí)根據(jù)兩個(gè)個(gè)體的適應(yīng)度實(shí)時(shí)計(jì)算Pc pc_list.append(pc_base) return pc_list, pm_list # 在交叉選擇循環(huán)中的使用示例 def crossover_pair(parent1, parent2, fitness1, fitness2, f_max, f_avg, k1, k3): f_prime max(fitness1, fitness2) if f_prime f_avg: pc k1 * (f_max - f_prime) / (f_max - f_avg) if f_max f_avg: pc k3 else: pc k3 # 然后根據(jù)這個(gè)pc決定是否對(duì)parent1和parent2執(zhí)行交叉 if random.random() pc: # 執(zhí)行交叉操作 pass注意實(shí)現(xiàn)時(shí)必須處理f_max f_avg的邊界情況即種群完全收斂或所有個(gè)體適應(yīng)度相同時(shí)分母為零。此時(shí)通常將Pc和Pm設(shè)置為一個(gè)較小的固定值如k3, k4或者直接跳過(guò)調(diào)整使用上一次的值。這是實(shí)際編碼中很容易忽略的bug。2.2 基于適應(yīng)度方差的動(dòng)態(tài)調(diào)整另一種思路是利用種群適應(yīng)度的方差或標(biāo)準(zhǔn)差來(lái)衡量種群的“聚集程度”。方差大說(shuō)明個(gè)體差異大種群分散應(yīng)鼓勵(lì)探索提高Pc適度提高Pm方差小說(shuō)明種群集中可能陷入局部最優(yōu)應(yīng)增加擾動(dòng)主要提高Pm或精細(xì)搜索降低Pc降低Pm但提高選擇壓力。一種簡(jiǎn)單的實(shí)現(xiàn)可以是Pc Pc_base α * (1 - σ_normalized)Pm Pm_base β * σ_normalized其中σ_normalized是歸一化后的適應(yīng)度標(biāo)準(zhǔn)差例如除以適應(yīng)度范圍α和β是調(diào)節(jié)系數(shù)。當(dāng)方差小σ_normalized接近0時(shí)Pc相對(duì)增加以促進(jìn)新結(jié)構(gòu)產(chǎn)生Pm接近基礎(chǔ)值當(dāng)方差大時(shí)Pm相對(duì)增加以增加多樣性。這個(gè)方法的調(diào)節(jié)邏輯需要根據(jù)具體問題反復(fù)試驗(yàn)不像Srinivas方法那樣有明確的生物學(xué)解釋但有時(shí)在復(fù)雜問題上更靈活。3. 基于進(jìn)化代數(shù)的自適應(yīng)策略這類方法將進(jìn)化代數(shù)iteration/generation作為一個(gè)重要的狀態(tài)信號(hào)。其核心假設(shè)是隨著進(jìn)化代數(shù)的增加算法應(yīng)從全局探索逐步轉(zhuǎn)向局部開發(fā)。3.1 線性或非線性衰減/增長(zhǎng)最簡(jiǎn)單的方式是讓Pc和Pm隨著代數(shù)變化。Pc交叉概率初期可設(shè)較高以快速混合基因探索解空間后期可線性或非線性降低以保護(hù)已找到的優(yōu)良模式促進(jìn)收斂。Pc(g) Pc_initial - (Pc_initial - Pc_final) * (g / G_max)^k其中g(shù)是當(dāng)前代數(shù)G_max是最大代數(shù)k是衰減系數(shù)k1為線性衰減k1為初期衰減快k1為后期衰減快。Pm變異概率變異的作用更為復(fù)雜。初期一定的變異有助于增加多樣性中期變異是跳出局部最優(yōu)的關(guān)鍵后期過(guò)高的變異會(huì)阻礙收斂。因此Pm的變化曲線可能不是單調(diào)的。一種常見的策略是讓Pm先小幅上升再下降或者在整個(gè)過(guò)程中保持一個(gè)相對(duì)較低但動(dòng)態(tài)的值。在路徑規(guī)劃問題中的應(yīng)用思考在解決機(jī)器人路徑規(guī)劃或物流配送選址問題時(shí)初期種群可能包含大量無(wú)效碰撞或極長(zhǎng)的路徑。此時(shí)較高的Pc有助于快速組合出可行的路徑片段而適中的Pm可以幫助路徑進(jìn)行“局部修正”如調(diào)整一個(gè)路徑點(diǎn)。到了中后期種群中已經(jīng)包含若干條較優(yōu)路徑此時(shí)應(yīng)降低Pc避免破壞好的路徑序列同時(shí)保持一個(gè)低但非零的Pm用于對(duì)路徑進(jìn)行“微調(diào)”優(yōu)化比如調(diào)整某個(gè)拐點(diǎn)以進(jìn)一步縮短距離。3.2 結(jié)合代數(shù)和適應(yīng)度的混合策略更高級(jí)的策略是將代數(shù)因子與適應(yīng)度因子相結(jié)合。例如Pc(g, f) Pc_base(g) * factor(f)Pm(g, f) Pm_base(g) * factor(f)其中Pc_base(g)和Pm_base(g)是隨代數(shù)變化的基線概率factor(f)是基于個(gè)體適應(yīng)度的調(diào)整因子可以沿用2.1節(jié)中的公式邏輯。這樣既考慮了搜索階段的宏觀策略由代數(shù)控制又兼顧了種群內(nèi)部個(gè)體的微觀差異由適應(yīng)度控制調(diào)節(jié)粒度更細(xì)效果通常優(yōu)于單一策略。4. 自適應(yīng)策略的工程實(shí)現(xiàn)與調(diào)參心得理論很美好但將自適應(yīng)策略落地到代碼中并讓它真正提升算法性能還需要解決一系列工程問題。4.1 概率值的邊界控制自適應(yīng)計(jì)算出的Pc和Pm很可能超出合理的范圍如大于1或小于0。必須在計(jì)算后添加鉗位clamp操作Pc max(Pc_min, min(Pc_calculated, Pc_max))Pm max(Pm_min, min(Pm_calculated, Pm_max))你需要預(yù)設(shè)Pc_min,Pc_max,Pm_min,Pm_max。我的經(jīng)驗(yàn)是Pc_min不宜低于0.4否則交叉操作幾乎不發(fā)生算法退化為隨機(jī)搜索。Pc_max通常不超過(guò)0.95給選擇操作留有余地。Pm_min通常設(shè)一個(gè)很小的值如0.001保證始終存在變異可能。Pm_max不宜超過(guò)0.2過(guò)高的變異率會(huì)導(dǎo)致算法不穩(wěn)定。4.2 計(jì)算開銷與性能權(quán)衡自適應(yīng)意味著每一代、甚至每一個(gè)個(gè)體操作前都需要計(jì)算概率。如果適應(yīng)度計(jì)算非常耗時(shí)例如在復(fù)雜仿真中評(píng)估一條路徑那么頻繁計(jì)算f_avg和f_max可能會(huì)帶來(lái)不可忽視的開銷。對(duì)此有幾種優(yōu)化思路緩存機(jī)制在一代中選擇和交叉/變異操作開始前統(tǒng)一計(jì)算好所有個(gè)體的自適應(yīng)Pc和Pm值避免在循環(huán)中重復(fù)計(jì)算f_avg和f_max。抽樣估計(jì)對(duì)于大規(guī)模種群可以不計(jì)算全部個(gè)體的適應(yīng)度統(tǒng)計(jì)量而是通過(guò)隨機(jī)抽樣一部分個(gè)體來(lái)估計(jì)f_avg和f_max犧牲少量精度換取速度。隔代調(diào)整不必每一代都調(diào)整可以每隔若干代如5代或10代根據(jù)當(dāng)前種群狀態(tài)更新一次概率參數(shù)在代內(nèi)保持固定。4.3 參數(shù)調(diào)優(yōu)自適應(yīng)方法本身也有參數(shù)這是一個(gè)有趣的“元問題”自適應(yīng)方法是為了避免調(diào)Pc和Pm但它引入了新的參數(shù)如Srinivas方法中的k1, k2, k3, k4。這些參數(shù)同樣需要設(shè)置。我的策略是先驗(yàn)經(jīng)驗(yàn)k1和k2通常設(shè)置在0.5到1之間k3和k4設(shè)置在0.8到1之間以保證劣勢(shì)個(gè)體有足夠的變化率??梢詮膋10.8, k20.1, k30.9, k40.2開始嘗試。問題特性對(duì)于解空間崎嶇、多局部最優(yōu)的問題如某些非凸函數(shù)優(yōu)化可以適當(dāng)提高k2和k4賦予變異更強(qiáng)的擾動(dòng)能力。對(duì)于解空間相對(duì)平滑的問題可以降低k4讓交叉發(fā)揮主要作用。實(shí)驗(yàn)對(duì)比最可靠的方法還是設(shè)計(jì)對(duì)照實(shí)驗(yàn)。固定一組基準(zhǔn)參數(shù)如Pc0.8 Pm0.01再測(cè)試幾組不同的自適應(yīng)參數(shù)組合比較它們?cè)谙嗤?jì)算代價(jià)如函數(shù)評(píng)估次數(shù)下的收斂速度和最終解質(zhì)量。不要只看最終一代的最優(yōu)解更要觀察收斂曲線看自適應(yīng)方法是否更快地逼近高質(zhì)量解區(qū)域。4.4 與精英保留策略的協(xié)同自適應(yīng)策略常與精英保留Elitism策略結(jié)合使用。精英保留會(huì)直接復(fù)制最優(yōu)個(gè)體到下一代這保證了算法不會(huì)退化。在與自適應(yīng)策略結(jié)合時(shí)需要注意對(duì)于精英個(gè)體是否還要對(duì)其進(jìn)行交叉和變異通常的做法是精英個(gè)體參與選擇作為父代但在被選為父代進(jìn)行繁殖時(shí)其自適應(yīng)計(jì)算出的Pc和Pm仍然有效。這意味著即使是最優(yōu)個(gè)體如果其適應(yīng)度遠(yuǎn)高于平均它參與交叉的概率也會(huì)很低這加強(qiáng)了對(duì)最優(yōu)模式的保護(hù)。同時(shí)精英個(gè)體本身直接保留到下一代不參與本代的交叉變異操作保證了最優(yōu)解不丟失。5. 實(shí)戰(zhàn)案例物流配送中心選址問題中的自適應(yīng)GA讓我們結(jié)合“遺傳算法求解物流配送中心選址完整代碼”這個(gè)熱詞設(shè)想一個(gè)場(chǎng)景我們需要從50個(gè)候選點(diǎn)中選擇5個(gè)建立配送中心以最小化總物流成本包括固定建設(shè)成本和可變運(yùn)輸成本。這是一個(gè)組合優(yōu)化問題編碼可以采用二進(jìn)制50位1表示選中或整數(shù)編碼長(zhǎng)度為5的序列存儲(chǔ)選中的點(diǎn)索引。固定參數(shù)GA可能遇到的問題初期隨機(jī)生成的選址方案成本可能極高。固定Pc0.8可能導(dǎo)致兩個(gè)很差的方案交叉后產(chǎn)生的新方案依然很差搜索效率低。后期種群收斂到幾個(gè)相似的高質(zhì)量方案附近。固定Pm0.01可能不足以產(chǎn)生有意義的微小擾動(dòng)比如交換一個(gè)選址點(diǎn)導(dǎo)致算法停滯。引入自適應(yīng)策略采用Srinivas方法初始化設(shè)置k10.8 k20.05 k30.9 k40.1。Pc范圍[0.4, 0.95] Pm范圍[0.001, 0.15]。早期階段種群適應(yīng)度差異大成本高低懸殊。對(duì)于成本較低的優(yōu)良個(gè)體對(duì)應(yīng)高適應(yīng)度其Pc和Pm會(huì)自動(dòng)降低受到保護(hù)。對(duì)于成本高的劣勢(shì)個(gè)體其Pc和Pm接近k3和k40.9和0.1有很高概率被交叉和變異從而被快速改造或淘汰。這加速了初期“劣汰”過(guò)程。中期階段出現(xiàn)若干優(yōu)質(zhì)解。此時(shí)這些優(yōu)質(zhì)解之間的交叉概率因?yàn)閒‘都很大會(huì)變得很小避免了盲目交叉破壞好的選址組合。但同時(shí)由于它們適應(yīng)度高變異概率也極低這可能導(dǎo)致搜索停滯。這時(shí)種群平均適應(yīng)度f(wàn)_avg上升使得那些“次優(yōu)”但仍有潛力的個(gè)體適應(yīng)度略高于平均仍然保有可觀的變異概率從而有機(jī)會(huì)通過(guò)微小變異如替換一個(gè)選址點(diǎn)產(chǎn)生突破。后期階段種群收斂適應(yīng)度方差變小。當(dāng)f_max接近f_avg時(shí)公式中分母趨近于0此時(shí)我們的代碼邊界處理會(huì)將其Pc/Pm設(shè)置為k3/k4或一個(gè)較小值。這意味著即使是最優(yōu)解附近也保持了一個(gè)基礎(chǔ)水平的交叉和變異概率提供了持續(xù)優(yōu)化的可能避免早熟收斂。代碼結(jié)構(gòu)示意class AdaptiveGAForLocation: def __init__(self, k10.8, k20.05, k30.9, k40.1): self.k1, self.k2, self.k3, self.k4 k1, k2, k3, k4 self.pc_min, self.pc_max 0.4, 0.95 self.pm_min, self.pm_max 0.001, 0.15 def evolve(self, population, fitness): # 計(jì)算當(dāng)代統(tǒng)計(jì)量 f_max max(fitness) f_avg sum(fitness) / len(fitness) new_population [] # 精英保留 elite_idx np.argmax(fitness) new_population.append(population[elite_idx].copy()) while len(new_population) len(population): # 選擇父代 (例如錦標(biāo)賽選擇) p1_idx, p2_idx self._selection(fitness) p1, p2 population[p1_idx], population[p2_idx] f1, f2 fitness[p1_idx], fitness[p2_idx] # 自適應(yīng)計(jì)算本次交叉概率 f_prime max(f1, f2) if f_prime f_avg and abs(f_max - f_avg) 1e-10: pc self.k1 * (f_max - f_prime) / (f_max - f_avg) else: pc self.k3 pc np.clip(pc, self.pc_min, self.pc_max) # 執(zhí)行交叉 if random.random() pc: c1, c2 self._crossover(p1, p2) else: c1, c2 p1.copy(), p2.copy() # 對(duì)子代個(gè)體分別自適應(yīng)計(jì)算變異概率并變異 for child in [c1, c2]: f_child self._evaluate(child) # 可能需要估算或沿用父代適應(yīng)度近似 # 簡(jiǎn)單處理使用產(chǎn)生該子代的父代中較優(yōu)者的適應(yīng)度來(lái)近似估算 f_for_pm f_prime # 或使用更復(fù)雜的估算 if f_for_pm f_avg and abs(f_max - f_avg) 1e-10: pm self.k2 * (f_max - f_for_pm) / (f_max - f_avg) else: pm self.k4 pm np.clip(pm, self.pm_min, self.pm_max) child self._mutation(child, pm) new_population.append(child) if len(new_population) len(population): break return new_population關(guān)鍵提示在交叉后立即對(duì)子代進(jìn)行變異時(shí)子代的適應(yīng)度是未知的。上述代碼使用父代較優(yōu)者的適應(yīng)度f(wàn)_prime來(lái)近似這是一種簡(jiǎn)化。更精確的做法是交叉后先快速估算子代適應(yīng)度如果問題簡(jiǎn)單或者設(shè)計(jì)一種不依賴于子代當(dāng)前適應(yīng)度而依賴于進(jìn)化狀態(tài)如當(dāng)前代數(shù)、種群統(tǒng)計(jì)的Pm計(jì)算方式。6. 不同自適應(yīng)方法的對(duì)比與選型建議沒有一種自適應(yīng)方法是萬(wàn)能的。選擇哪種策略取決于你的問題特性、計(jì)算資源和實(shí)現(xiàn)復(fù)雜度。方法類型核心依據(jù)優(yōu)點(diǎn)缺點(diǎn)適用場(chǎng)景基于適應(yīng)度統(tǒng)計(jì)(如Srinivas)個(gè)體/種群適應(yīng)度調(diào)節(jié)粒度細(xì)能區(qū)分個(gè)體優(yōu)劣生物學(xué)解釋清晰對(duì)適應(yīng)度尺度敏感需處理除零邊界每代需計(jì)算統(tǒng)計(jì)量適應(yīng)度計(jì)算快、解空間復(fù)雜、需要精細(xì)區(qū)分個(gè)體價(jià)值的問題基于進(jìn)化代數(shù)迭代次數(shù)實(shí)現(xiàn)簡(jiǎn)單計(jì)算開銷小邏輯直觀無(wú)法響應(yīng)種群內(nèi)部狀態(tài)變化可能與環(huán)境變化脫節(jié)問題規(guī)模大、適應(yīng)度計(jì)算耗時(shí)、對(duì)實(shí)時(shí)反饋不敏感的場(chǎng)景混合策略代數(shù) 適應(yīng)度兼顧宏觀階段與微觀差異魯棒性較強(qiáng)參數(shù)更多調(diào)優(yōu)更復(fù)雜實(shí)現(xiàn)稍繁瑣對(duì)算法性能有較高要求愿意投入更多調(diào)參精力的問題基于種群多樣性基因型/表現(xiàn)型差異直接度量探索程度反饋更直接多樣性度量本身計(jì)算成本可能高如海明距離基因編碼明確且多樣性度量易于計(jì)算的問題我的個(gè)人選型經(jīng)驗(yàn)入門與快速驗(yàn)證首選基于進(jìn)化代數(shù)的線性衰減策略。它簡(jiǎn)單有效能解決固定參數(shù)在初期探索和后期開發(fā)之間的矛盾代碼改動(dòng)最小。追求性能提升實(shí)現(xiàn)Srinivas的基于適應(yīng)度方法。它在大多數(shù)問題上都能帶來(lái)穩(wěn)定提升是學(xué)術(shù)和工業(yè)界驗(yàn)證較多的方案。應(yīng)對(duì)復(fù)雜多變問題考慮混合策略。例如用代數(shù)控制Pc和Pm的基線值再用適應(yīng)度進(jìn)行微調(diào)。這需要更多的實(shí)驗(yàn)來(lái)調(diào)整權(quán)重。一個(gè)常被忽略的要點(diǎn)先確保你的選擇、交叉、變異算子本身是有效的。自適應(yīng)參數(shù)是“潤(rùn)滑劑”和“調(diào)速器”如果算子設(shè)計(jì)不合理如交叉總是產(chǎn)生無(wú)效解變異破壞性太強(qiáng)再好的自適應(yīng)策略也無(wú)力回天。務(wù)必先用手動(dòng)調(diào)參的方式找到一組能使固定參數(shù)GA基本工作的算子然后再引入自適應(yīng)方法進(jìn)行優(yōu)化。最后記住自適應(yīng)遺傳算法不是“銀彈”。它通過(guò)動(dòng)態(tài)平衡探索與開發(fā)提高了算法的魯棒性和求解效率避免了手動(dòng)調(diào)參的部分困擾。但它依然是一個(gè)啟發(fā)式算法其性能受編碼方式、算子設(shè)計(jì)、初始種群等多種因素影響。將自適應(yīng)策略視為你工具箱中一件高級(jí)的、可自動(dòng)調(diào)節(jié)的工具理解其原理掌握其實(shí)現(xiàn)并在具體問題上耐心調(diào)試才能真正發(fā)揮其威力讓你在解決像路徑規(guī)劃、物流選址這類復(fù)雜優(yōu)化問題時(shí)更加得心應(yīng)手。