谷斗科技布局生態(tài),賦能制造業(yè)“全局優(yōu)化,決策未來(lái)”之力
運(yùn)籌優(yōu)化實(shí)際落地項(xiàng)目流程
一個(gè)典型的運(yùn)籌優(yōu)化項(xiàng)目通常遵循以下步驟:需求調(diào)研、算法開(kāi)發(fā)、算法測(cè)試、系統(tǒng)集成和上線(xiàn)實(shí)施。
需求調(diào)研:在項(xiàng)目啟動(dòng)前,必須進(jìn)行詳盡的需求分析,明確客戶(hù)的業(yè)務(wù)需求及邏輯。這不僅限于技術(shù)層面,還包括商業(yè)考量,如項(xiàng)目的盈利能力、客戶(hù)團(tuán)隊(duì)的綜合素質(zhì)、自動(dòng)化與數(shù)字化水平是否支持項(xiàng)目實(shí)施等,以及客戶(hù)推動(dòng)項(xiàng)目的動(dòng)機(jī)等因素。
算法開(kāi)發(fā):這個(gè)就是根據(jù)甲方的需求制定算法解決方案,然后去開(kāi)發(fā)相應(yīng)的算法即可。當(dāng)然我們這里主要指的是運(yùn)籌優(yōu)化類(lèi)的項(xiàng)目,涉及的算法主要都是運(yùn)籌優(yōu)化相關(guān)的建模和算法。如果是在學(xué)校里做學(xué)術(shù)的話(huà),那基本上我們就只在這個(gè)部分玩命折騰就可以了。
算法測(cè)試:很多時(shí)候開(kāi)發(fā)完成的差不多了,我們就需要一些測(cè)試算例和測(cè)試環(huán)境來(lái)輔助我們驗(yàn)證我們開(kāi)發(fā)的算法是否正確,是否可以滿(mǎn)足用戶(hù)需求。這一步如果情況好一點(diǎn)的話(huà),甲方會(huì)協(xié)助你搭建一個(gè)測(cè)試環(huán)境,如果情況差一點(diǎn)就只能是提取一些離線(xiàn)的類(lèi)似Excel表格數(shù)據(jù)來(lái)自己模擬下測(cè)試環(huán)境。
系統(tǒng)集成:一般來(lái)說(shuō)你開(kāi)發(fā)的都只是一個(gè)算法模塊,在實(shí)際生產(chǎn)環(huán)境中這個(gè)模塊并不是一個(gè)可以單獨(dú)運(yùn)行起來(lái)的東西,它一定是屬于一個(gè)軟件或者一個(gè)系統(tǒng)中的子模塊。這個(gè)時(shí)候就需要把你開(kāi)發(fā)的算法模塊和現(xiàn)有的軟件和系統(tǒng)對(duì)接起來(lái),這個(gè)就是系統(tǒng)集成主要解決的問(wèn)題。
上線(xiàn)實(shí)施:這個(gè)部分可能會(huì)是整個(gè)項(xiàng)目里邊最痛苦的部分,整個(gè)軟件系統(tǒng)會(huì)真正部署到生產(chǎn)環(huán)境中去跑,那么在跑的過(guò)程中一定會(huì)遇到這樣那樣的問(wèn)題,甲方也會(huì)提出這樣那樣的質(zhì)疑,當(dāng)然甲方也會(huì)提出一些之前從沒(méi)有提過(guò)的需求。這些都是上線(xiàn)實(shí)施所需要面對(duì)的問(wèn)題,這個(gè)問(wèn)題并不是單純的算法問(wèn)題,而是融合了商務(wù),項(xiàng)目管理和算法系統(tǒng)的綜合性問(wèn)題。
業(yè)務(wù)邏輯和數(shù)據(jù)耦合
前面梳理了一下運(yùn)籌優(yōu)化實(shí)際落地項(xiàng)目的流程。最近我們?cè)陧?xiàng)目上線(xiàn)實(shí)施的時(shí)候遇到了兩個(gè)頭疼的問(wèn)題:
數(shù)據(jù)中隱含各種業(yè)務(wù)邏輯
算法和業(yè)務(wù)邏輯高度耦合
2.1 數(shù)據(jù)中隱含各種業(yè)務(wù)邏輯
這個(gè)混亂并不簡(jiǎn)單的是數(shù)據(jù)缺失,例如說(shuō)在數(shù)據(jù)中時(shí)間粒度不統(tǒng)一,有時(shí)候時(shí)間粒度是周,有時(shí)候是天,有時(shí)候是0.5天,而且沒(méi)有一個(gè)flag標(biāo)識(shí)告訴你,到底時(shí)間粒度是什么。而是需要你通過(guò)數(shù)據(jù)內(nèi)部邏輯去推算得到。比方數(shù)據(jù)中時(shí)間范圍是一年,若我想判斷當(dāng)前這個(gè)數(shù)據(jù)表格時(shí)間粒度是周,我需要檢查如果說(shuō)時(shí)間索引最大沒(méi)有超過(guò) 53的(一年大約有53周)話(huà),那我就可以據(jù)此推斷出當(dāng)前時(shí)間粒度是周;若當(dāng)前表格時(shí)間索引是天,那我們需要檢查當(dāng)前表格中時(shí)間索引要有大于53的,同時(shí)要小于365,這就可以確定出當(dāng)前時(shí)間索引是天,而不是周。
2.2 算法和業(yè)務(wù)邏輯高度耦合
如果說(shuō)對(duì)于數(shù)據(jù)的問(wèn)題,我們作為運(yùn)籌優(yōu)化算法開(kāi)發(fā)人員也無(wú)能為力的話(huà),那么算法和業(yè)務(wù)邏輯高度耦合,這個(gè)部分則是我們可以改變的。典型的一個(gè)例子就是 我設(shè)計(jì)了一套遺傳算法來(lái)求解 Capactiy VRP 問(wèn)題,如果算法人員在設(shè)計(jì)遺傳算法的時(shí)候往往是會(huì)將業(yè)務(wù)邏輯耦合入交叉算子或者變異算子中。
這樣帶來(lái)的一個(gè)嚴(yán)重的問(wèn)題就是 業(yè)務(wù)邏輯是經(jīng)常發(fā)生變化的,有些業(yè)務(wù)邏輯的變化會(huì)徹底導(dǎo)致你的算法完全不適用了。例如一開(kāi)始告訴你是 Capacity VRP問(wèn)題,后來(lái)才告訴你是 Pick up deliever 的問(wèn)題,那么你之前基于Capcity VRP問(wèn)題設(shè)計(jì)的很多算法和代碼都需要大幅度修改。這顯然并不是算法人員所期望的。
理想狀態(tài)下算法開(kāi)發(fā)人員總是希望我們?cè)陧?xiàng)目一開(kāi)始就把需求明確下來(lái),把要做什么問(wèn)題完全明確出來(lái),當(dāng)確定下來(lái)之后就不要再變來(lái)變?nèi)チ?,但?shí)際上甲方的業(yè)務(wù)也是在不斷發(fā)展中的,即使對(duì)于甲方而言可能都沒(méi)有這個(gè)全局視角去幫助你去把所有的需求提煉出來(lái)。所以在項(xiàng)目實(shí)施過(guò)程中,業(yè)務(wù)邏輯和項(xiàng)目需求發(fā)生變化幾乎是一定會(huì)發(fā)生的,那么這個(gè)時(shí)候我們?cè)谠O(shè)計(jì)算法的時(shí)候要注意將業(yè)務(wù)邏輯和算法盡量解耦,這樣的話(huà)當(dāng)業(yè)務(wù)邏輯發(fā)生變化了,項(xiàng)目需要變化了,我們可以在算法端盡量少修改代碼,做到對(duì)變化較快的響應(yīng)。
總結(jié)
以上就是最近做運(yùn)籌優(yōu)化落地項(xiàng)目的一點(diǎn)感悟,其實(shí)也算是一些教訓(xùn)吧。如果是一直在學(xué)校里只是做科研的話(huà),沒(méi)有深入到落地的第一線(xiàn)我也不太可能發(fā)現(xiàn)這些問(wèn)題。以往總是聽(tīng)別的人說(shuō)運(yùn)籌優(yōu)化項(xiàng)目落地難,各種抱怨需求變化,數(shù)據(jù)缺失等問(wèn)題,真正自己身體力行之后才會(huì)對(duì)這些有更深刻的一個(gè)認(rèn)識(shí)。