导航:首页 > 源码编译 > 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搜索算法代码相关的资料

热点内容
不安全服务器是什么意思 浏览:519
挂载vhd命令 浏览:441
女主角是程序员男主角是医生 浏览:561
怎么解除app获取指纹 浏览:740
安卓仙剑修改器怎么用 浏览:537
松下服务器18代表什么 浏览:284
什么叫服务器高并发 浏览:958
单片机的pow函数 浏览:867
天气预报android界面 浏览:951
空调支持用户使用编程吗 浏览:683
亚马逊云服务器如何设置 浏览:736
java本地类 浏览:369
程序员话剧 浏览:778
通达信vix恐慌指数源码 浏览:25
火力app在哪里下载 浏览:101
linux查看安装的服务 浏览:176
tp277触摸屏编程软件 浏览:423
命令按钮能不能获得焦点 浏览:562
专属程序员的浏览器 浏览:723
cad图形界限命令 浏览:223