免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

java源代碼遺傳算法 java源代碼分析

《Java遺傳算法編程》pdf下載在線閱讀全文,求百度網(wǎng)盤(pán)云資源

《Java遺傳算法編程》百度網(wǎng)盤(pán)pdf最新全集下載:

創(chuàng)新互聯(lián)主要從事成都做網(wǎng)站、網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)靈壽,十多年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):18982081108

鏈接:

?pwd=xv3v 提取碼: xv3v

簡(jiǎn)介:本書(shū)簡(jiǎn)單、直接地介紹了遺傳算法,并且針對(duì)所討論的示例問(wèn)題,給出了Java代碼的算法實(shí)現(xiàn)。全書(shū)分為6章。第1章簡(jiǎn)單介紹了人工智能和生物進(jìn)化的知識(shí)背景,這也是遺傳算法的歷史知識(shí)背景。第2章給出了一個(gè)基本遺傳算法的實(shí)現(xiàn);第4章和第5章,分別針對(duì)機(jī)器人控制器、旅行商問(wèn)題、排課問(wèn)題展開(kāi)分析和討論,并給出了算法實(shí)現(xiàn)。在這些章的末尾,還給出了一些練習(xí)供讀者深入學(xué)習(xí)和實(shí)踐。第6章專門(mén)討論了各種算法的優(yōu)化問(wèn)題。 ?

如何用Java實(shí)現(xiàn)遺傳算法?

通過(guò)遺傳算法走迷宮。雖然圖1和圖2均成功走出迷宮,但是圖1比圖2的路徑長(zhǎng)的多,且復(fù)雜,遺傳算法可以計(jì)算出有多少種可能性,并選擇其中最簡(jiǎn)潔的作為運(yùn)算結(jié)果。

示例圖1:

示例圖2:

實(shí)現(xiàn)代碼:

import?java.util.ArrayList;

import?java.util.Collections;

import?java.util.Iterator;

import?java.util.LinkedList;

import?java.util.List;

import?java.util.Random;

/**

* 用遺傳算法走迷宮

*

* @author Orisun

*

*/

public?class?GA {

int?gene_len;?// 基因長(zhǎng)度

int?chrom_len;?// 染色體長(zhǎng)度

int?population;?// 種群大小

double?cross_ratio;?// 交叉率

double?muta_ratio;?// 變異率

int?iter_limit;?// 最多進(jìn)化的代數(shù)

Listboolean[] individuals;?// 存儲(chǔ)當(dāng)代種群的染色體

Labyrinth labyrinth;

int?width;??????//迷宮一行有多少個(gè)格子

int?height;?????//迷宮有多少行

public?class?BI {

double?fitness;

boolean[] indv;

public?BI(double?f,?boolean[] ind) {

fitness = f;

indv = ind;

}

public?double?getFitness() {

return?fitness;

}

public?boolean[] getIndv() {

return?indv;

}

}

ListBI best_individual;?// 存儲(chǔ)每一代中最優(yōu)秀的個(gè)體

public?GA(Labyrinth labyrinth) {

this.labyrinth=labyrinth;

this.width = labyrinth.map[0].length;

this.height = labyrinth.map.length;

chrom_len =?4?* (width+height);

gene_len =?2;

population =?20;

cross_ratio =?0.83;

muta_ratio =?0.002;

iter_limit =?300;

individuals =?new?ArrayListboolean[](population);

best_individual =?new?ArrayListBI(iter_limit);

}

public?int?getWidth() {

return?width;

}

public?void?setWidth(int?width) {

this.width = width;

}

public?double?getCross_ratio() {

return?cross_ratio;

}

public?ListBI getBest_individual() {

return?best_individual;

}

public?Labyrinth getLabyrinth() {

return?labyrinth;

}

public?void?setLabyrinth(Labyrinth labyrinth) {

this.labyrinth = labyrinth;

}

public?void?setChrom_len(int?chrom_len) {

this.chrom_len = chrom_len;

}

public?void?setPopulation(int?population) {

this.population = population;

}

public?void?setCross_ratio(double?cross_ratio) {

this.cross_ratio = cross_ratio;

}

public?void?setMuta_ratio(double?muta_ratio) {

this.muta_ratio = muta_ratio;

}

public?void?setIter_limit(int?iter_limit) {

this.iter_limit = iter_limit;

}

// 初始化種群

public?void?initPopulation() {

Random r =?new?Random(System.currentTimeMillis());

for?(int?i =?0; i population; i++) {

int?len = gene_len * chrom_len;

boolean[] ind =?new?boolean[len];

for?(int?j =?0; j len; j++)

ind[j] = r.nextBoolean();

individuals.add(ind);

}

}

// 交叉

public?void?cross(boolean[] arr1,?boolean[] arr2) {

Random r =?new?Random(System.currentTimeMillis());

int?length = arr1.length;

int?slice =?0;

do?{

slice = r.nextInt(length);

}?while?(slice ==?0);

if?(slice length /?2) {

for?(int?i =?0; i slice; i++) {

boolean?tmp = arr1[i];

arr1[i] = arr2[i];

arr2[i] = tmp;

}

}?else?{

for?(int?i = slice; i length; i++) {

boolean?tmp = arr1[i];

arr1[i] = arr2[i];

arr2[i] = tmp;

}

}

}

// 變異

public?void?mutation(boolean[] individual) {

int?length = individual.length;

Random r =?new?Random(System.currentTimeMillis());

individual[r.nextInt(length)] ^=?false;

}

// 輪盤(pán)法選擇下一代,并返回當(dāng)代最高的適應(yīng)度值

public?double?selection() {

boolean[][] next_generation =?new?boolean[population][];?// 下一代

int?length = gene_len * chrom_len;

for?(int?i =?0; i population; i++)

next_generation[i] =?new?boolean[length];

double[] cumulation =?new?double[population];

int?best_index =?0;

double?max_fitness = getFitness(individuals.get(best_index));

cumulation[0] = max_fitness;

for?(int?i =?1; i population; i++) {

double?fit = getFitness(individuals.get(i));

cumulation[i] = cumulation[i -?1] + fit;

// 尋找當(dāng)代的最優(yōu)個(gè)體

if?(fit max_fitness) {

best_index = i;

max_fitness = fit;

}

}

Random rand =?new?Random(System.currentTimeMillis());

for?(int?i =?0; i population; i++)

next_generation[i] = individuals.get(findByHalf(cumulation,

rand.nextDouble() * cumulation[population -?1]));

// 把當(dāng)代的最優(yōu)個(gè)體及其適應(yīng)度放到best_individual中

BI bi =?new?BI(max_fitness, individuals.get(best_index));

// printPath(individuals.get(best_index));

//System.out.println(max_fitness);

best_individual.add(bi);

// 新一代作為當(dāng)前代

for?(int?i =?0; i population; i++)

individuals.set(i, next_generation[i]);

return?max_fitness;

}

// 折半查找

public?int?findByHalf(double[] arr,?double?find) {

if?(find ?0?|| find ==?0?|| find arr[arr.length -?1])

return?-1;

int?min =?0;

int?max = arr.length -?1;

int?medium = min;

do?{

if?(medium == (min + max) /?2)

break;

medium = (min + max) /?2;

if?(arr[medium] find)

min = medium;

else?if?(arr[medium] find)

max = medium;

else

return?medium;

}?while?(min max);

return?max;

}

// 計(jì)算適應(yīng)度

public?double?getFitness(boolean[] individual) {

int?length = individual.length;

// 記錄當(dāng)前的位置,入口點(diǎn)是(1,0)

int?x =?1;

int?y =?0;

// 根據(jù)染色體中基因的指導(dǎo)向前走

for?(int?i =?0; i length; i++) {

boolean?b1 = individual[i];

boolean?b2 = individual[++i];

// 00向左走

if?(b1 ==?false? b2 ==?false) {

if?(x ?0? labyrinth.map[y][x -?1] ==?true) {

x--;

}

}

// 01向右走

else?if?(b1 ==?false? b2 ==?true) {

if?(x +?1? width labyrinth.map[y][x +?1] ==?true) {

x++;

}

}

// 10向上走

else?if?(b1 ==?true? b2 ==?false) {

if?(y ?0? labyrinth.map[y -?1][x] ==?true) {

y--;

}

}

// 11向下走

else?if?(b1 ==?true? b2 ==?true) {

if?(y +?1? height labyrinth.map[y +?1][x] ==?true) {

y++;

}

}

}

int?n = Math.abs(x - labyrinth.x_end) + Math.abs(y -labyrinth.y_end) +?1;

//????? if(n==1)

//????????? printPath(individual);

return?1.0?/ n;

}

// 運(yùn)行遺傳算法

public?boolean?run() {

// 初始化種群

initPopulation();

Random rand =?new?Random(System.currentTimeMillis());

boolean?success =?false;

while?(iter_limit-- ?0) {

// 打亂種群的順序

Collections.shuffle(individuals);

for?(int?i =?0; i population -?1; i +=?2) {

// 交叉

if?(rand.nextDouble() cross_ratio) {

cross(individuals.get(i), individuals.get(i +?1));

}

// 變異

if?(rand.nextDouble() muta_ratio) {

mutation(individuals.get(i));

}

}

// 種群更替

if?(selection() ==?1) {

success =?true;

break;

}

}

return?success;

}

//? public static void main(String[] args) {

//????? GA ga = new GA(8, 8);

//????? if (!ga.run()) {

//????????? System.out.println("沒(méi)有找到走出迷宮的路徑.");

//????? } else {

//????????? int gen = ga.best_individual.size();

//????????? boolean[] individual = ga.best_individual.get(gen - 1).indv;

//????????? System.out.println(ga.getPath(individual));

//????? }

//? }

// 根據(jù)染色體打印走法

public?String getPath(boolean[] individual) {

int?length = individual.length;

int?x =?1;

int?y =?0;

LinkedListString stack=new?LinkedListString();

for?(int?i =?0; i length; i++) {

boolean?b1 = individual[i];

boolean?b2 = individual[++i];

if?(b1 ==?false? b2 ==?false) {

if?(x ?0? labyrinth.map[y][x -?1] ==?true) {

x--;

if(!stack.isEmpty() stack.peek()=="右")

stack.poll();

else

stack.push("左");

}

}?else?if?(b1 ==?false? b2 ==?true) {

if?(x +?1? width labyrinth.map[y][x +?1] ==?true) {

x++;

if(!stack.isEmpty() stack.peek()=="左")

stack.poll();

else

stack.push("右");

}

}?else?if?(b1 ==?true? b2 ==?false) {

if?(y ?0? labyrinth.map[y -?1][x] ==?true) {

y--;

if(!stack.isEmpty() stack.peek()=="下")

stack.poll();

else

stack.push("上");

}

}?else?if?(b1 ==?true? b2 ==?true) {

if?(y +?1? height labyrinth.map[y +?1][x] ==?true) {

y++;

if(!stack.isEmpty() stack.peek()=="上")

stack.poll();

else

stack.push("下");

}

}

}

StringBuilder sb=new?StringBuilder(length/4);

IteratorString iter=stack.descendingIterator();

while(iter.hasNext())

sb.append(iter.next());

return?sb.toString();

}

}

使用java來(lái)實(shí)現(xiàn)在智能組卷中的遺傳算法(急急急)

題目好像是讓你做個(gè)增強(qiáng)版的List ,簡(jiǎn)單的都實(shí)現(xiàn)了 程序架子大概是這樣,排序查找什么的百度搜下 算法很多,套著每樣寫(xiě)個(gè)方法就行了,測(cè)試就在main‘方法里寫(xiě)

public?class?MyList?{

private?String[]?arr;

private?int?count?;

public?MyList?(int?count){

arr?=?new?String[count];

this.count?=?count;

}

public?MyList?(int[]?intArr){

arr?=?new?String[intArr.length];

this.count?=?intArr.length;

for(int?i=0;iintArr.length;i++){

arr[i]?=?intArr[i]+"";

}

}

public?MyList?(String[]?stringArr){

arr?=?stringArr;

this.count?=?stringArr.length;

}

public?int?getLength(){

return?count;

}

//清空容器內(nèi)的數(shù)組。

public?void?clearAll(){

arr?=?new?String[count];

}

//通過(guò)給定元素下標(biāo)來(lái)刪除某一元素

public?void?removeBySeqn(int?seqn){

if(seqn?=?0??seqncount){

arr[seqn]?=?null;

}

}

public?static?void?main(String[]?args){

MyList??list?=?new?MyList?(40);

MyList??list1?=?new?MyList?({3,2,125,56,123});

MyList??list2?=?new?MyList?({"123",""ad});

list2.removeBySeqn(0);

list1.clearAll();

}

}

分享文章:java源代碼遺傳算法 java源代碼分析
文章路徑:http://m.newbst.com/article44/dddojee.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄虛擬主機(jī)網(wǎng)站營(yíng)銷外貿(mào)建站定制網(wǎng)站企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)