该程序是遗传算法优化BP神经网络函数极值寻优:
%% 该代码为基于神经网络遗传算法的系统极值寻优
%% 清空环境变量
clc
clear
%% 初始哗李冲化遗传算法参数
%初始化参数
maxgen=100%进化代数,即迭代次数
sizepop=20 %种群规模
pcross=[0.4] %交叉概率选择,0和1之间
pmutation=[0.2] %变异概率选择,0和1之间
lenchrom=[1 1] %每个变量的字串长度,如果是浮点变量,则长度都为1
bound=[-5 5-5 5] %数据范围
individuals=struct('fitness',zeros(1,sizepop), 'chrom',[]) %将种群信息定义为一个结构体
avgfitness=[] %每一代种群的平均适应度
bestfitness=[]%每一代种群的最佳适应度
bestchrom=[] %适应度最好的染色体
%% 初始化种群计算适应度值
% 初始化种群
for i=1:sizepop
%随机产生一个种群
individuals.chrom(i,:)=Code(lenchrom,bound)
x=individuals.chrom(i,:)
%计算适应度
individuals.fitness(i)=fun(x) %染色体的适应度
end
%找最好的染色体
[bestfitness bestindex]=min(individuals.fitness)
bestchrom=individuals.chrom(bestindex,:) %最好的染色体
avgfitness=sum(individuals.fitness)/sizepop%染色体的平均适应度
% 记录每一代进化中最好的适应度和平均适应度
trace=[avgfitness bestfitness]
%% 迭代寻优
% 进化开始
for i=1:maxgen
i
% 选择
individuals=Select(individuals,sizepop)
avgfitness=sum(individuals.fitness)/sizepop
%交叉
individuals.chrom=Cross(pcross,lenchrom,individuals.chrom,sizepop,bound)
% 变异
individuals.chrom=Mutation(pmutation,lenchrom,individuals.chrom,sizepop,[i maxgen],bound)
% 计算适应度
for j=1:sizepop
x=individuals.chrom(j,:)%解码
individuals.fitness(j)=fun(x)
end
%找到最小和最大适应度的染色体及它们在种群中的位置
[newbestfitness,newbestindex]=min(individuals.fitness)
[worestfitness,worestindex]=max(individuals.fitness)
% 代替上一扰型次进化中最好的染色体
if bestfitness>newbestfitness
bestfitness=newbestfitness
bestchrom=individuals.chrom(newbestindex,:)
end
individuals.chrom(worestindex,:)=bestchrom
individuals.fitness(worestindex)=bestfitness
avgfitness=sum(individuals.fitness)/sizepop
trace=[traceavgfitness bestfitness]%记录每一代进化中最好的适应度和平均适应度
end
%进化结束
%% 结果分析
[r c]=size(trace)
plot([1:r]',trace(:,2),'r-')
title('适应度曲线','fontsize',12)
xlabel('进化代数','fontsize',12)ylabel('适应度','fontsize',12)
axis([0,100,0,1])
disp('适应度 变量')
x=bestchrom
% 窗口显示
disp([bestfitness x])
package beanpublic class dianti {int on=1//定义一个初始化楼层 初始化是在1层//先从简单的开始 我们先写两个方法 一个是在电梯外面方法 一个是在电梯内部的方法
public void wai(int num)//外部方法
{
if(num==this.on)
{
System.out.println("停留在本层 直接开门")
}
else if(num>this.on)
{
Thread th = new Thread()
for(int i=this.oni<=numi++)
{
if(i==num)
{
System.out.println("电梯到达~开门请进···")
this.on=num
}
else
{
System.out.println("电梯在"+i+"层 马上就到,请等待····")
try {
th.sleep(1000)
} catch (InterruptedException e) {
e.printStackTrace()
}
}
}
}
else if(num>0&&num<this.on)
{
System.out.println("进来了" +num+" "+this.on)
Thread th1 = new Thread()
for(int u=this.onu>=numu--)
{
if(u==num)
{
System.out.println("电梯到达~开门请进···")
this.on=num
}
else
{
System.out.println("电梯在"+u+"层 马上就到,请等待或歼····")
try {
th1.sleep(1000)
} catch (InterruptedException e) {
e.printStackTrace()
}
}
}
}
else
{
System.out.println("1111111111111")
}
}
//内部方法
public void nei(int num)
{
System.out.println("进来了~当前楼层是"+this.on+" 我们的目标是"+num+"层")
if(num==this.on)
{
System.out.println("您就在本层 开门")
}
else if(num>0&&num<11&&num<this.on)
{
for(int y=this.ony>=numy--)
{
Thread th1 = new Thread()
if(y==num)
{
System.out.println("电梯到达~欢迎下次在做···")
this.on=num
}
else
{
System.out.println("电梯在"+y+"层 马上就到,请等待····")
try {
th1.sleep(1000)
} catch (InterruptedException e) {
e.printStackTrace()
}
}
}
}
else if(num>0&&num<11&&num>this.on)
{
for(int y=this.ony<=numy++)
{
Thread th1 = new Thread()
if(y==num)
{
System.out.println("电梯到达~欢迎下次在做····")
this.on=num
}
else
{
System.out.println("电梯在"+y+"层 马上就到,请等待····")
try {
th1.sleep(1000)
} catch (InterruptedException e) {
e.printStackTrace()
}
}
}
}
}
public static void main(String[] args) {
dianti d = new dianti()
//模拟开始 初始化是1层 首先我们去10层
d.wai(1)//传进去的1表示我们是在1层按电梯准备上
d.nei(10)//表示电梯到了 我们选择了10层开始上升 现在电梯停留在10层
d.wai(5)//在电梯还在10层停留的时候 5层有人使用
d.nei(1)//目标是一层
//这个衫高冲其实不完整 还需要加上很多判断的 必然经过每层的时候判断是念帆否有顺路下的
//还有就是电梯在上升的时候经过了2层到了3层 此时2层有人按 又该如何 自己试着去想一想解决方法}}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)