1. 程式人生 > >遺傳演算法應用案例

遺傳演算法應用案例

<<MATLAB在數學建模中的應用>>

案例一.無約束目標函式最大值遺傳演算法求解策略

求解問題           max f(x)=200*exp(-0.05*x)*\sin (x) ,x\in [-2,2]

%主程式:用遺傳演算法求解y=200*exp(-0.05*x).*sin(x)在[-2,2]上的最大值
clc;
clear all;
close all;
global BitLength
global boundsbegin
global boundsend
bounds=[-2 2];   %一維自變數的取值範圍
precision=0.0001;%運算精度
boundsbegin=bounds(:,1);
boundsend=bounds(:,2);
%計算如果滿足求解精度至少需要多長的染色體
BitLength=ceil(log2((boundsend-boundsbegin)'./precision));
popsize=50;       %初始種群大小
Generationnmax=30;%最大代數
pcrossover=0.90;  %交配概率
pmutation=0.09;   %變異概率
%產生初始種群
population=round(rand(popsize,BitLength));
%計算適應度,返回適應度Fitvalue和累計概率cumsump
[Fitvalue,cumsump]=fitnessfun(population);
Generation=1;
while Generation<Generationnmax
   for j=1:2:popsize
       %選擇操作
       seln=selection(population,cumsump);
       %交叉操作
       scro=crossover(population,seln,pcrossover);
       scnew(j,:)=scro(1,:);
       scnew(j+1,:)=scro(2,:);
       %變異操作
       smnew(j,:)=mutation(scnew(j,:),pmutation);
       smnew(j+1,:)=mutation(scnew(j+1,:),pmutation);
   end
   population=smnew;%產生了新的種群
   %計算新種群的適應度
   [Fitvalue,cumsump]=fitnessfun(population);
   %記錄當前代最好的適應度和平均適應度
   [fmax,nmax]=max(Fitvalue);
   fmean=mean(Fitvalue);
   ymax(Generation)=fmax;
   ymean(Generation)=fmean;
   %記錄當前代最好的適應度和平均適應度
   x=transform2to10(population(nmax,:));
   %自變數取值範圍是[-2,2],需要把經過遺傳運算的最佳染色體整合到[-2,2]區間
   xx=boundsbegin+x*(boundsend-boundsbegin)/(power((boundsend),BitLength)-1);
   xmax(Generation)=xx;
   Generation=Generation+1;
end
Generation=Generation-1;
Bestpopulation=xx;
Besttargetfunvalue=targetfun(xx);
%繪製經過遺傳演算法後的適應度曲線.一般的,如果進化過程中種群的平均適應度與最大適應度
%在曲線上有相互趨同的形態,表示演算法收斂進行很順利,沒有出現震盪;
%在這種前提下,最大適應度個體連續若干代沒有發生進化表明種群已經成熟
figure(1);
hand1=plot(1:Generation,ymax);
set(hand1,'linestyle','-','linewidth',1.8,'marker','*','markersize',6);
hold on
hand2=plot(1:Generation,ymean);
set(hand2,'color','r','linestyle','-','linewidth',1.8,...
    'marker','h','markersize',6);
xlabel('進化代數');ylabel('最大/平均適應度');xlim([1 Generation]);
legend('最大適應度','平均適應度');
box off;hold off;
function scro=crossover(population,seln,pc)
BitLength=size(population,2);
pcc=IfCroIfMut(pc);%根據交叉概率決定是否進行交叉操作,1則是,0則否
if pcc == 1
    chb=round(rand*(BitLength-2))+1;%在[1,BitLength-1]範圍內隨機產生一個交叉位
    scro(1,:)=[population(seln(1),1:chb) population(seln(2),chb+1:BitLength)];
    scro(2,:)=[population(seln(2),1:chb) population(seln(1),chb+1:BitLength)];
else
    scro(1,:)=population(seln(1),:);
    scro(2,:)=population(seln(2),:);
end
end
function [Fitvalue,cumsump]=fitnessfun(population)
global BitLength
global boundsbegin
global boundsend
popsize=size(population,1);
for i=1:popsize
   x=transform2to10(population(i,:));%將二進位制轉化為10進位制
   %轉化為[-2,2]區間的實數
   xx=boundsbegin+x*(boundsend-boundsbegin)/(power((boundsend),BitLength)-1);
   Fitvalue(i)=targetfun(xx);       %計算函式值,即適應度
end
%給適應度加上一個大小合理的數以便保證種群適應值為正數
Fitvalue=Fitvalue'+230;
%計算選擇概率
fsum=sum(Fitvalue);
Pperpopulation=Fitvalue/fsum;
%計算累積概率
cumsump(1)=Pperpopulation(1);
for i=2:popsize
    cumsump(i)=cumsump(i-1)+Pperpopulation(i);
end
cumsump=cumsump';
end
function pcc=IfCroIfMut(mutORcro)
test(1:100)=0;
l=round(100*mutORcro);
test(1:l)=1;
n=round(rand*99)+1;
pcc=test(n);
end
function snnew=mutation(snew,pmutation)
    BitLength=size(snew,2);
    snnew=snew;
    pmm=IfCroIfMut(pmutation);%根據變異概率決定是否進行編譯操作,1則是,0則不是
    if pmm == 1
       chb=round(rand*(BitLength-1))+1;%在[1,BitLength]範圍內隨機產生一個變異位
       snnew(chb)=abs(snew(chb)-1);
    end
end
function seln=selection(population,cumsump)
%從種群中選擇兩個個體
for i=1:2
    r=rand;         %隨機產生一個隨機數
    prand=cumsump-r;
    j=1;
    while prand(j)<0
        j=j+1;
    end
    seln(i)=j;      %選中個體的序號
end
end
function x=transform2to10(Population)
    BitLength=size(Population,2);
    x=Population(BitLength);
    for i=1:BitLength-1
        x=x+Population(BitLength-i)*power(2,i);
    end
end
function y=targetfun(x)
y = 200*exp(-0.05*x).*sin(x);
end

相關推薦

遺傳演算法應用案例

<<MATLAB在數學建模中的應用>> 案例一.無約束目標函式最大值遺傳演算法求解策略 求解問題            %主程式:用遺傳演算法求解y=200*exp(-0.05*x).*sin(x)在[-2,2]上的最大值 clc; clear

遺傳演算法應用於隨機森林的調參過程

背景 其實不管調參的物件的是隨機森林,還是其他分類器,遺傳演算法都是作為分類器對其超引數進行調優的工具,當然,遺傳演算法是一個貪心演算法,只能接近於最優解,類似的演算法還有比如退火演算法、蟻群演算法等等,關於遺傳演算法的詳解這裡不再多說,網上參考有很多: 例項程式碼

【建模必備】遺傳演算法應用舉例(簡單的一元函式優化例項)

如果喜歡這裡的內容,你能夠給我最大的幫助就是轉發,告訴你的朋友,鼓勵他們一起來學習。 If you like the content here, you can give me the greatest help is forwarding, tell you

二叉樹演算法應用案例

筆者在1月4號將在CSDN學院開設一門公開課《演算法與遊戲實戰》,在這裡先把課程內容透露一部分給讀者。首先講述二叉樹演算法,二叉樹在IT領域應用是非常廣泛的,它不僅在遊戲開發中,在當前比較火的人工智慧上也得到了廣泛的應用。作為使用者,首先要清楚二叉樹的特性:它是n(n≥0)

遺傳演算法框架Geatpy學習之——基於網格化處理的多種群進化優化及其在含等式約束的優化問題中的應用

Geatpy是由華南理工大學、華南農業大學、德州奧斯汀公立大學學生聯合團隊開發的一款Python上的遺傳和進化演算法高效能權威框架。其效能遠高於matlab遺傳演算法工具箱及類似的諸如gatbx、GEATbx、gaot等第三方工具箱。尤其適合需要應用遺傳或其他進化演算法求解建

馬爾可夫毯式遺傳演算法在基因選擇中的應用

#引用 ##LaTex @article{ZHU20073236, title = “Markov blanket-embedded genetic algorithm for gene selection”, journal = “Pattern Recogn

【資料應用案例】人群優選演算法模型,挖掘品牌潛客

案例來源:@阿里巴巴機器智慧 導讀: 為A電商做年貨節品牌營銷,目標是識別目標受眾,廣告投放後由“機會人群”轉向“興趣人群”的比例更高。 解決方案是: 第一步:多方向人群擴散。通過興趣偏好、品類偏好、競品受眾、搜尋人群、流失人群、lookalike人群 六個方

資料探勘演算法與現實生活中的應用案例

如何分辨出垃圾郵件”、“如何判斷一筆交易是否屬於欺詐”、“如何判斷紅酒的品質和檔次”、“掃描王是如何做到文字識別的”、“如何判斷佚名的著作是否出自某位名家之手”、“如何判斷一個細胞是否屬於腫瘤細胞”等等,這些問題似乎都很專業,都不太好回答。但是,如果瞭解一點點資

K-means聚類演算法原理分析與實際應用案例分析(案例分析另起一篇部落格)

引言 在資料分析中,我們常常想將看上去相似或者行為形似的資料聚合在一起。例如,對一個營銷組織來說,將不同客戶根據他們的特點進行分組,從而有針對性地定製營銷活動,這很重要。又比如,對學校老師來說,將學生分組同樣能夠有所側重的進行教育活動。分類與聚類是資料探勘領域

機器學習sklearn19.0——線性迴歸演算法應用案例

一、sklearn中的線性迴歸的使用 二、線性迴歸——家庭用電預測 (1)時間與功率之間的關係 #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu #線性迴歸——家庭用電預

決策樹演算法及其應用案例

決策樹演算法主要分為三類: ID3、C4.5、CART演算法 以ID3演算法為例: 對上表某圖書銷量進行預測. 思考:建立測試模型,各個變數資料權重?資料的轉化? 重點在於:計算各個資訊熵(資料預處理),可參考百度百科內容 決策樹演算法模組: 關注點:對資料需要進行預處理,

遺傳演算法及其應用簡介

遺傳演算法(genetic algorithm,GA)是計算數學中用於解決最優化問題的搜尋演算法,是進化演算法的一種。進化演算法最初是借鑑了達爾文進化生物學中的一些現象而發展起來的,這些現象包括遺傳、突變、自然選擇以及雜交等。 預備知識:達爾文進化論,遺傳學三

遺傳演算法的發展現狀與應用例項

.1  引言近年來 ,遺傳演算法 (GA)的卓越效能引起人們的關注 .對於以往難以解決的函式優化問題 ,複雜的多目標規劃問題 ,工農業生產中的配管、配線問題 ,以及機器學習 ,圖象識別 ,人工神經網路的權係數調整和網路構造等問題 ,GA是最有效的方法之一 .雖然GA在許多優化問題中都有成功的應用 ,但其本身也

[PlantSimulation]GAWizard遺傳演算法應用(二)

在閾值設定問題中,需要給目標值設定合適的變化範圍,換句話說,就是找到一個最大值和最小值,使其在其區間內變化,從而是系統穩定、高效執行。在PlantSimulation中常見的就是優化暫存區的容量。此次案

神經網路案例分析4-5-神經網路遺傳演算法函式極值尋優-基於BP_Adaboost 的強分類器設計

神經網路遺傳演算法函式極值尋優-非線性函式極值尋優 這一章節的演算法是利用神經網路對資料的擬合能力和遺傳演算法的極值尋優能力相結合,求得非線性函式的極值點。既然由神經網路和遺傳演算法相結合的演算法,那

遺傳演算法在自動組卷中的應用

遺傳演算法 遺傳演算法(Genetic Algorithm)是一種模擬自然界的進化規律-優勝劣汰演化來的隨機搜尋演算法,其在解決多種約束條件下的最優解這類問題上具有優秀的表現. 1. 基本概念 在遺傳演算法中有幾個基本的概念:基因、個體、種群和進化.基

遺傳演算法在走迷宮遊戲中的應用

前言 遺傳(GA)演算法是一個非常有意思的演算法,因為他利用了生物進化理論的知識進行問題的求解。演算法的核心就是把擁有更好環境適應度的基因遺傳給下一代,這就是其中的關鍵的選擇操作,遺傳演算法整體的階段分為選擇,交叉和變異操作,選擇操作和變異操作在其中又是比較重要的步驟。

應用遺傳演算法求函式最小值

1、遺傳演算法概論        遺傳演算法(GA)可能是最早開發出來的模擬生物遺傳系統的演算法模型。它首先由Fraser提出,後來有Bremermann和Reed等人  再次提出。最後,Holland對遺傳演算法做了大量工作並使之推廣,因此被認為是遺傳演算法的奠基人。遺傳

【Spark深入學習 -12】Spark程序設計與企業級應用案例02

提升 算子 lin count() roi println groupby 工作問題 衍生 ----本節內容------- 1.遺留問題答疑 1.1 典型問題解答 1.2 知識點回顧 2.Spark編程基礎 2.1 Spark開發四部曲 2.2 RDD典型實例

集合應用案例:編寫程序實現學生信息管理系統的錄入登錄

else 系統 tput img efault () 創建 輸入輸出 public 本編文章主要介紹一個關於集合的應用案例:完成班級學員錄入功能 (沒有持久化操作,每次重啟錄入的信息都保存不了) 一、需求: 創建學生類:添加以下屬性以及相應的構造函數!使用集合保存學員信息!