本例使用并行计算工具箱™玩二十一点的纸牌游戏,也被称为21.我们模拟了许多玩家的独立在一次打几千手的,并显示收益的统计数据。模拟酒杯的播放是代表金融工具的蒙特卡罗分析。仿真可以完全并行地进行,除了在端部的数据的收集。
有关计算的详细信息,查看pctdemo_setup_blackjack的代码
先决条件:
相关的例子:
因为21点的玩家是相互独立的,所以我们可以并行地模拟他们。我们通过将问题分解为许多较小的任务来做到这一点。
的示例识别使用群集时使用的默认简档。该配置文件文档说明如何创建新的配置文件,以及如何更改默认的配置文件。看到自定义设置在并行计算工具箱的例子™关于如何改变的例子难度级别或创建的任务数量的指令。
[困难度,myCluster, numTasks] = pctdemo_helper_getDefaults();
我们得到的球员的数量和每个玩家从玩手数pctdemo_setup_blackjack
。该困难
参数控制的球员,我们模拟的数量。您可以查看pctdemo_setup_blackjack的代码完整的细节。
图,numHands,numPlayers] = pctdemo_setup_blackjack(难度);
我们划分的仿真numPlayers
中玩家numTasks
任务。因此,任务一世
可模拟splitPlayers{我}
玩家。
[splitPlayers,numTasks] = pctdemo_helper_split_scalar(numPlayers,...numTasks);fprintf中([“这个例子将提交与%d的任务(一个或多个)作业”...“到集群。\ N”],numTasks);
这个例子将提交作业与任务4(S)到集群。
我们创建了一个作业,并在作业为每个分割一个任务。请注意,任务功能是在连续示例中使用的相同的功能。您可以查看pctdemo_task_blackjack代码完整的细节。
STARTTIME =时钟;作业= createJob(myCluster中);对于i = 1:numTasks createTask(job, @pctdemo_task_blackjack, 1,...{numHands,splitPlayers(ⅰ)});结束
我们现在可以提交作业并等待它完成。
提交(工作);等待(作业);
让我们确认我们收到了我们预期的所有结果。fetchOutputs
将抛出一个错误,如果任务没有成功完成,在这种情况下,我们需要引发错误之前删除工作。
试一试jobResults = fetchOutputs(作业);抓住ERR删除(工作);重新抛出(ERR);结束
收集任务结果为numHands逐numPlayers矩阵。
S = cell2mat(jobResults');
现在,我们已经完成了所有的验证,所以我们可以删除作业。
删除(工作);
应该将用于分布式模拟的时间与执行相同计算集所需的时间进行比较连续21点例。经过时间与底层硬件和网络基础设施的变化。
elapsedTime = ETIME(时钟,开始时间);fprintf中('运行时间为%2.1f秒\n',elapsedTime);
运行时间是27.5秒
我们显示是赢了还是输在每个手,与置信区间一起投注的预期分数。我们还表明了奖金和每一个我们模拟玩家损失的演变。您可以查看pctdemo_plot_blackjack的代码完整的细节。
pctdemo_plot_blackjack(无花果,S);