【文章內(nèi)容簡(jiǎn)介】
i), L)。 grayCode1(2, i, :) = num2gray(x10(2, i), L)。 end for i = 1 : 1 : M [a, b] = max(y1)。 grayCode2(1, i, :) = grayCode1(1, b, :)。 grayCode2(2, i, :) = grayCode1(2, b, :)。 y1(1, b) = inf。 end for i = 1 : 1 : M / 2 p = unidrnd(L)。 if rand() Pc for j = p : 1 : L temp = grayCode2(1, i, j)。 grayCode2(1, i, j) = grayCode2(1, M i + 1, j)。 grayCode2(1, M i + 1, j) = temp。 temp = grayCode2(2, i, j)。 grayCode2(2, i, j) = grayCode2(2, M i + 1, j)。 grayCode2(2, M i + 1, j) = temp。 end end end for i = 1 : 1 : M for j = 1 : 1 : L for k = 1 : 1 : 2 if rand() Pm grayCode2(k, i, j) = 1 grayCode2(k, i, j)。 end end end end for i = 1 : 1 : M x20(1, i) = gray2num(grayCode2(1, i, :))。 x20(2, i) = gray2num(grayCode2(2, i, :))。 x21(1, i) = double(x20(1, i)) / (2 ^ L 1) * 10 5。 x21(2, i) = double(x20(2, i)) / (2 ^ L 1) * 10 5。 temp2(1, i) = x21(1, i) ^ 2 + x21(2, i) ^ 2。 y2(1, i) = (sin(sqrt(temp2(1, i))) ^ 2 ) / (1 + * temp2(1, i))。 end for i = 1 : 1 : N [a, b] = max(y2)。 x10(1, i) = x20(1, b)。 x10(2, i) = x20(2, b)。 x11(1, i) = x21(1, b)。 x11(2, i) = x21(2, b)。 y2(1, b) = inf。 end end x11 運(yùn)行結(jié)果顯示,遺傳算法常常在附近陷入局部最大,而難以達(dá)到的全局最大點(diǎn)。為此,應(yīng)對(duì)遺傳算法加以改進(jìn)。 22212xx...12(,)(0,0)xx.之前的遺傳算法存在的一個(gè)缺陷是不能保證搜尋到的最佳個(gè)體可以被遺傳到下一代,因此可能會(huì)錯(cuò)過(guò)全局最優(yōu)點(diǎn)。父子混合選擇遺傳算法(FatherOffspring Combined Selection Genetic Algorithm)對(duì)此加以改進(jìn),該算法要求上一代的最佳個(gè)體必須被無(wú)條件地遺傳到下一代,因此記錄了到目前為止算法所發(fā)現(xiàn)的最佳個(gè)體,因而適應(yīng)度序列必然具有單調(diào)性,即關(guān)于進(jìn)化代數(shù)是單調(diào)不減的??梢宰C明的是,該算法是遺傳算法保證收斂的執(zhí)行策略。 父子混合選擇遺傳算法的執(zhí)行過(guò)程如下: 步1(初始化) 隨機(jī)產(chǎn)生對(duì)母體組成初始種群,置。 M(0)X0t.步2(種群進(jìn)化) . 獨(dú)立地對(duì)中的對(duì)母體執(zhí)行交叉,生成中間種群(由個(gè)中間個(gè)體組成)。 ()XtN()Yt. 獨(dú)立地對(duì)中的每一個(gè)中間個(gè)體執(zhí)行變異,生成子代種群。 ()Zt. 在父代種群與子代種群的并集中選擇對(duì)母體作為新一代父代種群。 ()()XtZt.(1)Xt.步3(終止檢驗(yàn)) 如果終止準(zhǔn)則滿足,停機(jī)并輸出中的最佳個(gè)體作為問(wèn)題的近似解,否則置并轉(zhuǎn)步2。 1tt..根據(jù)這一算法重新編寫程序。 L = 32。 N = 60。 T = 100。 Pc = 。 Pm = 。 for i = 1 : 1 : N x0(1, i) = unidrnd(2 ^ L 1)。 x0(2, i) = unidrnd(2 ^ L 1)。 end for t = 1 : 1 : T for i = 1 : 1 : N grayCode(1, i, :) = num2gray(x0(1, i), L)。 grayCode(2, i, :) = num2gray(x0(2, i), L)。 end for i = 1 : 1 : N / 2 if rand() Pc p = unidrnd(L)。 for j = 1 : 1 : p 1 grayCode(1, i + N, j) = grayCode(1, i, j)。 grayCode(2, i + N, j) = grayCode(2, i, j)。 grayCode(1, N i + 1 + N, j) = grayCode(1, N i + 1, j)。 grayCode(2, N i + 1 + N, j) = grayCode(2, N i + 1, j)。 end for j = p : 1 : L grayCode(1, i + N, j) = grayCode(1, N i + 1, j)。 grayCode(2, i + N, j) = grayCode(2, N i + 1, j)。