在matlab中利用遺傳演算法(GA)求取函式全域性最大值
遺傳演算法的簡單實現
今天學習了遺傳演算法,其最大的特點就是能求取全域性最優值,但是演算法隨機性高,對連續定義域很難求得精確解,本文僅參考遺傳演算法的思想,在整數範圍內,來求取函式全域性最大值
首先回顧一下演算法流程
(b)方法在(a)的基礎上,選擇保留一部分父代個體,防止優秀基因的丟失,我在這裡使用的是經典遺傳演算法,在下面這種簡單的二次函式方面效果不錯
clc;
clear;
%設定起始計時器
tic;
%定義群體個數num(設為偶數),定義自變數數n,定義自變數取值範圍[1,top],
num=160;n=4;top=12;
%定義用來儲存目標結果的向量
F_result=zeros(1,num);
%定義種群最大值,平均值
F_max=[];F_mean=[];F_min=[];
%隨機生成num個個體,即生成初始種群
for i=1:num
for j=1:n
X{i}(j)=unidrnd(top);
end
F_result(i)=f(X{i}); %請先自定義f函式
end
i=1;
%選擇使函式f較大的前一半個體隨機組合,隨機交換基因,產生下一代,直到群體數復原
while(1)
%取群體最大值,平均值,最小值作為觀察物件
F_max(i)=max(F_result);F_mean(i)=mean(F_result);F_min(i)=min(F_result);
if (F_max(i)==F_mean(i))
break;
end
%選擇前一半表現優秀的個體雜交產生下一代
F_tem=F_result; %臨時儲存F的結果用於排序
[result,coo]=sort(F_tem);
t=unidrnd(num/2); %基因交換迴圈過程中發生變異的某時刻
for j=1:num/2 %基因交換迴圈過程,子代將完全取代老一代
a=unidrnd(num/2)+num/2; %隨機選擇兩個表現優秀的不同個體
b=unidrnd(num/2)+num/2;
if(a==b)
j=j-1;
continue;
end
%選擇與重組
X{coo(j)}=[X{coo(a)}(1) X{coo(a)}(2) X{coo(b)}(3) X{coo(b)}(4)];
F_result(coo(j))=f(X{coo(j)});
X{coo(j+num/2)}=[X{coo(b)}(1) X{coo(b)}(2) X{coo(a)}(3) X{coo(a)}(4)];
F_result(coo(j+num/2))=f(X{coo(j+num/2)});
%變異
if(j==t)
c=unidrnd(n); %任選一位變異
d=unidrnd(top); %任變異成定義域內某值
X{coo(j)}(c)=d;
F_result(coo(j))=f(X{coo(j)});
X{coo(j+num/2)}(c)=d;
F_result(coo(j+num/2))=f(X{coo(j+num/2)});
end
end
i=i+1;
end
plot(F_max,'r');
hold on;
plot(F_mean,'g');
hold on;
plot(F_min,'b');
toc;
下面是執行結果
相關文章
- 遺傳演算法(一):Basic GA演算法
- 在vue專案中 如何定義全域性變數 全域性函式Vue變數函式
- 【演算法】遺傳演算法GA中幾種交叉運算元小結演算法
- Unity中利用遺傳演算法訓練MLPUnity演算法
- MATLAB實戰系列(十一)-多種群遺傳演算法的函式優化演算法(附MATLAB程式碼)Matlab演算法函式優化
- 遺傳演算法講解(Matlab描述)演算法Matlab
- lua非全域性函式函式
- 遺傳演算法中適值函式的標定與大變異演算法演算法函式
- 遺傳演算法解決函式最佳化問題演算法函式
- 在 Java 中利用 redis 實現分散式全域性唯一標識服務JavaRedis分散式
- laravel 自定義全域性函式Laravel函式
- 利用遺傳演算法庫DEAP優化交易策略演算法優化
- 利用遺傳學演算法求解工作分配問題演算法
- setTimeout()函式中為什麼this指向全域性物件window函式物件
- MATLAB中的常用函式Matlab函式
- Matlab中@與函式呼叫Matlab函式
- Matlab中的plot函式Matlab函式
- 遺傳演算法演算法
- yaf框架載入全域性公共函式框架函式
- 在專案開發中經常用到的全域性函式、正則(持續更新)函式
- 【MATLAB】利用size()函式輸出陣列大小Matlab函式陣列
- matlab最優化問題的函式(fminbnd),fmincon,globalsearch,multistart(全域性區域性最優)Matlab優化函式
- Servlet中利用全域性物件提高效能!!!Servlet物件
- Matlab中erf函式的用法Matlab函式
- matlab中sort函式的用法Matlab函式
- PHP 全域性使用 Laravel 輔助函式 ddPHPLaravel函式
- 基於GA遺傳最佳化的CNN-GRU的時間序列迴歸預測matlab模擬CNNMatlab
- 遺傳演算法 (轉)演算法
- 基於GA遺傳最佳化的PID控制器最優控制引數整定matlab模擬Matlab
- bind( )介面卡(Adapter) -- 呼叫全域性函式及成員函式APT函式
- MATLAB中linspace函式使用Matlab函式
- PHP 到底該怎麼定義全域性函式?PHP函式
- vue 全域性函式的 定義與任意呼叫Vue函式
- 彙編眼中的函式呼叫引數傳遞以及全域性與區域性變數與“基址”函式變數
- matlab表示函式Matlab函式
- 說說在 Python 中如何向函式傳參Python函式
- uniapp 全域性檢查登陸並跳轉函式APP函式
- 使用matlab實現遺傳演算法解決飛行員偵查問題Matlab演算法