游戏开发论坛

 找回密码
 立即注册
搜索
查看: 34484|回复: 0

[原创] 基于转移矩阵屠龙刀洗炼的MATLAB实现(小白装逼,大神远离)

[复制链接]

8

主题

48

帖子

233

积分

中级会员

Rank: 3Rank: 3

积分
233
发表于 2016-9-15 01:20:39 | 显示全部楼层 |阅读模式
一、适用范围:
  • 洗练成功升级,失败掉1级,最低为1级;
  • 洗练满级继续洗练不掉级不升级。


二、特点:
  • 只需要按提示输入各级洗练成功概率,自动构建转移矩阵;
  • 目前有两种测试方式,洗练次数测试和洗练目标测试,洗练次数测试时自动生成各级概率分布
  • 输入错误处理。

三、过程图:
捕获.PNG

四、MATLAB代码:
  1. clc
  2. clear
  3. Lv=input('输入屠龙刀的最高等级');
  4. p=zeros(Lv);
  5. p(1,2)=input('请输入屠龙刀由1级升到2级的概率');
  6. while p(1,2)>1||p(1,2)<0
  7.       p(1,2)=input('请输入屠龙刀由1级升到2级的概率');
  8. end
  9. p(1,1)=1-p(1,2);
  10. for i=2:Lv-1
  11.       inputname=['请输入屠龙刀由' num2str(i) '级升到' num2str(i+1) '级的概率'];
  12.       p(i,i+1)=input(inputname);
  13.       while p(i,i+1)>1||p(i,i+1)<0
  14.             p(i,i+1)=input(inputname);
  15.       end
  16.       p(i,i-1)=1-p(i,i+1);
  17. end
  18. p(Lv,Lv)=1;
  19. lv0=input('输入屠龙刀初始等级');
  20. while lv0>Lv||lv0<1
  21.       lv0=input('输入屠龙刀初始等级');
  22. end
  23. lv=zeros(1,Lv);
  24. lv(lv0)=1;
  25. X=1;
  26. while X>0
  27.       X=input('选择进行的测试: 1 N次洗练测试;2 达到目标测试;0 结束测试');
  28.       switch X
  29.           case 1
  30.              N=input('输入洗练次数');
  31.              pN=lv*p^N;
  32.              fprintf('%s\n','屠龙刀洗练N次后的各等级概率分布');
  33.              fprintf('%f\r',pN);
  34.              plot(pN);
  35.           case 2
  36.              lvN=input('输入目标等级');
  37.              while lvN>Lv||lvN<1
  38.                    lvN=input('输入目标等级');
  39.              end
  40.              pn=input('输入达到目标的最少概率值');
  41.              while pn>1
  42.                    pn=input('输入达到目标的最少概率值');
  43.              end
  44.              lv_n=lv;
  45.              n=0;
  46.              while sum(lv_n(lvN:Lv))<pn
  47.                    lv_n=lv_n*p;
  48.                    n=n+1;
  49.              end
  50.              fprintf('%s','达到洗练目标需要的次数为');
  51.              fprintf('%d\r',n);
  52.           case 0
  53.      end
  54. end
复制代码


  1. clc
  2. clear
  3. Lv=input('输入屠龙刀的最高等级');
  4. p=zeros(Lv);
  5. p(1,2)=input('请输入屠龙刀由1级升到2级的概率');
  6. while p(1,2)>1||p(1,2)<0
  7.     p(1,2)=input('请输入屠龙刀由1级升到2级的概率');
  8. end
  9. p(1,1)=1-p(1,2);
  10. for i=2:Lv-1
  11.     inputname=['请输入屠龙刀由' num2str(i) '级升到' num2str(i+1) '级的概率'];
  12.     p(i,i+1)=input(inputname);
  13.     while p(i,i+1)>1||p(i,i+1)<0
  14.        p(i,i+1)=input(inputname);
  15.     end
  16.     p(i,i-1)=1-p(i,i+1);
  17. end
  18. p(Lv,Lv)=1;
  19. lv0=input('输入屠龙刀初始等级');
  20. while lv0>Lv||lv0<1
  21.     lv0=input('输入屠龙刀初始等级');
  22. end
  23. lv=zeros(1,Lv);
  24. lv(lv0)=1;
  25. X=1;
  26. while X>0
  27.     X=input('选择进行的测试: 1 N次洗练测试;2 达到目标测试;3 生成达到目标的概率曲线;0 结束测试');
  28.     switch X
  29.         case 1
  30.             N=input('输入洗练次数');
  31.             while N<0
  32.                  N=input('输入洗练次数');
  33.             end
  34.             pN=lv*p^N;
  35.             fprintf('%s\n','屠龙刀洗练N次后的各等级概率分布');
  36.             fprintf('%f\r',pN);
  37.             plot(pN);
  38.         case 2
  39.             lvN=input('输入目标等级');
  40.             while lvN>Lv||lvN<1
  41.                 lvN=input('输入目标等级');
  42.             end
  43.             pn=input('输入达到目标的最少概率值');
  44.             while pn>1
  45.                 pn=input('输入达到目标的最少概率值');
  46.             end
  47.             lv_n=lv;
  48.             n=0;
  49.             while sum(lv_n(lvN:Lv))<pn
  50.                 lv_n=lv_n*p;
  51.                 n=n+1;
  52.             end
  53.             fprintf('%s','达到洗练目标需要的次数为');
  54.             fprintf('%d\r',n);
  55.         case 3
  56.             lvN=input('输入目标等级');
  57.             while lvN>Lv||lvN<1
  58.                 lvN=input('输入目标等级');
  59.             end
  60.             N=input('输入洗练次数');
  61.             while N<1
  62.                  N=input('输入洗练次数');
  63.             end
  64.             p_n=lv;
  65.             pn=zeros(1,N);
  66.             for i=1:N
  67.                 p_n=p_n*p;
  68.                 pn(i)=sum(p_n(lvN:Lv));
  69.             end
  70.             plot(pn)
  71.         case 0
  72.     end
  73. end
复制代码
补充case3




您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-20 04:26

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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