??近期有幸在明神的推薦下妒御,參加了成都Dell EMC的黑客馬拉松比賽,連續(xù)奮戰(zhàn)38小時(shí)冈绊,最終拿下了亞軍侠鳄,結(jié)果還是挺開心的。這里呢對(duì)這次比賽進(jìn)行總結(jié)死宣,因?yàn)榇舜伪荣愑玫降募夹g(shù)很多伟恶,涉及面廣,整個(gè)完成了一套AI分析系統(tǒng)毅该。
??首先介紹一下賽題的背景博秫,熟悉英語的同學(xué)可以去這個(gè)鏈接 去看一下。我在這里簡(jiǎn)要介紹一下這次題目的背景鹃骂,其假設(shè)我們向火星上發(fā)送了一個(gè)太空車台盯,該車有自己的生命值和能量,隨著宇宙環(huán)境(溫度畏线,輻射)的變化静盅,該車的生命和能量也會(huì)發(fā)生相應(yīng)的變化。此時(shí)太空車有一個(gè)保護(hù)罩寝殴,如果打開保護(hù)罩蒿叠,就可以保護(hù)生命值不掉血,但是能量值會(huì)下降蚣常。如果關(guān)閉保護(hù)罩市咽,生命值會(huì)減少,能量值會(huì)增加抵蚊。生命值和能量值在開傘和關(guān)傘情況下的消耗施绎,如下所示:
radiationRatio = (currentRadiation - minRadiation) / (maxRadiation - minRadiation)
temperatureRatio = (currentTemperature - minTemperature) / (maxTemperature - minTemperature)
if shield is ON:
energyLoss = radiationRatio * 5
team.energy = team.energy - ceil(energyLoss)
else:
lifeLoss = radiationRatio * 5
team.life = team.life - ceil(lifeLoss)
energyGain = temperatureRatio * 5
team.energy = team.energy + ceil(energyGain)
??在實(shí)際操作中,比賽官方給了一個(gè)樹莓派作為太空車的模擬設(shè)備贞绳,利用官方提供的實(shí)時(shí)數(shù)據(jù)源谷醉,自己編寫客戶端服務(wù)器程序進(jìn)行信息收發(fā),當(dāng)然此時(shí)需要實(shí)時(shí)的網(wǎng)絡(luò)通信協(xié)議(WebSocket)的支持冈闭。然后將樹莓派接收的信息向云主機(jī)進(jìn)行發(fā)送俱尼,在云主機(jī)上對(duì)接收到的數(shù)據(jù)進(jìn)行實(shí)時(shí)備份,分析萎攒,可視化展示遇八,對(duì)最終是否打開或者關(guān)閉保護(hù)罩進(jìn)行決策矛绘。整體的流程圖如下所示:
??這次比賽,考察的技術(shù)非常全面刃永,主要是完成整套的AI分析系統(tǒng)货矮。在數(shù)據(jù)傳輸中需要Http協(xié)議,Websocket協(xié)議的支持揽碘;數(shù)據(jù)備份中次屠,我們利用Hadoop來進(jìn)行實(shí)時(shí)備份;日志存儲(chǔ)雳刺,我們利用mongdb來進(jìn)行存儲(chǔ)劫灶;數(shù)據(jù)可視化,利用echarts, bootstrap來進(jìn)行實(shí)時(shí)數(shù)據(jù)可視化掖桦。分析模塊本昏,主要是分析數(shù)據(jù),具體思路也主要是強(qiáng)調(diào)去推測(cè)溫度枪汪,輻射數(shù)據(jù)的變化趨勢(shì)涌穆,爭(zhēng)取利用最少的生命去換取最多的能量,這樣去使得整個(gè)的生存時(shí)間最長(zhǎng)雀久。
??當(dāng)然通過上面的描述宿稀,我們可以看到整個(gè)系統(tǒng)的核心是對(duì)決策的支持,其余功能分別組成整個(gè)AI分析系統(tǒng)的其他部分赖捌。整體的技術(shù)構(gòu)成比較龐雜祝沸,在本篇博客中先寫對(duì)決策部分的分析。其后的幾篇博客會(huì)分別對(duì)各項(xiàng)技術(shù)進(jìn)行總結(jié)越庇。
??通過耘神的思考和我們的討論罩锐,對(duì)整體的思路總結(jié)如下。整個(gè)的生命和能量的轉(zhuǎn)換過程中卤唉,二者是一個(gè)動(dòng)態(tài)變化的過程涩惑。而且在開傘和關(guān)傘的過程中,由于時(shí)間的變化桑驱,環(huán)境中的能量和溫度的變化情況都不相同竭恬,我們需要把問題抽象成,要求整體中利用最少的生命去換取最多的能量熬的,拿耘神的話萍聊,就叫血能轉(zhuǎn)化率,也就是T/R悦析,T是溫度,R是輻射強(qiáng)度此衅。如果這個(gè)值越大强戴,我們應(yīng)當(dāng)選擇關(guān)閉保護(hù)罩亭螟,這個(gè)值越小應(yīng)該打開保護(hù)罩。當(dāng)然當(dāng)能量大于某一個(gè)閾值的時(shí)候骑歹,我們可以打開保護(hù)罩预烙,讓生命進(jìn)行維持,依次遞減到生命消耗光為止道媚。因?yàn)樵陉P(guān)傘時(shí)扁掸,能量的損耗和輻射有很大的關(guān)系,開傘時(shí)最域,能量的增加和溫度有關(guān)谴分,生命的損耗跟輻射有關(guān)。所以如果我們能夠預(yù)判出整個(gè)溫度和輻射的變化關(guān)系镀脂,我們就可以預(yù)判是應(yīng)該打開或者關(guān)閉保護(hù)罩牺蹄。我們通過對(duì)實(shí)時(shí)數(shù)據(jù)的可視化發(fā)現(xiàn),其數(shù)據(jù)確實(shí)呈周期性變化薄翅,但不是特別標(biāo)準(zhǔn)沙兰,所以在實(shí)現(xiàn)的時(shí)候,我們利用數(shù)組多存儲(chǔ)了5-6個(gè)歷史值翘魄,算他們幾個(gè)的梯度變化鼎天,最終分析曲線的走勢(shì),來做出合適的判斷暑竟。
??最后比賽結(jié)束后斋射,我們和比賽官方的交流中,他們說題目中光羞,溫度和輻射的變化有一定的變化規(guī)律绩鸣,是成周期性變化的,上升和下降都有一定的趨勢(shì)纱兑。因此也是在這上面算是和出題者思路想復(fù)合吧呀闻,達(dá)到了比較不錯(cuò)的效果。當(dāng)然我們也利用了一些深度學(xué)習(xí)和機(jī)器學(xué)習(xí)的手段去處理潜慎,最終由于實(shí)時(shí)性和準(zhǔn)確性的考慮捡多,放棄了那些做法。最終取得第二名還是比較開心的铐炫。