物流仿真能够这样完成:数据记载

记载下物流体系运转的数据是物流仿真体系最为重要的环节。咱们在构建仿真体系时要全面、充沛的考虑到体系运转中需求输出哪些数据,并在MATLAB中树立数据表,将体系运转的数据记载到表里,以供下一环节的数据计算与剖析调用。本文将扼要介绍笔者在构建物流仿真体系时的数据记载方法。

数据表发生的逻辑

1、流程活动

“卸货”、“查验”、“理货”、“上架”、“分拣”等流程为首要仓储流程活动(二级流程可根据实践需求在流程库里导出)。流程中的活动规矩决议了仿真体系中服务台的运转机制。

仓储运作参阅流程(示例)

2、资源调用

流程活动中需求调用的“人、设备、设备”资源,资源的状况分为“占用、闲暇”两种状况,假如资源被占用,则需求等候,反之运转。

逻辑举例

3、数据记载

各个服务台在进行活动时需求记载活动数据,活动数据的结构如前文中所说,可根据体系输出的需求进行结构,本文中举例说明数据记载中的几个重要的数据输出。活动时刻记载时分为:开端时刻与完毕时刻,上一活动完毕到下一活动开端的时刻闲暇为等候时刻。

1)时刻:一切活动的运转都是在某个时刻点上运转,大部分的数据计算都需求运用届时刻数据。时刻能够按需求的精准程度拟定时刻刻度;

2)队伍数:队伍数是等候需求处理的货品(托盘/箱/盒)的数量,队伍数的多少表现了体系的繁忙程度;

3)服务台数量:一个服务台的构成由“人、设备、设备”组成,服务台数量影响了服务台一起处理队伍的才能。

数据记载表(示例)

4、数据记载成果

5、MATLAB源码:

体系运转进程的数据记载(示例)

[M,N] =size(worksheet_raw); %界说worksheet_raw队伍数

for I = 1:M-1

%到货

if any(arrivaltable(:,1) ==worksheet_data(I,raw_wtime)) %到货表列称号写入

if worksheet_data(I,raw_unload_queue)> 0

pallet_data =arrivaltable(find(arrivaltable(:,1) == worksheet_data(I,raw_wtime)),2) +worksheet_data(I,raw_unload_queue);

else

pallet_data =arrivaltable(find(arrivaltable(:,1) == worksheet_data(I,raw_wtime)),2);

end

end

pallet_data_0 = pallet_data;

if I > 1

for n = 1:worksheet_n

%%%调整卸货资源

ifany(worksheet_data(:,raw_e_unload) == I) %假定上一行有资源开释

deskNo =worksheet_data(find(worksheet_data(:,raw_e_unload) == I),raw_desk_unload);

% deskNo =sum(worksheet_data(:,raw_e_unload) == I – 1); %检查服务台数量

if deskNo > 1 %假如是多服务台

ifany(rescall_data(:,raw_unload_per) == 0)

deskNo0 =length(find(rescall_data(:,raw_unload_per) == 0)); %找到资源表中被占用资源坐标

for desk_No = 1:deskNo

rescall_data(desk_No,raw_unload_per) = 1; %调整资源表中的卸货人员资源状况

rescall_data(desk_No,raw_eforklift) = 1; %调整资源表中的电叉车资源状况

rescall_data(desk_No,raw_unloadar) = 1; %调整资源表中的卸货端口资源状况

end

end

elseif deskNo <= 1 %假如是单个服务台

rescall_data(min(find(rescall_data(:,raw_unload_per) == 0,1)),raw_unload_per) = 1; %调整资源表中的卸货人员资源状况

rescall_data(min(find(rescall_data(:,raw_eforklift) == 0,1)),raw_eforklift) = 1; %调整资源表中的电叉车资源状况

rescall_data(min(find(rescall_data(:,raw_unloadar) == 0,1)),raw_unloadar) = 1; %调整资源表中的卸货端口资源状况

end

end

end

end

%%%调整查验资源

if any(worksheet_data(:,raw_e_inspect) ==I) %假定本行有资源开释

deskNo =worksheet_data(find(worksheet_data(:,raw_e_inspect) == I),raw_desk_inspect);

% deskNo =sum(worksheet_data(:,raw_e_inspect) == I); %检查服务台数量

if deskNo > 1 %假如是多服务台

ifany(rescall_data(:,raw_inspect_per) == 0)

deskNo0 =length(find(rescall_data(:,raw_inspect_per) == 0)); %找到资源表中被占用资源坐标

for desk_No = 1:deskNo

rescall_data(desk_No,raw_inspect_per) = 1; %调整资源表中的卸货人员资源状况

end

end

elseif deskNo <= 1 %假如是单个服务台

rescall_data(min(find(rescall_data(:,raw_inspect_per) == 0,1)),raw_inspect_per) = 1; %调整资源表中的卸货人员资源状况

end

end

%%%调整查验资源完结

%%%调整上架资源

if any(worksheet_data(:,raw_e_store) ==I) %假定本行有资源开释

deskNo = worksheet_data(find(worksheet_data(:,raw_e_store) == I),raw_desk_store);

% deskNo =sum(worksheet_data(:,raw_e_inspect) == I); %检查服务台数量

if deskNo > 1 %假如是多服务台

ifany(rescall_data(:,raw_store_per) == 0)

deskNo0 =length(find(rescall_data(:,raw_store_per) == 0)); %找到资源表中被占用资源坐标

for desk_No = 1:deskNo

rescall_data(desk_No,raw_store_per) = 1; %调整资源表中的卸货人员资源状况

end

end

elseif deskNo <= 1 %假如是单个服务台

rescall_data(min(find(rescall_data(:,raw_store_per) == 0,1)),raw_store_per) = 1; %调整资源表中的卸货人员资源状况

end

end

%%%调整上架资源完结

worksheet_n = length(worksheet_txt);

if sum(pallet_data > 0) %判别是否有新到货数据 【到货数据】

worksheet_data(I,raw_unload_queue) =sum(pallet_data); %新到货数据进入队伍 【到货队伍】

pallet_data(:) = 0; %到货表清零

end

%%%卸货流程

%%%%检查队伍

if worksheet_data(I,raw_unload_queue) >0 %判别pallet_data是否有到货 【判别到货队伍】

%%%%构建服务台

if length(find(rescall_data(:,raw_unload_per)> 0)) >= 1 && length(find(rescall_data(:,raw_eforklift) > 0))>= 1 && length(find(rescall_data(:,raw_unloadar) > 0)) >=1 %服务台是否闲暇 【判别卸货资源服务台】

deskNo_unload =min([length(find(rescall_data(:,raw_unload_per) > 0)),length(find(rescall_data(:,raw_eforklift)> 0)),length(find(rescall_data(:,raw_unloadar) >0)),worksheet_data(I,raw_unload_queue)]); %确认服务台数量【构建多服务台】

worksheet_data(I,raw_desk_unload) =deskNo_unload; %记载服务台数量【卸货服务台数量】

%%%%服务

worksheet_data(I,raw_b_unload) =I; %开端卸货时刻【开端卸货】

worksheet_data(I,raw_e_unload) = I+ res_data(raw_serviceability,raw_unload_per); %按服务才能确认完毕时刻【卸货完毕】

%%%%构成队伍

worksheet_data(I +1,raw_unload_queue) = worksheet_data(I,raw_unload_queue) – deskNo_unload; %队伍削减【进入服务台】

%%%%资源占用

for unload_i = 1:deskNo_unload %循环树立服务台

rescall_data(min(find(rescall_data(:,raw_unload_per) ~= 0, 1)),raw_unload_per) = 0;

unloadper_sheet(size(unloadper_sheet,1)+ 1,1) = unload_i; %记载卸货人员资源监控表

unloadper_sheet(size(unloadper_sheet,1),3) = I;

unloadper_sheet(size(unloadper_sheet,1),4) = I +res_data(raw_serviceability,raw_unload_per);

rescall_data(min(find(rescall_data(:,raw_eforklift)~= 0, 1 )),raw_eforklift) = 0; %资源服务目标减一 【占用一个卸货服务台资源】

eforklift_sheet(size(eforklift_sheet,1) + 1,1) = unload_i; %记载电叉车资源监控表

eforklift_sheet(size(eforklift_sheet,1),3) = I;

eforklift_sheet(size(eforklift_sheet,1),4) = I + res_data(raw_serviceability,raw_unload_per);

rescall_data(min(find(rescall_data(:,raw_unloadar) ~= 0, 1 )),raw_unloadar)= 0; %资源服务目标减一 【占用一个卸货服务台资源】

unloadar_sheet(size(unloadar_sheet,1) + 1,1) = unload_i; %记载卸货台监控表

unloadar_sheet(size(unloadar_sheet,1),3) = I;

unloadar_sheet(size(unloadar_sheet,1),4) = I + res_data(raw_serviceability,raw_unload_per);

end

else

worksheet_data(I +1,raw_unload_queue) = worksheet_data(I,raw_unload_queue);

end

end

%%%卸货流程完结

if I > 1

%%%查验流程

%%%%检查并构成队伍

if any(worksheet_data(I -1,raw_inspect_queue)) %上一时刻指针队伍是否有剩下

if any(worksheet_data(I -1,raw_desk_inspect)) %假如上一行有服务台

queue_surplus = worksheet_data(I -1,raw_inspect_queue) – worksheet_data(I – 1,raw_desk_inspect); %队伍扣除

else

queue_surplus = worksheet_data(I -1,raw_inspect_queue); %判别队伍是否有剩下

end

else

queue_surplus = 0;

end

if any(sum(worksheet_data(:,raw_e_unload)== I))

serviceNo_i = find((worksheet_data(:,raw_e_unload)) ==I); %检查卸货完毕服务数量

queue_new =sum(worksheet_data(:,raw_e_unload) == I) *worksheet_data(serviceNo_i,raw_desk_unload); %货品查验队伍生成

else

queue_new = 0;

end

worksheet_data(I,raw_inspect_queue) =queue_surplus + queue_new; %剩下队伍顺延

% worksheet_data(I,raw_inspect_queue) = sum(worksheet_data(:,raw_e_unload)== I);

if worksheet_data(I,raw_inspect_queue) >0 %判别是否有队伍等候 【判别查验队伍】

%%%%构建服务台

iflength(find(rescall_data(:,raw_inspect_per) > 0)) >= 1 %服务台是否闲暇 【判别卸货资源服务台】

deskNo_inspect =min([length(find(rescall_data(:,raw_inspect_per) >0)),worksheet_data(I,raw_inspect_queue)]); %确认服务台数量【构建多服务台】

worksheet_data(I,raw_desk_inspect)= deskNo_inspect; %记载服务台数量【查验服务台数量】

%%%%服务

worksheet_data(I,raw_b_inspect) =I; %开端卸货时刻【开端卸货】

worksheet_data(I,raw_e_inspect) = I+ res_data(raw_serviceability,raw_inspect_per); %按服务才能确认完毕时刻【卸货完毕】

worksheet_data(I +1,raw_inspect_queue) = worksheet_data(I,raw_inspect_queue) -deskNo_inspect; %队伍削减【进入服务台】

for inspect_i =1:deskNo_inspect %循环树立服务台

rescall_data(min(find(rescall_data(:,raw_inspect_per) ~= 0, 1)),raw_inspect_per) = 0; %资源服务目标减一 【占用一个卸货服务台资源】

inspectper_sheet(size(inspectper_sheet,1) + 1,1) = inspect_i; %记载卸货人员资源监控表

inspectper_sheet(size(inspectper_sheet,1),3) = I;

inspectper_sheet(size(inspectper_sheet,1),4)= I + res_data(raw_serviceability,raw_inspect_per);

end

end

end

%%%查验流程完结

……

物流仿真能够这样完成:数据记载_快递鸟