Leo Yeh's Blog

SAS 優化研究 (9)

教學目標

初步了解資料包絡分析法之優化模型程式碼應用的基本概念。

重點概念

首先這麼多年以來經濟學家研究了企業產生的產出之間的關係,將能夠用於生產資源的分析,其中將會不斷應用數學回答兩個重要的問題,分別為最佳的營運方法是什麼?以及我們目前的商業模式是最佳的嗎?若能夠回答這兩個問題將能夠幫助企業中的組織提高績效以保持競爭力。然而大多數問題或過程涉及大量的輸入或決策,需要針對多種考慮或目標來產生最有效率的解決方案。此外在企業中通常會期望以最小的投入資源獲得最大之產出價值,而若不能達到領先之地位也會期望能夠知道自己必須在哪些方面做何種努力,才能達到與領先者相同之水準,因此績效評估往往是企業經營決策最重要的關鍵因素,此時使用資料包絡分析法 (Data Envelopment Analysis,DEA) 所提供的分析結果將會被訂定為決策目標的基礎。

接著我們將能夠使用實際達到的結果與可能的結果之間的簡單比率來定義效率的最大值,並且擴展效率概念主要以比較多個流程或方法來完成一個任務,我們主要關注的是相對效率或生產效率,而當比較企業中不同組織單位的效率時,通常將這些單位稱為決策單位 (Decision-making Units,DMU),我們將能夠從兩大方面衡量生產效率,分別為輸出為導向的方法和輸入為導向的方法,輸出為導向的方法主要用於使用給定的輸入組合產出最大化,輸入為導向的方法主要用於投入最小化以產生給定的輸出組合。此外資料包絡分析主要是一種線性優化模型主要用於建立類似的決策單位的效率模型,其主要是非參數的線性優化模型,所以不需要特定的函數來評估類似的決策單位,並且這些決策單位使用多個輸入來產生多個輸出。

再來我們透過一個簡單的輸入導向範例來說明該資料包絡的方法,其中有四個決策單位,每個決策單位皆使用兩個輸入,分別為職員和經理,主要產生兩個輸出,分別為品質和數量,請參考下表。至於決策單位名稱分別為 DMU A 、 DMU B 、 DMU C 和 DMU D。我們將能夠使用 PROC OPTMODEL 求解最佳的 lambda,更進一步最大程度地減少資源使用,以及針對決策單位 DMU A 進行評估。

DMU A DMU B DMU C DMU D
Staff 375 300 436 310
Manager 4 2 5 4
Quality 275 300 436 280
Quantity 1060 975 1070 1009

優化模型程式碼 (線性)

1
2
3
4
5
6
7
8
9
10
11
proc optmodel;
var DMU_A >=0, DMU_B >=0, DMU_C >=0, DMU_D >=0;
var H;
min Resources=H;
con Staff_IP: DMU_A*375 + DMU_B*300 + DMU_C*436 + DMU_D*310 <= 375*H;
con Manager_IP: DMU_A*4 + DMU_B*2 + DMU_C*5 + DMU_D*4 <= 4*H;
con Quality_OP: DMU_A*275 + DMU_B*300 + DMU_C*436 + DMU_D*280 >= 275;
con Quantity_OP: DMU_A*1060 + DMU_B*975 + DMU_C*1070 + DMU_D*1009 >= 1060;
solve;

print DMU_A DMU_B DMU_C DMU_D;
quit;

問題摘要

項目
目標原理 最小化
目標函數 Resources
目標類型 線性
變數數目 5
有上限 0
有下限 4
有下限和上限 0
可用 1
固定 0
限制數目 4
線性 LE (<=) 2
線性 EQ (=) 0
線性 GE (>=) 2
線性範圍 0
限制係數 18

解法摘要

項目
求解器 LP
演算法 對偶單形
目標函數 Resources
解決方案狀態 最佳
目標值 0.8689138577
原始不可解性 8.881784E-16
對偶不可解性 1.110223E-16
界限不可解性 0
反覆運算 7
預解時間 0.01
解決時間 0.02

優化模型結果

DMU_A DMU_B DMU_C DMU_D
0 0.38951 0 0.67416

優化模型日誌

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
NOTE: 問題產生將使用 4 個執行緒。
NOTE: 問題有 5 個變數 (1 個無限制, 0 個固定)。
NOTE: 問題有 4 個線性限制 (2 個 LE、0 個 EQ、2 個 GE、0 個範圍)。
NOTE: 問題有 18 個線性限制係數。
NOTE: 問題有 0 個非線性限制 (0 個 LE、0 個 EQ、0 個 GE、0 個範圍)。
NOTE: 已停用線性問題的 OPTMODEL 預解器。
NOTE: 已套用 LP 預解器值 AUTOMATIC。
NOTE: LP 預解器時間為 0.01 秒。
NOTE: LP 預解器已移除 0 個變數及 0 個限制。
NOTE: LP 預解器已移除 0 個限制係數。
NOTE: 預解的問題有 5 個變數、4 個限制和 18 個限制係數。
NOTE: 已呼叫 LP 求解器。
NOTE: 使用對偶單形演算法。
目標
階段反覆運算 值 時間
D 2 1 -2.000000E-01 0
P 2 7 8.689139E-01 0
NOTE: Optimal.
NOTE: Objective = 0.8689138577.
NOTE: 對偶單形求解時間為 0.01 秒。
NOTE: PROCEDURE OPTMODEL used (Total process time):
real time 0.18 seconds
cpu time 0.12 seconds

最後當我們執行優化模型程式碼之後將會輸出以上的結果,從結果中我們將能夠了解決策單位 DMU A 的效率為 86.89%,這代表著在這四個決策單位中 DMU A 相對沒有效率,此外如果我們分別評估其它三個決策單位將會發現效率皆為 100%。至於決策單位 DMU A 主要安排 375 位員工和 4 位經理,但是品質和數量的標準卻沒有達到效率,此時我們如果假設決策單位 DMU A 品質和數量不變,則就需要減少員工數,但要減少多少員工數呢?此時我們就能夠將員工數乘上目前的效率,也就是 375 × 0.8689138577 = 325.8426966375,此時不是四捨五入為 326 位員工,而是 325 位員工,若我們安排 326 位員工,則決策單位 DMU A 的效率為 99.91%,但是若我們安排 325 位員工,則決策單位 DMU A 的效率為 100%。

相關資源

SAS 模型管理 (2)

教學目標

初步了解 SAS 有關容器平台和模型管理的基本概念。

重點概念

首先目前台灣許多大企業皆採用 Red Hat OpenShift 作為企業的混合雲端平台,所謂 OpenShift 主要是全球領先提供業界最全面的企業級 Kubernetes 平台,而最近 SAS 與 Red Hat 正式合作以提供市場領先的分析服務,從而建立混合雲端分析解決方案,將有助於加速客戶在混合雲端平台中落實進階分析的相關應用。

接著隨著公司繼續向公有雲提供商轉移,此時 Red Hat OpenShift 提供了一個可移植的託管容器和 Kubernetes 平台,將能夠可以幫助客戶跨混合雲端管理其基礎架構,並且透過在 Red Hat OpenShift 環境中使用 SAS Analytics 客戶將能夠快速獲取進階分析結果,同時保持對執行分析工作負載的控制。

再來 SAS Viya 分析平台提供了一種基於雲端現代且靈活的架構,其能夠在一個受管的平台上支援 SAS 和開源機器學習模型的敏捷開發和部署,更進一步在 Red Hat OpenShift 中優化 SAS Viya 的雲原生設計將能夠為客戶提供跨混合環境的選擇和控制。此外 Red Hat OpenShift 容器平台則能夠自動化應用程式的設定,管理和擴展,將能夠讓客戶專注於分析開發,部署和操作,並且隨著透過存取開源軟體和自動機器學習功能使模型開發變得更有彈性。

最後模型部署和治理仍然是最關鍵的障礙,此時 Red Hat OpenShift 容器平台上的 SAS Viya 分析平台提供了一套全面的功能,用於組織模型的開發,部署和可解釋性。此時我們就能夠透過 SAS Model Manager 產品與專業顧問服務相結合的解決方案來克服與分析操作相關的挑戰,無論使用哪種語言撰寫寫模型,皆能夠快速啟動和落實持續性的模型管理生命週期。

相關資源

SAS 系統管理 (113)

教學目標

初步了解 SAS LASR Analytic Server 的基本概念。

重點概念

首先 SAS LASR Analytic Server 可為平行存取載入至記憶體中的資料提供安全的多使用者環境,並且透過在多台伺服器之間分配資料和工作負載,並且執行大規模並行運算處理,其可以利用分散式運算環境服務器之外,也可以部署在單台機器上,其中工作負載和資料量不需要分散式運算環境。

接著對於 SAS LASR Analytic Server 單台機器部署主要用於 SAS 解決方案,並且採用高效能的多執行緒分析程式碼進行設計,由於旨在快速存取記憶體中資料表之硬體和軟體的結合,其以極高的速度處理客戶端請求,主要透過將資料表載入至記憶體中進行處理分析,其使業務分析人員能夠以記憶體的速度瀏覽資料所呈現的報表,並且發現資料中的關係。此外目前許多成熟的 SAS 解決方案主要還是會以 SAS LASR Analytic Server 用於在記憶體中儲存報表所需要的資料,在此情況下單台機器必須擁有足夠的記憶體大小來儲存所有報表所需要的資料量。

再來對於 SAS LASR Analytic Server 分散式部署主要用於以分散式儲存大型資料集,此時在伺服器上具有本地儲存將會非常重要,所以該伺服器必須支援 Hadoop 分散式檔案系統 (HDFS) 作為位於同一位置的資料提供程序,至於使用 HDFS 主要是因為 SAS LASR Analytic Server 將能夠平行讀取和寫入 HDFS,此外 HDFS 提供複製以實現資料冗餘,HDFS 將資料作為區塊進行分散式儲存,並且複制提供故障轉移的功能。此外對於用於以分散式儲存大型資料集我個人強烈建議升級至 SAS Viya 分析平台,主要以 CAS 分散式伺服器為主進行分散式資料處理,將會比 SAS LASR Analytic Server 帶來更大的未來效益。

最後如果 SAS LASR Analytic Server 發生持續性的崩潰,最好檢查一下可能會干擾 SAS LASR Analytic Server 的網路或 SSH 連線設定設定,此時我們將能夠參考 SAS 官方文件中涵蓋了基本的故障排除步驟,我們將能夠採用這些步驟來嘗試解決此問題,請注意此文件的重點在於確認在所有節點上將「ClientAliveInterval」設定為「0」,此變更將會強制建立持久的連線,並且確認在所有節點上的「/etc/ssh/ssh_config」目錄或「/etc/ssh/sshd_config」目錄中不會出現 「TCPKeepAlive no」的設定,以及在進行任何更改後重新啟動 SSH 服務。此外驗證啟動 SAS LASR Analytic Server 的使用者從每個節點至每個節點皆能夠以無密碼 SSH 的方式進行連線。

相關資源

SAS 優化研究 (8)

教學目標

初步了解運輸問題之優化模型程式碼應用的基本概念。

重點概念

首先運輸問題是企業管理者經常會遇到特殊形式的線性規劃,所謂運輸問題主要是指由數個供應點將物品運送至數個需求點的問題,並且我們針對運輸問題有基本假設為運送的貨物為同質,也就是代表無論起點與終點的貨物相同,無論運貨數量多少,每單位運輸成本都相同,每個起點與每個終點之間的運輸路線只有一條路線。

接著針對運輸問題給定一組資料,請參考下表,其中包括供應點的價值和需求點的價值,以及單位運輸成本,並且運輸問題主要是確定從每個起點運輸到每個目的地的數量,目標是以最低的供應成本滿足需求。

Boston Newark Toronto Supply
Chicago 40 25 15 200
Detroit 30 15 10 150
Demand 50 150 100

再來我們將能夠透過 OPTMODEL 程序撰寫優化模型程式碼解決運輸問題,並且其中決策變數主要是從每個起點到每個目的地的運送量,此時我們能夠使用索引集和參數陣列的方法比起使用命名變數的方法更直觀表達。請注意決策變數必須在使用之前進行宣告,除了決策變數之外,像是穩含變數和參數陣列也必須在使之前進行宣告。

優化模型程式碼 (線性)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
proc optmodel;
set ORIGINS = /Chicago Detroit/;
set DESTINATIONS = /Boston Newark Toronto/;
num supply {ORIGINS} = [200 150];
num demand {DESTINATIONS} = [50 150 100];
num unit_cost {ORIGINS, DESTINATIONS} =
[40 25 15 30 15 10];
var NumShip {ORIGINS, DESTINATIONS} >= 0;
impvar FlowOut {i in ORIGINS} =
sum {j in DESTINATIONS} NumShip[i,j];
impvar FlowIn {j in DESTINATIONS} =
sum {i in ORIGINS} NumShip[i,j];
con Supply_con {i in ORIGINS}:
FlowOut[i] <= supply[i];
con Demand_con {j in DESTINATIONS}:
FlowIn[j] >= demand[j];
min TotalCost = sum {i in ORIGINS, j in DESTINATIONS}
unit_cost[i,j] * NumShip[i,j];
expand;
solve;
print NumShip;
quit;

優化模型選項

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Var NumShip[Chicago,Boston] >= 0                                                                                                    
Var NumShip[Chicago,Newark] >= 0
Var NumShip[Chicago,Toronto] >= 0
Var NumShip[Detroit,Boston] >= 0
Var NumShip[Detroit,Newark] >= 0
Var NumShip[Detroit,Toronto] >= 0
Impvar FlowOut[Chicago] = NumShip[Chicago,Boston] + NumShip[Chicago,Newark] + NumShip[Chicago,Toronto]
Impvar FlowOut[Detroit] = NumShip[Detroit,Boston] + NumShip[Detroit,Newark] + NumShip[Detroit,Toronto]
Impvar FlowIn[Boston] = NumShip[Chicago,Boston] + NumShip[Detroit,Boston]
Impvar FlowIn[Newark] = NumShip[Chicago,Newark] + NumShip[Detroit,Newark]
Impvar FlowIn[Toronto] = NumShip[Chicago,Toronto] + NumShip[Detroit,Toronto]
Minimize TotalCost=40*NumShip[Chicago,Boston] + 25*NumShip[Chicago,Newark] + 15*NumShip[Chicago,Toronto] + 30*
NumShip[Detroit,Boston] + 15*NumShip[Detroit,Newark] + 10*NumShip[Detroit,Toronto]
Constraint Supply_con[Chicago]: FlowOut[Chicago] <= 200
Constraint Supply_con[Detroit]: FlowOut[Detroit] <= 150
Constraint Demand_con[Boston]: FlowIn[Boston] >= 50
Constraint Demand_con[Newark]: FlowIn[Newark] >= 150
Constraint Demand_con[Toronto]: FlowIn[Toronto] >= 100

問題摘要

項目
目標原理 最小化
目標函數 TotalCost
目標類型 線性
變數數目 6
有上限 0
有下限 6
有下限和上限 0
可用 0
固定 0
限制數目 5
線性 LE (<=) 2
線性 EQ (=) 0
線性 GE (>=) 3
線性範圍 0
限制係數 12

解法摘要

項目
求解器 LP
演算法 對偶單形
目標函數 TotalCost
解決方案狀態 最佳
目標值 5750
原始不可解性 0
對偶不可解性 0
界限不可解性 0
反覆運算 6
預解時間 0.01
解決時間 0.02

優化模型結果

Numship Boston Newark Toronto
Chicago 50 0 100
Detroit 0 150 0

優化模型日誌

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
NOTE: 問題產生將使用 4 個執行緒。
NOTE: 問題有 6 個變數 (0 個無限制, 0 個固定)。
NOTE: 問題使用 5 個隱含變數。
NOTE: 問題有 5 個線性限制 (2 個 LE、0 個 EQ、3 個 GE、0 個範圍)。
NOTE: 問題有 12 個線性限制係數。
NOTE: 問題有 0 個非線性限制 (0 個 LE、0 個 EQ、0 個 GE、0 個範圍)。
NOTE: 已停用線性問題的 OPTMODEL 預解器。
NOTE: 問題為純網路執行個體。建議使用 ALGORITHM=NETWORK 選項求解此結構的問題。
NOTE: 已套用 LP 預解器值 AUTOMATIC。
NOTE: LP 預解器時間為 0.01 秒。
NOTE: LP 預解器已移除 0 個變數及 0 個限制。
NOTE: LP 預解器已移除 0 個限制係數。
NOTE: 預解的問題有 6 個變數、5 個限制和 12 個限制係數。
NOTE: 已呼叫 LP 求解器。
NOTE: 使用對偶單形演算法。
目標
階段反覆運算 值 時間
D 2 1 0.000000E+00 0
D 2 6 5.750000E+03 0
NOTE: Optimal.
NOTE: Objective = 5750.
NOTE: 對偶單形求解時間為 0.01 秒。
NOTE: PROCEDURE OPTMODEL used (Total process time):
real time 0.23 seconds
cpu time 0.17 seconds

最後當我們執行優化模型程式碼之後將會輸出以上的結果,從結果中我們將能夠了解如果要以最低的供應成本滿足需求,則從芝加哥需要分別傳輸 50 個貨物至波斯頓和傳輸 100 個貨物至多倫多,以及從底特律傳輸 150 個貨物至波斯頓。此外運輸問題更能夠解決不同領域型的問題,像是網路運輸問題、最大流量問題、最短路徑問題、任務分配問題、生產規劃問題、… 等,只要是將供應點稱為來源,需求點稱為目的,則皆能夠以上述的優化模型程式碼來解決問題。

相關資源

SAS 深度學習 (8)

教學目標

初步了解如何透過 SAS Viya 分析平台整合影像串流分析的完整生命週期。

重點概念

首先電腦視覺用於許多產業的使用者案例,像是醫院、工廠、購物中心、城市、海洋、博物館、體育場、… 等,根據官方文件所提供的資訊,其中提到在美國每年醫院會產生 6 億張影像,並且有 90% 的衛生保健資料是由影像所產生,以及放射科醫生每天手動檢查 1,000 張影像,此時我們若能夠電腦視覺的技術將能夠大量減少醫院人員的工作負擔。在工廠則是承受著不斷提高品質,並且同時降低成本和提高生產率的壓力,以及在生產線上使用攝影機簡化監視產品品質和整體設備效率的過程。在購物中心則是將電腦視覺應用於零售解決方案中,以利解決貨架圖合規性問題和貨架上庫存的即時追踪。在城市則是透過閉路電視 (CCTV) 對公共場所進行監視,以利確保正常的工作條件,此時使用電腦視覺將能夠檢查大量鏡頭,以利檢測交通擁堵的情況。在海洋則是透過自動分析海洋衛星圖像,以利推斷出船舶的航行路線,並且報告污染海洋的船舶,以及追踪海岸附近可疑的的行為,以利防止非法捕魚。在博物館則是使用攝影機可自動追踪畫廊內的人數,尤其是對於只有一種進出方式的博物館領域,確保有關人員遵守安全的法規,並且加強藝術品保護,以利改善客戶體驗。在體育場則能夠使用新興技術在球場上進行創新,主要使用來自現場的串流影像,並且應用機器學習,深度學習和人工智慧來擷取和分析此資料,更進一步為從粉絲招募到虛擬現實的一切創新應用。

接著電腦視覺處理主要有三個步驟,分別為:

  1. 獲取影像:主要透過視頻、照片或 3D 技術即時獲取大量的影像進行分析。
  2. 處理影像:主要透過機器學習模型自動完成此過程。
  3. 理解影像:主要針對物件進行識別或分類。

其中電腦視覺的工作模型,主要是從伺服器端進行模型訓練,當產生模型之後,將會進行模型部署在伺服器,從伺服器端進行模型訓練主要會讀取影像、處理影像、訓練深度學習模型和產生模型,在邊緣運算環境進行模型部署主要會擷取模型、串流影像評分和後續處理運算,此外有關串流影像也會在邊緣運算環境載入影像、前處理影像、串流影像評分和後續處理運算。至於所有回饋資訊皆會寫回控制系統,以利進行優化和觸發警示資訊。

再來我們將能夠透過 SAS Event Streaming Process 中在邊緣上整合和執行機器學習模型,並且透過單個儲存庫進行儲存和管理,因此有一個事實版本,並且將來自儲存庫的分析整合至串流專案中追踪使用情況,以及透過自動化和可重複性將分析部署到邊緣。其中主要透過 SAS Visual Data Mining and Machine Learning 建立已驗證的機器學習模型,並且透過 SAS Model Manager 提供模型治理和註冊模型的關聯,以及透過 SAS Event Streaming Process 將能夠啟用模型輸出的處理程序驅動可進行行動的資訊,更進一步透過 Event Stream Manager 提供部署和監控的功能,這是一個持續性的循環包括任何時間的模型需求至績效評分,循環過主要有六個步驟,分別為:

  1. 透過 SAS Visual Data Mining and Machine Learning 建立機器學習模型。
  2. 透過 SAS Model Manager 註冊機器學習模型。
  3. 透過 SAS Event Stream Processing Studio 擷取已註冊機器學習模型至串流分析中。
  4. 透過 SAS Event Stream Processing Studio 發行機器學習模型和進行版本追蹤。
  5. 透過 SAS Event Stream Manager 將機器學習模型的串流分析至邊緣裝置中。
  6. 透過 SAS Model Manager 監控機器學習模型的績效評估。

最後我們能夠透過 DLPy 的 Python 套件以開放語言 Python 在 SAS Viya 分析平台上撰寫影像辨識的機器學習或深度學習模型,因此我們能夠透過熟悉的 Python 程式語言訓練和驗證機器學習和深度學習模型,並且透過 SAS Viya 分析平台中的 SAS Visual Data Mining and Machine Learning、SAS Model Manager 、SAS Event Stream Processing Studio、SAS Event Stream Manager 等產品整合影像串流分析的完整生命週期。

相關資源

📖 more posts 📖