Simio自帶一套功能用于導(dǎo)入靠娱、導(dǎo)出和儲(chǔ)存模型數(shù)據(jù)。一般來(lái)說(shuō)我都會(huì)建議在模型中儲(chǔ)存數(shù)據(jù)掠兄,對(duì)于數(shù)據(jù)量較大的像云,則建議在模型內(nèi)建立數(shù)據(jù)結(jié)構(gòu)锌雀,再與外部數(shù)據(jù)文件或數(shù)據(jù)庫(kù)進(jìn)行連接,以實(shí)現(xiàn)數(shù)據(jù)的快速導(dǎo)入迅诬。
Data表的引用能夠極大地方便模型的屬性管理腋逆,好好掌握能夠大量減少繁瑣的步驟。由于這一塊的內(nèi)容相當(dāng)多侈贷,只能挑選最常用的部分進(jìn)行講解惩歉。在Data板塊可以創(chuàng)建多個(gè)表格,每個(gè)表格的列和屬性一樣俏蛮,需要選定類型創(chuàng)建撑蚌,同時(shí)也可以選制定列作為主鍵,或選擇另一表的主鍵作為外鍵列搏屑。
之所以說(shuō)Data表能極大方便屬性設(shè)置争涌,是由于Simio里面的“表行引用” (Table row reference)機(jī)制。舉個(gè)栗子辣恋,比如我現(xiàn)在有三類實(shí)體亮垫,我希望他們有不同的處理時(shí)間、優(yōu)先級(jí)的屬性(注意屬性和變量的區(qū)別)抑党。如果根據(jù)第2章的內(nèi)容包警,我可能就需要給實(shí)體父類建立2個(gè)屬性,處理時(shí)間和優(yōu)先級(jí)底靠,然后在Facility界面給三個(gè)實(shí)體的Entity.InitialPriority和Entity.ServiceTime分別寫上初始值害晦。
以上這種創(chuàng)建屬性的辦法在新建類的時(shí)候是必須的,畢竟類本身應(yīng)該有一套內(nèi)部屬性暑中。但對(duì)于頂層用戶來(lái)說(shuō)壹瘟,這種方法繁瑣而且管理困難。如例子所言要是我有30種Entity子類呢鳄逾?那我豈不是要30個(gè)每個(gè)去賦值稻轨?答案是不需要的。通過(guò)“表行引用”雕凹,我可以把每一種Entity子類對(duì)應(yīng)到表格每一行殴俱,每一行包含的值都綁定在這類實(shí)體的身上,那么我若想新增加一個(gè)屬性比如“預(yù)處理時(shí)間”枚抵,我只需要在表上增加一列新值即可线欲。下圖的例子中,第一列是實(shí)體類值的列汽摹,用于標(biāo)明每一行代表哪類實(shí)體李丰,并點(diǎn)選了自動(dòng)引用,因此運(yùn)行開始時(shí)每一類實(shí)體將和對(duì)應(yīng)的行綁定在一起逼泣。在后面的服務(wù)器中趴泌,服務(wù)時(shí)間的表達(dá)式則從“Entity.ServiceTime”改變?yōu)椤癊ntityTable.ServiceTime”舟舒,直接引用表中“ServiceTime”列中的數(shù)據(jù),由于一開始已經(jīng)自動(dòng)引用了行嗜憔,所以行秃励、列確定了,唯一值也就確定了吉捶。
除了通過(guò)"表行引用"獲取表格的數(shù)據(jù)莺治,也可以通過(guò)直接取值的辦法。方法通常為:
1. 表名[行號(hào)帚稠,列號(hào)],如Table1[1,2]丽柿,返回第一行第二列Entity1的服務(wù)時(shí)間漱贱。
2. 表明[行號(hào)].列名峦耘,如Table1[2].Priority,返回第二行Entity2的優(yōu)先級(jí)杆麸。
方法1通常不建議使用,因?yàn)橐坏┬略隽肆泻苋菀讓?dǎo)致原來(lái)的列號(hào)改變浪感,很多表格取值錯(cuò)誤的情況都是由于引用出錯(cuò)昔头,這個(gè)大家必須要注意。
最后再稍微介紹一下表格的主外鍵在Simio的使用影兽,如果對(duì)主外鍵了解的讀者可以跳過(guò)此段介紹揭斧。舉個(gè)例子,比如Entity1與Entity2同屬于產(chǎn)品1的范疇峻堰,Entity3則是產(chǎn)品2的范疇讹开,如果后續(xù)邏輯中需要根據(jù)不同產(chǎn)品作出決定,比如不同產(chǎn)品去不同目的地捐名,那該如何修改呢旦万?一個(gè)自然的想法是和剛才介紹一樣,在table1后面繼續(xù)增加列標(biāo)明產(chǎn)品范疇镶蹋,然后增加列標(biāo)明目的地節(jié)點(diǎn)成艘。若是根據(jù)產(chǎn)品的決定越來(lái)越多呢?比如服務(wù)器2的處理時(shí)間贺归,統(tǒng)計(jì)變量淆两,預(yù)加工時(shí)間等等。在實(shí)體類型與產(chǎn)品相關(guān)信息很多的情況下牧氮,比如30種實(shí)體琼腔,2種產(chǎn)品,5種產(chǎn)品相關(guān)信息踱葛,那就需要填寫30*5=150個(gè)信息丹莲,但通過(guò)主外鍵光坝,我們只需要在一個(gè)新的產(chǎn)品表中記錄產(chǎn)品相關(guān)信息,并在實(shí)體表中標(biāo)明每一種實(shí)體屬于哪種產(chǎn)品(讓實(shí)體索引到產(chǎn)品表的信息)甥材,因此我們只需要增加30+2*5 = 40個(gè)信息盯另。主外鍵不僅大量減少更新難度,也同時(shí)減少了儲(chǔ)存數(shù)量洲赵,還方便了用戶對(duì)信息的管理鸳惯。
如下圖所示,新建的table2中有Product主鍵叠萍,并在table1中作為外鍵存在芝发。由于Entity與Product為n對(duì)1的關(guān)系,確定Entity行引用之后即有唯一的Product行引用苛谷,從而可以直接取表中的值Table2.DestinationNode作為目的地節(jié)點(diǎn)的引用辅鲸。
在這里暫時(shí)稱主鍵表為父表,外鍵表為子表腹殿,父表每1行對(duì)應(yīng)子表0到n行独悴。需要注意的是,對(duì)于兩個(gè)表的情況锣尉,多個(gè)主外鍵連接會(huì)導(dǎo)致引用混亂出錯(cuò)刻炒。默認(rèn)情況下,一旦綁定子表的某一行自沧,能夠搜索到子表所有信息坟奥,即AvailableRowCount為子表大小,但父表只能獲取某一行拇厢。相反筏勒,一旦綁定父表,能夠搜索到父表所有信息旺嬉,但子表只能獲取相關(guān)行且行號(hào)全部從1開始管行。比如實(shí)體A綁定到Table2第一行后,對(duì)于實(shí)體A而言邪媳,Table1只有2行捐顷。
若喜歡本文,請(qǐng)?jiān)谙路近c(diǎn)個(gè)喜歡讓更多學(xué)習(xí)simio的朋友能看到雨效。