李光
摘? 要:管理運籌學是經(jīng)濟管理類專業(yè)一門重要的專業(yè)基礎課,實驗教學在管理運籌學教學中處于重要的地位。R語言是一個通用的開源數(shù)據(jù)處理平臺,在管理運籌學實驗教學中具有突出的優(yōu)勢。文章探討了R語言在管理運籌學中網(wǎng)絡規(guī)劃部分的教學實驗設計。論文介紹了實驗中R語言的安裝和應用特點,舉例說明了用igraph包求解了管理運籌學教學中典型的最短路問題,展示了R語言的優(yōu)點及其用于管理運籌學實驗教學的可行性。
關(guān)鍵詞:R語言;網(wǎng)絡規(guī)劃;最短路
中圖分類號:G642 文獻標志碼:A? ? ? ? ?文章編號:2096-000X(2020)03-0095-04
Abstract: Management operations research is an important professional basic course for economic management majors. Experimental teaching plays an important role in the management of operational research. R language is a general-purpose open source data processing platform, which has outstanding advantages in the management of operational research experiments. This paper explores the teaching experiment design of the R language in the network planning part of management operations research. The paper introduces the role of the igraph package for network analysis in R language and the usage and meaning of each parameter. The igraph package is used to solve the typical shortest path problem in management operations research teaching. The advantages of R language and its feasibility in managing operational research experiment are demonstrated.
Keywords: R language; network programming; shortest path
管理運籌學是經(jīng)濟管理類專業(yè)一門重要的專業(yè)基礎課。運籌學強調(diào)根據(jù)實際問題構(gòu)建數(shù)學模型,通過對模型的求解,為決策者進行決策提供科學依據(jù)。運籌學方法涉及到大量的數(shù)學運算和數(shù)據(jù)處理,必須借助計算機工具才能加深學生對運籌學模型的理解,并在實踐中得到應用。在運籌學教學中,不僅要讓學生理解運籌學模型的原理,還要讓學生掌握必要的計算機工具輔助模型的求解。目前運籌學實驗教學中普遍存在重理論輕應用、實驗教學內(nèi)容單一、實驗環(huán)節(jié)課時少等問題[1],這些問題產(chǎn)生的核心就是缺乏合適的實驗軟件。在目前的運籌學實驗教學中,應用較多的計算機軟件有excel[2]、lingo[3]、matlab[4]等,但這些軟件尚存在實驗費用高、求解問題規(guī)模受限制、教學與實際應用脫節(jié)等不足之處。而R語言是一個通用的開源數(shù)據(jù)處理平臺,不需支付任何費用。借助package包的擴展,R語言可以處理幾乎所有的量化分析和數(shù)據(jù)處理問題。R語言既具有強大的數(shù)據(jù)處理能力,又具有豐富的圖形展示能力,在國內(nèi)外教學科研中得到了越來越廣泛的應用,非常適合運籌學實驗教學的需要,是運籌學實驗教學的理想工具[5]。
一、R語言簡介及其用于運籌學實驗教學的優(yōu)點
(一)R語言簡介
R語言是一套完整的數(shù)據(jù)處理、計算和制圖軟件系統(tǒng)。R語言是由Auckland大學的Robert Gentleman和Ross Ihaka及其他志愿人員于上世紀80年代開發(fā)的一個自由軟件,現(xiàn)在的版本是3.6.1版,由“R開發(fā)核心團隊”負責開發(fā)[6]。與其說R是一種統(tǒng)計軟件,還不如說R是一種數(shù)學計算的環(huán)境。R的思想是:它可以提供一些集成的統(tǒng)計工具,但更大量的是它提供各種數(shù)學計算、統(tǒng)計計算的函數(shù),從而使使用者能靈活機動的進行數(shù)據(jù)分析,甚至創(chuàng)造出符合需要的新的統(tǒng)計計算方法。R語言的使用,很大程度上是借助各種各樣的包(package)的輔助,從某種程度上講,包就是針對R的插件,不同的插件滿足不同的需求,截至2019年7月10日,CRAN已經(jīng)收錄了各類包14510個。如igraph包[7]是一個用來進行網(wǎng)絡分析以及對其進行可視化的包,目前的版本是1.2.2。用igraph包可以求解圖與網(wǎng)絡規(guī)劃中常見的最短路和最大流問題,本文以圖與網(wǎng)絡分析實驗為例說明R語言進行運籌學教學實驗的主要步驟。
(二)R語言用于運籌學實驗教學的優(yōu)點
相較于其他的運籌學教學軟件,R語言具有十分明顯的優(yōu)點。
1. 通過package包的擴展,R語言可以處理幾乎所有的量化分析和數(shù)據(jù)處理問題。因為運籌學的教學內(nèi)容十分龐雜,涉及到數(shù)學運算的多個領域,以往的教學實驗要么只能解決部分模型的實驗,要么需要涉及多個軟件才能解決不同領域的運籌學模型的求解,增加了實驗的教學難度和學生的學習難度。R語言的任務視角把R語言能夠解決的數(shù)據(jù)處理問題分為40個大的任務領域,運籌學是R語言能夠處理的任務領域之一,有上百個package包用于各種各樣的運籌優(yōu)化問題的處理;借助package包的擴展,運籌學教學中的所有實驗內(nèi)容都可以在R語言平臺上實現(xiàn)。學生在整個實驗過程中,只需掌握R語言一種軟件處理平臺即可,大大降低了實驗教學的難度和學生學習的難度。
2. R語言可以實現(xiàn)教學和實際應用的自然過渡。運籌學模型的求解涉及到大量的數(shù)據(jù)處理,而在實際應用中,運籌學模型的參數(shù)和計算量更是面臨著數(shù)量級的增長。以往的運籌學教學軟件數(shù)據(jù)處理能力較弱,可以滿足一般教學的需要,但在面對大數(shù)據(jù)量的實際問題時往往計算能力不足,如lingo教學演示版有300個變量、150個約束條件的規(guī)模限制,很難滿足實際工作中動輒數(shù)千個變量的計算需求。如果要在實際應用中讓運籌學模型發(fā)揮作用,學生必須重新學習掌握其他的數(shù)據(jù)處理軟件,造成教學和實踐的脫節(jié)。R語言具有非常強大的數(shù)據(jù)處理能力,不僅在科研及教學中廣泛應用,也是一種普遍應用的數(shù)據(jù)挖掘工具。把R語言用于運籌學實驗教學,可以實現(xiàn)教學和實際應用的自然過渡。
3. R語言的實驗成本低。運用商業(yè)化教學軟件來搭建運籌學的實驗環(huán)境需要支付不菲的費用,也制約了學生在非實驗室環(huán)境對軟件的使用。如很多學校采用excel做為運籌學實驗教學的軟件,excel可以方便的與word、PowerPoint等辦公軟件銜接,操作也非常簡便,可以提高學生的學習積極性。但在我國知識產(chǎn)權(quán)保護越來越嚴格的環(huán)境下,如果采用excel來搭建運籌學教學的實驗環(huán)境,即使有教育系統(tǒng)的優(yōu)惠,也仍然是一筆不小的費用支出。而其他軟件如lingo和matlab即使是單機版軟件也動輒數(shù)萬元,甚至數(shù)十萬元,更是大多數(shù)高校和學生無法承擔的實驗成本。R語言是免費開源的軟件,核心模塊的安裝對硬件要求非常低,構(gòu)建實驗環(huán)境不需要支付任何費用。同時學生可以在自己的計算機上安裝R語言軟件,隨時使用軟件,降低了學生的學習成本。
4. R語言具有豐富的圖形展示功能。運籌學不僅涉及到大量的數(shù)據(jù)處理,網(wǎng)絡規(guī)劃部分還涉及較多的圖形分析的內(nèi)容。如果沒有直觀的圖形展示,學生理解和掌握相關(guān)內(nèi)容的難度較大。以往的運籌學教學軟件往往不具備強大的圖形分析和展示能力,給網(wǎng)絡規(guī)劃部分的實驗教學造成一定的困難,有些院校甚至不涉及這部分的實驗教學。R語言不僅具有強大的數(shù)據(jù)處理能力,其圖形展示能力也非常強大。R語言很好的實現(xiàn)了數(shù)據(jù)處理和圖形展示能力的統(tǒng)一,在網(wǎng)絡規(guī)劃部分的實驗教學中具有突出的優(yōu)勢。
二、構(gòu)建實驗環(huán)境
R語言是一款免費開源的軟件,可以通過網(wǎng)絡下載R語言軟件包進行安裝,在windows下啟動R,R的顯示窗口叫R控制臺,如圖1所示。
R可以在兩種模式下運行:交互模式和批處理模式。常用的是交互模式。在這種模式下,用戶每鍵入一條命令,R就會顯示運行的結(jié)果,然后用戶再鍵入新的命令,如此反復進行操作。批處理模式將R要做的工作按一定的規(guī)則和順序編寫為腳本,R會一次性處理全部或部分語句腳本,在腳本中,#后面的內(nèi)容為注釋,不參與語句的實際運算。本實驗中關(guān)于R語言的基本操作部分用交互模式,圖與網(wǎng)絡的實驗部分用批處理模式。
使用R語言進行運籌學實驗首先要安裝相應的package包,package的安裝可以下載package然后本地安裝,也可以通過網(wǎng)絡安裝。強烈推薦使用網(wǎng)絡安裝模式,因為每個package的運行可能涉及到其他包做輔助支撐,而這些支撐性的package在網(wǎng)絡環(huán)境下可以自動全部安裝,用本地安裝方式很容易忽略某些支撐包的安裝。網(wǎng)絡安裝package非常簡單,如本文舉例用到的igraph包的安裝,只要在R控制臺中輸入命令install.packages(“igraph”)即可,接下來R會要求用戶選擇安裝連接的網(wǎng)絡的站點,選擇網(wǎng)絡站點,R會自動完成整個包的安裝。如果安裝過程中提示安裝錯誤,可將殺毒軟件或防火墻關(guān)閉后重新操作。
為了節(jié)約內(nèi)存和避免函數(shù)名稱沖突,R默認不會載入每個已安裝的包。當用戶需要某個包時,只要用library()函數(shù)把該包載入到當前對話中即可。在一次會話中,包只需要載入一次。
在R中,完成所有工作的操作都稱為函數(shù)(function)。大部分函數(shù)都有如下的形式:f(argument1,argument2,…)。其中f是函數(shù)名,argument1、argument2是該函數(shù)的參數(shù)。實驗中的操作主要就是根據(jù)實際問題對這些參數(shù)進行賦值。如下面實驗中用到的創(chuàng)建一個數(shù)據(jù)矩陣的matrix()函數(shù)的用法。創(chuàng)建矩陣函數(shù)matrix(data,nrow=1,ncol=1,byrow=FALSE)
這里data是矩陣中包含的元素,其數(shù)量最多為nrow×ncol,nrow和ncol分別表示這個矩陣的行數(shù)和列數(shù)(默認值均為1),byrow的取值為TRUE或者FALSE(默認值為FALSE),它表示將data的元素是按行還是按列來填充矩陣。其它基本操作參見R語言操作手冊。
三、實驗內(nèi)容
實驗的過程是首先介紹實驗中用到的函數(shù),然后針對具體實例說明函數(shù)的運用以及解釋實驗的結(jié)果。下面以圖與網(wǎng)絡部分的最短路問題實驗為例,說明實驗的過程。
(一)最短路問題實驗用到的函數(shù)
首先介紹實驗中用到的R語言函數(shù)。本實驗中主要用到以下四個函數(shù),其中前兩個用于創(chuàng)建并繪制網(wǎng)絡圖,后兩個函數(shù)用于計算網(wǎng)絡圖中的最短路,四個函數(shù)的功能分別描述如下:
1. add.edges()函數(shù)
作用:用于創(chuàng)建網(wǎng)絡圖,按頂點序列給出圖中的邊或弧。
2. tkplot()函數(shù)
作用:交互式圖形繪制工具。可以調(diào)整節(jié)點及邊的位置、大小、顏色等參數(shù)。
3. distances()函數(shù)
作用:計算從網(wǎng)絡中的節(jié)點到節(jié)點的所有最短路徑的長度。
4. shortest.paths()函數(shù)
作用:從給定節(jié)點計算一條最短路徑,是路徑本身,不是路徑的長度,一般以路徑順序經(jīng)過的節(jié)點來表示。
(二)最短路問題描述
實驗涉及的最短路問題可表述如下:如圖2所示是一個單行線構(gòu)成的交通網(wǎng)絡,每個弧旁邊的數(shù)字表示這條單行線的長度?,F(xiàn)在從節(jié)點v_1出發(fā),經(jīng)過這個交通網(wǎng)到達節(jié)點v_8,求使總路程最短的線路[8]。運籌學理論課一般已講過最短路問題的dijkstra算法,學生對最短路問題的求解原理和步驟比較了解,實驗目的主要用于驗證算法的可行性和減少計算量。
(三)根據(jù)實驗問題編寫腳本
用library()函數(shù)加載igraph包,要始終注意解決特定的運籌學問題時,必須首先加載相應的package。
根據(jù)問題的數(shù)據(jù)和R語言的語法規(guī)則寫出實驗腳本。用腳本模式進行實驗的優(yōu)點是便于重復實驗和對語句的修改。腳本的編寫就是把具體問題的數(shù)據(jù)做為上面四個函數(shù)的參數(shù),分別按格式要求寫入函數(shù)的特定位置。本實驗中編寫的腳本只有6句。首先用matrix()函數(shù)創(chuàng)建網(wǎng)絡圖相關(guān)的數(shù)據(jù)矩陣,這里構(gòu)建的是一個3列矩陣,前兩列表示邊所對應的起點和終點,第三列元素表示對應邊的權(quán)。然后用g=add.edges()創(chuàng)建名稱為g的網(wǎng)絡圖。接下來用tkplot(g)畫出網(wǎng)絡圖g,調(diào)整節(jié)點位置,與教材上的圖保持一致。最后用shortest.paths()計算并顯示從節(jié)點1到其他節(jié)點的最短路徑,distances()計算并顯示從節(jié)點1到其他節(jié)點的最短路徑的長度
(四)實驗運行及結(jié)果
編寫好實驗的腳本后,就可以進行實驗的運行。實驗運行的方法是在腳本中選中相應的語句,然后點右鍵選擇執(zhí)行該語句即可。腳本的語句可以逐行代碼執(zhí)行,也可以選中多行代碼同時執(zhí)行。實驗中用tkplot()函數(shù)繪制出的網(wǎng)絡圖如圖3所示,經(jīng)過對節(jié)點位置的調(diào)整,可以看到圖形與問題描述的圖形基本一致,唯一的差別是節(jié)點5和節(jié)點6之間的兩個方向相反的弧,這里是用一條雙向的弧來代表。
實驗中計算出的從節(jié)點1到其它各個節(jié)點的最短路徑用依次經(jīng)過的節(jié)點來表示,如節(jié)點1到節(jié)點6的最短路徑是(1,3,2,5,6),意思是從節(jié)點1到節(jié)點6的最短路依次經(jīng)過括號中的節(jié)點。distances()函數(shù)計算的從起點到各節(jié)點的最短路的長度,如節(jié)點1到節(jié)點6的最短路的長度是10。軟件計算的結(jié)果與教材中人工計算的結(jié)果完全一致。
圖與網(wǎng)絡規(guī)劃部分的ford算法求最短路和網(wǎng)絡最大流問題也可以用同樣的步驟實現(xiàn)。
上述實驗內(nèi)容用于展示將R語言用于網(wǎng)絡規(guī)劃實驗教學的可行性,具體實驗中可以根據(jù)教學的內(nèi)容安排學生先人工計算課后的習題,再利用實驗課驗證人工計算的結(jié)果,加深學生對教材內(nèi)容的理解。
四、結(jié)束語
本文分析了R語言用于管理運籌學實驗教學的優(yōu)點,描述了運用R語言進行網(wǎng)絡規(guī)劃教學實驗的基本過程,針對最短路問題這個網(wǎng)絡規(guī)劃中的基本模型,詳細描述了實驗的步驟,實驗結(jié)果與人工計算結(jié)果一致。證明了R語言用于管理運籌學實驗教學的可行性。
參考文獻:
[1]方霞,曹潔,張平鳳.運籌學課程實驗教學探討[J].高教學刊,2016(19):83-84.
[2]劉春梅.管理運籌學基礎、技術(shù)及Excel建模實踐(第二版)[M].上海:格致出版社,上海人民出版社,2016.
[3]江文奇.管理運籌學[M].電子工業(yè)出版社,2014.
[4]楊毓玲.基于MATLAB的運籌學實驗教學研究[J].科技經(jīng)濟市場,2012(11):115-116.
[5]潘東東,童艷彩,陳興,等.基于R的運籌學實驗教學實踐與探討[J].統(tǒng)計與管理,2014(01):174-175.
[6]Team R C. R: A Language and Environment for Statistical Computing[Z]. Vienna, Austria: 2017.
[7]Csardi G, Nepusz T. The igraph software package for complex network research[J]. InterJournal, 2006, Complex Systems: 1695.
[8]吳祈宗.運籌學(第3版)[M].北京:機械工業(yè)出版社,2015.