




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
海量數(shù)據(jù)處理實驗報告PancakeTycoon煎餅大亨海量數(shù)據(jù)處理課程實驗報告清華大學計54曹正kevin@goog01清華大學計54楊子redeye@goog01一項目內容簡介本項目主題是實現(xiàn)一款模擬經(jīng)營類游戲。使用hadoop大規(guī)模數(shù)據(jù)處理技術,對店鋪、顧客進行模擬,并針對店鋪信息等提供可供玩家設置的交互性,從而實現(xiàn)最簡單的模擬經(jīng)營效果。游戲對煎餅攤這一校內常見的經(jīng)營進行模擬。用戶可以設置煎餅攤的數(shù)量,不同攤位的詳細設置(見后,詳細設計部分)。軟件根據(jù)用戶的設置,對每個顧客的消費行為作模擬,最后匯總,返回給用戶。用戶根據(jù)返回的結果,適當調整攤位的設置,力爭盡可能多的利潤。煎餅攤需要投入經(jīng)營資金,例如面粉等原料的進貨。同時銷售則會收入資金。利潤由此而來。總體上,單個攤位的模型設置如前所述,可以看到和實際中的煎餅攤位是差不多的。在應對多店鋪的情況時,模型有所簡化,見詳細設計部分。二項目詳細設計1總論軟件需要與用戶交互,以輸入店鋪參數(shù)等信息,同時軟件還要能夠使用分布式系統(tǒng),進行hadoop數(shù)據(jù)處理,最后軟件要將結果返回給用戶。基于以上功能需求的考慮,軟件劃分為兩個部分:與用戶交互、接受輸入、反饋結果的客戶端,和獲得運行所需數(shù)據(jù)、進行hadoop數(shù)據(jù)處理、最終匯總結果返回的服務器端??蛻舳诉\行在用戶機器上,服務器端運行在集群上。雙方通過Socket進行通信,以協(xié)議的形式設定好雙方統(tǒng)一的命令、數(shù)據(jù)格式。2數(shù)學模型如項目概述所述,對于每個店鋪,使用類似實際的表達。對于店鋪見的關系,軟件對模型作了高度簡化。對于顧客信息,為了運算的需要,產(chǎn)生對應的參數(shù)。a店鋪信息考察一個實際的煎餅攤位,為了煎餅制作、銷售的進行,攤位需要準備如下物資:面粉、果子(薄脆)、蔥、醬(這里我們分為甜和咸兩種)、雞蛋。我們對模型作了簡化,沒有提供榨菜等。這些物資在經(jīng)營過程中需要玩家給出進貨指令來增加。煎餅銷售要考慮的問題有售價,以及每套煎餅內使用的面粉、果子(薄脆)、蔥、醬、雞蛋。這里果子(薄脆)和雞蛋可以按照顧客的需求加入,參見顧客模型。經(jīng)營過程就是物資的輸入輸出,收入的獲得,成本的支出過程。玩家控制進貨,對應的產(chǎn)生指出;經(jīng)營過程被模擬出來,對應的產(chǎn)生收入。最終的經(jīng)營效果,包括物資的剩余量和銷售收入會提供的玩家,以便作分析進行進貨。b顧客信息在店鋪信息中已經(jīng)給出了經(jīng)營算法。這里考慮每一位顧客是否會購買煎餅。模型被簡化,目前每位顧客有買與不買兩個選擇,但不會買多份。為了考察購買與否,需要給出一個評估函數(shù)。該函數(shù)以店鋪信息中的經(jīng)營參數(shù),以及顧客信息作為參數(shù)。為此,顧客信息模型建立,帶有如下參數(shù):喜好的面粉量、蔥、醬添加量,加多少果子,加多少雞蛋。店鋪與顧客對應參數(shù)相減,取偏差相對喜好的百分比,再相加。使用該值作為評估函數(shù)的一部分,另一部分參見顧客調查。定義好評估函數(shù),則每個顧客均參與評估,當達到閾值,如0.5之類,則評估返回為購買,否則即為不購買。將所有顧客遍歷,得到匯總信息,歸并之后返回給玩家,也就是店鋪信息指出的返回值的來源。顧客的數(shù)目可以在服務器端的程序中手動進行設置。c多店鋪多店鋪模型相比開始時的設計有大幅簡化。初始設計中,店鋪帶有坐標信息,對應的顧客也帶有坐標信息。取歐氏距離作為計算標準,每位顧客在每一輪經(jīng)營中會選擇最近的一個店鋪。后來,取消了坐標的設計。目前的設計是顧客會隨意選擇一個店鋪,然后根據(jù)顧客信息中的方式進行評估。店鋪的數(shù)目和分布可以在客戶端的程序中手動進行設置。目前的店鋪設置為清華大學地圖中的10個店鋪位置,如下圖所示。其中的數(shù)字是服務器端和客戶端約定的交流hardcode部分,這些信息替代了原來的坐標信息。d顧客調查軟件提供給客戶一些額外信息,是對購買的顧客作的調查,包括:是否覺得貴,是否認為等待時間過長,是否認為過咸或者過淡,是否認為過甜。為了模擬這些信息,在顧客信息中添加這些成員,并在每輪模擬中計算這些值。計算方法同顧客信息中指出的評估方法。特別地,由于有了顧客調查這部分信息,故讓他們也參與到評估中,方法即為在最終的評估結果基礎上加上這些數(shù)值。值得注意的是,所加的數(shù)值是上一輪計算出來的,對應實際中對一個煎餅攤的印象。而后新的顧客調查數(shù)值才會被計算出來并在信息中更新。以上所有的數(shù)值都是為了參與模擬經(jīng)營的計算,要返回給玩家時,再進行如下模擬。在店鋪信息中指出的匯總過程中,考察每一個顧客。生成一個隨機數(shù),如果隨機到調查該顧客,則從顧客調查信息中取出數(shù)據(jù),否則跳過、輪詢下一位顧客。在取出數(shù)據(jù)后,按照一定閾值,如0.02,對數(shù)據(jù)作評估,在對應的問卷結果中加入。該過程類似下面的代碼。foreveryguest{getarandomnumber;ifthenumberdostn'tfit,continue;getalldataofthisguest;count_of_transaction++;if(data.feel_expensivemorethan0.02)count_of_feel_expensive++;other3if-clauses}以上代碼最終會返回count_of_transactioncount_of_feel_expensiveetc.信息,而這些則最終反饋給玩家。3通信協(xié)議從以上模型分析中可以獲得以下信息。i客戶端需要告知服務器端用戶輸入的參數(shù);ii客戶端需要通知服務器端進行經(jīng)營的模擬;iii服務器端執(zhí)行結束后要告訴客戶端;iv客戶端要求時將結果從服務器端傳回;v客戶端要告訴服務器端的信息組成的格式規(guī)定;vi服務器端要返回給客戶端的信息組成的格式規(guī)定。以上為協(xié)議的概況,詳細協(xié)議內容參見附錄。4服務器端服務器端代碼位于gServer.jar,編譯單元mainclass.java。服務器端包含六個類。amainclass控制server端全部的控制邏輯。由main創(chuàng)建socket,等待客戶段連接,并實現(xiàn)與客戶端的交互。針對客戶端的不同請求調用相應的方法。同時通過帶有不同參數(shù)的啟動服務器端,實現(xiàn)生成顧客信息等server需要的工具功能。idealParameter接受客戶端的信息,這些信息是協(xié)議中提到的用戶輸入的參數(shù),對應數(shù)學模型中的(多)店鋪信息。iidealExecute包裝執(zhí)行過程,在客戶端請求進行經(jīng)營的模擬時,server的控制邏輯調用該函數(shù)。該函數(shù)通過一系列Linux本地過程調用實現(xiàn)server所在Linux主機文件系統(tǒng)與hadoop文件系統(tǒng)的信息交換和數(shù)據(jù)格式轉換。該函數(shù)通過調用hadoopExecute實現(xiàn)事實上的模擬過程。iiihadoopExecute接受客戶端的一些參數(shù),如時間等,并使用模擬經(jīng)營所用到的所有數(shù)據(jù)構造ExecuteOnce類,進行mapreduce執(zhí)行過程。ivdealSendResult包裝了發(fā)送結果的過程,包括一些命令控制字的發(fā)送,并通過調用dealSendResultA完成每一份(如果不止一個店鋪)結果的格式轉換和發(fā)送過程。vdealSendResultA完成事實上的結果發(fā)送。vicommandToInteger工具函數(shù)。由于使用Socket流傳遞的命令字為字符格式,使用該函數(shù)將之轉換為數(shù)值格式,以方便server端的控制邏輯。bParameters工具類,用以表征用戶輸入的參數(shù)。提供了String作為參數(shù)的構造函數(shù),并重寫了toString方法,以實現(xiàn)類數(shù)據(jù)格式、hadoop字符串快捷參數(shù)格式的轉換。cResults工具類,用以表征模擬的結果。提供了String作為參數(shù)的構造函數(shù),并重寫了toString方法,以實現(xiàn)類數(shù)據(jù)格式、文件內存儲格式之間的轉換。提供了根據(jù)Parameters構造Results的方法,以方便reduce中的結果生成。dPeopleGenerating工具類,提供了顧客信息的對象表示形式。提供了String作為參數(shù)的構造函數(shù),并重寫了toString方法,以實現(xiàn)類數(shù)據(jù)格式、文件內存儲格式之間的轉換。提供靜態(tài)方法run,通過mainclass::main被調用,以幫助生成足夠數(shù)量的顧客信息。eMyRandomextendsRandom工具類,繼承自Random,以方便實現(xiàn)生成制定范圍的Gauss分布隨機數(shù)。fExecuteOnce負責MapReduce實現(xiàn)的類。內含靜態(tài)類Map,Reduce,作為MapReduce的實現(xiàn)。在run中負責參數(shù)格式化工作,并設置雙文件輸出模式。iMapmap過程的工作類,其實現(xiàn)基于前述數(shù)學模型。iiReducereduce過程的工作類,其實現(xiàn)基于前述數(shù)學模型。iiiMyOutputFormatextendsMultipleTextOutputFormat派生類,用以實現(xiàn)多文件輸出。重寫了generateFileNameForKeyValue方法,根據(jù)key的不同,輸出像不同的文件。定義特殊的key=-1,表示輸出匯總結果,否則為顧客信息的更新后結果。5客戶端客戶端部分使用Flash(基于ActionScript3.0)進行編寫。共使用6個圖層,其中包括背景層、圖片層、組件層、動作層和隱藏層。而動作部分主要包含組件的動作記錄,事件監(jiān)聽和socket連接。整個模型的操作基于Stall類,該類保存于Stall.as中,其中存儲了和服務器端類似的Stall數(shù)據(jù)結構,包括一個店鋪的id,坐標信息,最大容量,是否被購買(對于未被購買的店鋪,店鋪基本信息是存在的),名稱,以及各類進貨信息,煎餅的配料信息和售價。除此之外,該類還封裝了一些組件信息,例如在地圖上表示這個類的一個MovieClip組件以及對應的RadioButton,方便后面的調試和操作。而構造函數(shù)publicfunctionStall(sid:int,sx:Number,sy:Number,scapacity:int,sname:String)對于上述變量進行了初始化。游戲的執(zhí)行在目前的版本中并沒有很絢麗的界面,主要實現(xiàn)在6個幀內完成。第一幀中包含了歡迎畫面和IP以及Port的輸入窗體,而在代碼部分,主要對于按鈕進行監(jiān)聽,一旦發(fā)現(xiàn)單擊事件,立即觸發(fā)LoginAction,進行Socket連接。而Socket的定義使用了基本的字節(jié)流Socket,并沒有使用XMLSocket,定義和對應的事件監(jiān)聽如下:varsocket:Socket=newSocket();socket.addEventListener(Event.CONNECT,onConnect);socket.addEventListener(ProgressEvent.SOCKET_DATA,onSocketData);socket.addEventListener(IOErrorEvent.IO_ERROR,ioError);對于第一個和第三個事件分別表示連接成功和連接失敗,在Flash中會分別轉向第3幀和第2幀。這一幀的截圖如下。第二幀中進行報錯處理,同時保持第一幀中的輸入和按鈕組件,因此可以重復進行嘗試,直到成功為止,第二幀執(zhí)行截圖如下所示。一旦進入第三幀,說明Socket已經(jīng)成功連接,由于在第四幀和第五幀之間會進行不斷的循環(huán)操作,進行逐日的進貨銷售過程。因此在第三幀中并沒有任何的圖片信息,只是在代碼部分加入了店鋪的初始化信息,店鋪數(shù)組(10家店鋪的指針集合)地建立以及啟動資金的初始化,在目前的模型中啟動資金為10000元。第四幀是程序執(zhí)行最核心的部分,代碼的前半部分需要處理游戲地圖區(qū)域的選擇事件(觸發(fā)選中相應的Stall,更新其MovieClip的執(zhí)行情況),若干按鈕的單擊事件(觸發(fā)socket端發(fā)出傳參操作,以及買賣店鋪事件)以及NumericStepper的更改事件(將相應的值保存在Stall類的實例中)。該幀代碼的后半部分需要處理socket產(chǎn)生的onSocketData事件,也就是對于socket接收到服務器發(fā)來的所有socket數(shù)據(jù)進行解析,處理,進行相應的應答。對于傳參操作,會不斷的發(fā)送socket數(shù)據(jù),而在第5幀進行的接受結果操作,也在同一個函數(shù)中進行實現(xiàn),需要將接收的信息,在窗口中進行顯示??紤]到程序編寫的方便,在游戲設計之初,服務器端和客戶端就分工,將程序中兩個需要長時間保存的數(shù)據(jù)分別保存于兩端,各個原料的庫存量(這些量將會保留到第二天繼續(xù)參與)由服務器端維護(因為庫存涉及到當日的原料是否可以充足的供應給顧客,這一部分在服務器端實現(xiàn)),而總的金額由服務器端維護(因為這些金額還可以用于店鋪規(guī)模的擴大,以及購買新的店鋪、變賣已有店鋪,這些操作直接在客戶端上進行)?;窘缑嫒缦滤尽F渲械淖髠葹榈貓D區(qū)域,主要包括一張現(xiàn)有地圖,以及上面的位置標示,當鼠標單擊其中的標示時,會觸發(fā)相應判斷,如果這是一個已經(jīng)擁有的店鋪(對應的availability屬性值為true),那么選中時,會變?yōu)樾D彩色邊界,對應的數(shù)據(jù)更新為該店鋪的值,并且可以編輯,同時可以進行Sell操作,通過右側的Sell按鈕。一個未選中的已有店鋪用黃色顯示,而選中和未選中的尚未擁有的店鋪均為灰色邊界,同時可以進行Buy操作。如果對所有已有店鋪進行操作結束后,就可以通過Starttheday按鈕進行執(zhí)行操作。這是進入第5幀,這里并沒有什么界面,只是一些代碼,可以進行執(zhí)行指令的socket發(fā)送,之所以單獨作為一幀是因為在目前的程序中客戶端的執(zhí)行結果是在輸入窗體中進行,而且沒有太多的結果動畫展示,而在以后的改進中,可以再加入更多的內容。同樣,如果金錢不足會進入第6幀,在這里目前也沒有內容,留作以后擴展。三遇到的問題服務器端使用mapreduce框架計算,其輸出默認為單一文件。由于程序模型要求輸出兩類結果,所以希望輸出兩個文件。經(jīng)過努力,成功實現(xiàn)雙文件輸出。對于客戶端,由于未曾寫過ActionScript3程序,因此大部分時間用于熟悉該語言,了解其特點。與其他(例如C程序)不同,其它程序在執(zhí)行的時候主要考慮的是空間的順序,直接分析程序的流程就可以得到執(zhí)行順序。而Flash程序很多需要在不同的幀之間進行操作,特別是一些實例并不是在程序段中定義和聲明的,可以直接在界面中的參數(shù)段中設置。特別是在進行socket調接的時候,服務
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 修鄉(xiāng)村路橋合同范本
- 鄉(xiāng)鎮(zhèn)水電租房合同范本
- 2025至2030年中國空氣流量檢測器數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國矮生盆栽番茄種子數(shù)據(jù)監(jiān)測研究報告
- 租用老舊軍艦合同范本
- 氣球用品采購合同范本
- 科技創(chuàng)新在推動ESG及碳中和中的作用研究
- 智能設備遠程監(jiān)控與維護考核試卷
- 康復輔具適配的個性化制造考核試卷
- 收購汽車大燈合同范本
- 初一家長會課件96108
- 罪犯正常死亡報告范文
- 《企業(yè)文化概述》課件
- 某地源熱泵畢業(yè)設計
- (三級)工業(yè)機器人運用與維護理論考試復習題庫(含答案)
- 2024年廣東省公務員錄用考試《行測》真題及解析
- 高中英語必背3500單詞表(完整版)
- 房產(chǎn)中介居間服務合同模板樣本
- 海洋工程裝備保險研究
- 2024年廣東省深圳市中考英語試題含解析
- 麻風病防治知識課件
評論
0/150
提交評論