第六十六章:你怎麼知道的?!(二更求月票)
「第二種比第一種更簡單。」
韓川笑了笑,從許志遠的手中拿回了稿紙,翻到背面,然後在空白處畫了一個坐標系。
橫軸標代表x₁,縱軸代表標x₂。
畫好坐標系後,他緊接著在裡面畫了一條斜線,解釋道。
「比例約束x₂=1.5x₁,從原點出發,斜率1.5。最優解一定在這條線上或線下方,因為上方不滿足約束條件。」
「把三條原料約束和一條比例約束畫進坐標系,可行域就是四條直線圍起來的區域。」
「那麼整數最優解一定在可行域的邊界上,而且大概率落在某兩條約束直線的交點上。」
「因為最優解要儘可能滿足約束,只要浪費資源那肯定就不是最優的。」
「所以....」
說著,他又在坐標系中畫了三條直線,分別代表原料1、原料2、原料3的約束邊界。
從畫面來看,很明顯這三條直線在坐標系裡交出一個不規則的四邊形區域。
「原料2的約束3x₁+2x₂=600最陡,原料1的約束2x₁+4x₂=800最平。這兩條直線的交點在x₁=100,x₂=150。」
韓川用筆尖點了點那個交點,接著說道:「而這個點恰好也落在比例約束線上,150正好是100的1.5倍。而且它還在原料3約束線的下方,也就是5×100+150=650,小於750,有剩餘。」
「而四個約束,兩個在這一點同時取等,一個取嚴格不等。在二維整數規劃里,這種『雙重緊約束』的點就是最優解的最強候選。」
「從這個坐標系,不用算目標函數都能判斷它是最優的分配方案,因為它同時耗盡了兩種最緊張的資源,沒有浪費。」
劉露盯著稿紙上那個簡單的坐標圖,驚訝地嘴巴都張開了。
她參加過兩屆全國大學生數學建模競賽了,雖然不是建模手和編程手,但多多少少也懂一些。
正常來說,建模做線性規劃從來都是打開LINGO或者MATLAB,輸入變量,建立約束,然後點運行等結果。
現在這是個什麼情況?一張坐標系就直接給他們需要用軟體才能算出來的數據直接顯示出來了?
不是,搞數學的,都這麼厲害的嗎?
一旁,許志遠從韓川的手中接過稿紙,盯著坐標系上的四邊形區域皺著眉頭問道。
「如果可行域的頂點不是整數怎麼辦?」
不是整數,就意味著建模過程中生產材料的使用無法單獨計算。
「那就枚舉最近的幾個整數點。」
韓川的語氣輕鬆地開口道:「這種二維問題,交點附近的整數格點最多四個,上下左右各取整,逐個驗證約束,總有一個是最優的。」
「不過對於這道題來說,交點本身就是整數,連枚舉都省了。」
話落,實驗室里安靜了幾秒,許志遠捏著稿紙盯著上面的坐標系和算式在琢磨著什麼。
倒是劉露一臉驚詫的看著韓川,這傢伙,真的是第一次參加建模比賽,第一次上建模課嗎?
怎麼感覺這麼熟練的樣子?
韓川倒是沒在意劉露的目光,他看著依舊皺眉苦思的許志遠,好奇地問道:「許師兄還有什麼問題?」
許志遠沉默了一會,忽然開口道:「韓川,你這個方法能用到分層框架重新處理上嗎?」
聞言,韓川愣了一下:「分層框架重新處理?」
許志遠點點頭,從一旁的書桌上抽過來自己的筆記本電腦,指著屏幕上開著MATLAB開口道。
「這兩天我在把前年國賽的B題,也就是城市交通流量分配那道,嘗試重新用分層框架做了一遍,遇到了一些問題。」
說到這,他想起了什麼緊接著看向韓川問道:「你看過原題嗎?」
韓川搖搖頭,道:「沒有,這段時間我只接觸過建模教材上的那些相對較為基礎的案例和問題。」
聞言,許志遠點擊了一下滑鼠,操作著電腦調出了2007年國賽的題目。
韓川湊了過去,看了一眼。
簡單地來說,07年全國大學生數學建模競賽B題叫做《乘公交,看奧運。
這是一道以2008年京城奧運會為背景,要求為觀眾在龐大而複雜的公交(公汽+地鐵)網絡中規劃最優出行路線的難題。
參賽者需要針對這道題目建立一個以『公共運輸線路』為基礎的查詢系統,並設計核心模型與算法。可以說是一道非常經典的多目標規劃與圖論結合的問題了。
題目分為三個小問,從簡單到複雜。
第一問是僅考慮公共汽車網絡,建立一個只包含公共汽車線路的數學模型與算法,為任意給定的兩個站點找出『最佳乘車路線』。
第二問則是將地鐵線路納入考量,建立一個能處理公共汽車和地鐵兩種交通方式的統一模型。
第三問最複雜,需要引入步行因素,擴展模型允許乘客通過步行在任意兩個站點間進行換乘。
看完題目,韓川臉上的神色有些怪異。
在08年奧運會舉辦之前出這樣的題目...emmmmm。
他怎麼感覺,國家在通過建模大賽這種方式『白嫖』他們這些參賽者做出來的成果呢?
在韓川看完題目後,許志遠拖動滑鼠,切換到自己的解決方案後開口道:「這道題的難點不在建模,在於數學上的求解。」
「因為單是京城市的公交線路就有幾百條,站點幾千個。如果把它當成一個標準的圖論最短路徑問題,鄰接矩陣的規模會大到沒法直接處理。」
「當年所有因為這道題而拿獲獎的隊伍都用了各種啟發式算法,比如遺傳算法、模擬退火、蟻群算法等等。本質上都是在暴力搜索的基礎上做減法。」
「我這些天在想,這道題能不能用分層框架來做。」
「因為公交網絡有一個天然的分層結構:骨幹線路、支線路線、接駁路線等等。」
「如果把骨幹線路放在第一層,支線放在第二層,接駁線放在第三層,換乘樞紐作為共享變量,理論上應該可以。」
盯著屏幕上的解決方案,韓川若有所思地開口道:「我想,你的問題應該出在骨幹線路、支線路線這些路線的交叉換乘點上。」
「對不對?」
聽到韓川的話,許志遠一臉驚詫的看了過來:「你怎麼知道的?你不是沒看過原題嗎?」
.....
PS:二更求月票求推薦票求追讀求評論~
韓川笑了笑,從許志遠的手中拿回了稿紙,翻到背面,然後在空白處畫了一個坐標系。
橫軸標代表x₁,縱軸代表標x₂。
畫好坐標系後,他緊接著在裡面畫了一條斜線,解釋道。
「比例約束x₂=1.5x₁,從原點出發,斜率1.5。最優解一定在這條線上或線下方,因為上方不滿足約束條件。」
「把三條原料約束和一條比例約束畫進坐標系,可行域就是四條直線圍起來的區域。」
「那麼整數最優解一定在可行域的邊界上,而且大概率落在某兩條約束直線的交點上。」
「因為最優解要儘可能滿足約束,只要浪費資源那肯定就不是最優的。」
「所以....」
說著,他又在坐標系中畫了三條直線,分別代表原料1、原料2、原料3的約束邊界。
從畫面來看,很明顯這三條直線在坐標系裡交出一個不規則的四邊形區域。
「原料2的約束3x₁+2x₂=600最陡,原料1的約束2x₁+4x₂=800最平。這兩條直線的交點在x₁=100,x₂=150。」
韓川用筆尖點了點那個交點,接著說道:「而這個點恰好也落在比例約束線上,150正好是100的1.5倍。而且它還在原料3約束線的下方,也就是5×100+150=650,小於750,有剩餘。」
「而四個約束,兩個在這一點同時取等,一個取嚴格不等。在二維整數規劃里,這種『雙重緊約束』的點就是最優解的最強候選。」
「從這個坐標系,不用算目標函數都能判斷它是最優的分配方案,因為它同時耗盡了兩種最緊張的資源,沒有浪費。」
劉露盯著稿紙上那個簡單的坐標圖,驚訝地嘴巴都張開了。
她參加過兩屆全國大學生數學建模競賽了,雖然不是建模手和編程手,但多多少少也懂一些。
正常來說,建模做線性規劃從來都是打開LINGO或者MATLAB,輸入變量,建立約束,然後點運行等結果。
現在這是個什麼情況?一張坐標系就直接給他們需要用軟體才能算出來的數據直接顯示出來了?
不是,搞數學的,都這麼厲害的嗎?
一旁,許志遠從韓川的手中接過稿紙,盯著坐標系上的四邊形區域皺著眉頭問道。
「如果可行域的頂點不是整數怎麼辦?」
不是整數,就意味著建模過程中生產材料的使用無法單獨計算。
「那就枚舉最近的幾個整數點。」
韓川的語氣輕鬆地開口道:「這種二維問題,交點附近的整數格點最多四個,上下左右各取整,逐個驗證約束,總有一個是最優的。」
「不過對於這道題來說,交點本身就是整數,連枚舉都省了。」
話落,實驗室里安靜了幾秒,許志遠捏著稿紙盯著上面的坐標系和算式在琢磨著什麼。
倒是劉露一臉驚詫的看著韓川,這傢伙,真的是第一次參加建模比賽,第一次上建模課嗎?
怎麼感覺這麼熟練的樣子?
韓川倒是沒在意劉露的目光,他看著依舊皺眉苦思的許志遠,好奇地問道:「許師兄還有什麼問題?」
許志遠沉默了一會,忽然開口道:「韓川,你這個方法能用到分層框架重新處理上嗎?」
聞言,韓川愣了一下:「分層框架重新處理?」
許志遠點點頭,從一旁的書桌上抽過來自己的筆記本電腦,指著屏幕上開著MATLAB開口道。
「這兩天我在把前年國賽的B題,也就是城市交通流量分配那道,嘗試重新用分層框架做了一遍,遇到了一些問題。」
說到這,他想起了什麼緊接著看向韓川問道:「你看過原題嗎?」
韓川搖搖頭,道:「沒有,這段時間我只接觸過建模教材上的那些相對較為基礎的案例和問題。」
聞言,許志遠點擊了一下滑鼠,操作著電腦調出了2007年國賽的題目。
韓川湊了過去,看了一眼。
簡單地來說,07年全國大學生數學建模競賽B題叫做《乘公交,看奧運。
這是一道以2008年京城奧運會為背景,要求為觀眾在龐大而複雜的公交(公汽+地鐵)網絡中規劃最優出行路線的難題。
參賽者需要針對這道題目建立一個以『公共運輸線路』為基礎的查詢系統,並設計核心模型與算法。可以說是一道非常經典的多目標規劃與圖論結合的問題了。
題目分為三個小問,從簡單到複雜。
第一問是僅考慮公共汽車網絡,建立一個只包含公共汽車線路的數學模型與算法,為任意給定的兩個站點找出『最佳乘車路線』。
第二問則是將地鐵線路納入考量,建立一個能處理公共汽車和地鐵兩種交通方式的統一模型。
第三問最複雜,需要引入步行因素,擴展模型允許乘客通過步行在任意兩個站點間進行換乘。
看完題目,韓川臉上的神色有些怪異。
在08年奧運會舉辦之前出這樣的題目...emmmmm。
他怎麼感覺,國家在通過建模大賽這種方式『白嫖』他們這些參賽者做出來的成果呢?
在韓川看完題目後,許志遠拖動滑鼠,切換到自己的解決方案後開口道:「這道題的難點不在建模,在於數學上的求解。」
「因為單是京城市的公交線路就有幾百條,站點幾千個。如果把它當成一個標準的圖論最短路徑問題,鄰接矩陣的規模會大到沒法直接處理。」
「當年所有因為這道題而拿獲獎的隊伍都用了各種啟發式算法,比如遺傳算法、模擬退火、蟻群算法等等。本質上都是在暴力搜索的基礎上做減法。」
「我這些天在想,這道題能不能用分層框架來做。」
「因為公交網絡有一個天然的分層結構:骨幹線路、支線路線、接駁路線等等。」
「如果把骨幹線路放在第一層,支線放在第二層,接駁線放在第三層,換乘樞紐作為共享變量,理論上應該可以。」
盯著屏幕上的解決方案,韓川若有所思地開口道:「我想,你的問題應該出在骨幹線路、支線路線這些路線的交叉換乘點上。」
「對不對?」
聽到韓川的話,許志遠一臉驚詫的看了過來:「你怎麼知道的?你不是沒看過原題嗎?」
.....
PS:二更求月票求推薦票求追讀求評論~