成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

基于遺傳算法的優(yōu)化問題求解

ethernet / 2572人閱讀

摘要:開篇先提到一些生物學(xué)的觀點(diǎn)是因?yàn)?,人工智能中遺傳算法的靈感來源于生物學(xué),它是一種仿生的概念。我理解的遺傳算法,就是一個(gè)多點(diǎn)的不定向搜索。

生物學(xué)中的進(jìn)化論的核心為“物競(jìng)天擇,適者生存”,暗含了的規(guī)則是生物能否生存是不定的,但是適應(yīng)環(huán)境的生物更容易生存。生物的多樣性能夠保持來源于繁殖和變異。
沒錯(cuò),你沒有點(diǎn)錯(cuò),這的確是一篇有關(guān)人工智能入門的博客。開篇先提到一些生物學(xué)的觀點(diǎn)是因?yàn)?,人工智能中遺傳算法的靈感來源于生物學(xué),它是一種仿生的概念。

一.遺傳算法
那么,什么是遺傳算法呢?我們來舉個(gè)栗子吧。
在爬蟲動(dòng)物園里有著各種各樣的螞蟻,我想選出一種螞蟻來代表動(dòng)物園去參加全城動(dòng)物園的螞蟻戰(zhàn)斗比賽。那我該怎么選呢?這里有一個(gè)聰明人提出了一個(gè)方法:首先,我們從各個(gè)螞蟻的種群中選擇出一部分來(選擇初代種群),讓他們相互打架,然后把勝者留下來互相繁殖(交叉產(chǎn)生子代,選擇了比較好的基因進(jìn)行遺傳)。把小螞蟻養(yǎng)大,然后再讓它們打架,勝者繁殖(不斷生成子代)。通過多次的繁殖和選擇,動(dòng)物園有極大的可能選出的螞蟻是所有螞蟻中打架最厲害的。
好吧,這個(gè)例子不是特別的好。我理解的遺傳算法,就是一個(gè)多點(diǎn)的不定向搜索。它通過多次的實(shí)驗(yàn),來找到符合適應(yīng)度函數(shù)的個(gè)體。

二.基本步驟
基本的步驟如下:
1.編碼:將我們可以用來搜索的部分編碼,常用二進(jìn)制串
2.產(chǎn)生初代:
3.計(jì)算每個(gè)個(gè)體的適應(yīng)度及適應(yīng)度占總體的比例(這里我使用了輪盤賭方案):
4.以交叉概率選擇父代母代進(jìn)行交叉
5.以變異概率進(jìn)行變異
6.生成滿足種群容量的子代
7.進(jìn)化多代

三.代碼及說明
Java代碼:

import java.math.BigDecimal;
import java.util.Random;

public class Genetic {
    int geneSize = 20;
    int populationSize = 50;
    int iterationNum =100;
    double crossoverPro =0.8;
    double mutationPro = 0.05;
    int [][] individual = new int[populationSize][geneSize];
    double [] realValue =new double[populationSize];
    double [] fitness =new double [50];
    double [] fitnessPro =new double [populationSize];
    double currentOpt =0;
    int currentX =0;
    Random random =new Random();
    double [] max =new double[iterationNum];

    public void init(){
        for(int i =0;i=3;j--){
                decimal = decimal/2+individual[i][j];
            }
            realValue[i] += decimal/2; 
        }
    }
    
    private void CalFitnessAndFitnessPro(){
        double sum =0;
        currentOpt =0;
        currentX =0;
        for(int i =0;i=pro){
                    for(int k =0;k=pro){
                    for(int k =0;k

這里我使用了二進(jìn)制編碼,單點(diǎn)交叉,輪盤賭加精英選擇(沒代向下完整保留最優(yōu)個(gè)體)。我目標(biāo)是計(jì)算f(x) = x+ 10sin5x + 7cos4x 在[0,9]區(qū)間上的極大值,之所以在適應(yīng)度函數(shù)里加入還加了17是因?yàn)閒(x)在某些位置的時(shí)候是取到負(fù)數(shù)(最小-17),而參與輪盤賭計(jì)算的函數(shù)必須是正數(shù),所以我加了17.

四.小嘗試
二進(jìn)制編碼在0.001這樣的數(shù)的時(shí)候是不精確的,于是我想能不能用十進(jìn)制來解決這個(gè)問題呢?下面我嘗試做了十進(jìn)制編碼(精確度是0.00001)
Java代碼:

import java.math.BigDecimal;
import java.util.Random;

public class DecimalGenetic {
    int geneSize = 6;
    int populationSize = 50;
    int iterationNum =100;
    double crossoverPro =0.8;
    double mutationPro = 0.01;
    int [][] individual = new int[populationSize][geneSize];
    double [] realValue =new double[populationSize];
    double [] fitness =new double [50];
    double [] fitnessPro =new double [populationSize];
    double currentOpt =0;
    int currentX =0;
    Random random =new Random();
    double []max =new double[iterationNum];
    
    public void init(){
        for(int i =0;i0;j--){
                decimal = decimal/10+individual[i][j];
            }
            realValue[i] += decimal/10; 
        //    System.out.println(realValue[i]+"   "+i);
        }
    }
    
    private void CalFitnessAndFitnessPro(){
        double sum =0;
        currentOpt =0;
        currentX =0;
        for(int i =0;i=pro){
                    for(int k =0;k=pro){
                    for(int k =0;k

實(shí)現(xiàn)和二進(jìn)制大部分一致,但是在變異部分我用了取隨機(jī)數(shù)這個(gè)方法。

五.思考:
關(guān)于編碼,我在做完之后有一些思考,想和大家分享.我們編碼一個(gè)數(shù)據(jù),用0-1串表示,每一位是沒有差別的,但是轉(zhuǎn)換為數(shù)字的時(shí)候,每一位的權(quán)值是不同的。對(duì)于真正的自然界,每個(gè)性狀對(duì)于生物的存活幾率的影響也是不同的。比如果蠅的翅膀大小和眼色對(duì)于它的生存幾率的影響是不同的,那反應(yīng)成我們這里的編碼就是位置不同,權(quán)重不同.這里算是遺傳算法的奇妙之處吧.

下面推薦一個(gè)講述比較完整的博客:https://segmentfault.com/a/1190000004155021

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/19602.html

相關(guān)文章

  • 基于遺傳算法優(yōu)化問題求解

    摘要:開篇先提到一些生物學(xué)的觀點(diǎn)是因?yàn)?,人工智能中遺傳算法的靈感來源于生物學(xué),它是一種仿生的概念。我理解的遺傳算法,就是一個(gè)多點(diǎn)的不定向搜索。 生物學(xué)中的進(jìn)化論的核心為物競(jìng)天擇,適者生存,暗含了的規(guī)則是生物能否生存是不定的,但是適應(yīng)環(huán)境的生物更容易生存。生物的多樣性能夠保持來源于繁殖和變異。沒錯(cuò),你沒有點(diǎn)錯(cuò),這的確是一篇有關(guān)人工智能入門的博客。開篇先提到一些生物學(xué)的觀點(diǎn)是因?yàn)?,人工智能中遺傳...

    ivan_qhz 評(píng)論0 收藏0
  • 100 個(gè)基本 Python 面試問題第二部分(21-40)

    摘要:為我們提供了許多內(nèi)置函數(shù),例如并提供了創(chuàng)建用戶定義函數(shù)的能力。會(huì)將該變量視為函數(shù)級(jí)作用域中的局部變量?;氐侥夸浿泻瘮?shù)的用途是什么是中的內(nèi)置函數(shù)之一。請(qǐng)注意,這種類型的參數(shù)語法不允許將命名參數(shù)傳遞給函數(shù)。函數(shù)接受一個(gè)稱為的可選參數(shù)。 ...

    2450184176 評(píng)論0 收藏0
  • 尋優(yōu)算法之粒子群

    摘要:遺傳算法回顧核心算子其中代表第個(gè)粒子的速度,代表慣性權(quán)值和表示學(xué)習(xí)參數(shù),表示在之間的隨機(jī)數(shù)代表第個(gè)粒子搜索到的歷史最優(yōu)值代表整個(gè)集群搜索到的最優(yōu)值代表第個(gè)粒子的當(dāng)前位置。 導(dǎo)言 粒子群PSO算法相比遺傳算法實(shí)現(xiàn)會(huì)簡(jiǎn)單一點(diǎn),核心就是根據(jù)算子更新個(gè)體歷史最優(yōu)和全局最優(yōu)。粒子群用的不多,給我的感覺是收斂很快的一種算法。這種算法較為容易陷入局部最優(yōu),若問題具有欺騙性(具有多個(gè)假峰,且優(yōu)化資源集...

    wangshijun 評(píng)論0 收藏0
  • 世界冠軍之路:菜鳥車輛路徑規(guī)劃求解引擎研發(fā)歷程

    摘要:已有的經(jīng)典求解算法可以分為精確解算法和啟發(fā)式算法兩大類。所以還有一大部分研究集中于啟發(fā)式算法領(lǐng)域。此外,經(jīng)過不斷的探索研究,元啟發(fā)式算法被證明在求解方面具有很好的效果和效率。 showImg(https://segmentfault.com/img/remote/1460000018814897); 阿里妹導(dǎo)讀:車輛路徑規(guī)劃問題(Vehicle Routing Problem, VR...

    CoreDump 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<