请大神帮忙看一下具体咋回事?
错误使用 arrayfun
Uniform 输出中存在非标量值(在索引 1 处,输出 1)。
请将 'UniformOutput' 设置为 false。
function [x,f]=DuoGongNeng
P=[320;170;60;200;230;260;80;80;240;70;220;220;120;240;440;420;90;270;210];
Rmin=0.8;
Rmax=0.9999;
W=[0.52;0.39;0.32;0.2;0.35];
S=120;
pc=0.9;
G=500;
pm=0.01;
x=zeros(G,19);
Rs=zeros(G,1);
f=zeros(G,1);
theta=zeros(S,19);
theta=unifrnd(0.8,0.9999,S,19);
T=0;
D=zeros(S,1);
g=zeros(S,19);
gg=zeros(5,1);
fit=@(p)(0.5+2*(S-p)/(S-1));
for r=1:500
Cs=zeros(S,1);
for i=1:S
for j=1:19
T=T+P(j)*exp(theta(i,j)/Rmin-1);
g(i,j)=exp(theta(i,j)-1);
end
Cs(i,1)=T;
gg(i,1)=g(i,1)+g(i,2)+g(i,3)+g(i,4)+g(i,5)+g(i,6)+g(i,7)+g(i,11)+g(i,12)+g(i,15)+g(i,17)+g(i,18)+g(i,19);
gg(i,2)=g(i,1)+g(i,2)+g(i,3)+g(i,4)+g(i,5)+g(i,6)+g(i,7)+g(i,8)+g(i,15)+g(i,16)+g(i,17)+g(i,18)+g(i,19);
gg(i,3)=g(i,9)+g(i,10)+g(i,11)+g(i,12)+g(i,13)+g(i,14)+g(i,15)+g(i,17)+g(i,18)+g(i,19);
gg(i,4)=g(i,1)+g(i,2)+g(i,3)+g(i,5)+g(i,15)+g(i,17)+g(i,18)+g(i,19);
gg(i,5)=g(i,1)+g(i,2)+g(i,3)+g(i,5)+g(i,8)+g(i,15)+g(i,17);
end
D=prod(theta,2);
for t=1:S
if D(t,1)<0.7
Cs(t,1)=0;
else if gg(t,1)
Cs(t,1)=0;
end
end
end
[sort0,ind]=sort(Cs);
if r>1&&sort0(1)>f(r-1)
f(r)=f(r-1);
x(r,:)=theta(r-1,:);
else f(r)=sort0(1);
x(r,:)=theta(ind(1),:);
end
FIT=zeros(120,1);
FIT(ind)=fit(1:120);
for i=1:S
if D(t,1)<0.7||gg(t,1)
FIT(i)=0;
end
end
%复制部分
CopyP=FIT/sum(FIT);
Copyind=find(CopyP>0);
interval=cumsum(CopyP(Copyind));
Test=rand(S,1);
Testresult=arrayfun(@(x)find(interval>=x,1,'first'),Test);
Frequency=accumarray(Testresult,1);
Theta=cell(length(Frequency),1);
for kk=1:length(Frequency)
Theta{kk}=repmat(theta(Copyind(kk),:),Frequency(kk),1);
end
Theta=cell2mat(Theta);
%交叉部分
Randmatch=randperm(S);
for k=1:S/2
if rand
a=unidrnd(2,1,19)-1;
temp=Theta(Randmatch(2*k-1),:).*a+Theta(Randmatch(2*k),:).*(1-a);
Theta(Randmatch(2*k),:)=Theta(Randmatch(2*k-1),:).*a+Theta(Randmatch(2*k),:).*(1-a);
Theta(Randmatch(2*k-1),:)=temp;
end
end
%变异部分
for k=1:S
if rand
pos=unidrnd(19,1);
Theta(k,pos)=unifrnd(0.9,0.99);
end
end
theta=Theta;
end
plot(1:G,f);
xlabel('迭代数目');
ylabel('总成本');
title('Process of reliability optimization allocation')
这个程序运行总是说错误使用 arrayfun
Uniform 输出中存在非标量值(在索引 1 处,输出 1)。
请将 'UniformOutput' 设置为 false。
但是看到书上arrayfun就是这样用的,不知道是哪里错了 找不到原因,求大神指点!!
在MATLAB程序中,出现错误:'错误使用 arrayfun',提示'Uniform 输出中存在非标量值(在索引 1 处,输出 1)'。尝试设置 'UniformOutput' 为 false,但问题仍然存在。代码涉及多工能函数'DuoGongNeng',包括随机数生成、矩阵操作和遗传算法优化。求解此问题的具体原因。
1635

被折叠的 条评论
为什么被折叠?



