利用標準遺傳演算法求解函式

2021-05-27 02:47:27 字數 1940 閱讀 8756

package wh.algorithm;

public class sga

public sga()

/*** 初始化一條染色體(用二進位制字串表示)

* * @return 一條染色體

*/private string initpop() else

} return res;

} /**

* 初始化一組染色體

* * @return 染色體組

*/private string initpops()

return ipop;

} /**

* 將染色體轉換成x的值

* * @param str

* 染色體

* @return 染色體的適應值

*/private double calculatefitnessvalue(string str)

/*** 計算群體上每個個體的適應度值; 按由個體適應度值所決定的某個規則選擇將進入下一代的個體;

*/private void select() else

}f = f + evals[i]; // 所有染色體適應值總和

} for (int i = 0; i < 10; i++)

} for (int i = 0; i < 10; i++) else }}

} }/**

* 交叉操作 交叉率為25%,平均為25%的染色體進行交叉

*/private void cross()

temp1 = ipop[i].substring(0, pos)

+ ipop[(i + 1) % 10].substring(pos);

temp2 = ipop[(i + 1) % 10].substring(0, pos)

+ ipop[i].substring(pos);

ipop[i] = temp1;

ipop[(i + 1) / 10] = temp2;

}} }

/*** 基因突變操作 1%基因變異m*pop_size 共180個基因,為了使每個基因都有相同機會發生變異, 需要產生[1--180]上均勻分布的

*/private void mutation() else else

}} else else else }}

ipop[chromosomenum] = temp;

// system.out.println("變異後" + ipop[chromosomenum]);

} }public double binary2double(string binary)

/*** 執行遺傳演算法

*/public string process()

long endtime = system.nanotime();

long costtime = endtime - starttime;

system.out.printf("進化耗時:%d(ms)\n", costtime / 1000000);

str = "最小值f(x)=" + best.fitness + " ,x="

+ binary2double(best.chromosome) + ",第" + best.generations

+ "個染色體";

return str; }}

class bion

測試結果:

利用標準遺傳演算法求解函式f(x)=(x-22)*(x-22)的最小值,x的區間[-255,255].

初始化個體...

開始進化,進化次數100000

進化中............

進化耗時:4003(ms)

最小值f(x)=-4.382968527749637e-6 ,x=21.997906445957767,第66072個染色體

用遺傳演算法求解TSP問題

最近在做人工智慧的課設,碰到乙個與tsp類似的問題,今天嘗試了一下用遺傳演算法求解tsp,下面是我碰到的問題以及我的一些想法 1.如何對個體進行編碼?tsp問題的實質是求乙個最短的哈密頓迴路,如果將城市標號為0,1,2.n 1,那麼tsp的乙個解就是乙個圓排列,等價於乙個規定了起點的排列,所以容易想...

python遺傳演算法 Python 遺傳演算法實現

關於遺傳演算法 遺傳演算法是仿照自然界中生物進化而產生的一類優化演算法。個人感覺遺傳演算法簡單粗暴,適應性廣。關於遺傳演算法的介紹網上有很多了,這裡按照我自己的理解簡單概括一下。編碼解碼,將待優化的引數編碼為dna序列,最簡單直接的為二進位制編碼 即有兩種鹼基的dna鏈 生成隨機初代 選擇,適應度 ...

遺傳演算法求解函式最大值c 實現

遺傳演算法求解步驟 1.使用隨機方法產生乙個有n個染色體的初始種群 2.對群體中的每乙個染色體,計算其適應值 3.從群體中隨機選擇一些染色體構成乙個新的群體 常用方法 輪盤賭選擇,錦標賽選擇 4.以一定概率進行交叉 單點交叉 多點交叉 5.以一定概率進行變異 6.返回第2步,以一定的迭代次數進行迴圈...