何寶海
(蘇北航務(wù)管理處淮安航務(wù)中心,江蘇 淮安223002)
VBA 是一款帶有圖形界面的強大開發(fā)工具,除了自帶的函數(shù)功能和數(shù)據(jù)分析處理功能外,還提供了豐富的圖表制作功能,是軟件開發(fā)領(lǐng)域常用的工具之一。將VBA語言和Excel 相結(jié)合,在電子數(shù)據(jù)表中建立決策樹,可以使用戶直觀地認識都哪一項決策最優(yōu),哪一項決策存在風(fēng)險。同時,用戶只需要點選相應(yīng)的單元格,既可以輕松地創(chuàng)建圖表,并基于決策分析模型展開計算,為風(fēng)險決策分析提供了技術(shù)支持。本文基于VBA 編程,在Office Excel 中建立了決策分析系統(tǒng),并將該系統(tǒng)應(yīng)用于某企業(yè)的一項投資決策中,通過定量分析的方式計算出不同生產(chǎn)方案的期望損益值,為企業(yè)管理層選擇最佳決策提供了必要的參考。
本文設(shè)計的決策分析系統(tǒng),按照“從左至右”的順序生成節(jié)點與分枝,得到相應(yīng)的決策樹。將決策樹最左側(cè)的節(jié)點作為根節(jié)點,用戶可通過系統(tǒng)界面左上角工具欄中的“開始樹”選項,在工作表任意位置繪制根節(jié)點。系統(tǒng)將根節(jié)點的類型默認為“結(jié)束節(jié)點”。雙擊根節(jié)點左側(cè)標(biāo)簽,可快速調(diào)出“UserForm1”對話框,用于設(shè)置決策樹的名稱、效用函數(shù)、結(jié)果計算方式等相關(guān)參數(shù)。雙擊根節(jié)點,會彈出“UserForm2”對話框,用于設(shè)置節(jié)點名稱、分枝數(shù)目、節(jié)點類型等。設(shè)置完畢后,點擊確定即可生成相應(yīng)的決策樹[1]。決策樹圖形的繪制流程見圖1 所示。
圖1 決策樹圖形繪制的流程圖
對于系統(tǒng)生成的決策樹,用戶可根據(jù)需要改變其節(jié)點類型,例如將決策節(jié)點更改為機會節(jié)點,或者刪除節(jié)點。這里以三級決策樹為例,添加“Tree”后,生成一個對應(yīng)的決策節(jié)點。并由決策節(jié)點引出“方案枝”,從決策節(jié)點引出的每一條直線均代表一種備選方案。在方案枝上,用“True”或“False”表示該方案是否可行。從狀態(tài)節(jié)點引出“概率枝”,表示此種狀態(tài)出現(xiàn)的概率,可以由系統(tǒng)根據(jù)歷史數(shù)據(jù)自動得出,也可由用戶自定義,見圖2。
圖2 系統(tǒng)生成的決策樹
該部分的計算對象主要包括決策節(jié)點、狀態(tài)節(jié)點的期望值,結(jié)束節(jié)點的損益值與概率,以及用戶改變決策樹后系統(tǒng)重新計算各個節(jié)點的值。由于VBA 的局限性(無指針結(jié)構(gòu)),無法在決策樹上直接計算出上述各項數(shù)據(jù),因此在系統(tǒng)設(shè)計中引入了“邏輯樹”的概念,通過在邏輯樹、用戶、決策樹之間建立映射關(guān)系,使用戶的所有操作都能反映到邏輯樹上,從而十分方便地計算出結(jié)果[2]。邏輯樹、用戶與決策樹之間的對應(yīng)關(guān)系見圖3。
圖3 用戶、決策樹和邏輯樹之間的關(guān)系
邏輯樹作為存儲決策樹信息的數(shù)組,數(shù)組中每個元素均采用結(jié)構(gòu)體形式存在。以定義決策樹分枝的結(jié)構(gòu)體為例,表示方式如下:
這里以計算決策樹上各個節(jié)點的期望值為例,其計算方式見圖4。
圖4 決策樹數(shù)值計算流程圖
在決策樹模型建成后,系統(tǒng)可基于用戶需求以剪枝圖、散點圖、統(tǒng)計報表等形式顯示計算和分析結(jié)果。在設(shè)計決策樹的分析部分時,可通過系統(tǒng)界面上方工具欄選擇“結(jié)果顯示”選項,在彈出的對話框中勾選結(jié)果的顯示類型,如散點圖、柱狀圖、統(tǒng)計報表;除此之外,還可以選擇結(jié)果的存儲位置,如新的工作簿、當(dāng)前工作簿。以“剪枝圖”為例,根據(jù)分析結(jié)果可生成對應(yīng)的剪枝圖,用戶可一目了然地找出最佳決策方案。在決策分析模塊的設(shè)計中,設(shè)計了一個新的數(shù)組“Cutarray”,可以將邏輯樹中生成的內(nèi)容存儲到該數(shù)組中[3]。仍然以“剪枝圖”為例,在決策分析系統(tǒng)生成剪枝圖以后,會將分析結(jié)果存儲到Cutarray 數(shù)組中?;跊Q策分析系統(tǒng)的分析流程如下:
(1) 建立新的數(shù)組Cutarray 后,將邏輯數(shù)組中的所有數(shù)據(jù)復(fù)制到該數(shù)組中,同時執(zhí)行一個判斷程序“是否添加新的工作簿?”。
(2) 如果判斷為“是”,則添加新的工作簿,然后在新的工作簿中繼續(xù)執(zhí)行下一步操作;如果判斷為“否”,則直接在當(dāng)前的工作簿執(zhí)行下一步操作。
(3) 在工作簿中執(zhí)行一個判斷程序“是否繪制剪枝圖?”,如果判斷結(jié)果為“是”,則在工作簿中繪制剪枝圖;如果判斷結(jié)果為“否”,在繼續(xù)執(zhí)行下一個判斷程序“是否繪制報表?”,按照同樣的方式,依次判斷是否繪制柱狀圖、散點圖。如果判斷為“是”,則繪制相應(yīng)類型的圖像。
(4) 所有判斷程序執(zhí)行完畢后,以柱狀圖、剪枝圖等形式呈現(xiàn)決策分析結(jié)果,結(jié)束當(dāng)前分析程序[4]。
本文設(shè)計的決策分析系統(tǒng),最終的計算結(jié)果是基于決策樹上所有節(jié)點的期望值求得的。結(jié)合決策樹期望值的運算規(guī)則,以及邏輯樹的存儲特征,對節(jié)點期望值和概率值的算法作如下設(shè)計:對于決策樹中的結(jié)束節(jié)點,其downdata 是該分枝上所有節(jié)點投入值或收入值的累加;而狀態(tài)節(jié)點的downdata,即當(dāng)前節(jié)點的期望值,可通過下一節(jié)點的downdata 與概率值相乘得到。由此可知,決策節(jié)點的downdata 是決策樹中所有節(jié)點downdata 中的最大值。同時,選擇每個節(jié)點的數(shù)據(jù)項jdrate,記錄該節(jié)點的層次,各個節(jié)點的層次都可以通過上一節(jié)點“層次+1”得到。將決策樹中節(jié)點的最大層次記錄在變量jbmaxrate 中,作為決策樹的層次。根據(jù)該算法,決策樹首先根據(jù)最右端節(jié)點的損益值和概率值,求得當(dāng)前分枝的總概率。將總概率乘以所有節(jié)點的損益值之和,即可得到該方案下的期望損益值。按照同樣的方法,計算出決策樹上所有方案的期望損益值,然后對比大小,期望收益值最大或期望損失值最小的方案,即為決策分析系統(tǒng)分析所得的最佳方案。
某零件生產(chǎn)廠現(xiàn)有2 種生產(chǎn)方案,方案一是沿用原來的生產(chǎn)線繼續(xù)生產(chǎn)手動型老產(chǎn)品;方案二是改進生產(chǎn)線生產(chǎn)全自動新產(chǎn)品。通過市場需求分析,在消費需求較大的賣方市場下,生產(chǎn)老產(chǎn)品每月可實現(xiàn)盈利30 萬元,而生產(chǎn)新產(chǎn)品每月可實現(xiàn)盈利50 萬元;在消費需求較小的買方市場下,生產(chǎn)老產(chǎn)品每月可實現(xiàn)盈利10 萬元,而生產(chǎn)新產(chǎn)品每月虧損5 萬元。根據(jù)市場調(diào)研結(jié)果,市場需求量較大的概率為0.8,需求量小的概率為0.2?;谏鲜鲂畔ⅲ治瞿姆N方案能夠使該企業(yè)獲得更多利潤。采用常規(guī)的單級決策方法,分析流程如下:
(1) 畫出決策樹,見圖5。
圖5 一級決策圖
(2) 求出各節(jié)點的期望損益值,按照從右至左的順序以此計算。節(jié)點2:30×0.8+10×0.2=26(萬元);節(jié)點3:50×0.8+(-5)×0.2=39(萬元);則決策節(jié)點1的期望損益之為Max{26,39}=39(萬元)。
(3) 剪枝。已知決策節(jié)點1 的期望損益值是39萬元,為了達到新產(chǎn)品方案的期望損益值,需要剪掉老產(chǎn)品生產(chǎn)線這一分枝[5]。故選擇新產(chǎn)品生產(chǎn)方案可以實現(xiàn)企業(yè)利潤最大化。按照本文設(shè)計的決策分析系統(tǒng)對上述案例展開分析,建立的決策樹模型見圖6。
圖6 基于決策分析系統(tǒng)建立的決策樹圖
對比來看,在Excel 中建立的決策分析系統(tǒng),與常規(guī)的單級決策系統(tǒng)在決策分析結(jié)果上是一致的,均認為生產(chǎn)新產(chǎn)品可以為企業(yè)創(chuàng)造更大的利潤。由此可見,本文設(shè)計的決策分析系統(tǒng)是有效的。
本文基于VBA 編程開發(fā)的決策分析系統(tǒng),能夠與電子數(shù)據(jù)表Office Excel 相結(jié)合,具有直觀易學(xué)、操作簡便等特點。該系統(tǒng)的核心部分為決策樹,但是考慮到VBA 語言無指針類型的局限性,在設(shè)計時引入了邏輯樹,并利用Cutarray 數(shù)組、Sensitarray 數(shù)組來存儲邏輯樹的數(shù)組,建立了“決策樹——用戶——邏輯樹”的關(guān)系,讓決策樹的計算結(jié)果以更加直觀、簡明的形式呈現(xiàn)出來,方便用戶選擇最佳方案。從實例應(yīng)用效果來看,本文設(shè)計的決策分析系統(tǒng)與傳統(tǒng)的單級決策在最佳方案的選擇結(jié)果上具有一致性,說明該系統(tǒng)可用。下一步,還要繼續(xù)研究多級決策模式下決策分析系統(tǒng)的應(yīng)用方式,以便于該系統(tǒng)在更廣泛的領(lǐng)域得到使用。