導航:首頁 > 源碼編譯 > matlab搜索演算法代碼

matlab搜索演算法代碼

發布時間:2024-03-04 08:49:54

⑴ 有人用MATLAB研究布穀鳥搜索演算法

這個簡單,寫成目標函數,初始化參數粒子,利用粒子群優化即可。
黃金比例搜索演算法 / Golden Ratio Search Algorithm 可以用在Powell演算法中的一個步驟——一維極值搜索中。由於我寫了一篇Powell演算法實現的文章(一部分,尚未完成),所以在此詳述golden ratio search的實現。
要使用golden ration search來對函數f(x)進行極值搜索,函數f(x)需要在某一區間內滿足單峰(unimodal)條件。那麼什麼是單峰呢?
如果函數f(x)在區間 I = [a,b]上,存在一個點p∈I,並且:
(1) f(x)在[a,p]內是單減的
(2) f(x)在[p,b]內是單增的
那麼就稱函數f(x)在區間 I 上是單峰的。
轉載請註明出處:http://www.codelast.com/
在這種情況下,就具備使用該演算法的條件了。

⑵ 急求matlab車輛調度遺傳演算法代碼,需求車輛行駛最優路徑。

function [path,lmin]=ga(data,d) %data為點集,d為距離矩陣,即賦權圖
tic
%======================
sj0=data;%開環最短路線
%=================================
% sj0=[data;data(1,:)]; %閉環最短路線
%=========================
x=sj0(:,1);y=sj0(:,2);
N=length(x);
%=========================
% d(N,:)=d(1,:);%閉環最短路線
% d(:,N)=d(:,1);%距離矩陣d
%======================
L=N; %sj0的長度
w=800;dai=1000;
%通過改良圈演算法選取優良父代A
for k=1:w
c=randperm(L-2);
c1=[1,c+1,L];
flag=1;
while flag>0
flag=0;
for m=1:L-3
for n=m+2:L-1
if d(c1(m),c1(n))+d(c1(m+1),c1(n+1))<d(c1(m),c1(m+1))+d(c1(n),c1(n+1))
flag=1;
c1(m+1:n)=c1(n:-1:m+1);
<a href="https://www..com/s?wd=end&tn=44039180_cpr&fenlei=-CEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-" target="_blank" class="-highlight">end</a>
<a href="https://www..com/s?wd=end&tn=44039180_cpr&fenlei=-CEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-" target="_blank" class="-highlight">end</a>
<a href="https://www..com/s?wd=end&tn=44039180_cpr&fenlei=-CEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-" target="_blank" class="-highlight">end</a>
end
J(k,c1)=1:L;
end
J=J/L;
J(:,1)=0;J(:,L)=1;
rand('state',sum(clock));
%遺傳演算法實現過程
A=J;
for k=1:dai %產生0~1 間隨機數列進行編碼
B=A;
c=randperm(w);
%交配產生子代B
for i=1:2:w
F=2+floor(100*rand(1));
temp=B(c(i),F:L);
B(c(i),F:L)=B(c(i+1),F:L);
B(c(i+1),F:L)=temp;
end;
%變異產生子代C
by=find(rand(1,w)<0.1);
if length(by)==0
by=floor(w*rand(1))+1;
end
C=A(by,:);
L3=length(by);
for j=1:L3
<a href="https://www..com/s?wd=bw&tn=44039180_cpr&fenlei=-CEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-" target="_blank" class="-highlight">bw</a>=floor(1+fix(rand(1,3)*N)); %產生1-N的3個隨機數
<a href="https://www..com/s?wd=bw&tn=44039180_cpr&fenlei=-CEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-" target="_blank" class="-highlight">bw</a>=sort(<a href="https://www..com/s?wd=bw&tn=44039180_cpr&fenlei=-CEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-" target="_blank" class="-highlight">bw</a>);
C(j,:)=C(j,[1:bw(1)-1,bw(2)+1:bw(3),bw(1):bw(2),bw(3)+1:L]);
end
G=[A;B;C];
<a href="https://www..com/s?wd=TL&tn=44039180_cpr&fenlei=-CEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-" target="_blank" class="-highlight">TL</a>=size(G,1);
%在父代和子代中選擇優良品種作為新的父代
[<a href="https://www..com/s?wd=dd&tn=44039180_cpr&fenlei=-CEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-" target="_blank" class="-highlight">dd</a>,IX]=sort(G,2);
temp=[];
temp(1:<a href="https://www..com/s?wd=TL&tn=44039180_cpr&fenlei=-CEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-" target="_blank" class="-highlight">TL</a>)=0;
for j=1:<a href="https://www..com/s?wd=TL&tn=44039180_cpr&fenlei=-CEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-" target="_blank" class="-highlight">TL</a>
for i=1:L-1
temp(j)=temp(j)+d(IX(j,i),IX(j,i+1));
end
end
[DZ,IZ]=sort(temp);
A=G(IZ(1:w),:);
end
path=IX(IZ(1),:)
% for i=1:length(path)
% path(i)=path(i)-1;
% end
% path=path(2:end-1);
lmin=0;l=0;
for j=1:(length(path)-1)
<a href="https://www..com/s?wd=t1&tn=44039180_cpr&fenlei=-CEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-" target="_blank" class="-highlight">t1</a>=path(j);t2=path(j+1);
l=d(<a href="https://www..com/s?wd=t1&tn=44039180_cpr&fenlei=-CEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-" target="_blank" class="-highlight">t1</a>,t2);
lmin=lmin+l;
end
xx=sj0(path,1);yy=sj0(path,2);
plot(xx,yy,'r-o');
axis equal
toc

⑶ 求一個基本遺傳演算法的MATLAB代碼

我發一些他們的源程序你,都是我在文獻中搜索總結出來的:
%
下面舉例說明遺傳演算法
%
%
求下列函數的最大值
%
%
f(x)=10*sin(5x)+7*cos(4x)
x∈[0,10]
%
%

x
的值用一個10位的二值形式表示為二值問題,一個10位的二值數提供的解析度是每為
(10-0)/(2^10-1)≈0.01

%
%
將變數域
[0,10]
離散化為二值域
[0,1023],
x=0+10*b/1023,
其中
b

[0,1023]
中的一個二值數。
%
%
%
%--------------------------------------------------------------------------------------------------------------%
%--------------------------------------------------------------------------------------------------------------%
%
編程
%-----------------------------------------------
%
2.1初始化(編碼)
%
initpop.m函數的功能是實現群體的初始化,popsize表示群體的大小,chromlength表示染色體的長度(二值數的長度),
%
長度大小取決於變數的二進制編碼的長度(在本例中取10位)。
%遺傳演算法子程序
%Name:
initpop.m
%初始化
function
pop=initpop(popsize,chromlength)
pop=round(rand(popsize,chromlength));
%
rand隨機產生每個單元為
{0,1}
行數為popsize,列數為chromlength的矩陣,
%
roud對矩陣的每個單元進行圓整。這樣產生的初始種群。
%
2.2.2
將二進制編碼轉化為十進制數(2)
%
decodechrom.m函數的功能是將染色體(或二進制編碼)轉換為十進制,參數spoint表示待解碼的二進制串的起始位置
%
(對於多個變數而言,如有兩個變數,採用20為表示,每個變數10為,則第一個變數從1開始,另一個變數從11開始。本例為1),
%
參數1ength表示所截取的長度(本例為10)。
%遺傳演算法子程序
%Name:
decodechrom.m
%將二進制編碼轉換成十進制
function
pop2=decodechrom(pop,spoint,length)
pop1=pop(:,spoint:spoint+length-1);
pop2=decodebinary(pop1);
%
2.4
選擇復制
%
選擇或復制操作是決定哪些個體可以進入下一代。程序中採用賭輪盤選擇法選擇,這種方法較易實現。
%
根據方程
pi=fi/∑fi=fi/fsum
,選擇步驟:
%
1)
在第
t
代,由(1)式計算
fsum

pi
%
2)
產生
{0,1}
的隨機數
rand(
.),求
s=rand(
.)*fsum
%
3)

∑fi≥s
中最小的
k
,則第
k
個個體被選中
%
4)
進行
N
次2)、3)操作,得到
N
個個體,成為第
t=t+1
代種群
%遺傳演算法子程序
%Name:
selection.m
%選擇復制
function
[newpop]=selection(pop,fitvalue)
totalfit=sum(fitvalue);
%求適應值之和
fitvalue=fitvalue/totalfit;
%單個個體被選擇的概率
fitvalue=cumsum(fitvalue);
%如
fitvalue=[1
2
3
4],則
cumsum(fitvalue)=[1
3
6
10]
[px,py]=size(pop);
ms=sort(rand(px,1));
%從小到大排列
fitin=1;
newin=1;
while
newin<=px
if(ms(newin))
評論
0
0
載入更多

⑷ 求助matlab編程!!!演算法尋優

你好

像這樣的求最小值,可以用很多演算法,可以用命令窗口編程,或者利用優化工具箱。對於初學者,可以利用optimization toolbox裡面演算法,只要自己寫一個目標函數就可以了。

一般的有約束多變數函數都可以通過fmincon函數求解得到,但是如果初始值選取不恰當也可以可以陷入局部最優。全局最優搜索能力比較強的可能屬智能演算法了,如遺傳演算法等等下面我採用fmincon函數嘗試求解:

目標函數寫好好,保存為funmint.m文件,函數如下;

functionZ=funmint(x)
x1=x(1);
x2=x(2);
x3=x(3);
x4=x(4);
S1=x(5);
S2=x(6);
eg=64.11-0.043-0.49*x2-0.06*x3-0.075*x4-3.258e-4*x1*x2+9.712e-5*x1*x3...
+2.781e-4*x1*x4-4.738e-5*x2*x3-1.212e-3*x2+6.053e-4*x3*x4+...
7.775e-4*x1^2+1.125e-3*x2^2-8.665e-4*x3^2+5.89e-3*x4^2;
sd=-6.02953+0.03583*x1+0.067595*x2-2.90115e-3*x3-0.053463*x4-1.7325e-4*x1*x2+...
1.1525e-4*x1*x3-7.4375e-5*x1*x4-6.3375e-5*x2*x3+4.03125e-4*x2*x4-...
3.16562e-4*x3*x4+3.625e-6*x1^2-1.07375e-4*x2^2-2.68437e-5*x3^2-3.27344e-4*x4^2;
Z=sd+1e7*abs(-eg+0.0518*sd+S1)+1e7*abs(0.1-eg-0.0518*sd+S2);

在命令窗口中輸入下面這些求解代碼:

clear
lb=[60235402100];
ub=[802558029InfInf];
x0=[7024560251010];
options=optimset('Algorithm','active-set');
[x,fval]=fmincon(@funmint,x0,[],[],[],[],lb,ub,[],options)

可以得到一個最小值,以及對應的6個變數如下:

x=[62.9860 244.9435 74.5278 21.3001 1.8670 2.0691]

最小值為:

fval=3.4326

當然你也可以換用其他函數,只要把fmincon換了就可以。優化函數結構都差不多。

希望對你有幫助!

閱讀全文

與matlab搜索演算法代碼相關的資料

熱點內容
頭條下載了app怎麼安裝到桌面 瀏覽:885
原泥動力作用怎麼寫app 瀏覽:703
友行app怎麼注冊 瀏覽:190
伺服器如何打開組件服務 瀏覽:143
預約的app怎麼弄 瀏覽:507
來自星星的孩子印度電影名 瀏覽:600
大香焦高清在線 瀏覽:747
android自身卸載監聽 瀏覽:77
日本經典風月片 瀏覽:56
韓國把黃瓜套上避孕套的電影 瀏覽:643
jpeg如何轉換成pdf 瀏覽:61
英譯pdf 瀏覽:222
解壓的聲控圖片 瀏覽:208
迪士尼大電影 百度網盤 瀏覽:88
數組setjava 瀏覽:275
中國禁止觀看的十部鬼片 瀏覽:745
桌面小組件app怎麼添加到桌面 瀏覽:420
看片資源不用下載 瀏覽:846
魔獸世界怎麼改加密地形 瀏覽:611
revit快捷命令 瀏覽:827