利用GA求解mini f

2021-08-31 18:13:46 字數 2118 閱讀 7287

%簡單一元函式優化:計算函式最小值

% f(x)=sin(10*pi*x)/x,x∈[1,2]

clcclear all

close all %close what?

%%畫出函式圖

figure(1); % 畫圖指令

hold on;

lb = 1; ub = 2; %函式自變數範圍

ezplot('sin(10*pi*x)/x',[lb, ub]); %畫出函式曲線

xlabel('自變數/x')

ylabel('函式值/y')

%%定義遺傳演算法引數

nind = 40; %種群大小

maxgen = 20; %最大迭代次數

preci = 20; %染色體長度

ggap = 0.95; %代溝,選擇95%的個體

px = 0.7; %交叉概率

pm = 0.01; %變異概率

trace = zeros(2, maxgen); %尋優結果的初始值(一行自變數,一行值)

fieldd = [preci;lb;ub;1;0;1;1]; %區域描述器todo

%fieldd = [len;lb;ub;code;scale;lbin;ubin] 一般用於二進位制串到實值的轉換;

%len代表包含在chrom中每個字串的長度;lb和ub是行向量,指明每個變數的下界和上界,code表明如何編碼(code=1二進位制,code=0是格雷),scale指明刻度(scale=0算數,scale=1對數)lbin和ubin表示是否包含邊界,0表示去掉,1代表包含

chrom = crtbp(nind, preci); %建立基於二進位制的種群,一行代表乙個個體

%%優化

gen = 0;

x = bs2rv(chrom,fieldd); %子代個體的十進位制表達,第二個引數是什麼意思?

objv = sin(10*pi*x)/x; %求目標函式的值,儲存在objv向量裡面

while genfitnv = ranking(objv); %為種群排序

selch = select('sus', chrom, fitnv, ggap); %todo被選擇之後的種群

selch = recombin('xovsp',selch,px); %xovsp是什麼?經過交叉之後的種群

selch = mut(selch, pm) %變異

x = bs2rv(selch, fieldd); %

objvsel = sin(10*pi*x)/x; %

[chrom, objv] = reins(chrom, selch,1,1,objvsel); %重插入子代到父代,得到新種群

x = bs2rv(selch, fieldd); %

gen = gen + 1; %

%獲取每代的最優解及其序號,y為最優解,i為個體的序號

[y, i] = min(objv);

trace(1, gen) = x(i); %把個體的序號存入第一行

trace(2, gen) = y; %第二行放第一行對應的適應值

endplot(trace(1,:),trace(2,:),'bo'); %第三個引數是什麼?某種線型

grid on %開啟網格

plot(x, objv,'b*'); %和上乙個有沒有區別

hold off %與hold on相對,hold表示在當前圖(座標系,可能是figure)中畫了一張圖,再畫其他的時候保持原圖還在.

%%畫進化圖

figure(2);

plot(1:maxgen,trace(2,:)); %

grid on

xlabel('遺傳代數')

ylabel('解的變化')

title('進化過程')

besty = trace(2,end);

bestx = trace(1,end);

fprintf(['最優解:\nx = ',num2str(bestx),'\ny=',num2str(besty),'\n'])

利用棧求解迷宮問題

利用棧求解迷宮問題 源 include include define m 8 define n 8 define maxsize m n typedef struct box typedef struct sttype int mg m 2 n 2 bool mgpath int xi,int yi...

利用PSO求解TSP問題

pso 粒子群演算法 是群智慧型演算法的一種,其他的群智慧型演算法還有蟻群演算法,遺傳演算法等。其他的智慧型演算法還有模擬退火。之前看過一段時間的pso,商務智慧型課程最後的大作業便想用一下,剛好在github上看到有人用模擬退火解決tsp問題,而且效果不錯,於是便萌生了利用pso求解tsp問題的想...

LeetCode 利用雜湊表求解

python的dict採用了雜湊表,最低能在 o 1 時間內完成搜尋。下面幾道題就是利用dict來解答 簡單 存在重複元素 給定乙個整數陣列,判斷是否存在重複元素。如果任意一值在陣列 現至少兩次,函式返回true。如果陣列中每個元素都不相同,則返回false。示例 1 輸入 1,2,3,1 輸出 t...