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步,以一定的迭代次數進行迴圈...