选题前言:(现在有人换题吗?/滑稽脸)比如这样:
哈哈哈不皮了,祝奋斗在建模赛场上的各位能抱奖而归!!
考虑如下的小游戏:玩家凭借一张地图,利用初始资金购买一定数量的水和食物(包括食品和其他日常用品),从起点出发,在沙漠中行走。途中会遇到不同的天气,也可在矿山、村庄补充资金或资源,目标是在规定时间内到达终点,并保留尽可能多的资金。
题目背景分析:首先每个人的初始资金是一定的,那么如何去分配购买水和食物,如何去进行分配可能是后续需要解决的一项问题。目标有两个,可以说算是多目标决策,为在规定时间内到达终点,并保留尽可能多的资金。
游戏的基本规则如下:
(1)以天为基本时间单位,游戏的开始时间为第0天,玩家位于起点。玩家必须在截止日期或之前到达终点,到达终点后该玩家的游戏结束。
(2)穿越沙漠需水和食物两种资源,它们的最小计量单位均为箱。每天玩家拥有的水和食物质量之和不能超过负重上限。若未到达终点而水或食物已耗尽,视为游戏失败。
(3)每天的天气为“晴朗”、“高温”、“沙暴”三种状况之一,沙漠中所有区域的天气相同。
(4)每天玩家可从地图中的某个区域到达与之相邻的另一个区域,也可在原地停留。沙暴日必须在原地停留。
(5)玩家在原地停留一天消耗的资源数量称为基础消耗量,行走一天消耗的资源数量为基础消耗量的2倍。
(6)玩家第0天可在起点处用初始资金以基准价格购买水和食物。玩家可在起点停留或回到起点,但不能多次在起点购买资源。玩家到达终点后可退回剩余的水和食物,每箱退回价格为基准价格的一半。
(7)玩家在矿山停留时,可通过挖矿获得资金,挖矿一天获得的资金量称为基础收益。如果挖矿,消耗的资源数量为基础消耗量的3倍;如果不挖矿,消耗的资源数量为基础消耗量。到达矿山当天不能挖矿。沙暴日也可挖矿。
(8)玩家经过或在村庄停留时可用剩余的初始资金或挖矿获得的资金随时购买水和食物,每箱价格为基准价格的2倍。
**分析:**这部分是清晰明了的规则,没什么可以剖析的,提醒一点,解决这道题编程能力要足。最好是用java或者python,面向对象必不可少。
请根据游戏的不同设定,建立数学模型,解决以下问题。
由于细节太多太乱太杂,这次的思路将以提示的方式去说明:
1 题目需要利用仿真,首先就需要将题目给出的图用数据结构中的【邻接表或邻接矩阵】进行存储,以便后续求解最优解。
2 题目中说明了目标有两个,一是能走到终点,二是有更多的资金在终点。所以在你进行仿真时,目标就是最后留存更多的资金,提前多少天到达终点并不需要考虑。
3 玩家在选择时分不同的区域有不同的选择规则,但基础规则永远是走与留,在 留的基础上才会产生更多选择,所以编程需要把握这一前后关系。
4 由于数据并不多,我的建议是直接暴力将所有可能的结果都算一下,也就是穷举法(终止条件为规定的最后一天还未到终点)。最后得到的终点资金最多的即为最优解。
5 以我4中的方法,可能会对编程同学有一定难度,最后的论文效果也可能不是特别好看,论文的重心就在如何去构建仿真了,我觉得这种方法非常保险,但应该会有更好的建模方法。
6 如果不想用穷举法推荐利用动态规划去求解。
7 大家不要陷入误区,就是用最短路径,因为不能保证最短路径就是最优解。
8 感觉B题仿真代码十分重要,所以如果编程能力薄弱的队尽早换题还有机会。
9 题目中给出的地图是以矩阵形式存在的,要将其看成点(有人可能觉得是废话,F君就怕有人不知道哇)
10 在编程时注意终止条件为:时间不超过规定时间、负重是有上限的、携带的消耗物不能出现负数,如果出现立即终止这次仿真。
11 最后将最优方案画成一张图(题目给的),不要仅仅放一个表,放图会增色不少。画图用cad或者c++都可以,如果不会画,可以直接用ppt搞。
#本文有参考公众号大佬的思路#