




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第七章GPSS/JAVA中級建模技術北京市高等教育精品教材《管理系統仿真與GPSS/JAVA》任毅教授§7GPSS/JAVA中級建模技術§7.1標準屬性§7.2動態實體參數§7.3動態實體的駐留與傳輸§7.4表實體與隊列表實體§7.5GPSS變量實體的表達方式§7.6保存值實體(Savevalue)§7.7test模塊§7.8loopgate與buffer模塊§7.9select模塊§7.10標準屬性IN及用戶控制的輸出§7.11表的間接引用的處理§7.1標準屬性1)什么是標準屬性標準屬性由GPSS/JAVA以方法的形式提供,用以返回在模型運行的某個時刻,仿真模型的狀態屬性(當前隊長、設備忙閑狀況、存儲器利用率)以及某動態實體的屬性值(如動態實體的駐留時間、動態實體某參數的值等)。2)標準屬性(SAStandardAttribution)的分類:a.標準數值屬性(簡稱SNAStandardNumbericAttribution
)返回數值b.標準邏輯值屬性(簡稱SLAStandardloginicAttribution
)返回邏輯值c.和標準實體屬性(簡稱SOAStandardObjectAttribution
)返回實體對象§7.1標準屬性1.設備類中封裝了如下標準屬性()
intF$()若設備忙返回1否則返回0
intFC$()返回當前進入設備的動態實體總數
intFI$()若設備當前被搶占返回1否則返回0
intFNI$()若設備當前未被搶占返回1否則返回0
intFNU$()若設備閑返回1否則返回0
doubleFR$()返回當前設備的平均利用率
doubleFT$()返回當前設備的平均使用時間標準邏輯值屬性(SLA)booleanF()若設備忙返回真否則返回假
booleanFI()若設備正被搶占返回真否則返回假
booleanFNI()若設備當前未被搶占返回真否則返回假
booleanFNU()若設備閑返回真否則返回假§7.1標準屬性1.設備類中封裝了如下標準數值屬性(節選)intR$()返回存儲實體當前剩余容量
intS$()返回存儲實體當前容量
doubleSA$()返回存儲實體當前平均服務容量doubleSR$()返回存儲實體當前平均利用率量
doubleST$()存儲實體當前平均服務時間
booleanSE()若存儲實體當前為空返回真否則返回假
booleanSF()若存儲實體容量已滿返回真否則返回假
booleanSNE()若存儲實體當前非空返回真否則返回假
booleanSNF()若存儲實體容量未滿返回真否則返回假2.設備類中封裝了如下標準邏輯值屬性(節選)§7.1標準屬性1.隊列類中封裝了如下標準數值屬性(節選)
intQ$()隊列標準數值屬性返回隊列當前隊長
doubleQA$()隊列標準數值屬性返回隊列當前平均隊長
intQC$()隊列標準數值屬性返回隊列當前動態實體進入總數
intQM$()隊列標準數值屬性返回隊列當前最大隊長
doubleQT$()隊列標準數值屬性返回隊列當前平均等待時間
doubleQX$()返回隊列當前平均等待時間(不計等待時間為零)
intQZ$()返回隊列當前動態實體(等待時間為零)進入總數2.隊列類中封裝了如下標準邏輯值屬性(節選)
booleanQE()隊列標準邏輯值屬性若隊列空返回真,否則返回假
booleanQNE()隊列標準邏輯值屬性若隊列非空返回真,否則返回假§7.1.1系統標準屬性1.系統標準屬性可分為資源實體標準屬性和全局標準屬性。1)與資源實體直接關聯的標準屬性稱為資源實體標準屬性,它們以方法的形式封裝在各個資源實體類中,例如設備類中封裝了如下標準屬性
booleanF()若設備忙返回真否則返回假
intF$()若設備忙返回1否則返回0
intFC$()返回當前進入設備的動態實體總數
booleanFI()若設備正被搶占返回真否則返回假
intFI$()若設備當前被搶占返回1否則返回0
booleanFNI()若設備當前未被搶占返回真否則返回假
intFNI$()若設備當前未被搶占返回1否則返回0
booleanFNU()若設備閑返回真否則返回假
intFNU$()若設備閑返回1否則返回0
doubleFR$()返回當前設備的平均利用率
doubleFT$()返回當前設備的平均使用時間§7.1.1系統標準屬性2)其它與資源實體無直接關聯的標準屬性稱為全局標準屬性。
§7.1.1系統標準屬性設備實體類封裝的方法,其中包括設備實體的相關屬性§7.1.2應用舉例1.問題陳述有一汽車沖洗站,只有一個沖洗工。汽車平均到達時間為5分鐘,指數分布。沖洗一輛汽車的時間也服從指數分布,但平均沖洗時間取決于隊列長度,等待沖洗的汽車較少時,則服務時間較長,等待的車輛較多時,服務時間加快。觀測得到如下統計數據:隊列長度平均服務時間(秒)03301.23003、4或者52706或者更多240建立模型,模擬沖洗1200輛車,確定沖洗一輛車平均所需時間。
§7.1.2應用舉例2.實體定義時間單位:10秒鐘模型實際系統動態實體子模型1洗車車輛設備實體server沖洗工排隊實體waitQ獲得排隊信息函數實體mean平均沖洗時間,自變量Q$(waitQ),類型C,值對數4§7.1.2應用舉例3.模型程序
沖洗一輛車平均需要281.99秒。§7.2動態實體參數4.參數的意義動態實體每個參數的值為動態實體的一個屬性的值,其意義由用戶隱含指定。例如,某模型中動態實體代表實際系統的汽車,則動態實體(汽車)1號和2號整型參數,及3號實型參數的意義可由用戶說明為:P$(1)(汽車顏色)P$(2)(制造廠家)PD$(3)(載重量)1棕色1上海1010噸2藍色2長春2020噸3綠色3湖北4040噸4灰色4北京6060噸動態實體參數作為一種標準數值屬性,可作為模塊的操作數和函數的自變量等來使用。§7.2.2assign模塊與動態實體參數的賦值1.作用動態實體進入該模塊,其某號參數的數值被修改。2.操作符、操作數與模塊圖(1)標準模式assign(inta,intb):為整型參數賦值參數a:整型,代表要修改的參數編號,缺省則出錯參數b:整型,代表要修改的參數為整型及其修改后的數值,缺省則出錯例如,assign(3,25);assign(inta,doubleb):為實型參數賦值參數a:整型,代表要修改的參數編號,缺省則出錯參數b:雙精度實型,代表要修改的參數為實型及其修改后的數值,缺省則出錯例如,assign(3,25.0);a,bassign§7.2.2assign模塊與動態實體參數的賦值動態實體參數賦值的遞增模式(整型)assignPlus(inta,intb)assignPlus模塊有2個操作數,其含義如下:a:整型,整型表達式或SNA,代表要修改的參數編號,不能缺省b:整型,整型表達式或SNA,代表要修改的參數為整型及其修改后遞增的數值,不能缺省例如,assignPlus(3,Q$(line);,假設某動態實體進入該模塊前,其3號整型參數值為25,進入時隊列line當前隊長為4,則該動態實體在進入后其3號整型參數值被修改為29。動態實體參數賦值的遞增模式(實型)assignPlus(inta,doubleb)a,bassignPlus§7.2.3應用舉例1.問題陳述:有一小超市由三個商品區組成,擺放不同類型商品,超市出口設有一收銀臺,只有一個服務員收付款。顧客到達超市的平均間隔為75妙,指數分布,到達后由入口處取一個裝貨的手推車,然后去三個商品區挑選商品。顧客去三個商品區的概率,在每區停留的時間和所選商品個數如下所示:商品區
概率
停留時間(秒)選中商品個數分布
1
0.75
120±60
3±1均勻分布
2
0.55
150±30
4±1均勻分布
3
0.82
120±45
5±1均勻分布
顧客選完商品后去收銀臺排隊付款,付款處有一小商品貨架,顧客排隊時會選2±1個小商品(均勻分布),服務員收款時間取決于顧客所買商品數量,平均每件需要3秒鐘,顧客交款以后將裝貨小車放回入口處。構造模型,模擬40小時,確定該超市最多需要配多少臺裝貨手推車。§7.2.3應用舉例2.實體定義:假設小車充足,取一很大成員數目(容量)的存儲實體代表所提供的小車服務,根據此存儲實體的最多同時忙的成員數(在超市中最多時的顧客數)可以確定最多需要的小車數量
§7.2.3應用舉例時間單位:1秒鐘模型實際系統動態實體子模型1顧客P$(1)存放該顧客挑選商品的數量子模型2時間控制員
設備實體
girl收銀員
存儲實體
carts裝貨手推車(容量無限大)排隊實體
girlQ輸出收銀臺排隊統計信息
標準函數
uniformInt(1,2,4)在商品區1所選商品數目
uniformInt(1,3,5)在商品區2所選商品數目
uniformInt(1,4,6)在商品區3所選商品數目
uniformInt(1,1,3)排隊時會所選小商品數目
地址實體
try2商品區2通道
try3商品區3通道
pay收銀臺2.定義實體:§7.3動態實體的駐留與傳輸動態實體的駐留與傳輸是指其在模型中的駐留與傳輸。駐留:動態實體從進入模型到其流出模型所耗費的整個過程傳輸:動態實體從模型的一個模塊到另一個模塊的運動過程。
7.3.1動態實體駐留時間動態實體駐留時間是指從動態實體進入模型開始到當前時刻在模型中停留的時間。標準數值屬性M1$()返回某動態實體的駐留時間。
......start(2);......generate(25);advance(30,10);print(NEW,“Residenttime=”,M1$());terminate(1);......
§7.3.2動態實體的傳輸時間動態實體傳輸時間是指動態實體從模型的一個模塊移動至另一模塊所需時間。因此可見,動態實體駐留時間是其傳輸時間的一個特例,即其起始模塊是產生它的generate模塊。確定一個動態實體的傳輸時間要按照以下三步來實現。1.指定動態實體的某號參數(設為n),用于記錄時間在起始點,使用mark(n)模塊將絕對時鐘時間復制到n號實型參數
在終點,調用標準數值屬性MP$(n),獲得當前絕對時鐘時間與該動態實體的n號實型參數值之差,即為該動態實體由起始點到終點的傳輸時間§7.4.1表實體與隊列表實體的定義對列表實體:隊列表實體是一種特殊的表實體。它是使用類庫gpssjv的類QTable創建的一個隊列表對象。QTable類重載的構造方法:publicQTable(Queueq,double
a,double
b,int
c)其中,q為隊列對象,表示該表統計的對象是動態實體在隊列q的等待時間,表的輸出名自動命名為QTABL1,其它同上。publicQTable(String
name,Queueq,double
a,double
b,int
c)例如,QTablewaitq=newQTable(“Waittime”,line,20,2,8);定義了隊列表實體waitq,輸出名為Waittime,該表統計的對象是動態實體在隊列line的等待時間。§7.4.3表實體統計數據(1)名稱:表輸出名,若為QTable類型則另輸出對應的排隊實體輸出名(2)統計總數:輸入表實體的樣本總數(3)平均值:樣本平均值(4)標準差:代表樣本值的離散性(5)樣本值總和:所有輸入變量值的總和(6)表字段(1)行間隔值若某間隔內樣本數為0,則各字段輸出為空,行間隔最小值為表定義時指定的下界值,行間隔值為上一行值加上表間隔值(2)頻數為樣本值落入該間隔行的樣本數(3)頻率樣本值落入該間隔行的樣本數/統計總數(4)累積頻率第一行累積頻率等于本行樣本頻率,其它行累積頻率等于緊前行累積頻率與本行頻率之和(5)1-累積頻率1-本行累積頻率§7.4.4應用舉例1.問題陳述對于7.2.3應用舉例中的小超市問題,假設其它條件不變,除了要確定該超市最多需要配多少臺裝貨手推車之外,還要求確定顧客在此小超市的停留時間的分布,以及顧客在收銀臺等待時間的分布。2.實體定義其它實體與7.2.3相同,新模型只增加二個表實體。
時間單位:1秒鐘模型實際系統表實體rTime顧客在超市停留時間的分布輸入變量M1$()隊列表實體wTime顧客在收銀臺排隊等待時間的分布3.建模提示表實體wTime是Qtable類型,只需定義,無需用戶安排調用,表實體rTime應在顧客付帳后離開系統前調用§7.4.3表實體統計數據§7.4.3表實體統計數據§7.4.3表實體統計數據以上輸出表明,顧客在小超市平均停留時間為315.1956秒,近似正態分布,標準差為119.1760。顧客在收銀臺平均等待時間為11.3382秒,近似指數分布。比較通過表實體wTime和排隊實體girlQ所獲得的顧客在收銀臺處的排隊的平均等待時間稍有差異:前者未將模擬結束時仍在隊列中的顧客記入總數,而后者兩項數據在計算平均等待時間時都予以了考慮。§7.4.5表調用語句的包裝與重載調用表的第二種方式:為了保持GPSS的語法習慣,GPSS/JAVA提供了表調用語句的包裝方法resiTAB()包裝了resi.tabulate(M1$())§7.4.5表調用語句的包裝與重載調用表的第三種方式:重載tabulate方法§7.4.5表調用語句的包裝與重載調用表的第三種方式:重載tabulate方法§7.5GPSS變量實體的表達方式7.5.1GPSS變量1.定義變量
PROFITVARIABLE5*N(PATH)-102.在模型中使用變量實體而不直接使用表達式具有如下好處:(1)意義明確通過變量名我們可以概括表達式的意義(2)程序簡潔。如果表達式很長,或模型多處要引用同一表達式,使用變量調用比直接使用表達式不僅意義明確而且十分簡潔。§7.5.2用java方法包裝GPSS變量表達式GPSS變量的上述功能完全可以直接由JAVA的方法來實現。這個方法作為模型類的成員方法,可以被同一類的成員方法simulate內的各個模塊語句所訪問,方法的返回值可以是一個數值表達式也可以是一個邏輯表達式。
intprofitV(){return5*N$(PATH)–10;}
變量類型變量名(){return表達式;}1.變量實體的標準屬性名為:變量名()。建議變量名的最后一個字符為V,以便識別。2.變量所表示的表達式必須是一個合法的JAVA算術表達式或關系表達式或邏輯表達式。3.模型運行結束時,輸出結果文件中不包含變量實體的標準輸出。
§7.5.3算術、關系和邏輯表達式JAVA常用的算術運算符有:+、-、*、/和%
JAVA關系運算符有:>、<、>=、<=、==和!=后兩者優先級高JAVA邏輯運算符有:!、&&和||:優先級非—>與—>或以上運算符的優先級別是:先!、后算術、次關系、再與、最后或。§7.5.4GPSS/JAVA的變量實體GPSS/JAVA使用類似其它資源實體的數據結構定義了變量實體類(Variable),目的是使變量的調用能夠以更標準的GPSS的形式進行,用戶可以使用Variable類創建變量實體對象。§7.5.5變量調用方法的標準形式GPSS/JAVA§7.6保存值實體保存值實體簡稱保存值或保留值,是輔助實體,屬于資源實體。保存值實體存放一個數值并且允許在模型運行過程中被修改。保存值實體與變量實體的不同點1.保存值實體自被定義時,始終存放某個值,變量值僅在調用時返回2.變量的值僅能通過調用獲得(只讀),保存值的值可讀可寫。因此GPSS的保存值類似于JAVA等高級語言中的數值型變量,而GPSS的變量則類似于JAVA等高級語言的方法或函數。§7.6.1保存值的定義和使用。保存值實體的構造方法:Savevalue(String
s)其中,s為輸出名,保存值實體初始值缺省為0Savevalue()其中,輸出名缺省,系統自動命名為SAVA1,保存值實體初始值缺省為0Savevalue(.String
s,double
v)其中,s為輸出名,保存值實體初始值為vSavevalue(double
v)其中,輸出名缺省,系統自動命名為SAVA1,保存值實體初始值為v例如,Savevalueprofit=newSavevalue(“Profit”,20.0);§7.6.1保存值的定義和使用。保存值的數值類型為雙精度實型。保存值實體定義后,在模型中可通過其標準數值屬性來引用。保存值類中定了兩個方法用戶返回保存值實體對象的值:1.doubleX$()返回保存值對象的當前值2.IntXI$(),將當前保存值對象的值取整后返回保存值對象的包裝方法doubleX$(Savevalues)其中,s為保存值對象。例如X$(profit)返回保存值實體profit的值。另一個保存值的標準數值屬性的原型為:intXI$(Savevalues)其中,s為保存值對象,該屬性將保存值s的值取整后返回。§7.6.2saveValue模塊和保存值的修改1.作用動態實體進入該模塊,修改指定的保存值實體的數值。2.操作符、操作數與模塊圖(1)標準模式(包裝后)saveValue(Savevaluea,doubleb)saveValue模塊有2個操作數,其含義如下:a:保存值對象,代表要修改的保存值實體,不能缺省b:實型,實型表達式或SNA,代表要修改的保存值實體修改后的數值,不能缺省例如,saveValue(profit,25);,當動態實體進入此模塊時,保存值實體profit的值被修改為25。(面向對象的調用方式)profit.saveValue(25):將保存值對象profit的當前值修改為25.saveValuea,b§7.6.2saveValue模塊和保存值的修改(2)遞增模式savePlus(Savevaluea,doubleb)savePlus模塊有2個操作數,其含義如下:a:保存值對象,代表要修改的保存值實體,不能缺省b:實型,實型表達式或SNA,代表要修改的保存值實體修改后遞增的數值,不能缺省例如,savePlus(profit,4);,假設某動態實體進入該模塊前,profit值為25,則該動態實體在進入后,其值被修改為29。面向對象的調用方式:porfit.savePlus(4);savePlusa,b§7.6.2saveValue模塊和保存值的修改(3)遞減模式saveMinus(Savevaluea,doubleb)saveMinus模塊有2個操作數,其含義如下:a:保存值對象,代表要修改的保存值實體,不能缺省b:實型,實型表達式或SNA,代表要修改的保存值實體被修改后遞減的數值,不能缺省例如,saveMinus(profit,4);,假設某動態實體進入該模塊前,profit值為25,則該動態實體在進入后其值被修改為21。以上三模塊為資源模塊語句,允許使用如下面向對象形式:profit.saveValue(25);profit.savePlus(4);profit.saveMinus(4);saveMinusa,b§7.6.3reset和clear語句對保存值的影響模型控制語句reset()不影響保存值,模型控制語句clear()使所有保存值的數值歸0。使用如下clear語句的重載方法,可以使指定的保存值實體保持原值,而不被歸0。clear(int…
a)其中,a為不被歸0的保存值實體編號列表。保存值實體依照在模型中定義的先后順序被依次編號,編號從1開始。例如,clear(5,2);或者使用如下clear語句的重載方法,也可以使指定的保存值實體保持原值,而不被歸0。clear(Savevalue…
a)其中,a為不被歸0的保存值實體對象列表。例如,clear(count,profit);表示模型清除時將保持count和profit保存值實體值不變,而其它保存值實體的值被歸0。
§7.6.4保存值的重新定義使用模型控制語句redefine如下的重載形式,可以在新的一輪模擬開始時對模型的原有保存值的初始值進行重新定義。redefine(Savevaluename,doublev)其中,name為重定義值的保存值對象名,v為重新定義的初始值,為一實型表達式。例如,redefine(profit,45);重新定義保存值profit初值為45。保存值的重定義語句應置于clear語句之后。
面向對象的書寫方法:profit.redefine(45);§7.6.5保存值的輸出模擬結束時,變量和動態實體參數的值不包含在輸出結果文件的標準輸出中。但保存值作為標準輸出包含在輸出文件中,其形式如下。保存值實體輸出名保存值實體值...§7.6.6應用舉例1.問題陳述對于4.9.4中的設備裝配與包裝問題,要求將利潤計算安排在模型中,使輸出結果直接顯示不同雇工人數的日均生產利潤。4.9.4中給出的利潤計算條件為:工人的工資為10¥/小時/人,包裝機的耗電、維修和折舊費用為280¥/8小時,設備的另配件和包裝費用12¥/臺,設備售價40¥/臺。要求:建立計算機模型,在結果文件中包含利潤的計算結果。
§7.6.6應用舉例2.實體定義§7.6.6應用舉例3.模型程序§7.7test模塊Test模塊語句有兩種模式:關系模式和邏輯模式關系模式:1.關系模式(1)作用根據模塊輔助操作符指定的操作數a和b的關系成立與否,決定動態實體是進入該模塊,還是轉移至某指定模塊;如果輔助操作符指定的關系成立,則動態實體流入該模塊,否則轉入c操作數指示的模塊。(2)操作符、操作數與模塊圖cabtestx轉移模式test(int
x,double
a,double
b,Addr
c)關系轉移模式的test模塊有4個操作數,其含義如下:a:實型,SNA或算術表達式,不能缺省b:實型,SNA或算術表達式,不能缺省c
ab
testx轉移模式C§7.7test模塊-關系模式1.關系模式test(int
x,double
a,double
b,Addr
c)a:實型,SNA或算術表達式,不能缺省b:實型,SNA或算術表達式,不能缺省x:輔助操作符,表示操作數a和b的關系,有效的輔助操作符及其意義如下:輔助操作符代表的關系Ga>bGEa≥bLa<bLEa≤bEa=bNEa≠bc:標號對象,若x定義的關系不成立,所轉入的模塊的標號對象,不能缺省§7.7test模塊—拒絕模式以上為test模塊的關系轉移模式,其拒絕模式采取如下的重載形式:test(int
x,double
a,double
b)其中,輔助操作符x和操作數a與b意義同上。當輔助操作符x定義的操作數a與b的關系成立時,動態實體被允許進入該模塊,否則停留在其緊前模塊,直到關系成立。例如,test(GE,X$(line1),X$(line2));,表示若保存值line1的值大于或等于保存值line2時,動態實體將流入此模塊,否則將停留在其緊前模塊。test模塊的關系模式還提供了用于兩個整型表達式比較的如下重載形式:test(int
x,int
a,int
b,Addr
c)test(int
x,int
a,int
b)這兩個重載模塊分別對應test模塊的關系轉移和關系拒絕模式,區別僅僅在于a和b操作數代表的是整型表達式。ab
testx拒絕模式§7.7test模塊—邏輯模式(1)作用根據模塊輔助操作符指定的操作數a的值為真還是假,決定動態實體是進入該模塊,還是轉移至某指定模塊;如果輔助操作符指定的關系成立,則動態實體允許流入該模塊,否則轉入b操作數指示的模塊。(2)操作符、操作數與模塊圖test(int
x,boolean
a,Addr
b)x:輔助操作符,表示操作數a的值為真還是為假的成立關系,有效的輔助操作符及其意義如下:T操作數a返回真,則為真F操作數a返回假,則為真a:boolean類型,關系表達式、邏輯表達式或邏輯變量b:標號對象,若x定義的關系不成立,所轉入的模塊的號對象,不能缺省。例如:test(T,Q$(line1)>Q$(line2)||Q$(line1)>Q$(line3),bybye);,b
xa
test轉移模式§7.7test模塊—邏輯拒絕模式以上為test模塊的l邏輯轉移模式,其邏輯拒絕模式采取如下的重載形式:
test(int
x,boolean
a)其中,輔助操作符x和操作數a意義同上。當輔助操作符x定義的操作數a的關系成立時,動態實體被允許進入該模塊,否則停留在其緊前模塊,直到關系成立。例如,test(T,Q$(line1)>Q$(line2)&&Q$(line1)>Q$(line3));,表示若隊列line1的當前隊長既大于隊列line2的當前隊長又大于line3的當前隊長時,動態實體將流入此模塊,否則停留在其緊前模塊。邏輯模式用于構造復雜的關系,建議在模型中先定義邏輯變量實體來表達這種關系,然后將其作為test模塊邏輯模式的a操作數。
xa
test拒絕模式§7.7test模塊—3)應用舉例(1)問題陳述有一書店,某種書籍的日銷量為均勻分布,平均日銷量為9到15本。當該書庫存量低于最低庫存點時,書店須發出訂貨單,每批訂貨量為150本。從訂貨至到貨需要一段時間,所需時間為6到8天,均勻分布。若某日銷量大于庫存量時,則產生脫銷,書店根據過去經驗,該種書籍最低庫存點應為50本。若每次訂貨量較少,則會產生脫銷,若訂貨量過大,則積壓資金。建立仿真模型,確定訂貨量分別為110、130、150、170和190本時,庫存量的分布和日脫銷量的分布,以便對訂貨批量作進一步決策的參考。每輪模擬1000天,假設,書到貨當天需要辦理各種手續而不上架銷售。§7.7test模塊—3)應用舉例(2)建模提示1).書店售貨員比書店采購員有較高優先權,某天采購員取貨回來時,在當前事件鏈代表兩“同發事件”的動態實體中肯定代表售貨員的動態實體排在先,而先被處理,即售貨在先,入庫在后而不作為當天庫存來銷售。2).變量實體rLostV()為JAVA方法,返回某日脫銷量,定義如下,intrLostV(){if(P$(1)>X$(sTock))returnP$(1)–(int)X$(sTock);elsereturn0;}//P$(1)為某日可銷量,X$(sTock)為該日售前庫存量3).變量實體rStockV()為JAVA方法,返回某日售后庫存量,定義如下,intrStockV(){if(P$(1)>=X$(sTock))return0;elsereturn(int)X$(sTock)-P$(1);§7.7test模塊—3)應用舉例(3)實體定義§7.7test模塊—3)應用舉例(4)模塊圖§7.7test模塊—3)應用舉例(5)源程序(略)(6)仿真結果Java整數數據類型和實數數據類轉換的語法規則1).JAVA規定,實型數據向整型轉換必須采取強制轉換的方式,否則編譯會報錯。例如以上兩方法,返回值已經定義為int類型,若返回表達式值的類型為double則會產生編譯錯誤。2).要注意assign模塊的使用,assign即可給動態實體的整型參數賦值,也可以給動態實體的實型參數賦值,究竟給哪種參數賦值僅取決于該模塊操作數b的類型。若操作數b為實型數,則肯定是給動態實體的某號實型參數賦值。3).如果一個模塊語句的操作數在其原型中定義為整型,而調用時傳遞的實參為實型,則會產生數據類型不匹配的編譯錯誤。此時要么實參改為整型數據,要么使用強制類型轉換符(int)。如果其操作數在原型中定義為實型,那么實參操作數即可以是整型(系統自動轉換)也可以是實型。4).GPSS/JAVA提供的所有接口語句的參數類型或返回值的類型若為數值型,則只使用JAVA的兩種基本類型即int類型的整型(4個字節)和double類型的實型(16個字節)。若接口語句的參數類型或返回值的類型為邏輯值型,則使用的是JAVA的boolean類型,其返回值為true或false。
§7.8邏輯開關實體(switch)邏輯開關實體簡稱開關實體,是輔助實體,屬于資源實體。邏輯開關實體實際上是一種特殊的保存值實體,它的值助記為SET或RESET,代表兩種不同的邏輯狀態(真或假,假或真),作用類似開關。§7.8.1邏輯開關的定義與引用7.7.1邏輯開關實體的定義與引用開關實體必須先定義后使用。Switch類提供了如下重載的構造方法,用于對開關對象的狀態進行初始化。Switch(String
s)其中,s為輸出名,初始狀態缺省為RESETSwitch()其中,輸出名缺省,系統自動命名為SWIT1,初始狀態缺省為RESETSwitch(.String
s,intstate)其中,s為輸出名,初始狀態為state,state只能為助記符SET或RESETSwitch(intstate)其中,輸出名缺省,系統自動命名為SWIT1,參數state意義同上例如,Switchls=newSwitch(“Logicswich”,SET);定義了開關實體ls,輸出名為Logicswich,初始狀態為SET。§7.8.1邏輯開關的定義與引用開關實體定義后,在模型中可通過標準屬性來引用,以返回對某開關當前狀態的判斷,其原型為intLS$(Switchs)其中,s為開關對象,表示若開關s當前狀態為SET,則返回值為1,否則為0。intLR$(Switchs)其中,s為開關對象,表示若開關s當前狀態為RESET,則返回值為1,否則為0。booleanLS(Switchs)其中,s為開關對象,表示若開關s當前狀態為SET,則返回值為true,否則為false。booleanLR(Switchs)其中,s為開關對象,表示若開關s當前狀態為RESET,則返回值為true,否則為false。例如,若開關ls當前狀態為RESET,則LS$(ls)返回值為0。面向對象的表示方法ls.LS$();ls.LR$();ls.LS();ls.LR();§7.8.2lgoic模塊與邏輯開關狀態的改變1.作用動態實體進入該模塊,將指定的邏輯開關實體的狀態改變為指定的狀態。操作符、操作數與模塊圖logic(Switch
a,intb)a:開關對象,代表要改變狀態的開關實體,不能缺省b:助記符,代表開關實體被設置的狀態,不能缺省,合法的助記符如下,
SETRESETREVlogicba其中,REV表示將開關設置為與原狀態相反的狀態。例如,logic(ls,SET);將開關ls狀態設置為SET,再執行語句logic(ls,REV);則使開關ls狀態變為RESET。logic模塊為資源模塊語句,允許使用面向對象形式ls.logic(REV);來書寫。§7.8.3邏輯開關的重新定義使用模型控制語句redefine如下的重載形式,可以在新的一輪模擬開始時對模型的原有開關狀態進行重新定義。redefine(Switchname,intstate)其中,name為重定義的開關對象名,state為重新定義的初始狀態,例如,redefine(ls,SET);重新定義開關ls初始狀態為SET。開關重定義語句應置于clear語句之后使用,clear語句使所有開關狀態設置為RESET。logicba§7.9loop、gate和buffer模塊loop、gate和buffer模塊都屬于操作模塊。7.9.1loop模塊1.產生動態實體的循環在模型中可以使用assign和test模塊的配合來產生動態實體的局部循環流動,例如,......1generate(0,0,0,1);2assign(2,5);3A(next);seize(barber);4advance(5);5release(barber);6assignMinus(2,1);7test(E,P$(2),0,next);8terminate();......§7.9loop、gate和buffer模塊2.使用loop模塊產生循環(1)作用動態實體進入該模塊時,處理程序會將該動態實體的某號整型參數的值減少1,然后檢驗該整型參數的值是否為0,若為0,則該動態實體流入緊后模塊,否則轉入具有指定標號的模塊。(2)操作符、操作數與模塊圖loop(inta,Addrb)a:整型,代表動態實體的某整型參數的編號,不能缺省b:標號對象,代表循環時要轉入的模塊的標號對象loop
ab§7.9loop、gate和buffer模塊例如,的程序片段的循環可以使用loop模塊來實現:......1generate(0,0,0,1);2assign(2,5);3A(next);seize(barber);4advance(5);5release(barber);6loop(2,next);7terminate();......可見使用loop模塊實現循環更為簡單和明了。§7.9.2gate模塊gate模塊具有轉移和拒絕兩種模式。1.作用根據模塊輔助操作符指定的操作數a代表的資源實體狀態存在與否,決定動態實體是進入該模塊,還是轉移至某指定模塊。如果輔助操作符指定的狀態存在,則動態實體流入該模塊,否則轉入c操作數指示的模塊。2.操作符、操作數與模塊圖gate(int
x,Object
a,Addr
b)a:或邏輯開關或設備或存儲器對象或標號對象,不能缺省b:標號對象,若輔助操作符所定義的狀態不存在,動態實體所轉入的模塊的標號對象,不能缺省x:輔助操作符,代表操作數a表示的資源實體的當前狀態,若此狀態存在則返回真,否則返回假,有效的輔助操作符及其意義如下:axgateb轉移模式§7.9.2gate模塊x:輔助操作符,代表操作數a表示的資源實體的當前狀態,若此狀態存在則返回真,否則返回假,有效的輔助操作符及其意義如下:輔助操作符代表的實體的當前狀態LS邏輯開關為SETLR邏輯開關為RESETU設備正被占用NU設備未被占用I設備當前被搶占NI設備當前未被搶占SF存儲器剩余容量為0SNF存儲器剩余容量大于0SE存儲器空SNE存儲器未空其中,設備被搶占或未被搶占的狀態將在第8章討論。例如:gate(NU,barber,bybye);gate(NU,barber);axgate拒絕模式§7.9.3buffer模塊1.作用動態實體進入該模塊,立即停止運動,標記其屬性:當前所在模塊編號為該buffer模塊編號,下一流入的模塊編號為緊后模塊編號,然后將其放回當前事件鏈。如果在停止前未流經priority模塊,則該動態實體放回原來位置,如果流經priority模塊而未改變優先權,則被插入當前事件鏈的原優先權組作為其最后一員,否則被插入新的優先權組作為最后一員。處理程序立即從其鏈頭開始重新掃描當前事件鏈,當掃描至該動態實體時,將其移入該buffer模塊的緊后模塊。2.操作符、操作數與模塊圖buffer模塊沒有操作數。buffer能引起當前事件鏈重新掃描的條件發生,但它與release等模塊有所不同。重新掃描后,暫停在buffer模塊(實際在CEC)中的動態實體又開始了移動。暫停和重新掃描當前事件鏈是因為在此模型位置上的此刻有其它事件要先于處理。buffer§7.9.4應用舉例(一)1.問題陳述有一小圖書館,借書人平均每隔5分鐘到達借書服務臺,每人只能借一本書,假設所借的書籍館內都有。服務臺只有一個館員,借書人將借書條交給館員,館員去書架查找然后返回辦理借書手續。若服務臺前有多人等待借書,則館員將所有借書條一起收起,查找出所有圖書后返回。據統計,館員為一個借書人查找書籍和辦理借書手續平均需要6分鐘。構造模型,模擬8小時,確定館員的忙閑狀況。§7.9.4應用舉例(一)2.實體定義
§7.9.4應用舉例(一)2.模塊圖
§7.9.4應用舉例(一)3.源程序
§7.9.4應用舉例(二)1.問題陳述有一種零件需要在一臺機床上加工兩次,零件傳輸的到達間隔時間為均勻分布,偏差為0.5分鐘,第一次加工需要3-5分鐘,第二次加工需要2-3分鐘,皆為均勻分布。一個零件在第一次加工完成后,要總排在其它等待加工的零件之后,等待第二次使用該機床加工。在完成第二次加工后,零件被送往其它車間。建立模型,模擬2000個零件完成加工的情況,確定零件傳輸的到達平均間隔時間為多少比較合理,取平均到達間隔時間從6到10分鐘,以每間隔0.5分鐘進行一輪實驗。§7.9.4應用舉例(二)3.實體定義
§7.9.4應用舉例(二)4.模塊圖§7.9.4應用舉例(二)4.模擬結果分析以上輸出統計數據,合理的零件傳輸平均到達間隔時間大約為8.5到9.5分鐘之間比較合理,此時平均隊長約為0.025,平均等待時間為0.1118分鐘,最大隊長為1,有85%的零件無需等待,機床利用率接近90%。§7.9.5應用舉例(三)1.問題陳述有一理發館,有兩位理發師同時工作,顧客到達間隔時間為4到11分鐘,均勻分布,理發所需時間為10到22分鐘,均勻分布。理發館早8點開門,晚6點關門,中午不休息。晚6點關門后,若有顧客到達不再提供服務,但此前到達的顧客將全部理完發,再離開。建立模型,模擬100天,確定平均每天有多少顧客在晚6點到理發師下班期間沒理上發。§7.9.5應用舉例(三)2.實體定義§7.9.5應用舉例(三)3.模塊圖§7.9.5應用舉例(三)建模提示子模2控制模擬的總時間。模擬結束時,絕對時鐘的時間應該是每天實際工作時間的總和,它可能大于100×10×60=60000分鐘。時間控制員動態實體的1號整型參數記錄當前工作天數,在1天工作10小時后,他立即關閉理發館大門,檢查理發館是否有顧客在排隊或正在理發,如果是,大門保持關閉,那么后來的顧客未能進門理發而離開。如果某時刻他檢查發現理發館中已經無顧客,便打開大門,開始新的一天,如果他發現已經工作了100天,便結束模型的運行。§7.9.6應用舉例(四)1.問題陳述有一公共汽車站,每隔30分鐘到達一輛公交車,通常每班車會遲到或早來2.5分鐘;乘客到達車站的間隔時間為指數分布,平均間隔2.5分鐘。每班車下車的人數為3至7人,均勻分布。每輛車最多乘坐50人,汽車到達時車上人數為20至50人,均勻分布,車站等待上車的人盡量上車,直到車滿或車站無上車乘客為止。車滿后無法上車的人將離去或改乘其他車輛。乘客下車所需時間為均勻分布,均值為4秒鐘,偏差為3秒鐘。乘客上車所需時間也呈均勻分布,均值為8秒鐘,偏差為4秒鐘。模擬公交車站有2000輛車通過時丟失乘客人數的分布情況。§7.9.6應用舉例(四)2.定義實體
§7.9.6應用舉例(四)3.源程序
§7.9.6應用舉例(四)4.模擬結果
§7.10select模塊7.10.1資源實體編號及其間接引用1.資源實體編號和相關標準實體屬性每一種在模型中由用戶定義的資源實體,都會被處理程序順序編號,編號從1開始,例如,......Facilitybarb=newFacility(“barb”);Queueline=newQueue(“line”);Facilitymach=newFacility(“mach”);Queuewait=newQueue(“wait”);Facilitycrush=Facility(“crash”);Queuestock=newQueue(“stock”);......那么在以上模型中,處理程序會為設備實體barb、mach和crush分別編號為1、2和3,為排隊實體line、wait和stock分別編號為1、2和3。§7.10select模
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 機電工程未來發展路徑探討及試題及答案
- 軟件設計師考試理解與應用知識點的技巧試題及答案
- 網絡安全工具的比較與選擇試題及答案
- 一年級真人考試卷及答案
- 項目管理實踐案例分析試題及答案
- 公共政策與環境保護的協調性探討試題及答案
- 軟件測試工程師最佳學習路徑試題及答案
- 公共政策與企業社會責任的結合試題及答案
- 機電工程財務管理知識試題及答案2025
- 團隊建設在2025年考試中的重要性試題及答案
- 2025四川中江振鑫產業集團招聘14人筆試參考題庫附帶答案詳解
- 《意蘊雋永的漢字-破解漢字之謎》
- 抗菌藥物臨床應用指導原則(2023年版)
- 國開電大專科《管理英語1》機考總題庫
- GB/T 7442-2007角向磨光機
- 消防安全主題班會課件(共17張ppt)
- 圓柱、圓錐和球課件
- 如何上好一節課
- 《獸醫臨床診斷學》試題集題庫
- ××會務組織重大失誤檢討書
- GA∕T 743-2016 閃光警告信號燈
評論
0/150
提交評論