遺傳算法:鴨脖、雞湯和九轉(zhuǎn)大腸
“從零開(kāi)始學(xué)數(shù)學(xué)建?!毕盗姓n程近期將更新“遺傳算法”,課程詳情關(guān)注微信公眾號(hào):數(shù)學(xué)建模BOOM,回復(fù)“課程”查看。

我們以做菜為例,理解一下遺傳算法的基本思想。
一名大廚參加比賽,想要?jiǎng)?chuàng)造一道美味的菜肴,比賽由評(píng)委來(lái)打分。
首先隨機(jī)生成多個(gè)原始配方,每種配方所用的原料不同,例如可用鴨脖、雞肉、大腸等等。對(duì)應(yīng)遺傳算法中的初始化。

烹飪手法也不同,煎炒燜炸鹵燉,爆燒溜涮煨燴。
這樣一來(lái),就有很多種組合:假設(shè)3種食材,12種烹飪手法,那么就有36種配方;而現(xiàn)實(shí)情況要遠(yuǎn)遠(yuǎn)比這復(fù)雜,例如放多少克鹽?加不加香菜?烹飪時(shí)間多久?等等。多種因素考慮進(jìn)去,可能的情況會(huì)非常多,我們無(wú)法每一種情況都嘗試一遍。
那么較好的辦法是,將現(xiàn)有的原始配方做成菜,由評(píng)委來(lái)打分,再選擇分?jǐn)?shù)高的配方,進(jìn)行配方交叉,創(chuàng)造一組新的配方。而分?jǐn)?shù)低的配方直接舍棄。這一步對(duì)應(yīng)遺傳算法中“交叉”的操作。
這樣一來(lái),我們保留了一部分評(píng)分高的配方要素、舍棄了評(píng)分低的配方,做出來(lái)的新菜就更有可能也是道美味佳肴。

例如配方A和配方C的分?jǐn)?shù)都高,A是鹵鴨脖,C是燉大腸;那么配方交叉嘗試新方案:“燉鴨脖”或“鹵大腸”。

為了增加創(chuàng)新和變化?,有時(shí)會(huì)在配方交叉之后,再添加或替換某個(gè)食材或更換烹飪方式。
對(duì)應(yīng)遺傳算法中“變異”的概念。就像是在配方中隨機(jī)使用了一些與原配方無(wú)關(guān)的調(diào)料或者做法。
例如前面我們交叉配方后準(zhǔn)備做“燉鴨脖”,然后突發(fā)奇想改成了“炸鼠片”。

注意,這種嘗試可能帶來(lái)驚喜(提高評(píng)分),也可能有驚無(wú)喜(試試就逝世),所以并不是每次交叉配方后都進(jìn)行變異,一般小概率進(jìn)行。

不斷重復(fù)進(jìn)行“評(píng)分、交叉、變異、新配方做菜”→“評(píng)分……”,直到?jīng)]有改進(jìn)空間(連續(xù)多次評(píng)委給的都接近滿分了)為止。
做菜、生物學(xué)中的遺傳和數(shù)學(xué)建模的遺傳算法概念對(duì)比:

以上為遺傳算法的簡(jiǎn)介部分。完整的遺傳算法講解(模型簡(jiǎn)介+適用賽題+例題與原理講解+MATLAB代碼求解)將在近期更新。關(guān)注公眾號(hào):數(shù)學(xué)建模BOOM可獲取最新消息。