freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

關(guān)于遺傳算法研究的內(nèi)容調(diào)研設(shè)計畢業(yè)論文-資料下載頁

2025-06-22 04:04本頁面
  

【正文】 擇保留到下一代 */ private boolean isSelected。 /** * 計算基因適應(yīng)度 */ public void calFitness() { = 0。 // 計算節(jié)點0n1之間的距離之和 for (int j = 0。 j cityNum 1。 j++) { +=distance[[j]][[j + 1]]。 } // 再加上節(jié)點n1和節(jié)點0之間的距離 +=distance[[0]][[cityNum 1]]。 } /** * 計算基因的選擇概率、期望概率 */ public void calProbality() { = 0。 // 計算選擇概率 if (fitnessSum != 0) { = (double) / fitnessSum。 } = 0。 // 計算期望概率 = (double) ( * popSize)。 = false。 } } // 當(dāng)前種群 private Genotype[] population = new Genotype[popSize]。 // 最優(yōu)種群的大小 private final int bestPopSize = popSize / 2。 // 由前面各次迭代取得的最優(yōu)解組成的種群,最前面一個是當(dāng)前最優(yōu)解private Genotype[] bestPopualtion = new Genotype[bestPopSize]。 // 當(dāng)前基因適應(yīng)度總和 private long fitnessSum = 0。 /** * 構(gòu)造函數(shù),初始化種群 */ public TSP() { // 初始化文件流 initFileStresm()。 // 初始化種群 initPopulation()。 } private void initFileStresm() { outFile = new File(./)。 try { if (!()) { ()。 }FileOutputStream fos = new FileOutputStream(outFile, true)。 printStream = new PrintStream(fos)。 } catch (FileNotFoundException e) { ()。 } catch (IOException e) { ()。 } } /** * 初始化各城市之間的距離 */ private void initDistance() { getPoint(./)。 cityNum = ()。 distance = new double[cityNum][cityNum]。 (size= + cityNum)。 for (int i = 0。 i cityNum。 i++) { for (int j = 0。 j cityNum。 j++) { if ((i + 1) != null amp。amp。 (j + 1) != null) {distance[i][j] = (i + 1).calDistance((j + 1))。 } } } } /** * @param fileName * @return void * @throws 獲取城市坐標(biāo) */ private void getPoint(String fileName) { File file = new File(fileName)。 if (!()) { (文件不存在)。 return。 } FileInputStream fis。 try { fis = new FileInputStream(file)。 Scanner sc = new Scanner(fis)。 while (()) { int key = ()。 int x = ()。 int y = ()。 Point point = new Point(x, y)。 (key, point)。 ()。 } } catch (FileNotFoundException e) { ()。 } } private void initPopulation() { // 初始化距離矩陣 initDistance()。 // 隨機初始化popSize個個體作為初始種群 for (int i = 0。 i popSize。 i++) { // 當(dāng)前種群 population[i] = new Genotype()。// 保存前面popSize次迭代獲得的最優(yōu)個體(最優(yōu)保存策略) if (i bestPopSize) { bestPopualtion[i] = new Genotype()。 } // 使所有的個體都是從第一個城市出發(fā), // 說明(代碼中對n個城市的TSP使用的符號編碼是//0(n1),0表示第一個城市,1表示第二個城市,依次類推) population[i].citys[0] = 0。 int[] num = new int[cityNum]。 //生成1n1之間的種子 for (int j = 1。 j cityNum。 j++) { num[j] = j。 } int temp = cityNum。 for (int j = 1。 j cityNum。 j++) { // 產(chǎn)生0到temp間的隨機整數(shù),不包括temp int r = (int) (() * (temp 1) + 1)。 population[i].citys[j] = num[r]。 // 初始化時最優(yōu)種群和當(dāng)前代一樣 if (i bestPopSize) { bestPopualtion[i].citys[j] = population[i].citys[j]。 } num[r] = num[temp 1]。 temp。 } } population[0].calFitness()。 // 初始最優(yōu)解為第一個個體的適應(yīng)度 bestResult = population[0].fitness。 (城市個數(shù): + cityNum + \t種群大小: + popSize + \t迭代次數(shù): + maxgens + \t交叉概率: + pxover + \t初始變異概率: + initPmultation + \n)。 } // 計算種群中所有個體適應(yīng)度之和 private void calfitnessSum() { fitnessSum = 0。 for (int i = 0。 i popSize。 i++) { fitnessSum += population[i].fitness。 } } /** * 根據(jù)期望概率淘汰掉當(dāng)前種群中部分適應(yīng)度較差的個體,未被選擇的就是被淘汰的 */ private void calIsSelected() { for (int i = 0。 i popSize。 i++) { double random = ()+。 // 根據(jù)期望概率選擇優(yōu)良個體 if (population[i].expectP random) { population[i].isSelected = true。 } } } /** * 計算每個種群每個基因個體的適應(yīng)度,選擇概率,期望概率和是否被選擇 */ public void calAll() { // 計算個體適應(yīng)度 for (int i = 0。 i popSize。 i++) { population[i].calFitness()。 } calfitnessSum()。 // 計算個體的選擇概率、期望概率 for (int i = 0。 i popSize。 i++) { population[i].calProbality()。 } } /** * 復(fù)制,從最優(yōu)種群中隨機選擇個體覆蓋被淘汰的個體的位串 */ public void copy() { // 淘汰掉部分交叉?zhèn)€體 calIsSelected()。 int count = 0。 for (int i = 0。 i popSize。 i++) { if (!population[i].isSelected) { // 先用當(dāng)前最優(yōu)解填充 if (count == 0) { for (int j = 1。 j cityNum。 j++) { population[i].citys[j] = bestPopualtion[0].citys[j]。 } // 增加變異概率 population[i].pmultation = 1。 } else { int index = (int) (() * (bestPopSize))。 for (int j = 1。 j cityNum。 j++) { population[i].citys[j] = bestPopualtion[index].citys[j]。 } // 增加變異概率 population[i].pmultation = 。 } count++。 } } } /** * 交叉主體函數(shù) */ public void crossover() { int x = 1。 int y = 1。 // 計算有多少個個體會發(fā)生交叉 int pop = (int) (popSize * pxover / 2)。 while (pop 0) { // 進行交叉配對 // 生成0popSize的隨機數(shù),包括0,不包括popSize x = (int) (() * popSize)。 while (true) { y = (int) (() * popSize)。 // 防止自己與自己交叉 if (y != x) break。 } // x,y兩個體執(zhí)行雙切點交叉 doublePointCrossover(x, y)。 pop。 } } /** * 雙切點交叉函數(shù) */ private void doublePointCrossover(int x, int y) { // 第一個切點在0到cityNum1之間隨機選擇 int location1 = (int) (() * (cityNum 1)) + 1。 // 第二個切點在location1+1到cityNum之間隨機選擇 int location2 = (int) (() * (cityNum location1 1)) + location1 + 1。 // 交換兩個個體切點之間的城市序列 for (int i = location1。 i location2。 i++) { int tempX = population[x].citys[i]。 int tempY = population[y].citys[i]。 population[x].citys[i] = tempY。 population[y].citys[i] = tempX。 // 修復(fù)個體X for (int j = 1。 j cityNum。 j++) {if (j != i amp。amp。 population[x].citys[j] == population[x].citys[i]) { population[x].citys[j] = tempX。 break。 } } // 修復(fù)個體Y for (int k = 1。 k cityNum。 k++) { if (k != i amp。amp。 population[y].citys[k] == population[y].citys[i]) { population[y].citys[k] = tempY。 break。 } } } } /** * 變異 在一個個體的城市序列中隨機取兩個位置交換 */ public void mutate() { double random。 int loc1,loc2。 for (int i = 0。 i popSize。 i++) { random = ()。
點擊復(fù)制文檔內(nèi)容
研究報告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1