2020年高教社杯全国大学生数学建模竞赛B题代码和思路

穿越沙漠”游戏下玩家的最优策略模型

摘要

穿越沙漠”游戏要求玩家在规定时间内,利用手中的地图和初始资金,在起点和村庄购买物资,同时可以在矿山获得收益,每天需要根据不同的行为和天气消耗物资的规则下,合理安排行走路线、物质购买和挖矿安排以便能在终点获得最大的收益。本文根据每个问题不同的条件,建立对应的最优策略模型,并针对了具体的关卡进行了具体的分析。

针对问题一:经过分析,影响玩家决策的几个因素有持有资金、剩余水和食物、离目标地的距离和天气。本文将玩家游戏的天数、当前位置、剩余水、剩余食物设为玩家的状态,根据 Floyd算法化简地图后,得出几条可能的最优路线,再利用动态规划算法,求解在不同状态下玩家在终点时持有的最大资金。最终求得第一关的最优解为10470元,第二关为12730元。

针对问题二:本文利用马尔可夫链,建立马尔可夫链天气预测模型,根据第一关的天气转换情况预测其余关卡的天气情况。再根据问题一的模型得出在不同天气状况下玩家的最佳策略,利用对应的天气情况概率和最佳策略下的最大资金,可以得出最终收益的数学期望,选择数学期望最大的一条策略即可。最后模拟了关卡三和关卡四的天气情况进行求解,经过验证,该模型是合理的。

针对问题三:对于问题三的第一小问,我们根据不同策略的收益,确定玩家选择策略的倾向。我们以玩家到达每一个点的平均收益来代替问题1中的实际收益S,定义点与点间转移的最大收益为势函数,通过势函数得到点与点之间的转移概率,接着通过排列组合求解点与点间的数学期望,最后可以再次利用问题1的方法求解到终点时数学期望最大的策略即为最佳策略。

对于问题三的第二小问,本文根据完全信息的静态博弈论建立了占优策略模型。本文定义了玩家的收益函数A,该函数与玩家的决策,剩余时间,剩余资源,以及所处的位置距离终点、村庄的距离有关。当于资源、时间充足的情况下,玩家无论选择何种策略,都不能保证是占优的,这种情况的解决根据问题三(1),利用期望收益求解。而当资源或时间不足的情况下,在参与人数超过两人时,则先考虑可以占优的一方或多方,再利用期望收益求解无法占优的参与者们。

综上所述,本文依据各题所给的条件较全面地分析了相关因素对玩家决策的影响,并给出了不同条件下玩家的最佳策略,实现了在终点的最大收益。经过分析验证,本文的模型具有合理性和一定的现实意义。

关键词:动态规划 马尔可夫链 人工势能场 博弈论

1

一、  问题重述

1. 问题背景

穿越沙漠的游戏规则是玩家凭借一张地图,利用初始资金购买一定数量的水和食物(包括食品和其他日常用品),从起点出发,在沙漠中行走。途中会遇到不同的天气,也可在矿山、村庄补充资金或资源, 目标是在规定时间内到达终点,并保留尽可能多的资金。

我们要在不同的游戏设定下给出玩家的最佳决策。

2. 需要解决的问题

问题一:假设只有一名玩家,在整个游戏时段内每天天气状况事先全部已知,试给出一般情况下玩家的最优策略。求解附件中的“第一关”和“第二关”, 并将相应结果分别填入 Result. xlsx。

问题二:假设只有一名玩家,玩家仅知道当天的天气状况,可据此决定当天的行动方案,试给出一般情况下玩家的最佳策略,并对附件中的“第三关”和“第四关”进行具体讨论。

问题三:现有n名玩家,他们有相同的初始资金,且同时从起点出发。若某天其中的任意k(2≤k≤n)名玩家均从区域A行走到区域B(B ≠A),则他们中的任一位消耗的资源数量均为基础消耗量的2k倍; 若某天其中的任意名玩家在同一矿山挖矿,则他们中的任一位消耗的资源数量均为基础消耗量的3倍,且每名玩家一天可通过挖矿获得的资金是基础收益 18₈;若某天其的任意k(2≤k≤n)名玩家在同一村庄购买资源,每箱价格均为基准价格的4倍。其他情况下消耗资源数量与资源价格与单人游戏相同。

(1)假设在整个游戏时段内每天天气状况事先全部已知,每名玩家的行动方案需在第0天确定且此后不能更改。试给出一般情况下玩家应采取的策略,并对附件中的“第五关”进行具体讨论。

(2)假设所有玩家仅知道当天的天气状况,从第1天起,每名玩家在当天行动结束后均知道其余玩家当天的行动方案和剩余的资源数量,随后确定各自第二天的行动方案。试给出一般情况下玩家应采取的策略,并对附件中的“第六关”进行具体讨论。

二、问题分析

1. 问题1

为了研究一般情况下单人玩家的最佳策略,我们需要分析影响玩家决策的因素。如图所示:

问题一中玩家的已知条件是规定时间内的天气和地图。关于距离的因素,玩家可以先化简地图,通过 Floyd算法得出起点、村庄、矿山和终点之间的最短路径从而减少多余的区域。接着可以利用动态规划算法,根据所在点、天数、水和食物的四个因素的影响递推得出在符合规则下到终点时的最大的持有资金。

2. 问题 2

第二题相比于第一题,玩家仅知道当天的天气状况,需要根据当天天气状况来决定当天的行动方案。因此我们需要首先判断能否将天气因素用其他影响玩家决策的因素来代替或者去除,即化简、整合合并决策因素。但经过初步分析,天气因素在影响玩家决策的因素中是不可或缺的。玩家需要根据未来天气情况,来做一个全局规划。

因此,我们需要考虑其他方法来解决这个问题。对于现有的相关因素一一当天天气,我们可以假设当天天气可影响明天天气,我们可以使用马尔可夫链来对未来天气进行预测。且根据马尔可夫链的概率收敛特性,在给定各天气跳转的概率下,我们可以最终得到一个收敛的天气概率,并基于此实现对未来天气的预测。

获得未来天气可能情况以及其对应概率后,我们根据第一问得到对应的最佳策略情况下的收益,并得到该情况下收益的数学期望。最终收益的数学

四、符号说明及名词定义

符号

定义

 Lt'→t

第t'天到第t天且到达点i的消耗的水和食物的价值

 Mt'→t

第t'天到第t天且在点i的挖矿的收益

 St'→t

第t'天到第t天且到达点i的净收益

 Gw.,t,i

第t天在第i个点, 有w箱水和f箱食物的最优解

 Pij

天气i转移到天气j的概率

 Wm

表示标志为m的一个有序天气集合

 Hwraxi

第t天在点i且携带w箱水和f箱食物时的势函数

 Pt,j

第t天, 玩家从点i到其邻点j的转移概率

E{,j

第t天, 玩家从点i到其邻点j的净收益的数学期望

 Ai(s)

玩家i下一步行动的总收益函数

五、模型的建立与求解

1 问题一

1.1  问题一模型的建立

1.1.1  最简地图模型的建立

为了简化问题和减少后面利用动态规划求解问题的复杂度,我们可以先将地图转换为点和线的关系,即一个点代表一个区域,而相邻的区域用线连接表示可以到达。

之后我们可以继续简化地图,找出起点、村庄、矿山和终点两两之间的最短路径。求最短路径的问题我们可以先用 Floyd算法求解。

假设从节点i到节点j的最短距离为d;,j,而d₁,j不外乎两种可能:

1) 从节点i直接到节点j;

2) 从节点i经过若干个节点k到节点j。

则我们需要判断:

 di,k+dk,j<di,j

其中k为图内所有节点。若上式中成立,则证明是上述的第二种可能,那么d;j重置为( di,k+dk,j,遍历完所有节点k后,d;,j即为所求最短距离。

求出最短距离后,只将起点、村庄、矿山和终点等目标地留下,线的权重的意义为从地点i到地点j需要t天。

最后将多余的线可以删去,例如若矿山->村庄->终点的距离和矿山->终点的距离相等,则我们可以将矿山->终点的这条线去掉,简化图。

1.1.2  基于动态规划的最佳策略模型的建立

在本题中,我们的最终目标是在物资充足的前提下在规定时间内到达终点且资金最大。而这个目标的复杂度太高,可以采用分治的思想,将大问题化解为小问题进求解,即用动态规划求解。

1) 水和食物的消耗

依据题意我们可以得到在第t天玩家水的基础损耗D1为:

                       D1t=5810      第t天为高温                    (1)

第t天为晴天

同理在第t天玩家食物的基础损耗D12为:

第t天为沙尘暴

第t天为晴天

                                     第t天为高温                    (2)

第t天为沙尘暴

而考虑到玩家的行为因素,除了需要考虑在矿山的停留时间外,在前往目标地点途中无需停留,因此玩家其实只有三种行为对应三个基础消耗的倍数:在沙尘暴时停留、行走、挖矿。 即:

                  σk=123                  k = 行走                 (3)

k= 在沙尘暴时停留

接着我们可以推出经过t天在第i个点,有w箱水和f箱食物时水的损耗为

k = 挖矿

                                     (4)

其中 Δw'→t为从第t'天到第t天水的损耗,满足

                          Δwt'→t=∑k=t'tD1t×σk                       (5)

同理,可以推出第t天在第i个点,有w箱水和f箱食物时食物的损耗为

                     fcostw,f,t,i=fcostw',f',t',ift'→t                  (6)

其中 Δf'→t为从第t'天到第t天食物的损耗,满足

                          Δft'→t=∑k=t'tD2t×σk                       (7)

2) 水和食物的损耗价值.

根据题目所给的信息,在村庄所购的水和食物的价格为在起点的两倍,则我们可以列出在第t'天到第t天且到达点i的消耗的水的价值为:

同理可得第t'天到第t天且到达点i的消耗的食物的价值:

则总消耗价值为:

                           Lit'→t=Wit'→t+Fit'→t                      (10)

3) 挖矿收益 Mit'→t

根据题目所得,每天的挖矿收益为m=3×m  basic,则第t'天到第t天且在点i的挖矿收益为:

不挖矿时

(11)

挖矿时

4) 净收益 Sit'→t

根据题意和上述式子可得, Sit'→t由两部分构成,一是水和食物消耗的价值,二是由挖矿所得的资金,即:

    Sit'→t=-Lit'→t+Mit'→t                     (12)

5) 资金最优解

我们可以假设第t天在第i个点,有w箱水和f箱食物的最优解为( Gmaxw,f,t,i,而且满足:

                      Gmaxw,f,t,i=maxGmaxw',f',t',ik+Sikt'→t                 (13)

其中点 ik包括点i的所有邻点和其本身, Sikt'→t为从第t'天到第t天且到达点 ik的净收益。

6) 约束条件

1.2  问题一的求解

1.2.1  最简地图模型的求解

以下我们以第一关的地图为例化简。

1) 将地图变形为点和线的图。


1.2.2  基于动态规划的最佳策略模型的求解

根据上述模型可以对各关进行模拟仿真(代码于附录),得到各关结果如下:

1) 第一关路线图如下,得到终点的最大收益为10470元。

2) 第二关路线图如下所示,到终点的收益为12730元。

 

2 问题二

2.1  问题二模型的建立

从全局来看,全局的天气因素能够影响玩家的全局策略; 单从一天的天气来看,若玩家仅知晓一天的天气,他可以先规划一个大致的行走目标,然后根据每天的天气以及预测未来天气来及时的调整自己的策略。

在一般情况下,未来天气状况不确定,因此我们需要根据当天天气来预测未来天气状况。为了使得模型更好的拟合通用的游戏情况,我们将根据关卡一、关卡二的天气转换来分析各个天气状态相互跳转以及维持原天气的概率。再根据每个关卡不同的天气要求及时调整天气状态转换情况。

已知关卡一、关卡二天气一致,30天天气状况表格如下:

日期

1

2

3

4

5

6

7

8

9

10

天气

高温

高温

晴朗

沙暴

晴朗

高温

沙暴

晴朗

高温

高温

日期

11

12

13

14

15

16

17

18

19

20

天气

沙暴

高温

晴朗

高温

高温

高温

沙暴

沙暴

高温

高温

日期

21

22

23

24

25

26

27

28

29

30

天气

晴朗

晴朗

高温

晴朗

沙暴

高温

晴朗

晴朗

高温

高温

根据现有条件,我们发现此问题的天气概率预测满足以下几个条件:

1)可能的天气数是有限的,包含晴朗、高温、沙尘暴。

2)从任意状态能够转变到任意状态。

3)天气状态的跳转不是一个简单的循环。

4)我们可以利用上述天气跳转表格给定各个天气之间的转移概率。

至此,该问题的分析满足马尔可夫链收敛的四大条件。因此,我们选择马尔可夫链模型进行未来天气的预测。

2.1.1  马尔可夫链天气预测模型的建立

马尔可夫链可以描述为一个随机跳跃的序列。对于游戏中的天数而言,这个跳转序列仅包含有限个离散的位置或状态的集合,且随机变量 wn——第n天的天气状态在有限的天气离散集中取值。则有:

 wₙ∈1,2,3

其中1代表晴朗天气,2代表高温天气,3代表沙尘暴天气。

根据关卡一、二30天天气状况表格,通过计算,我们可以得到各个天气之间在30天内的跳转次数如下:高温到高温有6次、高温到晴朗有2次、高温到沙尘暴有3次、晴朗到晴朗有2次、晴朗到高温有4次、晴朗到沙尘暴有2次、沙尘暴到沙尘暴有1次、沙尘暴到高温有3次、沙尘暴到晴朗有2次。则可以得出天气状态转移概率如下:

 Pij=P13p12p13P31P22p23P23P31β32P3351437314131216

对应的转换图为:

对于计算 wₙ₊₁=j的概率 Pᵣwₙ₊₁=j,满足:

                     Pᵣwₙ₊₁=j=∑ᵢPᵢⱼPᵣwₙ=i                (14)

在第 n+1天到达天气状态j的途径只能是在第n天到达天气状态i,然后从i跳转到j,因此,令 πₙi=Pᵢwₙ=j,我们可以将式14表达为:

                         πₙ₊₁j=∑ᵢPᵢⱼπₙi                     (15)

即为:

根据马尔可夫链收敛规则,我们可以设置任意合理的初始情况,迭代运行式15,都可以得到一个收敛的值,该值即为各个天气状况的概率。

至此,我们利用马尔可夫链求解出了各个天气状态的出现概率。在游戏中,玩家已知当天情况,但不知道未来天气状况。利用上述马尔可夫链模型所得结论,我们可以通过当天天气情况来预测直到游戏结束的未来的天气。不同的预测结果都对应着一个确切的概率。玩家可以根据预测概率情况结合问题一:已知全局天气情况下的决策选择模型来动态的选择自己的决策。

这种决策方法要求玩家能够根据实际情况“随机应变”,而不是固守游戏一开始时定下的策略。给定“历史”,玩家每一个行动选择开始至游戏结束都构成了一个博弈。我们将游戏的“初始状态”设定跟随玩家的选择而变化,即每一次决策后都进入一个新的将前一状态作为当前博弈初始状态的决策。

2.1.2  决策收益模型的建立

根据问题一所得的模型,我们可以将不同天气状态下获得的决策收益C表示为一个决策选择集如下:

 CW1CW2CW3CWm

其中 Wm表示标志为m的一个有序天气集合,Cwm表示在Wm天气集情况下的最优决策所获得的收益。

对于 Wm而言,我们将其存在的概率表示为 Pmm,则最佳决策的数学期望 Emax满足:

                 Emax=maxPW1CW1PW2CW2PWmCWm             (16)

2.2  利用问题二模型的具体求解

根据我们的模型可画出求解流程图如下:

13

2.2.1 关卡三求解

根据马尔可夫链收敛规则,我们可以设置任意合理的初始情况,迭代运行式15,都可以得到一个收敛的值,该值即为各个天气状况的概率在这里我们设置初始情况为 π₁=0.50.40.1,迭代计算 10 次结果如下:

表 1 各天气概率收敛过程

迭代次数

晴朗

高温

沙尘暴

1

0.301190

0.471429

0.227381

2

0.319459

0.466327

0.214215

3

0.317815

0.466691

0.215494

4

0.317960

0.466665

0.215375

5

0.317948

0.466667

0.215386

6

0.317949

0.466667

0.215385

7

0.317949

0.466667

0.215385

8

0.317949

0.466667

0.215385

9

0.317949

0.466667

0.215385

10

0.317949

0.466667

0.215385

根据关卡三的天气要求:玩家仅知道当天的天气状况,但已知 10天内不会出现沙暴天气。根据上述分析所得图8各天气状态跳转图,我们由关卡天气条件删去天气状态为沙尘暴的天气:

接下来我们可以根据 Floyd算法将关卡三的地图化简为以下形式:

其次,根据图9的问题分析流程图,我们需要先获得各个天气情况下对应的最佳策略。通过以上天气跳转概率,我们列举了所有符合以上天气跳转概率的 10 天天气状况。运用模型一将关卡三的基础收益、基础消耗量、游戏天数等具体设定转化成对应数值带入到约束方程中。运行并分析得到的各个天气状态下的最优策略结果。

我们发现获得的最优决策路线大致分为以下两条:

起点—3→终点

起点—3→矿山—2→终点

其中,路线②对应的天气情况较为特殊,为后七天均为晴朗的天气条件。其余天气状况下分析所得的最右路线均为路线①。部分运行结果整理后列举如下:

表 2 运行结果

日期

  1     2      3     4      5     6      7     8      9     10

路线

天气集

选择

W1

高温   高温   高温  晴朗   高温  晴朗   高温  晴朗  晴朗   高温

W2

高温   晴朗  晴朗   晴朗   高温  晴朗   高温  晴朗  晴朗   高温

W3

高温   晴朗   高温  晴朗   高温  晴朗   高温  高温   晴朗  高温

W4

晴朗   高温   高温  晴朗   高温  晴朗   晴朗  晴朗   高温  晴朗

W5

高温   高温   高温  晴朗   晴朗  高温   高温  高温  晴朗   高温

W6

高温   高温   高温  高温   高温  晴朗   高温  晴朗  高温   高温

W7

晴朗   高温   高温  晴朗   晴朗  晴朗   晴朗  晴朗  晴朗   高温

W8

高温   晴朗   高温  晴朗   晴朗  晴朗   晴朗  晴朗  晴朗   晴朗

W9

高温   高温   高温  晴朗   晴朗  晴朗   晴朗  晴朗  晴朗   晴朗

  …    …     …    …     …    …     …    …     …

为验证根据模型一给定天气得到的决策结果的合理性,我们将结合关卡三进行具体分析。

对于路线②而言,路程消耗为5天,则玩家最多在矿山挖5天。由于这种路线选择相较路线一复杂,我们先分析路线②的收益状况。由关卡设置条件易得,玩家仅在晴朗天气下挖矿一次才有 35 元的净收益,高温天气下挖矿收益为负,因此玩家在高温下肯定选择不挖矿。

若玩家挖矿挖满5天,我们设路线②净收益为E₂,则有:

                     E₂=35d+E₁-135×5-d-b                (17)

其中:d指挖矿五天中天气为晴朗的天数,b表示最后两天回终点的消耗,

E₁为路线①的净收益(路线①无挖矿,净收益为负),同路线②前三天消耗。

若路线②比路线①更优,则有:

 E₂>E₁

即:

35d-135(5-d)-b >0

将b取最小值 110 元——两天都在晴朗的天气下赶路,则要使路线②有收益,最好情况下d取值应大于 4.617。

由于d≤5故要使路线②收益大于路线①,则在最好情况下需要挖矿5天都为晴朗,即10天中的后7天都要为晴朗。与模型一分析结果相同。

下面我们将模拟玩家在关卡三起点时,用上述模型进行的决策分析过程。根据图10,关卡三的天气跳转的状态转移图,我们可以计算出连续 7 天晴朗的概率为:0.001,则两个决策的收益期望为:

               P₁C₁,P₂C₂=E₁,E₁+0.01×65+0.99×∂          (18)

其中∂≤-105,表示次好情况,即五天中仅一天为高温时后七天的收益。

易得线路①的收益期望大于收益二线路期望,玩家选择线路①更佳。

根据图 10 中两种天气状态的跳转概率,我们可以给出符合此跳转规律的可能的10天游戏天气状态表格。我们将其中一种情况列举如下:

日期

1

2

3

4

5

6

7

8

9

10

天气

高温

晴朗

晴朗

高温

高温

高温

晴朗

高温

高温

晴朗

为了细化分析,我们使用以上天气状态表格作为关卡三这 10 天真实的天气情况,并选择路线一作为玩家初始策略。后面玩家再重复上述过程迭代分析出每一步的策略即可。

关卡三过程模拟结果如下:

根据模拟结果,由于总水量和食物量消耗为 158kg<1200kg,故玩家可

以在起点购买好30箱水以及34箱食物,后直达终点即可。

2.2.2 关卡四求解

与关卡三分析步骤相似,首先我们查看关卡四天气条件:玩家仅知道当天的天气状况,但已知30天内较少出现沙暴天气。因此,根据图8天气跳转问题的状态转移图,我们适当减少各个天气到沙暴天气的跳转概率。减少后的状态跳转图如下:

设置初始值,利用式15,我们求得,最终收敛后的各个天气概率表示如下,可以发现,当前沙暴天气出现概率较小,达到了 30 天内较少出现沙暴天气的模拟条件:

π = (0.4160,0.4667,0.1173)

接下来,我们再根据问题一中的方法简化关卡四地图如下:

我们假设未来天气有m种情况,其概率表示集合为:

 PW1PW2PWm

每种天气我们都可以利用模型一求解得到对应的一种最佳选择策略。计算各个决策的收益,根据式16,得出最大收益期望。最终在每一点我们选择收益期望最大的决策即可。

运行算法我们可以得到,在初始情况下(即玩家位于起点,且仅知道当

天的天气) 在所有路线中期望最大的一条路线为:

则此时,玩家在起点将按照这个策略进行第一天的操作。接下来重复以上分析步骤,进行分析判断,直至玩家走完全程。

根据图16关卡四的天气跳转图,为了细化问题分析,我们假设30天的天气状况如下:

日期

1

2

3

4

5

6

7

8

9

10

天气

高温

高温

晴朗

高温

晴朗

高温

沙暴

晴朗

高温

高温

日期

11

12

13

14

15

16

17

18

19

20

天气

晴朗

高温

晴朗

高温

高温

沙暴

高温

晴朗

高温

高温

日期

21

22

23

24

25

26

27

28

29

30

天气

晴朗

晴朗

高温

晴朗

沙暴

高温

晴朗

晴朗

高温

高温

玩家在起点采用上述路线的策略,并在到达新的一天后迭代更新下一步策略。最终,在上述假设的真实天气情况下,玩家关卡四游戏过程如下:

由模拟结果可得最终可以获得的收益为 13140 元。

3 问题三

3.1  问题三模型的建立

3.1.1  基于人工势能场最佳策略模型的建立

和第一第二问不同的是,第三问的游戏属于多人游戏,且玩家之间会产生影响。在第一小问中我们可以以玩家到达每一个节的平均收益来代替问题1 中的实际收益G,将点和点转移的最大收益定为势函数,就可以得到点和点之间的转移概率,然后得到点和点转移的数学期望,最后就可以再次利用问题1的方法求解出最佳策略,该最佳策略指代的是玩家选择路线的最大数学期望。

我们需要求解出任意一点i在t时刻到它的相邻节点j的转移概率,从而计算出在第t天从i到j的概率(已知在第t天,节点i到节点i的概率为1)我们利用不同时间t时,节点i到达终点的最大收益,作为该点的势函数。并根据相邻节点的势函数,确定对于处于i点的玩家到达相邻节点 j的转移概率。

此后,计算求解出第t天下,玩家从i走到j的概率,据此根据概率计算出t时刻有n位玩家从i到达j的概率,求解出数学期望,进而通过最大的平均期望筛选出最佳的策略。

我们可以先定义第t天在点i且携带w箱水和f箱食物时的势函数为 Hmaxw,f,t,i,且满足:

                             Hmaxw,f,t,i=Gmaxw,f,t,i                        (19)

其中 Gmaxw,f,t,i为问题一所求该状态下到达终点的最大收益。

于是我们可以得到在第t天,从点i到其邻点j的转移概率P{j为:

                           Pi,jt=Hmaxw',f',t,jq=1nHmaxw',u',k                      (20)

接着可以将式20写成如下:

                          Pi,jt=∑k=1nPk,it-1×Pi,jt-1                      (21)

其中点k为点i的某个邻点,n为点i邻点的个数。

根据问题一所建立的模型和数学期望的公式可以得到第t天,玩家从点i到其邻点j的水和食物损耗的数学期望E[,j(L)为:

 El,2)其中i ≠j

同时,可以求出第t天,玩家从点i(点i为矿山所在处) 的挖矿所得资金的数学期望E{j(M)为:

其中i = j= 矿山所在点

根据题意,也可得每次去村庄购买的金额的数学期望E{j(V)为:F tjV=V[41-Cn×pi,jtn×1-pi,jtn-1-1-Pi,jtn+Cnt×pi,jtn×1-pijtn-1+1-pi,jt1

化简得

        Ei,jtV=V4-3Cn1×Pi,jtn×1-Pi,jtn-1+1-Pi,jtn   (24)

其中j = 村庄所在点

最后,第t天,玩家从点i到其邻点j的净收益E[j的数学期望为:

                     Ei,jt=Ei,jtM-Ei,jtL-Ei,jtV                (25)

3.1.2  基于博弈论的占优策略模型模型的建立

根据题意,所有玩家仅知道当天的天气状况,从第 1天起,每名玩家在当天行动结束后均知道其余玩家当天的行动方案和剩余的资源数量。而当玩家所处位置没有人时,玩家的决策不受他人影响,只有当玩家和他人在同一点或抵达同一点时才需要考虑。

根据问题二,我们可以得到第二天的天气概率 P=P₁P₂P₃。在不考虑多人的情况下,对应的天气从点i到其邻点j的收益为 L=L₁L₂L₃,则其收益的数学期望为

 E=P₁L₁+P₂L₂+P₃L₃

在多人情况下,为了衡量玩家收益并选择最优策略,我们先定义一个决策空间S,满足 S=s1s2sm,m为玩家一天的决策总量。

接下来我们考虑该策略下的剩余时间t对收益函数的影响。当到达下一个点后的剩余天数和到终点所需花费到时间相距越小时,玩家对路线的选择变得会苛刻,即非最短路径的选择损失会更大。我们设这对收益函数的影响为g₁(s,t),其满足关于到达终点后的剩余时间t(s)的负指数分布,如下所示:

                           g₁st=α₁e⁻ᵗ⁽ˢ⁾                       (26)

其中α₁为时间系数,当t(s)越大,g₁越大,说明若执行这个决策s,g₁的损失很大,即迟迟不去终点,关于时间的损耗会以指数级变大。

然后我们考虑该策略下剩余的水和食物对收益函数的影响,若资源足以到达终点,村庄和最优路线对决策的影响不大;但当资源不足以到达终点时,村庄和最优路线对决策的影响会变很大。我们假设该影响函数分别为g₂(s,w)和g₃(s,f)。

                     g2sw=α2e-w1s-e-w2s                 (27)

其中α₂为水系数,w₁(s)代表到终点的剩余水的箱数,w₂(s)为到最近村庄的剩余水的箱数,分析同上。

同理, 可以定义g₃(s,f)满足:

                      g3sf=α3e-f1s-e-f2s                  (28)

其中α₃为食物系数,f₁(s)代表到终点的剩余食物的箱数,f₂(s)为到最近村庄的剩余水的箱数,分析同上。

接着我们定义一个停留决策的惩罚为g₄(s)满足:

                               g₄s=α₄                          (29)

 α₄为停留系数,当选择停留时可能他人也选择停留,则损失了时间、资源, 同时进入下一轮决策。

最后我们可以假设玩家i下一步行动的总收益函数为A(s):

       Ais=NsEs+MsNs+g1st+g2sw+g3sf+g4s)

其中N(s)代表选择该决策的玩家总数,E(s)代表选择该决策的期望花费,M(s)代表选择该决策的挖矿收益。

计算出收益函数后,对上述情况进行讨论,当所有玩家对物资和时间充

足时,参与者的决策没有绝对占优的情况,因此只能通过问题3(1)的建模思想,选择具有最小期望损失的方案。

所以我们这里只讨论有一方的物资或时间充足的情况,即对于决策空间s,参与者A =[A₁,A₂],满足:

在满足上述占优假设的情况下,总有策略S₁,使得无论A₂选择何种策略,A₁选S₁的收益总是比其他策略占优,即严格占优策略。在多方参与的游戏中,则先考虑最优、次优……最差情况,对于优先级相同的玩家,则按照期望损失给予相应的策略。

所以我们这里只讨论有一方的物资或时间充足的情况,即对于决策空间s,参与者A =[A₁,A₂],满足:

在满足上述占优假设的情况下,总有策略S₁,使得无论A₂选择何种策略,A₁选S₁的收益总是比其他策略占优,即严格占优策略。在多方参与的游戏中,则先考虑最优、次优……最差情况,对于优先级相同的玩家,则按照期望损失给予相应的策略。

代码

 global neighbor  ;%邻居

 global get   ij;%收益

 global w  ij;

 global f  ij;

 global day   ij;

 global f  left;

 global w  left;

 neighbor  = [1,1,1,0;1,1,1,0;1,1,1,1;0,1,1,1];

 global get   mat;

 get   mat = - inf(400,600,n,30);

 get   mat(:,:,1,1) = 0;

 mine   money = 1000;

 bag= 1200;%负重1200kg

 money = 10000;%初始资金

w  weight = 3;%水的负重

f  weight= 2;%食物的负重

f  price = 10;%食物的基价

w  price = 5;%水的基价

 mine = 4;

 vilige = 3;

s = 1;

e =2;

w = [5,8,10];

f = [7,6,10];%不同天气下食物和水的消耗

 day = [2,2,1,3,1;2,3,1,2,2;3,2,1,2,2;2,3,3,2,2;1,1,2,1,3;2,1,1,2,2];%30天的天气情况

 day = day';

n = 4;%端点个数

d n = [0,3,6,8;3,0,3,5;6,3,0,2;8,5,2,0];%端点之间的距离

f  left = - inf(n,n,30);

w  left = - inf(n,n,30);

 get   ij = - inf(n,n,30);

w  ij = inf(n,n,30);

f  ij= inf(n,n,30);%食物的开销

 day   ij= inf(n,n,30);%需要花多少天

 for k = 1:30

temp1 = day   ij(:,:,k);

 index  1 = find( day(k: end)~=3);%找到k天后不是沙尘暴天气的索引

 judge = (d n <= length( index  1)& d n~=0); % 找到 k 天后相互之间可以到达矩阵,不包含到自身

 index  2 = find( judge == 1);%找到可以相互到达的各个坐标

temp1( index  2)= index  1(d n( index  2));%一个距离走一天, 需要找x距离个非沙尘暴天气才能走完

temp1( find(d n==0)) = 0;

 day   ij(:,:,k) = temp1;

 for M = 1:n

 for N = 1:n

 if(M ~= N)

 if temp1(M,N) ~= inf %不能到达的地方不考虑

 weather = day(k:k +(temp1(M,N)-1));%找到走的这段路的天气情况;

w  ij(M,N,k) = length( weather==1)*(w(1))*2 + length( weather ==

2)*(w(1))*2 + length( weather==3)*(w(3));

f  ij(M,N,k) = length( weather==1)*(f(1))*2 + length( weather ==

2)*(f(1))*2 + length( weather==3)*(f(3));

 end

 else

 if M == mine

f  ij(M,N,k)= day(k)*f( day(k))*3;

w  ij(M,N,k) = day(k)*w( day(k))*3;%挖矿的开销是基础开销

的三倍

 get   ij(M,N,k) = 1000 - f  ij(M,N,k) * f  weight * f  price* 2 -

w  ij(M,N,k)*w  weight*w  price*2;

 else

f  ij(M,N,k) = day(k)*f( day(k));

 end

 lost  w = - inf(10,10,10);

 lost  f = - inf(10,10,10);

 cost   money = - inf(10,10,10);

E = - inf(10,10,10);

E f = - inf(10,10,10);

E w = - inf(10,10,10);

w  cost = [3,9];

f  cost = [4,9];

 weather = [1,2,1,1,1,1,2,2,2,2]; %十天的天气

p 1( find(p 1 == 0)) = inf;

 for t = 1:10

 for i = 1:10

 for j= 1:10

 ifi~=j

 lost  w(i,j,t) = 2*w  cost( weather(t));

 lost  f(i,j,t) = 2*f  cost( weather(t));

 cost   money(i,j,t) = lost  w(i,j,t)*5+ lost  f(i,j,t)*10;

E(i,j,t) = cost   money(i,j,t)*(p 1(i,j,t+1).^2*2 + 1 -p 1(i,j,t+1).^2);

E f(i,j,t) = lost  f(i,j,t)*(p 1(i,j,t+1).^2*2 + 1 -p 1(i,j,t+1).^2);

E w(i,j,t)= lost  w(i,j,t)*(p 1(i,j,t+1).^2*2 +1 -p 1(i,j,t+1).^2);

 else

 if i == 9

 lost  w(i,j,t) = 3*w  cost( weather(t));

 lost  f(i,j,t) = 3*f  cost( weather(t));

 cost   money(i,j,t) = lost  w(i,j,t)*5+ lost  f(i,j,t)* 10;

E(i,j,t) = cost   money(i,j,t) -200*(p 1(i,j,t+1).^2*1/2 +1 - p 1(i,j,t+1).^2);

E f(i,j,t) = lost  f(i,j,t);

E w(i,j,t) = lost  w(i,j,t);

 else

 lost  w(i,j,t)= w  cost( weather(t));

 lost  f(i,j,t) = f  cost( weather(t));

 cost   money(i,j,t) = 5* lost  w(i,j,t) + 10* lost  f(i,j,t);

E(i,j,t) = cost   money(i,j,t);

E w(i,j,t) = lost  w(i,j,t);

E f(i,j,t) = lost  f(i,j,t);

 end

 end

 end

 end

 end

table1 = p 1(:,:,3);

table2 = E(:,:,3);

5. 问题四仿真代码

w = zeros(3,3); %根据行动结束当天预测明天天气

w = [1/3,1/2,1/6;1/2,3/7,1/14;3/8,1/2,1/8];

E = - inf(25,25,3);%根据当天的天气, 给出期望

a 1 = 1000;

a 2 = 20000;

a 3 = 20600;

 for j = 1:3

E(:,:,j) =  w(j,1) * (3 * 2 *5 + 4 * 2 * 10)+ w(j,2) * (9 * 2 *5 + 9 * 2 *10);

 end

 for i = 1:25

E(i,i,:) =  w(j,1) * (3 *5 + 4 * 10)+ w(j,2) * (9 * 5 + 9 *10)+ w(j,3) * (10 *5 + 10 *10);

 if i == 18

E(i,i,:) = 3*( w(j,1) * (3 *5 + 4 * 10)+ w(j,2) * (9 * 5 +9 *10)+ w(j,3) * (10 *5 + 10 *10)) - 1000;

 end

 end

g t = zeros(5,5,30);

g w = zeros(5,5,100);

g f = zeros(5,5,100);

 for t = 1:30

 for i = 1:5

 for j = 1:5

g t(i,j,t) = a 1 * exp(-((25 -t) - (5 - i) - (5 - j)));%

计算g1损失

 end

 end

 end

 for w = 1:100

 for i = 1:5

 for j = 1:5

g w(i,j,w) = a 2 * exp(-(w - 7*(5 - i) - 7*(5 - j)));%算 g2损失

 end

 end

 end

 for f = 1:100

 for i = 1:5

 for j = 1:5

g f(i,j,f) = a 3* exp(-(f - 7*(5 - i) - 7*(5 - j)));%算 g3损失

 end

 end

 end

k = 12;%以下为对某一个点寻找占优策略

w 1 = 25;

w 2 = 100;

f1 = 100;

f2 = 100;

t1 = 25;

t2 = 1;

 test = [2,3];

 test  1 = zeros(1,2);

E 1 = zeros(1,2);

E 1(1) = E(k,( test(1))*5 + test(2),1);

E 1(2) =E(k,( test(2))*5 + test(1),1);

 test  1(1) = g t( test(1), test(2),t1) + g w( test(1), test(2),w1) +g f( test(1), test(2),w1);

 test  1(2) = g t( test(2), test(1),t1) + g w( test(2), test(1),w1) +g f( test(2), test(1),w1);

 test  2 = zeros(1,2);

 test  2(1) = E(k,( test(1))*5 + test(2),1) + g t( test(1), test(2),t2) +g w( test(1), test(2),w2) + g f( test(1), test(2),w2);

 test  2(2) = E(k,( test(2))*5 + test(1),1) + g t( test(2), test(1),t2) +g w( test(2), test(1),w2) + g f( test(2), test(1),w2);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值