延迟卸货-北太天元学习34
在送货过程中,由于各种原因,如交通堵塞、天气恶劣、货物往往不能按时到达货场,货场提供的卸货平台是有限的,或者受限于卸货操作人员数量,每天能够卸货的车辆数是有上限的。
这就导致一些货车或被延迟到第二天甚至第三天才能卸货。
使用计算机模拟技术来构建一个送货卸货的模型,该模型可以模拟实际的送货过程,并预测可能出现的卸货延迟情况。在构建模型的时候,我们可以考虑每天到达的货车数是一个随机变量,然后对延迟卸货的车辆数做一个统计,可以计算平均明天被延迟卸货的车数。
在这里,我们使用北太天元编程模拟了延迟卸货的车数。 实际上,在北太天元的帮助下,
我们可以找到更好的解决方案。例如研究增加卸货人员来提高每天的卸货车数的上限,
看看这样减少日延迟卸货的车数的情况。 不过,又要考虑增加卸货人员带来的成本的增加。因此,需要找到的一个满足“既要。。。又要。。。还要。。。”的最优方案。

%北太天元 模拟 排队
% 设某仓库前有一卸货场,货车一般是夜间到达,白天卸货,
% 每天只能卸货 2 车,
% 若一天内到达数超过 2 车,那么就延迟到次日卸货。
% 货车每天到达数X是一个随机变量
% P(X=0) = 0.23, P(X=1)=0.30 P(X=2) = 0.30, P(X=3)=0.10
% P(X=4) = 0.05, P(X=5)=0.02 P(X>=6) = 0.00
% 货车到 达数的概率分布(相对频率)平均为 1.5 车/天,
% 求每天延迟卸货的平均车数。
%
%
clc
close all
clear
num_模拟 = 100;
num_日延迟 = zeros(100,1);
num_实际卸货 = zeros(100,1);
for k = 1:num_模拟
[num_日延迟(k), num_实际卸货(k)] = get_mean();
end
plot(1:num_模拟, num_日延迟, 'LineWidth', 4)
hold on
plot(1:num_模拟, mean(num_日延迟)*ones(size(num_日延迟)), 'LineWidth', 5);
xlabel('第k次模拟')
ylabel('一年内的日平均延迟卸货的车数')
title('北太天元研究卸货排队问题')
legend('每一次模拟的日延迟卸货车数','多次模拟的平均延迟卸货车数')
hold off
function [日延迟平均数, 日实际卸货平均数] = get_mean()
num_天=365;
%每天车到达的概率
prob_分布 = struct();
prob_分布.X = 0:5;
prob_分布.p = [ 0.23, 0.30, 0.30, 0.10, 0.05, 0.02];
m=2; % 日卸货车数上限,即最多卸货的车数
rand_num=rand(num_天,1); % 产生[0,1]均匀分布的随机数
num_到=到达车数(rand_num, prob_分布); %获得到达车数
num_等=zeros(num_天,1);% 等待卸货车数
num_实际卸货的车=zeros(num_天,1);% 实际卸货的车数
num_延迟卸货=zeros(num_天,1); %num_到初始化
num_等(1)=num_到(1);
if num_等(1)<=m % 第一天到达的车数不超过日卸货车数上限
num_实际卸货的车(1)=num_等(1);
num_延迟卸货(1)=0;
else % 如果第一天到达的车数超过日卸车数上限
num_实际卸货的车(1)=m; %实际卸货车数只能是 这个上限
num_延迟卸货(1)=num_到(1)-m; % 其余的车存入延迟卸货的向量中保存
end
for i=2:num_天 %从第二天开始, 等待卸货的车数出了晚上到达,还要加上延迟卸货的车数
num_等(i)=num_到(i)+num_延迟卸货(i-1);
if num_等(i)<=m
num_实际卸货的车(i)=num_等(i);
num_延迟卸货(i)=0;
else
num_实际卸货的车(i)=m;
num_延迟卸货(i)=num_等(i)-m;
end
end
日延迟平均数 = mean(num_延迟卸货); % 每天延迟卸货的平均数
日实际卸货平均数= mean(num_实际卸货的车); %每天实际卸货的平均数
end
% 输入的是[0,1]区间的随机数,然后按照概率获得到达的车数
function num_到 = 到达车数(rand_num, 分布)
num_到 = zeros(size(rand_num));
p = [0, 分布.p];
for i=1:length(p)-1
num_到(find(p(i)<=rand_num<=p(i+1)))=分布.X(i);
end
end