Phoenixriver 2022-08-04 15:48 采纳率: 0%
浏览 50
已结题

matlab代码,循环结束不了

clear;
clc;
per_p=zeros(100,1);
per_car=zeros(100,1);
F=zeros(100,1);
%global N
for N=1:11
t=0;
p=0;
q=0;
for i=1:100
[per_p(i),per_car(i),F(i)]=P3(N+1,4,1,0.5);
end
t=t+per_p(i);
p=p+per_car(i);
q=q+F(i);
a(N)=mean(t);
b(N)=mean(p);
c(N)=mean(q);
end
N=2:12;
yyaxis left
plot(N,a);
hold on
yyaxis left
plot(N,b);
hold on
yyaxis right
plot(N,c);
ylim([0.03 0.06])
hold off
legend('乘客平均用时','出租车平均用时','目标函数值');
xlabel('上车点','FontName','黑体','FontSize',15,'FontWeight','bold');
yyaxis left
ylabel('等待时间','FontName','黑体','FontSize',15,'FontWeight','bold');
yyaxis right
ylabel('目标函数值','FontName','黑体','FontSize',15,'FontWeight','bold');
title('上车点和人车用时关系','FontName','黑体','FontSize',15,'FontWeight','bold');

function [per_p,per_car,F] = P3(N,n1,n2,pp) %问题三上车系统模拟
%N 代表上车点数量、n1 代表每分钟平均产生乘客数、n2 代表每分钟平均产生车数,pp 代表重行李乘客占比
%per_p 代表乘客平均用时,per_car 代表出租车平均用时,F 代表目标函数值
%系统模拟上车点
T=0;%整个系统标准时间
T_g_end=50;%生成车和人的截止时间
flag=1;%判断系统是否结束
flag_2=0;%特殊判断终止条件二
port=zeros(N,2);%每个上车点现在人数,车数
for i=1:N
port(i)=0;%初始化各个上车点
end
Num_car=0;%产生的总车数
Num_car_dis=0;%消失的车数
Num_chi=0;%蓄车池初始没有车
Num_dian=0;%上车点初始没有车
Num_p=0;%产生的人数
Num_p_dis=0;%消失的人数
cell_car=zeros(1000,5);%记录每个车的信息,一是车辆编号,二产生时间,三消失时间,四所在位置(0-蓄车池,1-N 是上车点位置,N+1 代表消失),五上客状态(0-未上客、1-正在上客 1、2——正在上客 2、3-上客结束)
cell_p=zeros(1000,7);%记录每个人的信息,一是乘客编号,二产生时间,三是消失时间,四所在位置(1-N 是位置,N+1 代表消失),五是排队深度(0 是上车,1 是等待等等),六是上车状态(0 是未上车,1-正在上车,2-上车完成,七是行李状态(1-少行李,2-多行李))
while(flag)
T=T+1;
%产生环节
if T<=T_g_end
p(T)=random('Poisson',n1);%随机产生人群 按泊松分布
car(T)=random('Poisson',n2);%随机产生车
for i=1:car(T)
cell_car(Num_car+i,1)=Num_car+i;
cell_car(Num_car+i,2)=T;
cell_car(Num_car+i,3)=T;
cell_car(Num_car+i,4)=0;
cell_car(Num_car+i,5)=0;
end
Num_car=Num_car+car(T);
for i=1:p(T)
cell_p(Num_p+i,1)=Num_p+i;
cell_p(Num_p+i,2)=T;
cell_p(Num_p+i,3)=T;
[~,loc]=min(port(:,1));%当前最少排队队列
cell_p(Num_p+i,4)=loc;
port(loc,1)=port(loc,1)+1;
cell_p(Num_p+i,5)=port(loc,1);
cell_p(Num_p+i,6)=0;
if(rand()>pp)
cell_p(Num_p+i,7)=1;
else
cell_p(Num_p+i,7)=2;
end
end
Num_p=Num_p+p(T);
Num_chi=Num_chi+car(T);%蓄车池内的车辆增加
end
if (Num_dian==0)&&(Num_chi>=N)
Num_chi=Num_chi-N;
Num_dian=Num_dian+N;
for i=1:N
cell_car(Num_car_dis+i,4)=i;
port(i,2)=1;
end
continue;
end%从蓄车池到上车点的过程。continue 代表放车需要花一分钟时间。
if (T>T_g_end)&&(Num_dian==0)
Num_dian=Num_dian+Num_chi;
Num_chi=0;
for i=1:Num_dian
cell_car(Num_car_dis+i,4)=i;
port(i,2)=1;
34
end
continue;
end%从蓄车池到上车点的过程。continue 代表放车需要花一分钟时间。
%如何上车
%对于第 i 个位置
for i=1:N
if port(i,2)==1%有车
if port(i,1)>0%有人
id_car=find(cell_car(:,4)==i);%找到车
id_p=min(find(cell_p(:,4)==i));%找到人
%判断车的状态
if cell_car(id_car,5)==0%如果车处于未上车
if cell_p(id_p,7)==1
cell_car(id_car,5)=2;
cell_p(id_p,5)=0;
elseif cell_p(id_p,7)==2
cell_car(id_car,5)=1;
cell_p(id_p,5)=0;
end
end
if cell_car(id_car,5)==1%如果处于上车状态 1
cell_car(id_car,5)=2;
end
if cell_car(id_car,5)==2%如果处于上车状态 2
cell_car(id_car,5)=3;
end
if cell_car(id_car,5)==3%如果处于上车结束状态
if cell_car(id_car,4)==1||cell_car(id_car,4)==2%如果在前排,它可以走
cell_car(id_car,3)=T;%记录车消失时间
cell_car(id_car,4)=N+1;%将位置坏值处理
cell_p(id_p,3)=T;%记录人消失时间
cell_p(id_p,4)=N+1;%将位置坏值处理
id3=find(cell_p(:,5)==i);
cell_p(id3,5)=cell_p(id3,5)-1;%剩下的人排队深度减一
port(i,2)=0;
port(i,1)=port(i,1)-1;
Num_car_dis=Num_car_dis+1;
Num_p_dis=Num_p_dis+1;
Num_dian=Num_dian-1;
elseif port(i-2,2)==0%如果前面没车,它可以走
cell_car(id_car,3)=T;%记录车消失时间
cell_car(id_car,4)=N+1;%将位置坏值处理
cell_p(id_p,3)=T;%记录人消失时间
35
cell_p(id_p,4)=N+1;%将位置坏值处理
id3=find(cell_p(:,5)==i);
cell_p(id3,5)=cell_p(id3,5)-1;%剩下的人排队深度减一
port(i,2)=0;
port(i,1)=port(i,1)-1;
Num_car_dis=Num_car_dis+1;%消失车数加一
Num_dian=Num_dian-1;
Num_p_dis=Num_p_dis+1;
end
end
end
end
end
if T>T_g_end
if (Num_car_dis==Num_car)||(Num_p_dis==Num_p)
flag=0;
end
end
if T>T_g_end
if flag_2==0
port_bao=port;
flag_2=1;
end
if flag_2==1
if(isequal(port_bao,port))
flag_2=2;
else
flag_2=0;
end
end
if flag_2==2
if(isequal(port_bao,port))
flag_2=3;
else
flag_2=0;
end
end
if flag_2==3
if(isequal(port_bao,port))
flag_2=4;
else
flag_2=0;
end
36
end
if flag_2==4
port1=port(:,1)+port(:,2);
if max(port1)<2
flag=0;
else
flag_2=0;
end
end
%人车错位保持 4 分钟认为结束
end
end
time_p=sum(cell_p(:,3)-cell_p(:,2));%人群总用时
time_car=sum(cell_car(:,3)-cell_car(:,2));%车辆总用时
per_p=time_p/Num_p_dis;%平均每人用时
per_car=time_car/Num_car_dis;%平均每车用时
F=1/(per_p+per_car);%目标函数值
end

一直运行不出来,没法终止,请问是哪里出了问题呀

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 8月12日
    • 创建了问题 8月4日

    悬赏问题

    • ¥15 Java与Hbase相关问题
    • ¥20 bash代码推送不上去 git fetch origin master #失败了
    • ¥15 LOL外服加入了反作弊系统,现在游戏录像rofl文件离线都无法打开
    • ¥45 工程软件单片机设计课题要求
    • ¥15 在centos7安装conda
    • ¥15 c#调用yolo3 dll文件获取的数据对不上
    • ¥20 WPF 如何实现多语言,label 和cs(live Charts)中是否都能翻译
    • ¥15 STM32F103上电短路问题
    • ¥15 打开软件提示错误:failed to get wglChoosePixelFormatARB
    • ¥15 (标签-python|关键词-char)