延遲卸貨-北太天元學習34
在送貨過程中,由于各種原因,如交通堵塞、天氣惡劣、貨物往往不能按時到達貨場,貨場提供的卸貨平臺是有限的,或者受限于卸貨操作人員數(shù)量,每天能夠卸貨的車輛數(shù)是有上限的。
這就導致一些貨車或被延遲到第二天甚至第三天才能卸貨。
使用計算機模擬技術來構建一個送貨卸貨的模型,該模型可以模擬實際的送貨過程,并預測可能出現(xiàn)的卸貨延遲情況。在構建模型的時候,我們可以考慮每天到達的貨車數(shù)是一個隨機變量,然后對延遲卸貨的車輛數(shù)做一個統(tǒng)計,可以計算平均明天被延遲卸貨的車數(shù)。
在這里,我們使用北太天元編程模擬了延遲卸貨的車數(shù)。 實際上,在北太天元的幫助下,
我們可以找到更好的解決方案。例如研究增加卸貨人員來提高每天的卸貨車數(shù)的上限,
看看這樣減少日延遲卸貨的車數(shù)的情況。 不過,又要考慮增加卸貨人員帶來的成本的增加。因此,需要找到的一個滿足“既要。。。又要。。。還要。。?!钡淖顑?yōu)方案。

%北太天元 模擬 排隊
% 設某倉庫前有一卸貨場,貨車一般是夜間到達,白天卸貨,
%? 每天只能卸貨 2 車,
% 若一天內到達數(shù)超過 2 車,那么就延遲到次日卸貨。
% 貨車每天到達數(shù)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
% 貨車到 達數(shù)的概率分布(相對頻率)平均為 1.5 車/天,
% 求每天延遲卸貨的平均車數(shù)。
%
%
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('一年內的日平均延遲卸貨的車數(shù)')
?title('北太天元研究卸貨排隊問題')
?legend('每一次模擬的日延遲卸貨車數(shù)','多次模擬的平均延遲卸貨車數(shù)')?? ?
hold off
function [日延遲平均數(shù), 日實際卸貨平均數(shù)] = 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; % 日卸貨車數(shù)上限,即最多卸貨的車數(shù)
?? ?rand_num=rand(num_天,1); % 產生[0,1]均勻分布的隨機數(shù)
?? ?num_到=到達車數(shù)(rand_num, prob_分布); %獲得到達車數(shù)
?? ?num_等=zeros(num_天,1);% 等待卸貨車數(shù)
?? ?num_實際卸貨的車=zeros(num_天,1);% 實際卸貨的車數(shù)
?? ?num_延遲卸貨=zeros(num_天,1); %num_到初始化
?? ?num_等(1)=num_到(1);
?? ?if num_等(1)<=m? % 第一天到達的車數(shù)不超過日卸貨車數(shù)上限
?? ??? ??? ?num_實際卸貨的車(1)=num_等(1);
?? ??? ??? ?num_延遲卸貨(1)=0;
?? ?else? % 如果第一天到達的車數(shù)超過日卸車數(shù)上限
?? ??? ??? ?num_實際卸貨的車(1)=m; %實際卸貨車數(shù)只能是 這個上限
?? ??? ??? ?num_延遲卸貨(1)=num_到(1)-m; % 其余的車存入延遲卸貨的向量中保存
?? ?end
?? ?for i=2:num_天? %從第二天開始, 等待卸貨的車數(shù)出了晚上到達,還要加上延遲卸貨的車數(shù)
?? ??? ??? ?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
?? ?日延遲平均數(shù) = mean(num_延遲卸貨); % 每天延遲卸貨的平均數(shù)
?? ?日實際卸貨平均數(shù)= mean(num_實際卸貨的車); %每天實際卸貨的平均數(shù)
end
% 輸入的是[0,1]區(qū)間的隨機數(shù),然后按照概率獲得到達的車數(shù)
function num_到 = 到達車數(shù)(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