使用蒙特卡洛算法,借助MATLAB编程模拟了在线雇佣问题[1],并得到了雇佣第几位应聘者与雇佣到分数大于98应聘者概率的变化曲线,具体结果见图1。分析可知,当雇佣第1位应聘者到雇佣第34位应聘者时,雇佣到分数大于98应聘者的概率逐渐增加;当雇佣第35位应聘者到雇佣第100位应聘者时,对应概率逐渐减少。故最优策略是雇佣第34位应聘者,这样得到的雇佣到分数大于98应聘者的概率最大,其值为52.26%。
图1 雇佣到分数大于98应聘者的概率与雇佣第几位应聘者的关系曲线
对应MATLAB代码如下:
a=[]; % 存储雇佣到分数应大于98聘者的概率
s=10000; % 模拟次数
for t=1:100 % 数值模拟中雇佣第t个应聘者
k=0;
for i=1:s %开始模拟
x=randperm(100); %100位应聘者随机排列
best = max(x(1:t));
best1 = x(find(x(t+1:100)>best,1)+t);
if best1>98
k=k+1; %统计每次模拟中雇佣到分数大于98的应聘者数目
end
end
a(t)=k/s; %统计雇佣到最优应聘者的概率
end
[a_max a_] = max(a)
plot(a)
hold on
% plot(a_,[1:a_max],'--');
line([a_,a_],[0,a_max],'color','k','linestyle','--');
hold on
line([0,a_],[a_max,a_max],'color','k','linestyle','--');
xlabel('雇佣的应聘者');
ylabel('雇佣到分数大于98应聘者的概率');
参考文献:
[1] Retrieved May 12, 2019, from https://blog.csdn.net/qq_41093189/article/details/79176763.