最佳化決策模式設計與應用 - 資訊系同學
還記選課時,看到「最佳化決策模式與應用」這門課的課程大綱是這麼說的:透過數學和電腦程式找出最佳的決策。那個時候我覺得這聽起來很厲害,心中想著可能會用各種厲害的方法分析數據來當作判斷的依據,於是我就修了這堂課。不過,上課後我馬上發現這堂課的核心就是「線性規劃」。但是不知道你會不會覺得線性規劃是個簡單的問題?至少在我的印象中,高中線性規劃就是那個每次考出來題型都一樣,用兩、三條直線畫圖形來就能解掉的題目。所以當授課老師王逸琳教授說這堂課著重在〝線性規劃〞時,我心中有點小失望。
不過接下來的課程馬上就顯現出了我的天真。事實上,教授舉了很多實際或是有名的問題,例如排行程問題(scheduling)、背包問題又或是路線規劃問題,透過很特別的方法來假設變數、列不等式(限制式)、目標式,這些實際的問題才能巧妙地被轉換成線性規劃的問題,甚至邏輯敘述也可以被轉換成線性的不等式,像是「如果A發生B就會發生」可以假設變數A,B代表發生(1)或不發生(0),接著就可以將這個條件表示成A<=B。此外,這些線性規劃也不再像高中一樣只有兩個變數、用來限制條件的不等式也不只少少幾個,此時早已脫離了高中範圍,在平面上畫圖求解已經完全不可行,需要透過數學定理和軟體的輔助。而就算老師舉的某些問題很有名,你可能已經在其他地方看過它的解法或求解的演算法,但是當老師從線性規劃的角度來觀察它、解決它時,不曾看過的方法和技巧仍然令我覺得新奇。其實,課堂中所提到的問題,我有一些曾在演算法的相關課程看過,但修這堂課前,我就完全沒想過這些問題其實也可以透過線性規劃來解決。
這堂課的上課模式主要是王逸琳教授舉各種問題為例子,說明要怎麼分析這個問題 ,怎麼去假設變數,怎麼去列限制式(不等式),最後再留時間讓助教教我們怎麼用python和gurobi,把列出來的限制式寫成程式碼給電腦跑。課程結束後有一個小期末考和兩個project來當評分依據,而project就是讓我們實際運用整個星期所學到列限制式的技巧,去幫生活中的問題找最佳解。整個課程真的很實用,從觀察問題出發,再將問題觀察結果轉換成線性規劃,最後透過程式來求解。這將面對一個新問題所有求解的步驟都包含在裡面了。而且老師提出的問題很多元,不像高中永遠都是同一個題型。
修完這堂課之後,我了解到線性規劃可以被應用的範圍比我想像中的多太多了。生活中有很多問題都可以轉換成線性規劃問題來思考。像project1的問題,討論海產店怎麼進貨最好,考慮容易壞的海鮮的壽命、庫存時的耗損率,每天的採購量的上限,賣出時要先賣壽命最短的等各種限制。這原本是一個生活化且複雜的問題,以前的我肯定不會想到可以用線性規劃求解。此外,這個課程也讓我學習到要怎麼去分析問題、怎麼把問題轉成線性規劃問題、怎麼透過程式解決線性規劃問題。如果你還不清楚什麼是線性規劃,你可以考慮來瞭解一下這個非常實用的工具。如果你覺得線性規劃不實用,你可以來看看線性規劃都怎麼應用。如果你已經知道線性規劃很實用,那你可以來嘗試寫程式解決線性規劃問題。
關鍵字 #成大模組化 #線性規劃 #Gurobi #最佳化