2007/03/27

[教學][筆記]電腦動畫世界裡的角色行為behavior


在3D電腦動畫的世界裡面 經常需要製作出大量的角色互動 例如一群海鷗飛翔 一群蝙蝠飛出洞穴 或是一群暴民逃離爆炸現場. 這些複雜的動畫是由角色依照環境而產生不同的行為 最終所表現的視覺效果 由於這種動畫過於複雜 動畫師不可能是以key-frame的方式手動地調整角色. 還好複雜的動畫可以經由簡單的行為模組 相互變化組合出來. 本文將由簡單的 陽春的軟體 介紹到複雜 完整的軟體: Endorphin, AI implant, KynogonMassive software. 經由介紹各個軟體的內建角色行為 讓讀者能夠一窺電腦動畫 或是第一人稱射擊遊戲當中 角色行為 人工智慧的概念. 行為可以分成多個層次 第一就是個體的行為 本文將以Endorphin為例; 另一就是群體的行為 更細分的話 群體當中還可分成小隊 這在擬真的射擊遊戲當中常常遇到.

一. 首先介紹Endorphin (漢字翻譯是腦內啡的意思). Endorphin是屬於Natutalmotion(自然動作)公司的產品, Natutalmotion是一家具有英國牛津大學背景的一家英國軟體公司. Endorphin所產生的角色動作是根據實際量測真實人體動作後 將資料最佳化好後寫成的軟體合成動作. 以下就介紹Endorphin 2.6所提供內建的人體動作:

(1)Arms Crossed On Chest 手臂交叉於胸前. 這個行為會讓角色產生雙手交叉於胸前的動作. 應用: 當角色需要保護胸部的時候?

(2)Arms Raised Above Head 手臂舉起. 這個行為會讓角色產生手臂舉起高過頭的動作. 應用: 打招呼或是接球.

(3)Arms Wide Of Head 雙手張開. 這個行為會讓角色產生手臂展開. 應用: 做出我也不知道的動作?

(4)Arms Windmill手臂旋轉. 這個行為會讓角色產生手臂如風車般旋轉的效果. 應用: 常常見於角色失去平衡時會有這類動作.


(5)Arms Zombie 殭屍動作. 顧名思義 手臂打直伸前如殭屍般. 應用: 鬼片 恐怖片?


(6)Hands Covering Face雙手遮臉. 這個行為會讓角色的手掌遮住臉. 應用: 保護臉 或是 羞於見人?
(7)Hands From Behind Back 手由背後伸回來. 感覺有點抽象 其實就是稍息動作的倒帶. 根據官方的說明 這個動作可以應用在各個行為的轉換動作 讓手臂回歸到平時的位置.


(8)Hands Protecting Groing手保護鼠蹊. 應用: 踢足球的時候


(9)Hands Reach And Look At 手伸出並注視目標物. 這個行為會讓角色的手伸出碰觸目標物 同時注視目標物. 相當實用的行為. 應用: 當你跟攤販老闆買一條香腸時 就會用到這個動作.


(10)Legs Kick踢腿. 相當簡單. 說實在Endorphin很多行為還在發展階段 動作有些看起來不自然.


(11)Legs Reach腿碰觸目標物. 應用: 踢足球.

(12)Legs Straighten 腿伸直. 應用: 兩腿一伸 準備投胎?

(13)Balance維持平衡. 相當重要的一個行為 在新版的軟體新增的行為. 很實用 幾乎在各種動作模擬都需要平衡.

(14)Balance With Props 提物體時同時維持平衡. 也是相當重要實用的行為. 應用: shopping回家後提著一包包袋子.

(15)Body Foetal身體做出如胎兒般動作. 有點抽象 這個動作是人在危急的情況 做出保護頭 身體與內臟時的反射動作 相當實用的行為.

(16)Catch Fall跌倒. 相當重要的一個行為讓角色跌倒時防止頭與身體直接碰觸到地面. 這個型危能讓跌倒的角色看來更有意識而不是昏迷.


(17)Fall Back, Twist And Catch Fall 臉朝地面跌倒. 有點抽象用圖片來解釋吧. (見上圖, 本圖取自官方網站的pdf說明文)


(18)Fall Back, Twist And Cover Face 臉朝地面跌倒同時手保護臉.

(19)Fall Back, Twist With Passive Arms臉朝地面跌倒同時做出類似俯立挺身的動作.

(20)Jump跳躍. 很陽春 還不夠好的行為.

(21)Jump And Dive. 跳水的動作很適合.

(22)Land And Crouch 跌倒同時做出下跪的動作.

(23)Stagger蹣跚走路. 當重要的一個行為讓角色跌倒前維持平衡一下. 應用範圍很廣.

(24)Tackle擒抱摔倒. 這是美式足球的專門術語 意思就是保住對手牽制對方運球.

(25)Writhe甩動四肢. 我是不知道這個行為能幹嘛 讓角色看起像是活著?

(26)Writhe In Mid-Air在半空中甩動四肢.

(27)Body Stiffness身體僵直倒下. 被催眠?

(28)Whole Body Stiffness連頭部一起 全身僵直倒下.

(29)Hold握著目標物. 當重要的一個行為讓角色握著目標物. 應用: 抓著籃球.就這樣Endorphin軟體內建了大約30種的人體行為資料庫. 這是劃時代的軟體設計 把動作合成的概念帶入了電腦動畫世界 而非純粹套用真實的人體動作資料(motion capture data) 如此的優點是動作更為多樣化 可變性的參數多 而且動作能夠隨著環境改變而做調整 更接近真實的人類行為. 然而很顯然Endorphin目前還是發展的初期 相信將來5年會成為人體角色動畫的主流應用之一.

二. 接下來介紹個體與個體之間的交互作用行為 就是更大尺度的角色行為. 先以AI implant為例.(1)Avoid Barriers避開路障. 這個行為會讓角色在距離路障一定距離前避開路障.

(2)Avoid Obstacles避開障礙物. 與避開路障很類似. 差別在於避開路障不用指定目標物而Avoid Obstacles必須指定目標物 而且目標物可以也是AI控制的角色

(3)Accelerate At對目標物加速. 當重要的一個行為. 應用: 獵豹看到羚羊時.

(4)Maintain Speed At 針對目標物維持相同的速度. 應用: 狗仔隊在跟拍某位明星的座車.

(5)Wander Around閒晃. 很常用到的一個行為 讓角色不是走一直線而是點隨機的移動. 應用: 找食物的螞蟻

(6)Orient To朝向某目標物. 應用: 狗仔隊用長鏡頭跟拍某名人.

(7)Seek To找尋某目標物. 很常用到的一個行為 應用: 鯊魚搜尋小魚.

(8)Flee From逃離敵人. 很常用到的一個行為 應用: 小魚逃離鯊魚.

(9)Look At看著目標物. 與Orient To很類似.

(10)Strafe繞行移動當中的目標物. 有點抽象的行為. 應用: 例如一隻盡責的牧羊犬 一面繞行保護羊群 一面面對周圍的野狼.

(11)Go Between使角色移動到兩個目標體之間. 可以做為保鑣的行為. 例如歌手的保鑣總是位於歌迷之間 保鑣保護歌手.

(12)Follow Path沿著路徑移動. 例如操場上的選手沿著跑道跑步.

(13)Seek To Via Network經由網絡找尋目標體. 例如警方在巷弄當中搜尋嫌犯. 巷弄的交錯結構就相當於網絡.

(14)Align With與群體對齊. 常見於閱兵典禮士兵對齊的移動 或是在古代的戰爭場景裡 士兵排排站.

(15)Join With加入群體. 湯姆漢克在電影世界大戰當中 他的兒子要加入軍方對抗外星人 所用到的行為就是加入群體的例子.

(16)Separate From脫離群體. 臨陣脫逃的士兵.

(17)Flock With與隊友形成群體. flock這個自是用在一群鳥的時候. 所以這個行為以一群鴿子飛行為例最適當

(18)State Change On Proximity 靠近目標物時就改變狀態. 有點抽象但是很重要的行為. 例如大雄看到老師就會緊張 大雄就是接近目標物(老師) 就會改變狀態(緊張)的行為. 這裡可以改變角色的速度 死亡等等狀態.以上18種的行為 看起來很複雜 其實AI implant算是相當陽春的軟體 能夠處理的情況也相當簡單 但是經由適度的組合行為 還是能產生令人信服的動畫.

三. 接下來介紹Kynogon公司出品的Kynapse. Kynapse是Synapse單字的變體 synapse是神經突觸的意思 代表該軟體有人工智慧的意思. Kynapse被廣泛應用在遊戲與軍事訓練當中 例如知名法國出品遊戲Ureal魔域幻境 便整合了Kynapse的人工智慧引擎 用來控制遊戲當中的電腦人(Bot). Kynapse的專長是及時複雜的路徑計算 能夠很有效率的計算出角色的最佳移動路徑 同時Kynapse能夠提供團隊的概念 使角色之間能夠互相溝通形成戰爭小隊. Kynapse的設計架構當中 角色具有Perception感知, Decision決定以及Action行動. 角色能夠感受聲音 視覺或是小隊之間的無線電溝通來做行動的決定 而這些決定都是即時的在遊戲當中做出運算 而不像是AI implant角色的移動路徑是預先由軟體使用者刻意產生的 這就是Kynapse強大的地方. 以下介紹Kynapse所提供的行為(在Kynapse當中行為的控制稱為agent代理人. 不同代理人產生不同行為):



(1)Goto agent到達目標代理人

(2)Follower agent跟隨代理人

(3)Flee agent逃離代理人

(4)Pathway agent沿著預先設定路徑移動的代理人

(5)Wander agent閒晃代理人. 以上代理人的行為在AI implant當中都可以看到.


(6)Hide agent躲藏代理人. 這個看似簡單的行為其實有點複雜 首先他不像是Flee agent那樣只是逃離危險的敵人 而且他還要能在立體的空間當中把自己藏匿起來 算是相當複雜的行為.

(7)Shooter agent射擊代理人. 這比look at行為還要複雜 首先角色要能夠依照自己手上的武器(狙擊槍或是手槍) 知道自己的射程 進而移動身體來幫助攻擊敵人的行為.除了代理人外Kynapse還具有及時運算路徑的能力

(8)Euclidian distance pathfinding heuristic最短距離演算法 這是在不考慮敵人 環境危險度的情況下 演算出移動路徑的演算法.

(9)path cost pathfinding heuristic最佳抱償路徑演算法. 能夠在相當複雜的場景當中 計算出敵人位置 路徑等等因素後 對角色最有利的路徑.Kynapse還有許多其他強大功能 足以應付現今熱門的第一人稱射擊遊戲 例如躲在角落射擊敵人, 分散躲藏的小組 之間以無線電連絡 或是動態的路徑運算(在被破壞的公路當中找到替代道路)等等 請到官方網站觀看影片.

四. 最後介紹最強大也最昂貴的軟體---Massive software. Massive因為在動畫電影Happy Feet快樂腳當中應用 被獲選奧斯卡獎. Massive雖然不如Kynapse專門用來處理3D遊戲當中的角色行為 但是AI implant有的行為它都有 除此之外Massive還提供了AI implant沒有卻很重要的功能.


(1)Smart Stunts智慧型的特技演員. Massive的Smart Stunts很類似Endorphin的功能 就是依照環境產生相對的行為. 這點讓Massive具有結合Endorphin與AI implant兩者優點的優勢.

(2)Cloth Editor衣服編輯器. Massive本身就支援角色具有衣服動態模擬的功能 讓其運算結果的擬真度更上一層樓.

(3)Agents可以立即使用的代理人. 即使不懂動畫的人也能夠利用預先設定好的虛擬人物進行動畫. 目前提供的代理人有Locomotion Agent移動代理人, Stadium Agent觀眾席代理人, Ambient Agent背景人物代理人, Mayhem Agent暴動代理人, Combat Sword Agent古代戰爭代理人...幾乎可以應付大部分的需求了.以上就Endorphin, AI implant, Kynapse與Massive做了簡單的介紹 雖然離真正人類的行為還很遠 但相信經由這些簡化的虛擬人物行為 將來會慢慢發展出更接近人類的行為(例如吃醋 忌妒 賴床...等等)

[延伸閱讀]

faking human motion with ragdoll maxscript (利用免費軟體達到類似Endorphin的效果)

2007/03/20

[筆記][教學]拿Google adsense check支票的心得與照片分享


在累積Adsense廣告獎金至寄發支票的最低條件(100美元)前, Google Adsense會先寄發一封認證信 含有個人識別碼(PIN). 當你收到這封信時 代表你的部落格經由有成 有機會領到Google的支票.


這封含個人識別碼的信 其實很小張 如上圖般明信片般大小 下方用圓形貼紙封條 上面寫著"內附重要訊息"


如此這般 如同兩張明信片大的信紙 摺疊起來 被面印著大大的Google標誌.


打開信封後你會看到如下文字: "您的Google Adsense個人識別號碼(PIN). 歡迎使用Google Adsense...". 為什麼要寄這封認證信給你呢? 個人猜測是因為Google Adsense目前沒有提供直接匯入銀行的服務 只有寄支票給使用者 是故藉由啟動個人識別碼的方式 證明收件者的地址就是部落格經營者的地址. 當下次獎金累積到100美金 寄出支票後 才不會寄錯地址 造成不必要的麻煩.



在你啟動你的PIN碼後 若是累計獎金到100美金 你就會收到上面這封信. 內含支票所以大小比明信片大了一點. 有點像是電信局的帳單那樣的封裝方法.


打開信封 你會看到一面是寫你家地址 另一部分是支票本身.


仔細看看支票 好像不是很起眼 會不會是偽造的啊?


翻過來看支票背面 有個地方要你簽名 (去銀行兌換時需要)


如果你仔細一看支票摺痕的地方那條綠色的花紋 上面寫著"THIS CHEQUE PAPER CONTAINS A CHAIN WATERMARK" 本支票上有鏈子圖案的浮水印. 於是對著日光燈一照 哇! 有沒有看到浮水印啊 整個支票上面都是鏈條圖案哩.

後記:
網路上已有網友陸陸續續公佈他們的Adsense賺取金額 甚至支票照片. 有些人幾個禮拜就賺到100 USD了 真是佩服這些網友. 我的看法是一開始還是不要抱持著賺錢的心態經營部落格 以下是我簡單心得:
1. 累積你的第100篇文章. 之前有網友說要累積文章很重要 我的經驗的確也是. 如果部落格只有一兩篇大概也不會有細水長流的網路流量了 因為網友看一兩篇就拍拍屁股走人.
2. Adsense廣告的擺設要能夠達到飽和. Google Adsense擺設上限我記得是3個廣告組1個連結組. 把Adsense放置在網頁的上方或是兩側 越下方的廣告網友點擊的機率越低.
3. 審慎使用Adsense的競爭性廣告篩選器功能. 競爭性廣告篩選器雖然能去掉與你部落格不相干的廣告 但也會降低廣告的變化性 使用競爭性廣告篩選器不一定會增加廣告的總點擊率.
4. 避免色情或者類似色情的內容. 即使是你的bog文章根本不是色情 只要是跟色情相關的文字或是圖片 都有可能導致Google Bot網路機器人誤判為色情 因而移除你的Adsense廣告.
[相關教學]

2007/03/16

[教學][筆記]AI implant action selection決定樹

這篇是我讀AI implant v2.0官方pdf教學 最後一篇的Character animation的筆記. AI implant最難的應該是Action slection/decision tree 動作決定/決定樹 這部分吧! 就該篇教學做說明, 做個人隨著移動速度轉換走或是跑的動畫.



上圖是該AI character的Action slection左側的第一個值: RunspeedDatum. 可以藉由Create New Datum產生. Datum就是資料的意思 這裡這個值是作為一個運算變數.


第二個值是RunSpeed Sensor.可以經由Create Speed Sensor產生. 然後再由Is value in Range Datum選擇步驟一產生的變數"RunspeedDatum"使兩者連結在一起. 意思就是說 當速度在6-12之間 數值RunspeedDatum就為真.


最後一個就是decision tree決定樹.可以經由Create Decision Tree產生. 其中Condition Comparator要選擇Boolean, 如此Add child時就會產生兩個分支: then, else 則 否則. 而If如果則要選擇變數RunspeedDatum. 而then當中 activate jog可以經由ActivateAnimationCommand產生. 整體的意思就是 當RunspeedDatum為真(速度在6-12)時 執行then分支當中的指令(撥放jog動畫 以及 執行accelerateAt行為); 當RunspeedDatum為假時(速度非6-12間)則執行else當中命令.

這只是一個簡單的決定樹. 角色有兩個固定動畫 一為走一為跑 行為只有加速行為. 利用RunSpeed Sensor偵測器 偵測速度快或是慢. 慢的話就經由決定樹決定撥放走的動畫 快的話就撥放跑的動畫. 但不管速度如何 都執行AccelerateAt加速的行為. 可見這裡RunSpeed Sensor偵測器占了關鍵性的地位. 如果你是要偵測角色是生是死 偵測器就要改成PropertySensor.

2007/03/14

[tutor][video]Crabs and Taiwan (by using CAT plugin)



By using Character studio toolkits (CAT) plugin to create motion of the crabs in 3ds max 7. You will learn to create a line and a dummy, then path constrain to the line. Create a crab with CAT and attach node (select the dummy). Very quickly you will create motion of crab that looks real. Click HERE to see the tutorial result.

Video tutorial (Running time: 15 mins)

click HERE




[More videotutorials]
Making of modern tap (NURBS)
making a broken window without using a plugin (Hot!)

[tutor][video]Crowd simulation (biped) with AI implant


In this advanced video tutorial you will learn baking animation of a CS biped, create block controller to it and create crowd simulation with AI implant v2.0 plugin. Please note this is not for very beginner and only for those have experiment with character studio and block controller. You need Bake maxscript to when performing the effect. Please watch my previous tutorial for the Bake.

This is the outline for this tutorial:
1.Create biped mesh from CS
2.Baking animation
3.Create block controller
4.Create AI character
5.Set behavior
6.Duplicate characters
7.Prepare for rendering

Video tutorial (Running time: 40mins, splitted into two parts)





[教學][筆記]Baking animation烘焙動畫的技術

玩3d軟體的人一定聽過Baking Texture烘焙材質的技術. 烘焙材質簡單的說就是預先把光線的資訊儲存在物體的材質當中, 如此可以減少電腦運算影像的時間(因為已經預先運算好了) 這個技術被3D遊戲廣為應用(因為3D遊戲要求及時運算 "烘焙材質"能夠減輕電腦運算資源) 甚至在3ds max版本7以上都有內建的baking textures功能. 烘焙動畫與烘焙材質的概念相當類似 就是能夠將階層式的或是程序性的動畫 轉變成單純的transformation或是vertex的動畫資訊. 相較於烘焙材質的普及 在3ds max使用烘焙動畫卻沒這麼方便, 還好有網友寫了一些maxscript來強化烘焙動畫功能.本例以John Burnett所創作的Bake script為例 簡單示範烘焙動畫的技術.



上圖是John Burnett的Bake maxscript使用介面. 安裝完後 可在Customize user interface/MainUI/BFDtools當中找到. 注意除了要安裝bake外 還需要jbFunctions來執行這個maxscript.

教學影片 (約7分鐘)
或是點這裡觀看




[相關Maxscript]

除了Bake外 還可以在scriptspot找到如meshoven與procedural motion baker. 安裝完後兩者分別可以在Bob_s Tools與maxTD Tools中找到.

[相關連結]
本教學在 魚夫主持的台灣玉山網路電視台同步發布

[tutor][video]Baking animation with Bake maxscript

In this short video tutorial I introduce a simple but important technique---Baking animation. I use a 3ds max maxscript called "Bake" written by John Burnett. Bake animation information to your mesh object in very useful for game engine or complex scene like crowd scene. Just like baking texture, what baking animation can do is to bake all the hierarchy animation or linked animation, procedual animation (ie: noise) into level of vertex or xyz transformations.


This is the interface of Bake (maxscript). After installation, you can find this maxscript from Customize User Interface/MainUI/BFDtools. Note you need jbFunctions to run this script.

Video tutorial (Ruuning time about 7 mins)
or click HERE to watch


[Related maxscript]
There are two more script can do baking animation: meshoven and Procedual Motion Baker. After installation, you can found them in Bob_s Tools or maxTD Tools.

2007/03/07

[tutor][video]AI implant Quickstart (simple crowd simulation)

[Related post]
Crowd simulation (biped) with AI implant (New!)
Crabs and Taiwan (by using CAT plugin) (New!)

In this video you will learn how to create simple crowd simulation with AI Implant plugin in 3ds max 7. This ia very quickstart tutor and only demo you 10 number of boxs wondering around on a terrain. AI implant is a very powerful crowd simulation plugin for 3ds max, unlike massive software which only can work on Linux platform, AI implant can work on Windows.


Video Tutorial (Runing time about 11 mins)



Quickstart quide:

Create terrain
1. create a plane with 8X8 segments

2. With the plan selected ,go to AI Implant/Terrain/Set Surface Terrain (Top right menu)

3. Rescale the plan till it roughly match the AI terrain

4. Apply a noise modifier to the plane (scale about 1200, strengh about 450, check fractal)

Character set up
5. create a box

6. With the box selected, go to AI Implant/character/Make character
check the "Align with terrain" option

7. With the box selected, go to AI Implant/solver/edit group01--->create a group

8. Go to AI Implant/behavior/Wonder around--->set probability to about 0.25

7. GO to AI Implant/utility/Duplicate--->set number to ten, play around with scattering parameters

Simulation
8. In the 3ds max animation menu: uncheck the "Realtime" and "loop" options

9. select the AISolver 01 and check "use catche"

10. Playback the animation once, now it is realy to render. Done.

P.S:Tutorial for "Making of complex crowd scene (battle) by using AI Implant" coming soon...

[Related post]
Crowd simulation (biped) with AI implant (New!)
Crabs and Taiwan (by using CAT plugin) (New!)
Simulation of crowd scenes (In Traditional Chinese)

2007/03/01

[教學][筆記]群體動畫模擬(simulation of crowd scenes)觀念與隨想

最近在製作以AI Implant軟體進行群體動畫的教學影片, 由於這個教學稍複雜 所以目前還在準備階段. 群體動畫(Crowd scene)這些年來不管是在電影 商業廣告 甚至線上遊戲都廣為應用. 或許有些人對什麼是群體動畫感到一臉疑惑 其實像是魔戒(The Lord of the Rings)當中兩軍交戰的場景 就是最好的例子. 由於拍戲不可能找來百萬大軍 半獸人 所以以軟體來模擬大量演員的動作 便要交由專門處理群體動畫的軟體來模擬. 目前比較有名的群體動畫軟體如可在Windows上運作的AI Implant或是只能在Linux系統上跑的Massive. 不管是哪類的軟體 其背後的邏輯都大同小異 如同其他的3D繪圖軟體一班 概念的了解比軟體的操作更為重要.

由於電腦運算的限制 當前的群體動畫都不是以物理為基礎的(physical-based), 好比AfterBurn的火焰與FumeFx相比, Afterburn的火焰並沒有物理碰撞特性 而FumeFX能夠依據場景產生互動的煙霧與火焰. 也就是說當使用群體動畫軟體製作兩軍交戰的動畫時, A軍將B軍給擊倒並不是因為B軍的武器真的攻擊(碰撞)到A軍 讓A軍因此倒下 而是在軟體模擬下A軍在邏輯上被B軍擊敗 而這時A軍撥放了倒下的動作捕捉檔(Mocap file) 讓最終的結果看來是A軍被B軍擊倒.

上面的說明看起來繞舌 可以再把群體動畫模擬再簡化成三大元素: (1)預先製作好的動作檔 通常為mocap file (2)由各個代理人(Delegate)產生路徑 (3)最後再由代理人的決定樹(decision tree)來決定在代理人的路徑當中的各個事件 撥放適當的動作檔. 在動作模擬時每個代理人被視為一個點 例如有2萬紅軍與3000綠軍交戰時 就是有2萬個紅軍代理人(點)與3千綠軍點進行模擬. 一個逼真的群體動畫模擬端看適當的動作檔 與適當的決定樹下 調控完美的轉接時間(Transition) 而達到的最終效果.


實際舉例的話 平原交戰的決定樹大致可以這樣想: 行軍-->找尋敵軍-->攻擊 死亡 或是 逃跑 如果攻擊成功 再去找下一個最近的敵人. 動作檔則需要 行軍(March) 攻擊(Fight) 逃跑(Flee) 死亡(death). 代理人的路徑則是在整個模擬跑完產生的. 這是相當簡化的版本 如果要製作更複雜的群體動畫 還要加入更多因素 例如不同的軍種有不同的攻擊方式(射箭) 就需要不同的動作檔.

當然群體動畫不是只有兩軍交戰可以用的到. 想下一下你接到台灣鐵路公司的3D動畫案子 要製作排隊買票的群體動畫. 假設有3個售票亭 站在買票人的角度 他的決定樹大概是這樣: 首先決定要排哪一個售票亭(最少人那一排) 當他排一陣子後 可能另兩個售票亭的人數變的更少 於是他可能要決定是否要改排其他售票亭. 通常在這種其況 台鐵的售票亭每排的等候人數 會大致相等 原因是每個售票廷的距離很近 等候者可以隨時改變決定; 當模擬改為上製作上電車車廂的民眾時 情況會比較不同 因為每個車廂距離相當遠 不可能任意改變決定 我們常常可以看到某個車廂擠滿了人 而某些車廂些卻還有位置; 若是捷運車廂又會更不同 因為捷運車廂上車時間只有幾秒鐘 上車的人只有幾秒的時間做決定 幾乎沒有辦法立即換車廂.以上三種情況需要哪些動作檔 怎樣的決定樹 產生怎樣的路徑 你想到了嗎?