常春 張舒
【摘要】本文主要闡述了如何利用計算機(jī)模擬來解決數(shù)學(xué)建模中的實際問題.首先,提出問題,根據(jù)問題的具體模式對其進(jìn)行分析整理.其次,對上述問題進(jìn)行數(shù)學(xué)建模.然后,利用計算機(jī)進(jìn)行模擬,主要分為隨機(jī)模擬(蒙特—卡洛方法)、離散系統(tǒng)模擬和連續(xù)系統(tǒng)模擬三種類型.最后對結(jié)果進(jìn)行分析,說明計算機(jī)模擬方法在數(shù)學(xué)建模中的有效性.
【關(guān)鍵詞】計算機(jī)模擬;數(shù)學(xué)建模;隨機(jī)模擬;離散系統(tǒng)
【中圖分類號】O242【文獻(xiàn)標(biāo)識碼】A
一、引言
模型(Model)和模型建構(gòu)(Modeling)不僅僅是科學(xué)理論體系中的重要內(nèi)容,也是我們認(rèn)識世界的重要工具和方法.計算機(jī)技術(shù)的飛速發(fā)展給許多學(xué)科帶來了巨大的影響,計算機(jī)使問題的求解變得更加簡單方便,同時,也使解決問題的領(lǐng)域變得更加寬泛.計算機(jī)適合解決不確定、規(guī)模大且難以解析化的數(shù)學(xué)模型.例如,對于一些帶隨機(jī)因素的復(fù)雜系統(tǒng)的問題,建模之前常需要做一些簡化假設(shè),這可能導(dǎo)致與實際情況相距甚遠(yuǎn),解答無法應(yīng)用.此時,利用計算機(jī)進(jìn)行模擬幾乎成為了唯一的選擇.在歷屆全國和國際大學(xué)生數(shù)學(xué)建模比賽(MCM/ICM)中,計算機(jī)模擬常用于去求解、檢驗,是建模過程中非常重要的一種方法[1].
一般地,計算機(jī)模擬在以下幾種情況中能有效解決問題:
(1)難以在實際環(huán)境中進(jìn)行實驗和觀察,只能用計算機(jī)模擬,比如太空飛行的研究;
(2)需要在短時間內(nèi)觀察到系統(tǒng)發(fā)展的全過程,用來估計某些參數(shù)對系統(tǒng)變化的影響;
(3)需要對系統(tǒng)進(jìn)行長時間觀察、運行比較,從大量方案中尋求最優(yōu)方案;
(4)難以用解析式表示的系統(tǒng);
(5)雖然有解析式,但是分析、計算過程過于復(fù)雜,只能借助計算機(jī)模擬來提供簡單可行的方法.
在通常情況下,計算機(jī)模擬是按時間來劃分的,因為計算機(jī)模擬實質(zhì)上是系統(tǒng)隨時間變化而變化的動態(tài)寫照.目前,計算機(jī)模擬大致可以分為隨機(jī)模擬(蒙特—卡洛方法)、離散系統(tǒng)模擬和連續(xù)系統(tǒng)模擬三類.其中,蒙特—卡洛(MontoCarlo)方法是典型的靜態(tài)模擬;離散系統(tǒng)模擬和連續(xù)系統(tǒng)模擬是屬于動態(tài)模擬.下面將就具體問題討論這三種數(shù)學(xué)建模競賽中經(jīng)常用到的模擬方法.
二、問題的定義與分類
數(shù)學(xué)建模的第一步,就是提出問題,對具體問題進(jìn)行分析、整理與歸類.
1.問題的定義
問題是指不能直接利用已有知識處理,但是可以間接用已有知識處理的情境[2].
2.問題的分類
根據(jù)計算機(jī)模擬的種類,問題主要可以分為以下三種模式:非線性規(guī)劃問題、離散系統(tǒng)問題和連續(xù)系統(tǒng)問題三種類型.下面舉例說明一下這三種不同類型的問題.
(1)非線性規(guī)劃(nonlinearprogramming)問題
非線性規(guī)劃是具有非線性約束條件或目標(biāo)函數(shù)的數(shù)學(xué)規(guī)劃,研究一個n元實函數(shù)在一組等式或不等式的約束條件下的極值問題,且目標(biāo)函數(shù)和約束條件至少有一個是未知量的非線性函數(shù).
例1非線性規(guī)劃問題
minf(x)x∈En.s.t.gi(x)≥0i=1,2,…,m.aj≤xj≤bjj=1,2,…,n.
(2)離散系統(tǒng)(discretesystem)問題
離散系統(tǒng)是指系統(tǒng)狀態(tài)只在有限的時間點或可數(shù)的時間點上有隨機(jī)事件發(fā)生的系統(tǒng).
例如排隊系統(tǒng),顯然,狀態(tài)量的變化只是在離散的隨機(jī)事件點上完成.假設(shè)離散系統(tǒng)狀態(tài)的變化是在一個時間點上瞬間完成的.
例2離散系統(tǒng)問題:庫存問題
在銷售部門、工廠等領(lǐng)域中都存在庫存問題,庫存太多造成浪費以及資金積壓,庫存太少不能滿足需求也會造成損失.部門的工作人員需決定何時進(jìn)貨,進(jìn)多少,使得所花費的平均費用最少,而收益最大,這就是庫存問題.
某企業(yè)當(dāng)天生產(chǎn)的產(chǎn)品必須售出,否則就會變質(zhì).該產(chǎn)品單位成本為2.5元,單位產(chǎn)品售價為5元.企業(yè)為避免存貨過多而造成損失,擬從以下2種庫存方案中選出一個較優(yōu)的方案:
方案甲:按前1天的銷售量作為當(dāng)天的庫存量;
方案乙:按前2天的平均銷售量作為當(dāng)天的庫存量.
(3)連續(xù)系統(tǒng)(continuoussystem)問題
連續(xù)系統(tǒng)是指時間和各個組成部分的變量都具有連續(xù)變化形式的系統(tǒng).例如自動控制系統(tǒng),只有當(dāng)受控過程和控制方式同時為連續(xù)時的系統(tǒng)才稱為連續(xù)控制系統(tǒng).
例3連續(xù)系統(tǒng)問題:追逐問題
追逐問題如圖,正方形ABCD的四個頂點各有一人.在某一時刻,四人同時出發(fā)以勻速v=1m/s按順時針方向追逐下一人,如果他們始終保持對準(zhǔn)目標(biāo),則最終按螺旋狀曲線交匯于中心點O.試求出這種情況下每個人的行進(jìn)軌跡.
三、模型的建立與計算機(jī)模擬
1.隨機(jī)模擬(蒙特—卡洛方法)
(1)蒙特—卡洛(MontoCarlo)方法簡介
蒙特—卡洛(MontoCarlo)方法(或稱隨機(jī)模擬法),是計算機(jī)模擬的基礎(chǔ),源于1977年法國科學(xué)家蒲豐提出的一種計算圓周率π的方法—隨機(jī)投針法,即著名的蒲豐投針問題[3].蒙特—卡洛方法的基本思想,是建立一個概率模型,使所求問題的解正好是該模型的參數(shù)或其他有關(guān)的特征量.然后,通過模擬多次隨機(jī)抽樣實驗,統(tǒng)計出某事件發(fā)生的百分比.只要實驗次數(shù)n很大,該百分比便近似于事件發(fā)生的概率.蒙特—卡洛方法屬于試驗數(shù)學(xué)的一個分支.
(2)模型建立
例1中,對于非線性規(guī)劃問題
minf(x),x∈En.
s.t.gi(x)≥0(i=1,2,…,m).
aj≤xj≤bj(j=1,2,…,n).
用蒙特—卡洛方法求解的基本思想是,在估計的區(qū)域{(x1,x2,……,xn)|xj∈[aj,bj],j=1,2,……,n}.
內(nèi)隨機(jī)取若干個試驗點,然后從試驗點中找出可行點,再從可行點中選擇最小點.
假設(shè)試驗點的第j個分量xj服從[aj,bj]內(nèi)的均勻分布.
符號假設(shè)
P:試驗點總數(shù);maxP:最大試驗點總數(shù);
K:可行點總數(shù);maxK:最大可行點數(shù);
X:迭代產(chǎn)生的最優(yōu)點;
Q:迭代產(chǎn)生的最小值f(X),其初始值為計算機(jī)所能表示的最大數(shù).
2.離散系統(tǒng)模擬
離散系統(tǒng)模擬是指對離散系統(tǒng),即系統(tǒng)狀態(tài)只在有限的時間點或可數(shù)的時間點上有隨機(jī)事件發(fā)生的系統(tǒng)進(jìn)行模擬.例如排隊系統(tǒng).本文例2中討論某企業(yè)生產(chǎn)的庫存系統(tǒng)的計算機(jī)模擬方法,這是排隊系統(tǒng)的一個典型例子.下面對例2中的問題進(jìn)行分析模擬:
(1)模型建立
假定市場對該產(chǎn)品的每天需求量是一個隨機(jī)變量,并且從以往的統(tǒng)計分析得知它服從正態(tài)分布:N(135,22.4).
計算機(jī)模擬的思路如下:
一、獲得市場對該產(chǎn)品需求量的數(shù)據(jù);
二、計算出按照2種不同方案,經(jīng)T天后企業(yè)所得的利潤值;
三、比較大小,并從中選出一個更優(yōu)的方案.
引入下列記號:
D:每天需求量;
Q1:方案甲當(dāng)天的庫存量;
Q2:方案甲當(dāng)天的庫存量;
S1:方案甲前1天的銷售量;
S21:方案乙前1天的銷售量;
S22:方案乙前2天的銷售量;
S3:方案甲當(dāng)天實際銷售量;
S4:方案乙當(dāng)天實際銷售量;
L1:方案甲當(dāng)天的利潤;
L2:方案乙當(dāng)天的利潤;
TL1:方案甲累計總利潤;
TL2:方案甲累計總利潤;
T:預(yù)定模擬天數(shù).
(2)模型的求解
利用Matlab編程來實現(xiàn)這一過程,這需要建立如下的M-文件:
function[TL1,TL2]=kucun(T,S1,S21,S22)
TL1=0;TL2=0;k=1;
whilek Q1=S1;Q2=(S21+S22)/2; D=normrnd(135,22.4); ifD S3=Q1; else S3=D; end ifD S4=Q2; else S4=D; end L1=5*S3-2.5*Q1;L2=5*S4-2.5*Q2; TL1=TL1+L1;TL2=TL2+L2; k=k+1; end S1=S3;S22=S21;S21=S4; 給出一個初值,反復(fù)運行上述程序,通過比較最后可得出每一個方案的優(yōu)劣.計算機(jī)模擬在排隊系統(tǒng)中其他方面如加工制造系統(tǒng)、訂票系統(tǒng)、計算機(jī)系統(tǒng)、交通控制系統(tǒng)等,都有廣泛的應(yīng)用. 3.連續(xù)系統(tǒng)模擬 對連續(xù)系統(tǒng)的模擬,實際上是將連續(xù)狀態(tài)變量在時間上進(jìn)行離散化處理,并由此模擬系統(tǒng)的運行狀態(tài).下面對例3中的問題進(jìn)行分析模擬: (1)模型建立 a.建平面直角坐標(biāo)系A(chǔ)(x1,y1),B(x2,y2),C(x3,y3),D(x4,y4). b.取時間間隔為Δt,計算每一點在各個時刻的坐標(biāo). 設(shè)某點在t時刻的坐標(biāo)為(xi,yi),則在t+Δt時刻的坐標(biāo)為(xi+vΔtcosα,yi+vΔtsinα), 其中cosα=xi+1-xid,sinα=yi+1-yid, d=(xi+1-xi)2+(yi+1-yi)2. c.取足夠小的ε,當(dāng)d<ε時結(jié)束算法. d.連接每一個點在各個時刻的位置,即得所求運動軌跡(如圖2). (2)模型的求解 利用Matlab編程來實現(xiàn)這一過程,這需要建立如下的M-文件: v=1;dt=0.05;x=[001010];x=[010100];fori=1:4plot(x(i),y(i),'.'),holdonendd=20;while(d>0.1)x(5)=x(1);y(5)=y(1);fori=1:4d=sqrt((x(i+1)-x(i))^2+(y(i+1)-y(i))^2);x(i)=x(i)+v*dt*(x(i+1)-x(i))/d;y(i)=y(i)+v*dt*(y(i+1)-y(i))/d;plot(x(i),y(i),'.'),holdonendend 四、結(jié)果分析 對以上各個例子中的結(jié)果進(jìn)行分析,發(fā)現(xiàn)計算機(jī)模擬的結(jié)果能更加真實的表現(xiàn)系統(tǒng)實際的動態(tài)變換過程.事實上,還有很多實際問題都可以用計算機(jī)模擬來解決,如背包問題、安排比賽選手的比賽日程、三國時期的“華容道”問題等等都可以用計算機(jī)模擬來解決. 總之,使用計算機(jī)模擬來進(jìn)行數(shù)學(xué)建模,可以使求解更加快捷、方便和精確,另外,也使得解決問題的領(lǐng)域擴(kuò)大,從離散、連續(xù)確定性領(lǐng)域延伸到隨機(jī)的非確定性領(lǐng)域,計算機(jī)模擬正是處理此類問題的重要方法. 【參考文獻(xiàn)】 [1]謝國瑞,郝志峰,汪國祥.概率論與數(shù)理統(tǒng)計[M].北京:高等教育出版社,2012. [2]王沫然.Matlab7.0與科學(xué)計算[M].北京:電子工業(yè)出版社,2011. [3]趙靜,但琦,嚴(yán)尚安,等.數(shù)學(xué)建模與數(shù)學(xué)實驗[M].北京:高等教育出版社,2010.