qq_35855797 2021-07-14 10:20 采纳率: 0%
浏览 140

MATLAB中,这段代码一直在忙,应该是死循环了,但是不知道如何修改,望大家给点建议

pop=5;
n=10;
VN=[0.1 0.2 0.3 0.84 0.44 0.59 0.7 0.12 0.44 0.22];%节点脆弱性
[N,L]=size(VN);
a=zeros(N,L);%脆弱性满足选址限制
for i=1:N
for j=1:L
if VN(i,j)<=0.5
a(i,j)=1
else
a(i,j)=0
end
end
end
VR=[0 0.54 0.70 0.74 0.79 0.53 0.61 0.77 0.15 0.95
0.66 0 0.09 0.39 0.95 0.09 0.99 0.58 0.19 0.08
0.77 0.54 0 0.68 0.33 0.11 0.53 0.93 0.04 0.11
0.35 0.72 0.53 0 0.67 0.14 0.48 0.58 0.64 0.14
0.66 0.52 0.86 0.44 0 0.68 0.80 0.02 0.28 0.17
0.42 0.99 0.48 0.02 0.83 0 0.23 0.12 0.54 0.62
0.84 0.22 0.39 0.33 0.77 0.19 0 0.86 0.70 0.57
0.83 0.11 0.67 0.42 0.17 0.50 0.90 0 0.50 0.05
0.26 0.11 0.74 0.27 0.86 0.15 0.57 0.84 0 0.93
0.61 0.06 0.52 0.20 0.99 0.05 0.85 0.21 0.45 0];
[NN,LL]=size(VR);
b=zeros(NN,LL);%脆弱性满足边的限制
for i=1:NN
for j=1:LL
if VR(i,j)<=0.5
b(i,j)=1
else
b(i,j)=0
end
end
end
P=6; % 建库个数限制
PC=[1 1 2 5 3 4 4 1 2 1];%各节点需要服务的次数

for i = 1 : pop
%% 选址
while 0<1
for j=1:n
x(i,j)=round(rand(1));
end
xx(i,:)=x(i,:).*VN;
if(sum(x(i,:),2)>=1)&(sum(x(i,:),2)<=P)&(xx(:)<=0.5) %约束:选址个数的约束;节点脆弱性限制
break
end
end
xa(i,:)=x(i,:).*a;
%% 指派
while 0<1
for j=1:n
if x(i,j)==0
y(i,(10*(j-1)+1):(10*j))=0;
else if x(i,j)==1
y(i,(10*(j-1)+1):(10*j))=round(rand(1,10));
yvr(j,:)=y(i,10*(j-1)+1:(10*j)).*VR(j,:);%计算储备点与需求点之间的脆弱性
if (yvr(:)<=0.5)&(y(i,(10*(j-1)+1):(10*j))<=xa(i,j)*b(j,:))%当且仅当在i点选址,且i点的脆弱性符合标准,i点与j点之间的脆弱性符合标准,点i才能为点j服务
end
end
end
end
yy=reshape(reshape(y,[],10)',[],10);
yyy(i,:)=sum(yy((10*(i-1)+1):(10*i),:));
PPC=repmat(PC,pop,1);
for j=1:10
yPC(i,j)=yyy(i,j)-PPC(i,j);
end
if yPC(:)>=0%约束:每个需求点至少被设施覆盖最低次数
break
end
end
end

  • 写回答

1条回答 默认 最新

  • CSDN专家-Matlab_Fans 2021-07-14 12:21
    关注

    while循环条件是0<1,恒成立,唯一能够调出循环的条件是下面的语句:

    if yPC(:)>=0       %约束:每个需求点至少被设施覆盖最低次数
         break
    end
    

    如果这个条件不能满足,就不可能调出while循环。下面是运行几分钟后yPC取值,从取值来看要想yPC所有的值都大于0几乎不可能。所以只能是死循环了。

    yPC =
    
         2     2     1     0     0     1     0     0     1     2
        -1     0    -2    -4    -2    -4    -4    -1    -2    -1
    

    解决办法:核实跳出循环的条件yPC(:)>=0 是否正确。

    评论

报告相同问题?

问题事件

  • 创建了问题 7月14日

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置