欢迎光临散文网 会员登陆 & 注册

延迟卸货-北太天元学习34

2023-08-10 11:43 作者:卢朓  | 我要投稿

在送货过程中,由于各种原因,如交通堵塞、天气恶劣、货物往往不能按时到达货场,货场提供的卸货平台是有限的,或者受限于卸货操作人员数量,每天能够卸货的车辆数是有上限的。
这就导致一些货车或被延迟到第二天甚至第三天才能卸货。

使用计算机模拟技术来构建一个送货卸货的模型,该模型可以模拟实际的送货过程,并预测可能出现的卸货延迟情况。在构建模型的时候,我们可以考虑每天到达的货车数是一个随机变量,然后对延迟卸货的车辆数做一个统计,可以计算平均明天被延迟卸货的车数。
在这里,我们使用北太天元编程模拟了延迟卸货的车数。 实际上,在北太天元的帮助下,
我们可以找到更好的解决方案。例如研究增加卸货人员来提高每天的卸货车数的上限,
看看这样减少日延迟卸货的车数的情况。 不过,又要考虑增加卸货人员带来的成本的增加。因此,需要找到的一个满足“既要。。。又要。。。还要。。。”的最优方案。



%北太天元 模拟 排队
% 设某仓库前有一卸货场,货车一般是夜间到达,白天卸货,
%  每天只能卸货 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


延迟卸货-北太天元学习34的评论 (共 条)

分享到微博请遵守国家法律