深度剖析Python 工具特性
下面給大家進(jìn)行詳細(xì)說明下什么是Python 工具,對于那些從來沒有學(xué)習(xí)過編程或者并非計(jì)算機(jī)專業(yè)的編程學(xué)習(xí)者而言,Python應(yīng)用語言是***的選擇之一,它具備簡單清晰的語言特點(diǎn)。
但在其它時(shí)候,只有實(shí)際運(yùn)行(或模擬)系統(tǒng)時(shí),具體設(shè)計(jì)的缺陷才會顯現(xiàn)出來。本文中,David 討論了 SimPy,它是一種 Python 包,允許您非常方便地創(chuàng)建離散事件系統(tǒng)的模型。
  
在我遇到 SimPy 包的其中一位創(chuàng)始人 Klaus Miller 時(shí),從他那里知道了這個(gè)包。Miller 博士閱讀過幾篇提出使用 Python 2.2+ 生成器實(shí)現(xiàn)半?yún)f(xié)同例程和“輕便”線程的技術(shù)的可愛的 Python 工具專欄文章。特別是(使我很高興的是),他發(fā)現(xiàn)在用 Python 實(shí)現(xiàn) Simula-67 樣式模擬時(shí),這些技術(shù)很有用。
  
結(jié)果表明 Tony Vignaux 和 Chang Chui 以前曾創(chuàng)建了另一個(gè) Python 庫,它在概念上更接近于 Simscript,而且該庫使用了標(biāo)準(zhǔn)線程技術(shù)。而不是我的半?yún)f(xié)同例程技術(shù)。該小組在一起研究時(shí),認(rèn)為基于生成器的樣式更有效得多,并且最近在 SourceForge 上發(fā)起了使用 GPL 的項(xiàng)目。
稱為 SimPy(請參閱參考資料,獲得 SimPy 主頁的鏈接),目前處于 beta 測試版狀態(tài)。Vignaux 教授希望他在惠靈頓維多利亞大學(xué)(University of Victoria)的將來大學(xué)教學(xué)中使用統(tǒng)一的 SimPy 包;
我相信該庫也非常適合應(yīng)用到各類實(shí)用問題中。我承認(rèn)在近期的通信交流和調(diào)查研究之前,我對編程領(lǐng)域的模擬方面沒有任何基礎(chǔ)知識。我猜想本專欄文章的大部分讀者也和我一樣,對這方面的知識知之甚少。
盡管有人會認(rèn)為這種樣式編程的方式有些新奇,但在理解資源有限的實(shí)際系統(tǒng)的行為時(shí),模擬是很有用的。不管您感興趣的是有限帶寬網(wǎng)絡(luò)、汽車交通行為、市場和商業(yè)性優(yōu)化、生物/進(jìn)化的交互作用還是其它“隨機(jī)”系統(tǒng),SimPy 對這樣的建模都提供了簡單的 Python 工具。
我將使用食品雜貨店內(nèi)具有多條通道的付款區(qū)域這個(gè)相當(dāng)簡單的示例。通過使用所演示的模擬,我們可以根據(jù)對掃描器技術(shù)。購物者習(xí)慣、人員配備需求等進(jìn)行的各種更改所產(chǎn)生的經(jīng)濟(jì)上和等待時(shí)間上的含義提出問題。這個(gè)建模的優(yōu)點(diǎn)是在您對所做的更改產(chǎn)生的含義有清晰的想法時(shí)。
它讓您能提前制定策略。很明顯,大多數(shù)讀者不會專門經(jīng)營一家食品雜貨店,但這些技術(shù)可以廣泛地應(yīng)用于各類系。SimPy 庫只提供了三個(gè)抽象/父類,并且它們對應(yīng)于模擬的三個(gè)基本概念。有許多其它常規(guī)函數(shù)和常量用于控制模擬的運(yùn)行,但重要的概念都與這些類結(jié)合在一起。
  
模擬中的核心概念是進(jìn)程。一個(gè)進(jìn)程只是一個(gè)對象,它完成某些任務(wù),隨后在它準(zhǔn)備完成下一個(gè)任務(wù)之前有時(shí)會等待一會兒。在 SimPy 中,您還可以“鈍化”進(jìn)程,這意味著在一個(gè)進(jìn)程完成一個(gè)任務(wù)后,只有當(dāng)其它進(jìn)程要求該進(jìn)程完成其它任務(wù)時(shí),它才會去做。
把進(jìn)程當(dāng)作嘗試完成一個(gè)目標(biāo),常常是很有用的。在編寫進(jìn)程時(shí),通常把它編寫成可以在其中執(zhí)行多個(gè)操作的循環(huán)。在每個(gè)操作之間,可以插入 Python 工具語句,它讓模擬調(diào)度程序在返回控制之前執(zhí)行每個(gè)等待進(jìn)程的操作。
  
進(jìn)程執(zhí)行的許多操作取決于資源的使用。資源只是在可用性方面受到限制。在生物學(xué)模型中,資源可能是食物供應(yīng);在網(wǎng)絡(luò)模型中,資源可以是路由器或有限帶寬通道;在我們的市場模擬中,資源是付款通道。資源執(zhí)行的唯一任務(wù)是在任何給定的時(shí)間內(nèi)將它的使用限于一個(gè)特定的進(jìn)程上。
在 SimPy 編程模型下,進(jìn)程單獨(dú)決定它要保留資源的時(shí)間有多長,資源本身是被動的。在實(shí)際系統(tǒng)中,SimPy 模型可能適合概念性方案,也可能不適合;很容易想象到資源在本質(zhì)上會限制其利用率(例如,如果服務(wù)器計(jì)算機(jī)在必需的時(shí)間幀內(nèi)沒有獲得滿意的響應(yīng),則它會中斷連接)。
但作為編程問題,進(jìn)程或資源是否是“主動”方就不是特別重要(只要確保您理解了您的意圖)。***一個(gè) SimPy 類是監(jiān)控程序。實(shí)際上監(jiān)控程序不是很重要,只不過它很方便。監(jiān)控程序所做的全部任務(wù)就是記錄向它報(bào)告的事件,并保存有關(guān)這些事件的統(tǒng)計(jì)信息(平均值、計(jì)數(shù)、方差等)。
該庫提供的 Monitor 類對記錄模擬措施是個(gè)有用的工具,但您也可以通過您想使用的其它任何技術(shù)來記錄事件。事實(shí)上,我的示例使 Monitor 子類化,以提供某些(稍微)增強(qiáng)的能力。
【編輯推薦】















 
 
 
 
 
 
 