基於靜態博弈的穿越沙漠遊戲最優策略

2021-10-13 10:08:12 字數 3312 閱讀 4601

部分**

穿越沙漠是一款生存和盈利相結合的遊戲,即玩家要在規則的限定下按時到

達終點,並盡可能使自己的收益最大化。收益最大化就意味著盡量避免因為天氣、

時間、負重上限、路線規劃等因素(以下統稱「因素」)消耗不必要的資源。為

解決在因素的影響下如何能夠保證每名玩家每輪遊戲結束都獲益最大的問題,本

文首先用 matlab 軟體根據 floyd 演算法得出不考慮任何因素下的最短路徑矩陣,為

後續分析問題奠定基礎。

[^1]: mermaid語法說明

有一如下的小遊戲:玩家憑藉一張地圖,利用初始資金購買一定數量的水和

食物,玩家憑藉一張地圖,利用初始資金購買一定數量的水和食物(包括食品和

其他日常用品),從起點出發,在沙漠中行走。途中會遇到不同的天氣,也可在

礦山、村莊補充資金或資源,目標是在規定時間內到達終點,並保留盡可能多的

資金。需要滿足以下基本要求:

1、遊戲開始時間為第 0 天,此時玩家位於起點。玩家要在截止日期前到達

終點,否則遊戲結束。

2、玩家穿越沙漠所擁有的水和食物質量紙盒不能超過負重上限。若未到終

點水或食物耗盡,遊戲結束。

3、每天的天氣情況在所有區域內相同,為「晴朗」「高溫」「沙暴」中的一

種。4、玩家每天可從乙個區域到達與之相鄰的另乙個區域,或選擇原地停留。

沙暴日必須停留。

5、玩家停留一天的消耗量為基礎消耗量,行走一天的消耗量為基礎消耗量

的 2 倍。

6、玩家在起點以基準**購買物資,可在起點停留或回到起點,但不可在

起點多次購買物資。玩家到終點後可按半價退回剩餘物資。

7、玩家在礦山停留時,可挖礦獲得資金,獲得的資金稱為基礎收益。如果

挖礦,消耗量為基礎消耗量的 3 倍;如果不挖礦,消耗量為基礎消耗量。到達礦

山當日不能挖礦。沙暴日也可挖礦。

8、玩家在村莊購買物資時,**為基準**的 2 倍。

問題 1:只有一名玩家,遊戲中每天的天氣情況已知,分析最優策略。求解

附件中的「第一關」和「第二關」,並將相應結果分別填入 result.xlsx。

問題 2:只有一名玩家,玩家僅知道當天的天氣狀況,並以此決定當天行走

方案,給出一般玩家的最佳策略。

問題 3:現有 n 名玩家,他們有相同的初始資金,且同時從起點出發。若某

天其中的任意 k(2≤ k ≤ n)名玩家均從區域 a 行走到區域 b(b≠ a),則他們

中的任一位消耗的資源數量均為基礎消耗量的 2k 倍;若某天其中的任意 k

(2≤ k ≤ n)名玩家在同一礦山挖礦,則他們中的任一位消耗的資源數量均為基

礎消耗量的 3 倍,且每名玩家一天可通過挖礦獲得的資金是基礎收益的 1/k;若

某天其中的任意 k(2≤ k ≤ n)名玩家在同一村莊購買資源,每箱**均為基準

**的 4 倍。其他情況下消耗資源數量與資源**與單人遊戲相同。

(1)假設在整個遊戲時段內每天天氣狀況事先全部已知,每名玩家的行動

方案需在第 0 天確定且此後不能更改。試給出一般情況下玩家應採取的策略,並

對附件中的「第五關」進行具體討論。

(2)假設所有玩家僅知道當天的天氣狀況,從第 1 天起,每名玩家在當天

行動結束後均知道其餘玩家當天的行動方案和剩餘的資源數量,隨後確定各自第

二天的行動方案。試給出一般情況下玩家應採取的策略,並對附件中的「第六關」

進行具體討論。

對於問題 1,只有一名玩家,且天氣狀況全部已知,要求給出一般情況下玩

家的最優策略,其實質就是考慮在不同路線下,玩家如何能尋找到最短路線且盡

可能賺到更多的資金。只有一名玩家便不用考慮其他玩家的干擾,天氣狀況已知

便能夠針對天氣狀況對路線做出調整,避免不必要的資源消耗。針對這個問題,

在最優策略的思想中,選用 floyd 最短路徑模型[1],該模型在本題中的體現就是

先確定出在不考慮任何因素時的最短路徑,在最短路徑確定之後,進行因素的逐

個疊加,直到達到題目要求。

強調文字

強調文字

問題 2 中與問題 1 類似,均只有一名玩家,但問題 2 中的天氣情況未知。若

進行與問題 1 中相同的分情況討論,則會因為天氣因素造成結果的嚴重不準確。

因此對模型做改進,將天氣作為首要變數。利用問題 1 中的天氣情況用 excel 中

的 rand 函式生成隨機天氣[2]進行分情況討論。首先將情況分為從起點到終點和從

起點經過礦山再到終點兩種,針對兩種情況的最大消耗、平均情況和最小消耗分

別討論,計算出其資金收益從而得出一般玩家的最優策略。

對於問題 3,玩家數量從一名增加到了 n 名,用相同的初始資金同一時間從

起點出發,且路線不能衝突,否則就會消耗更多的資源或獲得更低的收益。此時

應該將側重點放在路線規劃上。玩家在規劃自己路線的同時,也要兼顧其他人的

路線以免發生衝突,其本質上是玩家之間的一種博弈。路線規劃作為一種博弈,

從時間序列來看,由於玩家之間並不知道彼此對於路線的規劃,所以是一種靜態

博弈;從博弈主體的關係來看,由於玩家之間相互不知情即不存在合作關係,目

標是尋求自己的利益最大化,所以是一種非合作博弈。因此,n 名玩家的遊戲從

本質上來看是一種靜態非合作博弈,基於靜態非合作博弈的基本思想構建模型求

最優策略[3]。

第六關中資訊缺失較多,所以為不完全資訊靜態博弈[4]。將納什均衡[5]改進成貝葉斯均衡[6]

以求在資訊不完全的情況下仍可以快速準確找到最優路徑。

function [f,path,min1,path1]=floyd(a,start,last)%定義權矩陣f,比較矩陣path、

path1

f=a;n=size(f,1);path=zeros(n,n); %問題矩陣

a,定義起點 start 終點 last

for i=1:n

for j=1:n %遍歷問題矩陣

if f(i,j)~=inf %不可達 inf 表示

path(i,j)=j;

end,

end,

endfor k=1:n``

for i=1:n

for j=1:n

if f(i,k)+f(k,j)第一次寫部落格,這次數學建模是和我們隊友一起完成的,拿了個省一,雖然有點水,但對建模還是有了很大的理解。

思路就寫這麼多吧,大佬勿噴

基於Unity3D引擎的Android遊戲優化

最近專案進入收尾階段,之前對專案做了很多優化,mesh合併 減少drawcall和模型骨骼以及物理計算,合併材質球,優化 等等,在ios上還好,但是android上,試過幾款手機,從低端到高階,發現效能還是很差,所以又花了幾天來研究摸索,終於把遊戲效能搞定。記錄下來,留作以後參考。1.更 新不透明貼...

基於C 用WinForm實現的2048小遊戲

2048遊戲規則比較簡單,玩家通過上 下 左 右四個方向來控制方塊的移動,每一次移動,所有的方塊都會朝這個方向進行移動,而此時則會在某個隨機空的地區產生乙個新的數字方塊,在移動過程中,若方塊上的數字與移動方向後乙個的方塊上的數字相同,則會碰撞成乙個新的方塊,數字為兩個方塊數字之和。若所有地方都被填滿...

基於靜態變數的快取鎖

linestationprocessor類 靜態資源 想保證集合類的執行緒安全可以使用 concurrenthashmap 基於分段鎖,效率要高於hashtable public static mapdispatchtype new hashmap business request code 和 l...