找回密码
 立即注册
搜索
楼主: md2

[怀旧] 游戏中的概率不能设计得太科学,因为玩家的感受是很主观

[复制链接]
     
发表于 2011-9-15 18:29 | 显示全部楼层
引用第110楼samaleg于2011-09-11 16:35发表的  :
90楼哪里优越感了

你能确保rand()的数值靠谱么
我觉得除非特殊应用要求。rand算法应该比大多数程序员自己捣鼓的算法更靠谱把。
回复

使用道具 举报

     
发表于 2011-9-15 18:36 | 显示全部楼层
我只记得打F完结篇座间翔的翼霸被DC杂兵以1%命中率秒了
回复

使用道具 举报

发表于 2011-9-15 19:31 | 显示全部楼层
看了半天,那些说WOW的的暴击算法的人,你们是怎么知道它是这么算的?有做测试还是在哪里看到过测试,或者是官方曾经披露过么?

还有不信任库自带rand()的人,要怎么包装你才能信任你使用的随机算法呢?
回复

使用道具 举报

发表于 2011-9-15 19:34 | 显示全部楼层
想到DNF~~~~~~~~~~~~~
回复

使用道具 举报

头像被屏蔽
     
发表于 2011-9-15 19:36 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

     
发表于 2011-9-15 23:29 | 显示全部楼层

Re:回 90楼(fcmorrowind) 的帖子

引用第101楼jinghaoyi于2011-09-10 11:37发表的 回 90楼(fcmorrowind) 的帖子 :
乱数算法在投入使用之前都要在数学上证明其正确性,合理性。这些证明肯定不是由程序员完成的,那证明是谁做的呢?数学家和计算机科学家。
至于在已有算法的基础上略加改进,而不触及原理或思路的改变,那是不能叫算法设计的。

另外,高德纳只能算是个程序员吗?起码大众认识不是这样,自称程序员也可以理解为自谦。

rand(1,100)没有什么错,但是放在游戏这个具体应用环境,确实就是大错。因为游戏不是数学题,游戏是要讲体验的,只能在统计学上保证3%的概率数往往体验很差,因为单一玩家未必能达到足够大的样本实现3%的效果。就我了解,无论是单机还是网游,对概率的最好处理方法就是作假,3%并不是直接扔一个3%的随机数,而是保证玩家100次就能遇到3次,甚至拆的更散,33,33,34这样分布。你要严格说,这其实不是一个合格的概率函数,因为并不收敛于3%,而是在3%处震荡。

甚至有更直接的,不是1%被躲开恶心么,不是90%还打不中讨厌么,那这样如何:我给你看70%,其实就是100%;给你看30%,其实就是0%。更细致一点,还可以区分敌我。游戏不就是玩个体验,既然玩家喜欢自己70%屡屡得手,而敌人80%也难以命中,那我就这么做。

回帖的初衷只是想说,000000111这样的概率输出,肯定是写程序的人自己乱写算法,就算你用rand()也不会大概率出这种结果,更不是什么“只要用计算机处理,就必然有这个问题”。

以下是废话,可以理解为装逼,也可以理解为手痒,不喜欢的朋友可直接跳过:

一:形式化的说,算法就是能被图灵机识别的一串递归可枚举语言,考虑到可操作性,还需要加一个条件:能让机器停机。因此,“若A >B,则交换A,B”这也是一个算法,而所有基于比较的排序都调用了这个子算法,不过其发明者们并不觉得这是什么丢脸的事。

二:“是否触及原理或思路的改变”,这是一个没有可操作性的评判体系。就我所知,学术界对算法创新性的评价主要是两条:是否能处理已有算法不能处理的问题;是否降低了已有算法时间、空间复杂度(可以狭义也可广义,狭义指上界的降低,广义指平均性能)。我曾经改良过一个随机漫步算法,使其能处理非对称概率图,个人认为基本思路和原理和以前并无什么区别,但确实是作为一个新算法而发表的。

三:数学证明本身并不高深,除了纯数学很前沿的研究,大量新算法都没用到高深的数学理论,尤其是和应用领域相关的算法,就我接触而言大部分有扎实的本科数学水平就能证明。

四:应用领域对创新的要求更低,老版三国杀对bang!换个人物名字就能算创新。

五:程序员是写程序的人,好的程序员必定要有基本的数学功底。在具体的工作领域由于涉及到业务逻辑,往往要自己写或者改良已有的算法以适应具体工作,一般来说这些算法都比较简单,也没有什么理论价值,但并不能因为这样就抹杀他们的工作,他们确实是设计了新的算法。高爷爷再牛,我们再崇拜他,他也首先是个程序员,其次才是数学家,只不过他是层次很高的程序员。
回复

使用道具 举报

     
发表于 2011-9-16 02:51 | 显示全部楼层

回 126楼(fcmorrowind) 的帖子

网游不知道,美式游戏也不太清楚,起码我是没听过哪个日式游戏会采用这样的“作假”方式。硬要说的话,踩地雷遇敌倒是这个类似,走N步保证你遇敌。
那个1110000000的例子举得有些离谱,怎么会有这种一般状况,举例子也该考虑到普遍性吧。批评这个大概是对空开炮。
回复

使用道具 举报

     
发表于 2011-9-16 02:56 | 显示全部楼层
某些早期RPG的遇敌原理:乱数表中取个数K,作为初始“安全”度,在有可能遇敌的地带每走一步“安全度”减n,n可能和地形相关,K头一次减到小于0的时候遇敌,遇敌后取下一个乱数作为新的“安全”度。
回复

使用道具 举报

     
发表于 2011-9-16 03:09 | 显示全部楼层
某些游戏的概率偏差还真赖不到算法上,因为可能采用的是长度较短的乱数表,这就相当于在反复使用乱数序列(算法产生的)某一小段。再考虑上游戏reset后乱数表指针重置/乱数不随时间消耗的可能性,一小段乱数反复使用的情况会更加严重。虽然在宏观上可以保证算法产生乱数分布的合理性,但具体到长度较短的某一段就不行了。如果反复使用的那段乱数序列正好分布严重偏离正常,确实会给人很不好的游戏体验。
回复

使用道具 举报

发表于 2011-9-16 04:56 | 显示全部楼层

Re:Re:回 90楼(fcmorrowind) 的帖子

引用第126楼fcmorrowind于2011-09-15 23:29发表的 Re:回 90楼(fcmorrowind) 的帖子 :


rand(1,100)没有什么错,但是放在游戏这个具体应用环境,确实就是大错。因为游戏不是数学题,游戏是要讲体验的,只能在统计学上保证3%的概率数往往体验很差,因为单一玩家未必能达到足够大的样本实现3%的效果。就我了解,无论是单机还是网游,对概率的最好处理方法就是作假,3%并不是直接扔一个3%的随机数,而是保证玩家100次就能遇到3次,甚至拆的更散,33,33,34这样分布。你要严格说,这其实不是一个合格的概率函数,因为并不收敛于3%,而是在3%处震荡。

甚至有更直接的,不是1%被躲开恶心么,不是90%还打不中讨厌么,那这样如何:我给你看70%,其实就是100%;给你看30%,其实就是0%。更细致一点,还可以区分敌我。游戏不就是玩个体验,既然玩家喜欢自己70%屡屡得手,而敌人80%也难以命中,那我就这么做。
.......
我觉得你的观点很对,但是针锋相对错人了

人家只提放着rand()不用自己去开发不靠谱的0000000111的随机算法这种事儿没人干 但没说游戏里是直接用随机算法的啊。而且就拿你举例的3%概率,保证100次遇敌3次,其中每次计算还不是一个有条件的随机数罢了,依然要牵扯到对rand的使用,我们只是表示如果需要用到rand不会人手设计rand算法而会调用现成的罢了……
回复

使用道具 举报

     
发表于 2011-9-16 08:11 | 显示全部楼层

Re:Re:回 90楼(fcmorrowind) 的帖子

引用第126楼fcmorrowind于2011-09-15 23:29发表的 Re:回 90楼(fcmorrowind) 的帖子 :


rand(1,100)没有什么错,但是放在游戏这个具体应用环境,确实就是大错。因为游戏不是数学题,游戏是要讲体验的,只能在统计学上保证3%的概率数往往体验很差,因为单一玩家未必能达到足够大的样本实现3%的效果。就我了解,无论是单机还是网游,对概率的最好处理方法就是作假,3%并不是直接扔一个3%的随机数,而是保证玩家100次就能遇到3次,甚至拆的更散,33,33,34这样分布。你要严格说,这其实不是一个合格的概率函数,因为并不收敛于3%,而是在3%处震荡。

甚至有更直接的,不是1%被躲开恶心么,不是90%还打不中讨厌么,那这样如何:我给你看70%,其实就是100%;给你看30%,其实就是0%。更细致一点,还可以区分敌我。游戏不就是玩个体验,既然玩家喜欢自己70%屡屡得手,而敌人80%也难以命中,那我就这么做。
.......


我对你发的两个帖子的观点都不太赞同。

你举的例子说的是一个频率问题,以此来质疑rand()这样一个模拟概率函数的有效性没有什么意义。更和实现一个乱数算法需不需要高深理论或者科学家没有关系。

计算机可以称得上科学的部分不是数学的一个分支。计算机在几乎所有的高校,研究机构,学术场合和工业界中都是和数学分开的。计算机专业覆盖的话题和数学有交集,也不妨碍数学家进行研究,但仍有不同之处。比如人工神经网络,数据挖掘,认知科学等等不基于离散数学的计算机科学分支,就和数学的关系不大。更不用说网络,体系结构,软件工程等等了。计算机科学作为一门独立而覆盖广泛的学科是毫无疑义的。

计算机和数学有交集的地方,也就是你说的计算理论,属于计算机科学的核心内容,跟传统的数学研究有很密切的关系。但这门学科的研究方式是有计算机特色的,图灵机作为计算理论的经典工具,就是一个计算机的模型。复杂度,完备性,正确性,停机条件等等这些概念的重要意义,也正是在“用计算机进行自动处理”这一前提下才彰显出来的。总而言之,当代计算理论的出发点和落脚点就是计算机的自动化,这个跟数学研究是截然不同的。

我从来没有听说过高德纳自称“不是计算机科学家”。在几乎所有的媒体上,他的头衔都是计算机科学家。事实上在他自己的主页上,就有一篇以计算机科学家为题的访谈(http://www-cs-faculty.stanford.edu/~uno/things.html)。他当然是个很优秀的程序员,但他的博士学位是数学专业。而且他得了图灵奖而非菲尔茨奖。所以我很不理解你为什么一方面宣称计算机科学的成果都来自数学家,另一方面又否认一个数学背景的杰出的图灵奖得主是“计算机科学家”。

算法不一定要递归,你举的排序算法的例子就没有递归。另外我不明白你说的“都调用了这个子算法”是什么意思,也不明白有哪里值得丢脸的。
你对算法的其他表述也很不严谨,算法是和问题相关的,对输入和输出的相关性有很严格的要求。算法也不是一组语言,算法是运算。显然一串字符也能被图灵机模拟,但那不是算法。

学术界对创新的要求其实只有一条:有没有发表过。只要前人没有发表过,都是创新。把现有的技术应用到不同的问题上一样也是创新,因为上面说了,解决方案是和问题相关的。现有方法的新应用,不但扩展了方法的适用范围,还揭示了新问题和老问题之间的一致性,大大的创新。

数学证明不难?我就想问一下,你说的“纯数学很前沿的研究”,指的是问题的表述还是证明的表述?如果指的是问题的表述,那么哥德巴赫猜想很前沿么?难不难?如果指的是证明的表述,那你这跟说“除了需要本科以外数学知识的证明都可以用本科以内的数学知识证出来”有什么不一样?另外,很多数学的前沿就是为了证明或者解答问题才不断推进的。

三国杀不是应用领域,那是娱乐领域。应用领域,你把windows换一个主题也叫创新?

算法改良有没有理论价值看上面说的。不是算法简单就没有理论价值。既然你需要改良算法才能适应工作,而且改良后的算法还更简单,说明针对的问题中一些关键的特性使得原有的算法浪费了效率,可以大幅优化。能够敏锐发现并定性定量的表述这个关键特性和算法优化之间的逻辑关系,就是理论贡献。能够进一步界定这个逻辑关系的适用范围,并推广到其他具有相类似特性的问题上去,就是很重要的贡献。而很多程序员只是满足并停步于性能的提升没有深入研究,当然就没有贡献。而高德纳就是做了这样细致的研究,才成为一个很好的程序员和图灵奖得主。
我不明白你说他先是程序员再是数学家是什么意思,是指他因为程序写得好所以数学研究得好?我个人感觉是反过来的,毕竟高德纳本科硕士博士都是数学专业一路训练上去的。
回复

使用道具 举报

     
发表于 2011-9-16 14:14 | 显示全部楼层

Re:Re:Re:回 90楼(fcmorrowind) 的帖子

引用第131楼zouyuanrenren于2011-09-16 08:11发表的 Re:Re:回 90楼(fcmorrowind) 的帖子 :



我对你发的两个帖子的观点都不太赞同。

.......
0,我没质疑rand()的有效性,我只是说,在游戏这个应用环境里,rand()不可靠,不好用,相信不用过多解释,已经说了。在特定领域,实现特定需求,确实未必需要什么高深的数学论证,比如上面那个50%的乱数算法,也说得很清楚了。

1,递归和调用是不同的,自己调自己才叫递归,这是基本常识吧……排序算法调用了比较算法这不显然么,怎么莫名其妙就成我说它是递归?我通篇没说递归的问题吧?我说这个的意思是,即使设计的随机算法使用了rand(),也并不妨碍他成为一个新算法。

2,你列举的神经网格,软件工程等等,要么是已有理论找到了新的应用领域焕发青春(典型如数论),从而开展新的理论研究,要么就是纯工程性的东西。计算机是一门年轻而独立的学科显然没错,但问题是,这门学科的名字一般叫做“计算机科学与技术”,或者“计算机科学与工程”,学科内部所有属于“科学”的东西,或者更精确一点,可以形式化表述的部分,百分之百就是数学的分支:计算科学。和计算机相关的科学又不只有离散数学,离散数学也不等同于计算机学科中的科学部分。软件工程你能说他叫科学么?软件工程如果叫科学,那项目管理也是科学了,人事管理也是科学了……(这个语境下科学==自然科学,什么人文社科不在讨论范围之类)。

3,举个具体点的例子:机器学习。这个领域最近几年很热,各种研究工作也很多,但是你翻看这些文献,能明显感觉到存在两种气质的论文。一种偏理论,使用各种数学工具,证明各种学习函数的各种性质,基本上把写法换一换完全可以当做数学论文发表(看理论深度而定);另一种带有浓厚的工科气息,使用其他领域成熟的工具,甚至一些经验公式,或者近似方法解决问题。充分说明计算机学科的科学和工程双重性质。

4,学术界发表结果肯定要求创新……但不是说我随口编造一个新东西就算创新了。工科、理科和文科的定义差别就很大,文科我不清楚,工科的特点是第一看研究问题,研究问题重要才有“创新”的基本资格。理科我没写过,只能说感觉上更重视发现一些新的性质,得出新结论等等。算法理论属于理科,但是大量应用于工科,就我所知大部分算法文献都是在工科类杂志发表的。一方面是应用需求,另一方面是算法作为纯理论课题,想要取得突破确实非常难。所以我说实际上判定算法的创新性,主要还是两条:是否能处理新问题。是否能提高已有算法性能。

5,什么是前沿研究呢?这个我学术水平不够,无法准确描述,不过我可以举一个例子:排序,这个简单而实用的算法,有快排,或者基数排序,或者堆排等已有算法,我写一篇文章,提出一种新的算法,叫什么快速基数堆排序吧,这不算是前沿研究,可以说还没有触及内涵吧。但是有些人研究的是排序这个行为本身的特征,然后得出一些结论,比如各种限制条件对排序算法的影响关系(典型如计数排序),基于比较的排序最快只能到NlogN等等,关注的不是某一特定应用,特定算法,而是更抽象更形式化的一些问题,具有典型的数学特征。这种文献,特征很明显,公式推公式推公式,各种形式化,看的头大。一般也会提出一两个新算法作为实例,但是其研究的核心问题并不是提出一种新算法,文章名字一般也不叫“一种XXXX的XXX算法”。

6,高爷爷的问题,我是在他的一篇访谈里看到的,也或者是编程艺术的前言里,你要我去翻出来确实没那个能力了。大致是他境界太高,在参加某次会议时有记者就问他,你理论这么牛逼了,该是个科学家了吧?高爷爷回答:我是个程序员,和科学家最大的区别是,科学家提出问题,而我不但提出问题,我还解决问题。这句话不同人可以有不同解读,我没否认他是科学家,我只是说他不是“计算机科学家”,如果是科学家,他应该是一名“计算科学家”,计算机科学家是非常不专业的称呼,就像叫一个人“管理科学家”。

7,算法的表述确实我说错了,算法不是一串递归可枚举语言,算法是一台给定规则表的图灵机,当时想差了,犯了常识性错误。我们的机器能实现那么多算法,归根到底是因为存在能模拟其他图灵机的图灵机,也就是通用图灵机。计算机的工科和理科部分在算法上也体现的很明显,作为工科,并不很在乎你这个东西到底抽象出来是啥东西,我用什么形式化方法能描述你,工科关心的是你性能如何,吃不吃内存,速度快不快,我的机器能不能跑起来,什么事能做什么事不能做。算法常见的另一个描述:“解决问题的清晰步骤”,或者如你所说的要有输入输出等,都是典型的工科化描述。

8,我说的应用是和理论相对的,娱乐也是一种应用,吃饭走路都是应用。如果有个图片,从来没有人当做windows的桌面,你把它当做桌面了,确实就是创新,只不过创新价值的大小问题罢了。
回复

使用道具 举报

     
发表于 2011-9-16 17:26 | 显示全部楼层

Re:Re:Re:Re:回 90楼(fcmorrowind) 的帖子

引用第132楼fcmorrowind于2011-09-16 14:14发表的 Re:Re:Re:回 90楼(fcmorrowind) 的帖子 :

0,我没质疑rand()的有效性,我只是说,在游戏这个应用环境里,rand()不可靠,不好用,相信不用过多解释,已经说了。在特定领域,实现特定需求,确实未必需要什么高深的数学论证,比如上面那个50%的乱数算法,也说得很清楚了。

1,递归和调用是不同的,自己调自己才叫递归,这是基本常识吧……排序算法调用了比较算法这不显然么,怎么莫名其妙就成我说它是递归?我通篇没说递归的问题吧?我说这个的意思是,即使设计的随机算法使用了rand(),也并不妨碍他成为一个新算法。

.......

递归的问题你自己看你算法的定义。

我觉得有很多东西如果是你自己的观点没问题,但不要表述的像是事实一样。

计算机科学就是计算机科学,你去百度百科也好,去wiki也好,只会找到 计算机科学 (computer science)的词条,而没有 计算机科学与技术 (computer science and technology)的词条。后者之所以给你这么深刻的印象,是因为它是国家教育部规定的中国高校开设专业的名称,但不是严谨的学科的名称。
计算机科学家就是一个专业的名称,起码在英语世界,computer scientist和computing scientist是同一个意思,而computer scientist更常用。

计算机科学不是自然科学,它是基于形式化模型和方法的,并不是研究自然现象的规律。当然," Though mathematics, statistics, and computer science are not considered natural sciences, for instance), they provide many tools and frameworks used within the natural sciences."

计算理论是计算机科学的核心内容,但不是所有计算机科学的理论性部分,可形式化的部分都是计算理论。形式化只是一个数学建模的过程,把问题用数学语言来描述,这样可以用数学工具来解决。你说的机器学习里面,有很多形式化之后用统计学解决的问题,跟计算理论关系不大。用数学工具解决也不代表问题就是数学问题。建不同的模型可以用不同的数学工具,这本身就是研究的一部分。

计算理论(Theory of computation)不是数学的分支。数学是基础学科和工具学科,但不是所有使用了数学工具的都是数学分支。这种常识性的东西,还是拿wiki来看吧:
In theoretical computer science, the theory of computation is the branch that deals with whether and how efficiently problems can be solved on a model of computation, using an algorithm. The field is divided into three major branches: automata theory, computability theory and computational complexity theory.
The theory of computation can be considered the creation of models of all kinds in the field of computer science. Therefore mathematics and logic are used. In the last century it became an independent academic discipline and was separated from mathematics.
已经明确的说了从数学中独立出来了。

你对理科和工科的区分也不正确。性能如何,吃不吃内存,速度快不快,我的机器能不能跑起来,什么事能做什么事不能做,指的就是时间复杂度如何,空间复杂度如何,问题的定义如何,这个是典型的理论问题。算法所说的“清晰步骤”,恰好说明它要求一个无歧义的形式语言的描述,这是典型的理论研究的特征。事实上在实际的研究中很多时候是不分那么清楚的,因为没有意义。说你的成果是一个理科成果还是工科成果,对于成果本身的价值来说没有意义。

创新性和重要性不是一回事。如果你review过一些paper的话,你会知道一般originality和significance/impact是分开打分的。在不同的领域,这两者的权重会有所不同,但是不应该混淆。

我想你可能是对计算机科学这个名称不满意,觉得不够“科学”。但这个仅仅是名词之争,属于历史遗留问题。迪杰斯特拉就曾经吐槽过,计算机科学就好象把天文学叫做望远镜科学,把外科叫做手术刀科学一样。但是,即便你从计算机科学改成计算科学,也只不过是把Science of Knife改成Science of Cutting,没有什么实质性的进展。学科覆盖的内容不是由它的名字决定的,不必望文生义。
你可能也急于要给计算机科学找个牛逼的老爹,比如数学。但数学的子子孙孙太多了,也大都独立了。独立了就有自己的学术方向,没必要再归到一类里面去。
回复

使用道具 举报

发表于 2011-9-16 23:42 | 显示全部楼层
引用第48楼ulir于2011-05-28 10:33发表的  :

DND都不信概率的,信的是DICE大神吖
一个蛮子能躲过专精法师闪光尘5连发,倒地状态起身被3个人同时AO全部回避
还目睹过一群人已经逃到出口,结果敌人持弓在有效射程外连掷两个20秒杀法师的
呐,DND的好处是在于,跑团的时候确实是有骰子这样一个大家都能看到、而且也明白其机理的随机数发生器在这,而大多数电子游戏里,游戏产生数值的极值对玩家来说是难以知道的,所以玩家自然容易对他们看不见摸不着的问题产生怀疑……
回复

使用道具 举报

     
发表于 2011-9-17 11:22 | 显示全部楼层
宏观世界的概率从来都不是随机
只是人们对信息的掌握不足以推测结果的一种自我安慰
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|上海互联网违法和不良信息举报中心|网上有害信息举报专区|962110 反电信诈骗|举报电话 021-62035905|Stage1st ( 沪ICP备13020230号-1|沪公网安备 31010702007642号 )

GMT+8, 2025-9-14 04:50 , Processed in 0.126545 second(s), 6 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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