设为首页收藏本站喵玉殿官方微博

 找回密码
 少女注册中
搜索
查看: 5475|回复: 3

[编程算法] 漸近增長分析和遊戲平衡性

[复制链接]
发表于 2015-6-18 12:40:23 | 显示全部楼层 |阅读模式
本帖最后由 tryourbreast 于 2015-6-18 12:55 编辑

前設:編程的和做遊戲的大多數學遊戲死得早。前設:分析漸近增長需要數學知識。
結論:上述人通常無法駕馭漸近增長和平衡性調整。


Everything is fast for small n.

數值增長速度的問題源遠流長,傳統RPG界就有個著名的說法:"Linear Warriors, Quadratic Wizards",就是說數學方法沒做好,會導致後期一邊有些職業秒天秒地秒一切,一邊有些職業就只能打打醬油,還會被小怪一擊秒。

這個問題現在並沒有消失;恰好相反,由於潮流變成了永無止境的掛機遊戲,大數遊戲和模擬建設遊戲,讓遠期遊戲平衡性這問題變得極其重要。
開發者一時興起,決定把某個數值由c*a^n改成了c*n^n(n是等級,a和c是常數),如此一念之間的改變,也能嚴重改變後期平衡性,繼而決定遊戲能不能玩。

算法也是一樣,誰用bubble sort而不是quick sort進行排序的,都可以綁起來燒了。



讀過CS的一定有學過,漸進分析使用的是大O表示法:
  1. 如果當x足夠大時,g(x) 至多等於 k * f(x)(k為常數),那麼g(x) = O(f(x))
复制代码
剛才說的RPG裡的Linear Warriors, Quadratic Wizards,就是因為近戰單位增長幅度是O(n),然而有些職業(主要是法爺)的增長幅度是O(n^2)甚至更高,後期近戰單位就不能玩了。

(試想一下,n每次翻倍,O(n)的函數會變成原來的兩倍,而O(n^2)會變成4倍。只要持續幾次…)

他們的解決方法是,在經驗值需求上也給予相應的增長曲線:能力呈O(n^2)增長的,每級所需經驗值也是O(n^2),這樣相除下來就是O(n^2/n^2) = O(1),平均獲得的力量就跟O(n)能力和O(n)經驗值的差不多(也是O(1))。

然而這個世界上還有幾何函數(a^n),階乘函數(n!),甚至n^n的玩意,看似沒甚麼分別,但一個比一個長得更快。
n不需要超過100多少,這幾個函數就可以相差googol級的倍數。
對於算法或遊戲平衡性來說,都是個大災難。

(更具體一點:
多項式n每次乘2,都會增多2的某次方,取決於其級數;
幾何級數n則是每次加上一個定值,函數都會乘以一個常數;
階乘是定值增長導致愈來愈大的倍數增長;
n^n的話連以前乘過的倍數都會變大了。





如果你回想一下,你玩的遊戲大多都是在重覆一件事情:
你是一個O(n)的函數,在企圖追逐一個O(n^a)甚至是O(a^n)的函數。

這當然是徒勞無功的,愈是追趕,愈是與你的目標相距更遠,每走一步都變得極其艱難。

世間最大之絕望感,無非於此。


以大數增長代替遊戲難度的做法,已經成為了這時代的潮流;上述的人生哲學不停在重覆。

嗯,所以我覺得,逆個位當自己是玩家去思考,去想想這種追逐是否值得,然後做出來的東西就會更合理了。


我相信還沒有人想用bogosort排序10個以上的元素。



p.s 常見的大O表達式的排列:(a > b > 1)
O(1) < O(log(n)) < O(log(n)^a) < O(n^(-a)) < O(n) (log可以是任何base)
O(n) < O(n*log(n)) < O(n^a) < O(n^b)
O(n^a) < O(b^n) (不論任何a和b均成立)
O(b^n) < O(a^n)
O(b^n) < O(b!) = O(n^(n+1/2) * e^(-n) )
O(a!) < O(n^n)

O(g1(n)) < O(g2(n))  -->  O(f(n)g1(n)) < O(f(n)g2(n))
O(g1(n)) < O(g2(n))  -->  O(1/g1(n)) > O(1/g2(n))


實在不會比較的話,最簡單的方法是相除一下看表達式的極限,或者用wolfram alpha。(喂



當然,做大O分析時,除了看極限增長,還要看n的取值範圍。

也許n取值1至100時還能接受,然後你決定取值改為10000了,有些部份可能就會因此變得過大。
相反地,如果n的取值其實只有1至5,那麼大O分析就沒甚麼用了。

评分

参与人数 2积分 +6 喵玉币 +50 萌度 +140 收起 理由
Sonicthedgehog + 1 + 10 + 20 学术气氛浓郁,有价值,喜欢。
drzzm32 + 5 + 40 + 120 Good

查看全部评分

发表于 2015-6-18 23:16:37 | 显示全部楼层
我想起了遊戲裡面的「惡性循環」....

「如果無其他外力支援,則持續佔下風的一方永無翻身之日」

舉 反恐精英 為例,勝出回合的一方會在下一回合收到資金,資金足夠用來買入AWP,Eagles,連狙等上等武器

但負一方則失去原先武器之餘,亦不能獲得較多資金,在下一回合只有用僅餘的錢去購買主武,防彈衣頭盔也不要,理所當然,他們比較容易掛掉.....

當負方再輸一回,僅餘的錢也只能夠買防彈衣,那麼武器就只有手槍了吧(USP or Glock?)
手槍與AK-47,AWP 互相駁火,最後哪方勝算較大?

若負方又輸一回了,買一個手榴彈自...吧

說平衡也倒不是沒有.....玩家可搶敵人的武器來用的,但在我經驗中,往往是要從幾個隊友的性命換過來,人多欺人少,最後也是慘敗,從敵人搶過來的AWP也是掉失了

点评

cs有种战术叫经济局,跟田忌赛马一个道理,所以最多一局不平衡  发表于 2015-8-4 14:53
你這個叫正反饋遊戲性啦,是另一件東西(  发表于 2015-6-19 00:24
回复

使用道具 举报

发表于 2015-8-4 14:54:25 来自手机 | 显示全部楼层
提示: 该帖被管理员或版主屏蔽
回复

使用道具 举报

发表于 2015-8-4 19:07:51 来自手机 | 显示全部楼层
提示: 该帖被管理员或版主屏蔽
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 少女注册中

本版积分规则

合作与事务联系|无图版|手机版|小黑屋|喵玉殿

GMT+8, 2025-10-31 03:48

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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