matlab求助

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

clear;
clc;
per_p=zeros(100,1);
per_car=zeros(100,1);
F=zeros(100,1);
%global N
for n=1:9
    t=0;
    p=0;
    q=0;
    for i=1:100
    [per_p(i),per_car(i),F(i)]=P3(8,3,3,n);
    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=0.1:0.1:0.9;
yyaxis left
plot(n,a);
hold on
yyaxis left
plot(n,b);
hold on
yyaxis right 
plot(n,c);
ylim([0.14 0.18])
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');


请问为什么一直运行不出来呀,没法终止呀

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值