游戏开发论坛

 找回密码
 立即注册
搜索
查看: 8766|回复: 5

[讨论] 装备升级问题的Markov解法

[复制链接]

5

主题

101

帖子

1723

积分

金牌会员

Rank: 6Rank: 6

积分
1723
发表于 2011-10-24 21:41:00 | 显示全部楼层 |阅读模式
下载原文PDF

附件中是该问题的系统分析整理。除了PDF中自带的例子,另外有以下具体实例:
%问题如下:
% 装备升级      升级成功概率    失败不变概率    失败降级概率   失败爆掉概率     总概率
% 1级升2级           1               0               0               0             1
% 2级升3级          0.92            0.08             0               0             1
% 3级升4级          0.84            0.16             0               0             1
% 4级升5级          0.76            0.22            0.02             0             1
% 5级升6级          0.68            0.27            0.05             0             1
% 6级升7级          0.6             0.32            0.08             0             1
% 7级升8级          0.52            0.37            0.11             0             1
% 8级升9级          0.44            0.39            0.14            0.03           1
% 9级升10级         0.36            0.41            0.17            0.06           1
% 10级升11级        0.28            0.43            0.2             0.09           1
% 11级升12级        0.2             0.44            0.23            0.13           1
% 每次升级需要消耗2个钻石,请问装备升级到12级平均需要消耗多少钻石?       

matlab代码:
为了解决此问题,特编写一个函数markov.m:


function [time,pay]=markov(P,x,y,c)
%一、求P矩阵的大小:
a=size(P)_size=a(1);
%二、两个工具矩阵:
Ix=zeros(1,P_size);Ix(x)=1;
Ey=eye(P_size,P_size);Ey(y,y)=0;
%三、结果矩阵:
r=zeros(1,P_size);
R1=zeros(P_size);
R2=zeros(P_size);
%四、计算平均升级次数,结果传递给time:
for n=1:1000
    R1=R1+n*(P*Ey)^(n-1)*P;
end
time=R1(x,y);
%五、计算升级消耗,结果传递给pay:
for n=1:1000
    R2=R2+(P*Ey)^(n-1)*P;
end
r=Ix*(R2+eye(P_size))*Ey;
pay=r*c';

【需要说明的是,函数中的1000是可调参数,次数越大,精确度越高。如果调用其得出的两个结果相符,可以尝试增大此参数,比如500000】


下面的主程序调用上面的函数进行计算:


clc;clear all;
%一、升级概率矩阵:
P=[0.00  1.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00 0.00 0.00 0.00
   0.00  0.08  0.92  0.00  0.00  0.00  0.00  0.00  0.00 0.00 0.00 0.00
   0.00  0.00  0.16  0.84  0.00  0.00  0.00  0.00  0.00 0.00 0.00 0.00
   0.00  0.00  0.02  0.22  0.76  0.00  0.00  0.00  0.00 0.00 0.00 0.00
   0.00  0.00  0.00  0.05  0.27  0.68  0.00  0.00  0.00 0.00 0.00 0.00
   0.00  0.00  0.00  0.00  0.08  0.32  0.60  0.00  0.00 0.00 0.00 0.00
   0.00  0.00  0.00  0.00  0.00  0.11  0.37  0.52  0.00 0.00 0.00 0.00
   0.03  0.00  0.00  0.00  0.00  0.00  0.14  0.39  0.44 0.00 0.00 0.00
   0.06  0.00  0.00  0.00  0.00  0.00  0.00  0.17  0.41 0.36 0.00 0.00
   0.09  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.20 0.43 0.28 0.00
   0.13  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00 0.23 0.44 0.20
   0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00 0.00 0.00 1.00];
%二、各等级升级消耗向量:
c=[2 2 2 2 2 2 2 2 2 2 2 2];
%三、输入基础等级和目标等级:
x=input('输入基础等级: ');
y=input('输入目标等级: ');
%四、调用函数markov计算:
[time,pay]=markov(P,x,y,c);
%五、输出结果:
fprintf('从等级%g升级到等级%g,平均需要进行升级%g次。\n',x,y,time);
fprintf('从等级%g升级到等级%g,一共需要消耗%g个宝石。\n',x,y,pay);




结果:
输入基础等级: 1
输入目标等级: 12
从等级1升级到等级12,平均需要进行升级82.3078次。
从等级1升级到等级12,一共需要消耗164.617个宝石。

11

主题

162

帖子

164

积分

注册会员

Rank: 2

积分
164
发表于 2011-10-27 18:12:00 | 显示全部楼层

Re:装备升级问题的Markov解法

mark,晚上好好看看

0

主题

13

帖子

53

积分

注册会员

Rank: 2

积分
53
发表于 2011-11-14 12:01:00 | 显示全部楼层

Re:装备升级问题的Markov解法

概率转移矩阵  好像没有markov同学什么事
不过谢谢提供代码  收下了

13

主题

832

帖子

1875

积分

金牌会员

空想家

Rank: 6Rank: 6

积分
1875
发表于 2011-11-29 17:12:00 | 显示全部楼层

Re:装备升级问题的Markov解法

记得以前这个问题我是直接用EXCEL下拉的。
回退次数、各种几率都可以做参数直接填。

0

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2011-12-14 16:26:00 | 显示全部楼层

Re: 装备升级问题的Markov解法

在excel里用公式可以算出数据。用matlab太麻烦啦。

13

主题

832

帖子

1875

积分

金牌会员

空想家

Rank: 6Rank: 6

积分
1875
发表于 2011-12-27 16:25:00 | 显示全部楼层

Re:装备升级问题的Markov解法

楼上用程序模拟过没?这个表的公式结果根本不对啊。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-30 13:54

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表