sgn matlab,matlab中.*的问题

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

function [MBR,MBF]=MCRGSA()

%第一步:常用变量声明,以及种群初始化

M=7;

N=50;

Pm=0.009;

K=5;

t0=5;

alpha=0.9;

beta=1;

Source=1;

End={8,6};

Num={3,2};

ROUTES=[1 2 5 8;1 4 7 8;1 3 7 8;1 2 5 6;1 4 5 6];

Cost= [0 14 13 12 -1 -1 -1;14 0 -1 -1 18 -1 -1;13 -1 0 9 -1 -1 17;12 -1 9 0 15 -1 8;-1 18 -1 15 0 16 -1;-1 -1 -1 -1 16 0 -1;-1 -1 17 8 -1 -1 15];

Num_end=length(End);%组播目的节点个数

farm=zeros(N,Num_end);%种群

for i=1:Num_end

farm(:,i)=unidrnd(Num(i),50,1);%随机生成初始种群

end

m=1;

t=t0;

MBR=zeros(M,Num_end);

MBF=zeros(M,1);

while m<=M%设置停止条件

%第二步:按照变异概率调节参数进行变异以及退火选择

P=Num./sum(Num);

P=Pm.*P;

for i=1:N%对每一个个体都执行

Code=farm(i,:);%临时取出

k=1;

while k<=K%每一个温度下改变K次

for j=1:Num_end

if rand

Bit=randperm(Num(j));

pos=find(Bit~=Code(j));

Code(j)=Bit(pos(1));

end

end

fit1=ShiYinZhi(ROUTES,Cost,farm(i,:));%计算适应值

fit2=ShiYinZhi(ROUTES,Cost,Code);

if fit2

farm(i,:)=Code;

elseif rand

farm(i,:)=Code;

else

Code=farm(i,:);

end

k=k+1;

end

end

%第三步:交叉算法

Farm=zeros(size(farm));

for i=1:2:(N-1);

a=farm(i,:);

b=farm(i+1,:);

pos=unidrnd(Num_end-1);

A=[a(1,1:pos),b(1,(pos+1):end)];

B=[b(1,1:pos),a(1,(pos+1):end)];

Farm(i,:)=A;

Farm(i+1,:)=B;

end

FARM=[farm;Farm];

%第四步:选择复制操作

fitness=zeros(1,2*N);

for i=1:(2*N)

fitness(i)=ShiYinZhi(ROUTES,Cost,FARM(i,:));

end

maxfitness=max(fitness);

minfitness=min(fitness);

pos=find(fitness==maxfitness);

MBR(m,:)=FARM(pos(1),:);

MBF(m)=minfitness;

for i=1:(2*N)

fitness(i)=((maxfitness-fitness(i))/(maxfitness-minfitness+0.00005))^beta;

end

fitness=fitness./(sum(fitness)+0.000000005);

FITNESS=zeros(size(fitness));

Sgn=FITNESS;

for i=1:(2*N)

FITNESS(i)=sum(fitness(1:i));

end

while sum(Sgn)

Pos=find(FITNESS>=rand);

if length(Pos)>0

Sgn(Pos(1))=1;

end

end

POS=find(Sgn==1);

for i=1:N

farm(i,:)=FARM(POS(i),:);

end

farm(unidrnd(N),:)=MBR(m,:);

%更新参数

m=m+1

t=t*alpha;

end

plot(MBF)

title('遗传模拟退火算法收敛图')

xlabel('进化代数')

ylabel('费用')

%译码计算适应值的函数

%ROUTES--------备选路径集

%Cost----------费用邻接矩阵

%Code----------组播树的编码

%fit-----------组播树的总代价作为适应值

function fit=ShiYinZhi(ROUTES,Cost,Code)

CC=zeros(size(Cost));

for i=1:length(Code)

R=ROUTES{i}{Code(i)};

J=length(R)-1;

for j=1:J

a=R(j);

b=R(j+1);

CC(a,b)=Cost(a,b);

end

end

fit=sum(sum(CC));

??? Error using ==> .*

Function '.*' is not defined for values of class 'cell'.

Error in ==> C:\MATLAB6p5\toolbox\stats\unidrnd.m

On line 26  ==> r = ceil(n.*rand(rows,columns));

Error in ==> C:\MATLAB6p5\work\MCRGSA.m

On line 19  ==>     farm(:,i)=unidrnd(Num(i),50,1);%随机生成初始种群

高手指点下吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值