那麼最後呢,我們要來為大家做的事情是介紹程式設計或者說是演算 在
operations management 上面的這個應用。
那麼 operations management 這是什麼呢?就是所謂的作業管理。
那麼作業管理這個東西啊,它講了顧名思義,它在管理所謂的作業 operations。
那這個作業 可不是大家要寫的回家作業啊,雖然字是那兩個字沒有錯,但是
作業呢,事實上是 imply 那些所謂的 activities。
就是行為呀,這個你仔細一想 activities 才真的要翻成作業,對吧。
好,那 這個東西在一開始它被這個、 這個領域被建立起來的時候呢,是被稱為 production management。
好,是生產管理,那好像是可以理解的,因為生產活動 有一個又一個的
operation 必須要去處理,比如說你要進貨、 你要進原料
你要把東西泡在一起,你要組裝、 你要包裝,你要上油漆,你要這個
通過生產線,然後你要出貨等等的,就是一個一個的 operation。
那麼今天因為 這個範疇已經往外擴張了嘛,傳統生產管理的一些方法已經被應用在包括服務業
包括供應鏈,包括其他領域的這個決策等等。
所以呢,我們今天就統稱為 operations management。
好,只要你有公司、 有作業流程 有作業需要被管理,需要被這個
improve,那我們就說你在做作業管理。
那麼最傳統的作業管理的這個議題呀,包括 以下幾個。
那你仔細一看,欸,還真的都跟工廠啊,跟生產、 跟供應鏈比較有關。
第一個是蓋廠要蓋在哪裡?蓋錯了的話,離市場太遠或者是離原料太遠都不 OK。
所以蓋廠要蓋在哪裡。
第二個,生產的時候你要有生產計劃,你要有生產排層。
對吧?好,你不能說,我呢就是不知道要生產什麼,就開始把機器打開。
你必須要先決定你幾點幾分什麼時候要生產什麼、 生產多少個?什麼時候要換成下一個? 好,你要排班、 你要排層。
第三個是你要控制 存貨。
好,存貨不管你是零售商也好、 製造商也好,存貨太多 就很貴,存貨太少,東西就不能做或是不能賣,那也不 OK。
最後 你呢,必須要有物流和運輸的問題。
東西有了,要送給消費者 或者是你是供應商,你要把東西送給你的這個客戶等等都需要處理。
那你可以發現哪 這些議題有一些共通性,就是它們大體上來說呢,大部分都是在管理東西,
而不是在管理人。
哦,你要決定工廠的位置、 生產的流程,然後存貨要買幾個
什麼時候要買,以及東西要怎麼送?所以在傳統上來說呢,是管東西
為主,既然是管東西,基本上就都是數量決策。
怎麼走、 幾點來、 這個買多少
花多少錢、 順序、 時間等等,就是數量決策。
那這是為什麼它會很自然地適合程式設計、 適合演算來做。
所以呢 傳統上有非常多的這個作業管理的問題,都是用電腦程式來處理的,也就不太奇怪。
好,那今天當然 OM 的範疇,已經遠大于這些傳統上
工廠內只對物品做的事情了,對人的也非常多。
不過我們就先從這個地方來出發。
那麼當我們想要用程式來解問題的時候呢,我們要做的 事情就是
implement algorithm,所以我們今天這個議題不只 是要跟大家介紹程式在
OM 上的應用,我們也想要順便介紹 algorithm 這個概念。
好,所以什麼是演算法呢?聽起來很有學問,實際上也還好。
就是所謂的演算法就是一個 step by step 的 procedure for solving a problem。
所以就是給定一個特定精確的任務了以後,我們要
做的事情就是演算法會精確地描述什麼時候要做什麼。
然後呢,整串湊起來就會完成一個任務,這樣子就叫做演算法。
演算法有一些條件,首先一個 problem
有一個演算法,一個 problem 也可以有一堆演算法。
那麼呢,一個演算法必須要依附著一個 problem 而存在。
你沒有目標,就沒有所謂的演算法,所以演算法應該要解決你的問題,應該要完成一個目標。
然後呢,演算法必須要精確,它必須要描述一些做得到的事情 這樣才叫做演算法。
比如說你問我,欸,老師啊,從台大要怎麼樣移動到 台科大,假設是這樣子的問題好了。
我就跟你說,呃,你就步驟一,敲敲你的頭; 步驟二自己看著辦,步驟三你就到了。
好,那這個就不是 演算法。
因為所謂的這個你自己看著辦,根本就不知道要怎麼做嘛。
我要跟你說,一打開你的手機,二輸入這個你要查 Google map
或者什麼的 三輸入台科大,四看到路線,五跟著路線走過去,那這樣子呢,就叫做一個演算法。
好 看一個比較正常的例子,假設今天哪,我們在玩撲克牌。
玩撲克牌的時候,很多時候你需要把牌由左到右、 由小到大 排序,有時候會這樣子。
那麼我們要怎麼排呢?好,可能的一個方法是這樣。
首先哪,我會先把第一張牌拿出來,放在 我最左手邊,我的手可以放在的最左手邊的位置。
接著我看一下第二張牌,第二張牌如果比 第一張牌大就放那兒,不然就跟第一張牌交換。
那現在呢,我手上已經有兩張牌咯,我就再看看第三張牌。
第三張牌 我呢,就看看它這個情況應該要放在第一個
第二個還是第三個,我要把它找一個位置插進去,那插進去的邏輯是什麼? 讓它繼續維持是排序狀態,比如說這個如果是
3,這個如果是 8,這個如果是 4, 那當然就是插中間了,依此類推。
所以我每一個步驟 就是會把一張牌插進目前已經排好序的牌堆裡。
讓它們繼續是排好序的,在第 i 張牌我就把它插進 讓第
i 前 i 張牌會有排序狀態 的一個牌堆的位置。
那麼如果我一直這麼做、 一直這麼做、 一直這麼做,最後 就可以把滿手的牌都排好了。
所以總而言之啊 演算法,就是一個 detailed description
of actions,就是你描述你要 要做什麼?尤其你的每一個
action 要 doerable 要可以做,然後最後會實現你的目標的話,
那就稱為一個演算法,所以今天呢,我們想要介紹東西包括程式設計或者說演算法 在
OM 領域的應用,我們想要介紹演算法的 這個概念,透過一些例子來傳遞給大家說何為演算法。
另外呢,我們也想要把本課程目前為止介紹過的變數啦、 selection
啦、 迴圈 哪、 list 啦之類的東西都應用一下,讓大家看
幾個 case study 說哦,原來我們學的東西,這些語法,這些技巧可以這樣用 可以那樣用。
所以呢,會看到一些 program,這些 program 的 size 的規模、 的行數 都比以前大家的範例 program 來得大。
不過那應該的嘛,因為 大家越來越厲害了。
好,所以必須要學一些越來越困難的程式。
規模大了的程式,我們來看看我們能透過它來解決什麼實際上的
問題,以及如何應用我們學過的這各式各樣的技巧。