2019華爲軟件精英挑戰賽總結篇

在這裏插入圖片描述
Hello大家好,2019華爲軟件精英挑戰賽於4.13複賽結束,我們的旅程也到此爲止。複賽開始前,我們一直調侃自己是“摸魚大隊”,對進決賽並不抱太大的希望,但是當複賽結果出來時,心中還是難免失望。這裏,首先還是要再次再次感謝我的兩個隊友,對這個比賽他們的確付出了很多。

在這裏插入圖片描述
我們是西北賽區的“心有多大路就有多寬”,初賽第28複賽第18。今年軟件精英挑戰賽提高了賽題難度的同時降低了獎勵,賽區前32只能拿到筆試綠卡,賽區前4才能拿到面試綠卡,相比之前前32都可以拿到面試綠卡來說確實獎勵嚴重縮水,算是沒趕上好時候吧,想想去年的話這不就面試綠卡到手了嗎,哈哈哈。不過也理解華爲公司的這種做法,畢竟划水的人不在少數。下面進入正題:

本屆賽題

今年的賽題是車輛調度問題,詳細賽題信息請點擊賽題,官方給出Car、Cross、Road三類信息,Cross和Road是交通網絡,包含路口和道路的連接信息和道路的詳細信息,參賽者需要根據交通網絡讓Car中的車以最快的速度全部從各自出發點到達終點。具體的行車規則官方用了27頁的任務書說明,所以今年的賽題理解有多變態可想而知,我記得直到複賽的最後一天,比賽羣裏還是有不少人在問行車規則,還有很多人在賽題出來時就被27頁的文檔勸退了,所以我們都調侃這是一屆閱讀理解大賽。我的資源分別打包了賽題說明和初複賽數據包,需要者自取。

關於比賽

Frist

拿到賽題後首先需要做的就是好好理解賽題,這個過程需要做一些可視化之類的輔助理解。車需要儘快到達其終點,很容易想到需要找到車的最短路徑,由於道路中不存在負權,我們採用的最短路徑算法是Dijkstra算法。關於發車剛開始我們也沒有好的思路,所以就按部就班地採用一輛一輛跑的思路做出了第一版提交代碼,主要目的是跑通系統測試代碼。這個過程可以在賽題發佈但未開啓提交的時間進行,所以系統開啓提交代碼後,我們很快上傳成功有了最初的成績,這個策略當然是最差了,調度時間50w+。

Second

一輛一輛跑對道路的利用當然是很差的,所以我們逐漸增加同時間發車數目,然後考慮到車速、車的計劃消耗時間的影響,對車輛以車速爲第一優先級以車的計劃消耗時間爲第二優先級進行了排序,並且由於官方允許對其發佈的兩張地圖分別調參,所以設置了兩組參數來提高線上成績。在不死鎖的條件下以這種方式發車,經過瘋狂調參,線上成績達到了1300+,這個時候我們也到了一個瓶頸。

Third

這時候有羣裏的大佬開源了一個線上線下結果有細微差距的可視化判題器,利用這個判題器,我們發現了我們輸出的結果對道路的利用還是很差,有的路口車太多、有的道路比較差卻走了很多車,所以我們對路口和道路進行了稀疏,即對路口和道路上的車進行統計,如果超出一定範圍,則對範圍外的車重新規劃路線。對路口的規劃起到了挺大的作用,對道路的規劃卻導致車的路線過於分散而出現容易死鎖的情況。之後,爲了解決道路的問題,對道路進行了重新分配權重,公式如下:

len_weight =length*30/((speedlim+15)*rwidth);

對道路重新分配權重也起到了不錯的效果,最後成績來到了900+。經過初賽正式賽的一番掙扎,總算勉強苟進複賽。

Fourth

複賽中,由於Car中增加了優先車以及預置車,發現在預置車沒有發完的情況下容易死鎖,然後針對預置車發完的時間點對預置車發完前和發完後進行了分開調參。因爲這時候我們已經寫出了準確的判題器,所以又用統計學的方法對每個時間片車在路上的情況進行統計,根據統計結果對發車情況進行調整,也有了一些進步。然後針對算法的細節進行了許多的優化,有些方法管用有些沒用,複賽訓練賽上分到2800+後我們的策略到了極限。這時候,複賽正式賽只剩兩天了,聽聞大佬們都用上了動態規劃,匆忙寫了一版出來,大致思路是根據路口的車的多少選擇哪個路口發車,之前的思路是每個路口輪流發車,同時每隔一定時間,觀察道路利用情況,選擇改變部分車輛的路線。匆忙下寫出的這版代碼的結果連之前的效果都不如,此時也到了複試正式賽的時間了,所以最後放棄了動態規劃。

正式賽臨時需求變更爲允許改變10%預置車的路線,由於比賽現場出現的一些問題,最終沒處理這部分車,以之前的策略拿到了第18的成績。

比賽感想

1 比賽很難,但最難的是堅持,技術不如人,那就花更多的時間。隨時關注官方羣和論壇,你遇到的問題可能別人也遇到過,看論壇很快可以解決。

2 多和別人溝通,本賽區和其他賽區都可以,做比賽消息很重要,和別人交流的過程中自己也會有很大的收穫。

3 算法的穩健性很重要,初賽和複賽正式賽我們的成績都不如訓練賽好,這是因爲算法中參數太多,正式賽限定時間內在新地圖上無法調參至最優解,所以要儘量減少參數,提高算法的穩鍵性,把更多的參數消除掉或者讓這些參去自適應。

4 代碼的穩健性很重要,初賽開始前羣裏的老師已經說了正式賽Car、Cross、Road中的ID不保證連續,但正式賽開始後還是有很多隊伍因爲這個原因崩了,其實代碼一開始寫的時候就考慮到這點或只需在代碼中做一個映射就可以了。

5 不可存僥倖心理,複試正式賽開始後我用了之前的一版算法跑出了一個結果上傳驗證我們的判題器,得到了一致結果,所以一直用新算法在線下調參,比賽快結束上傳我們的最好成績時,結果卻在線上死鎖。考慮是新算法在整理的過程中不小心動了判題器,導致新算法中的判題器出現了問題。結束前十分鐘我們依然沒有提交有效成績,所以針對死鎖的地圖給了個很寬鬆的參,總算運行成功,最後就第18了。對我們的判題器過於自信也是複賽成績差的一個原因,縱然進不了前四,但我們的實際水平應該比這個名次還是要高的。

寫在最後

這次比賽真真是見識了很多的大佬,比如杭夏賽區的咕咕咕,一直遙遙領先其他所有隊伍,還有西北賽區的我想喝手磨咖啡、鹹魚打挺還有其他賽區的隊伍,真是佩服。也通過這次比賽意識到了自己的很多不足,參加比賽既是爭取榮譽也是學習,最近有很多大佬在開源,我也是趕緊去學習一波,沒準後續再來個“2019華爲軟件精英挑戰賽學習篇”,敬請期待,哈哈哈哈哈哈~~~

無悔!!!2020年華爲軟件精英挑戰賽再會!!!

開源整理後將給出~~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章