顯示具有 策略模式 標籤的文章。 顯示所有文章
顯示具有 策略模式 標籤的文章。 顯示所有文章

2016年3月19日 星期六

策略模式:弩與槍

  大概六歲的時候,我看了第一部戰爭片,叫做「祖魯戰爭( Zulu ,1964)」。祖魯戰爭,是1879年時大英帝國與南非祖魯王國之間的戰爭。我當時對這個歷史事件的看法,除了覺得祖魯人的戰術實在糟糕之外,對於大英帝國那一個連隊最後用來對抗祖魯人的用鎗戰術感到驚豔! 十幾年後,當我開始研究《孫子兵法》而廣泛接觸中國古代兵法之後,我才陡然發覺,原來這種「處理方式」,遠在戰國時代就已經出現,考量到記載在兵書中的時間多數晚於其實際運用的時間,且中國古代兵書失傳者多,加上這是出現在使用「弩機」時產生的思想,因此可以合理推測對這個使用弩機時所必然遭遇的問題的相對固定的解決方法,可能早在弩機第一次被頻繁用於戰爭 ,也就是戰國時期之前就已經出現了。 戰國時期的兵法「齊《孫子》(《孫臏兵法》局部)」就提出了「流弩」的策略,並且從兵法的文字中我們已可得知,那是當時的將軍們所熟習的術語。後來「齊《孫子》(《孫臏兵法》局部)」失傳了一千年以上,因此這個在孫臏的時代屬於軍事常識的策略模式,便逐漸不為人所知。說它是一種相對固定的解決方法,是因為從唐朝李筌的《太白陰經》引用「經」開始,經《通典》,到往後宋朝的《虎鈐經》、《武經總要》,以至於明朝的《耕餘剩技》、《武備志》便都沒再變過了。 唐朝時,李筌引用「經」來說明這種策略,顯見此法早已存在,因此即使一九七二年沒有在銀雀山漢墓中挖出《孫臏兵法》,我們也是可以做這個判定的。同時,明朝「弩機」被「火銃」所取代後,在使用火銃上也面臨了相同的問題,而這相同問題的處理方式也與使用弩機的處理方式分毫無差,兩種方法同時都被記載於畢懋康(1598年進士)的《軍器圖說》中。
問題描述:
  由於使用弩機有裝填弩箭的時間問題,因此產生了「弩張遲,臨敵不過三發,所以戰陣不便於弩,非弩不利於戰,而將不明於用弩也。」的問題。(〈太白陰經.教弩圖篇〉)
解決模式:
  為了解決「弩張遲」的問題,一種方法是就弩機本身進行結構與設計上的改良,另一種方法是就弩機的使用方法進行改良。於是出現了將弩兵分為三隊,進行「張弩、進弩、發弩」分工的方法,藉由這樣的分工,解決「弩張遲」的問題,從而形成「復以陣中張、陣外射,番次輪回,張而復出,射而復入,則弩無絕聲、敵無薄我。」的效果。(〈太白陰經.教弩圖篇〉)
 
以下為各書中的相關圖解:
  〈孫臏兵法.威王問〉:
  威王曰:「敵眾我寡,敵強我弱,用之奈何?」孫子曰:「命曰讓威:必臧(藏)其尾,令之能歸。長兵在前,短兵在〔後〕,為之流弩,以助其急者。〔諍戒〕毋動,以侍(待)敵能(罷;疲)。」
  其中孫臏提到的「流弩」就是指這種「用弩輪流射擊」的戰技。「急」攸關時間,在這種狀態下,士兵的反應時間是短促的。正是因為這是一種用弩輪流射擊的戰技,因此方能「助其急」。用「流」來形容「弩」,表示這樣的射擊就好像「流水」一樣,流動不止、連續不絕。由此可見,此法起源甚早了。此篇齊威王與孫臏的對談發生在桂陵之戰(前353年)前,或即當年。
 
(唐朝〈太白陰經.教弩圖篇〉「教弩圖」)
  〈太白陰經.教弩圖篇〉:
  經曰:弩者,怒也。言其聲勢威響如怒,故以名其弓也。穿剛洞堅,自近及遠,古有黃連、百竹、八擔、雙弩之名。今有絞車弩,射七百步,攻城拔壘用之;臂張弩,射三百步,步戰用之;馬弩,射二百步,馬戰用之。弩張遲,臨敵不過三發,所以戰陣不便於弩,非弩不利於戰,而將不明於用弩也。夫弩不離於短兵,當別為隊 輭,攢箭注射,則前無立兵,對無橫陣;復以陣中張輭,陣外射,番次輪回,張而復出,射而復入,則弩無絕聲、敵無薄我。置弩必處於高,爭山奪水,守隘塞口,破驍陷陣,果非弩不利也。
 
  〈通典.兵二.法制〉:
  弩,古有黃連、百竹、八擔、雙弓之號。今有絞車弩,中七百步,攻城拔壘用之;擘張弩,中三百步,步戰用之;馬弩,中二百步,馬戰用之。弩張遲,臨敵不過一二發,所以戰陣不便於弩。非弩不利於戰,而將不明於弩也。不可雜於短兵,當別為隊,攢箭注射,則前無立兵,對無橫陣。復以陣中張,陣外射,番次輪迴,張而復出,射而復入,則弩不絕聲,敵無薄我。
(宋朝〈武經總要.教弩法〉「教弩法圖」)
  〈武經總要.教弩法〉:
  又若爭山、奪水、守隘、塞口、破驍、陷勇,非弩不克。用弩之法,不可雜於短兵,尤利處高以臨下,但於陣中張之,陣外射之,進則蔽以旁牌,以次輪回,張而復入,則弩不絕聲,則無奔戰矣。故特出此法,以具於右。
 
 
(明朝〈耕餘剩技.蹶張心法.輪流發弩、進弩、上弩說〉「輪流發弩圖、輪流進弩圖、輪流上弩圖」)
 
  〈耕餘剩技.蹶張心法.輪流發弩、進弩、上弩說〉:
  古人用萬弩齊發勝敵,今試以寡論之。假令弩手三百人,先用百人弩已上箭、已搭列於前,名為「發弩」。再用百人弩已上箭、已搭列於次,名為「進弩」。再又用百人,列於後方,上弩搭箭,名為「上弩」。先百人發弩者,發完退後,以次百人進弩者上前,變為發弩;以後百人上弩者上前,變為進弩;以先百人發完者退後,變為上弩。如此輪流發矢,則弩不絕聲矣!
  從李筌的「張而復出,射而復入」說法,以至於程宗猷的「發弩者」「發完退後」說法,可知這主要是一種靜態的作法,亦即三排弩手只是不停變換位置,而未曾前進。若要改為動態的,只要三排弩手依次前進即可。但顯然此法原本即是為了爭取時間而來,若採用動態方式,無疑將主動壓縮敵我空間之距離,而使此解法喪失原本用途。然而,假設此時敵人已經被擊潰而處於退卻之中,則自然採用動態之法,趁勝追擊。總之,靜態的作法是最初的構想,其時之敵人是正往前來,而敵我間距正處於被持續壓縮的狀態;若敵人撤退,則是敵我間距處於持續被擴大的狀態,因此此時便當採用動態之法。
 
(明朝〈武備志.陣練制.練.教藝一.弓〉「教弩陣圖」)
 
(明朝〈軍器圖說.輪流發弩〉)
(〈軍器圖說.輪流放銃〉)
  從〈太白陰經.教弩圖篇〉中「張弩」為二列、「發弩」為一列,到〈武經總要.教弩法〉中將此解法作局部放大解說,而區分為「張弩、進弩(《虎鈐經》改為「交弩」)、發弩」,其實名稱雖較細緻,而實際操作方法則一致。明朝由於印刷術發達,因此兵書中的圖像便也多了起來,一些講述兵技巧、武術的書籍,更是趨向於具象、寫實圖畫的說解方式。因此唐朝李筌之簡易抽象陣圖,便被程宗猷較為形象之人物操作圖像所取代。這種以寫實圖畫作說解的作風並一直延續到明朝火銃隊的說解篇章中,此由〈軍器圖說.輪流放銃〉一圖亦可見其大概。
 
  以下則是我最初發現這個模式的「祖魯戰爭」兩個片段截圖。
片段一:
(取自電影 Zulu ,1964年版。)
  片段一的作法是輪番迭擊的方法,後排開火後往前進,成為前排,蹲下裝填彈藥,完畢後已又成為後排,繼續開火。依序前進,重復操作,以擊潰敵人。是一種動態的使用方式,用以對付正往後退的敵人。但若敵人人數眾多,且往我方衝鋒而來,則顯然必須使用片段二的作法。因片段一的作法,會縮短敵我距離,使我準備攻擊時間更為緊迫。
片段二:
(取自電影 Zulu ,1964年版。)
 
  片段二中第一排的士兵已射擊完畢,正在作裝填彈藥的動作,而第二排的士兵正結束射擊,準備接續裝填彈藥,輪到第三排的士兵開始射擊。
  悟性高的讀者,當然早就發現了,這樣的處理方式,就是計算機領域裡的「并行處理技術(時間)」。

策略模式

策略模式

策略本是用來解決問題的。在建築、軟體設計的領域裡,常常面臨許多重複出現的問題,這些問題往往有一些經過反覆思考、研究後,相對較佳與固定的處理方式,這樣的方式就被叫做「模式(pattern)」。軟體設計領域裡的「設計模式(design pattern)」是在1990年代由軟體設計師從建築設計領域裡引進計算機科學領域來從事問題解決的方法。「設計模式」不同於「演算法(algorithm)」,儘管後者也是一種固定的解決問題的方法,但「設計模式」著重於軟體設計層次上的問題,而「演算法」則著重於計算層次上的問題。同樣的,在軍事的領域裡,也面臨了很多重複性的問題,用來解決這些重複性問題的,本身也可被稱為一種「模式」。在戰爭層次上所面對的問題,歷來就有眾多「兵法」做為其解決問題的指導方法;本單元所要探討的模式,雖然也多數出現於兵書中,但主要不是用來解決戰略、戰術層次上的問題,而通常是用來解決在戰爭活動中所會遭遇到的非戰略、戰術性而具有類似與重複性的問題,這些問題主要體現在武器的設計與使用層次上,因此別出一項,專門討論。於是我用「策略模式(tactic pattern)」來稱呼它。
  不管是戰略、戰術層次上的問題,還是武器設計與使用層次上的問題,這些策略自然毫無意外都屬於「策略分類學」中的一部分特定類別。這些模式,有些是因為最早被想出來,有些是因為這個方法確實最有效率,有些可能只是一種習慣,因此被用來解決相同的問題而成其為一種「模式」。軟體領域裡的設計模式,其用處在於:「設計模式主要是使不穩定的依賴於相對穩定、具體依賴於相對抽象,避免會引起麻煩的緊耦合,以增強軟體設計面對並適應變化的能力。」(維基百科)因此,「策略模式」所要探討的,除了描述歷來就存在的許多策略模式之外,也希望能對這些模式本身是否是處理該類型問題最有效的處理方式,或者這樣的處理方式在哪些時候是最有效的,而在哪些時候卻不如其他模式來的有效等問題進行討論。從而也希望這樣的討論,能對諸如武器設計與使用等範疇的問題,提出一個可供依循與查找、參考的相對固定與迅速、系統性的解決方案。
朔雪寒 2010.5.15