2025年9月14日 星期日

統計軟體SAS與AI於商業運籌決策分析對決

 數據分析大對決

SAS
SAS統計軟體
專業統計分析
數據處理專家
企業級解決方案
Claude
AI Claude
智能AI助手
自然語言處理
靈活分析能力
VS

挑戰題目1:烘焙店材料精準運用最佳化,最後使營業利潤最大化。
挑戰題目2:外貿公司精準分配國際物流路線,最後使物流費用較小化。
依序與SAS對戰的AI選手分別為Claude, Gemini, Perplexity, ChatGPT等4位選手,我們來看哪個AI會翻車。
以上圖片html碼由Claude AI協助生成(照例,只要是AI做的,都「合先敘明」)。

某天洗澡時,忽然突發奇想,想試試SAS和我常用的4個AI對決數據分析,看結果會如何,所以有了這企劃。題目則自我Milanote線上資料庫中的案例來挑選,都是我N年前為練習使用SAS Proc Optmodel而分析的「數學題」。至於Proc Optmodel語法statement群,見SAS官網,它幾乎能解決所有關於「求最優解」的數學題。它在SAS Viya中,能拖出好幾個Proc Optmodel創建的模型,且隨時依當下的環境狀態參數表現值不同而自動變換模型結構以計算或預測出最佳解。

身為SAS老手,當然也要入手一本。


關於上述談及的Proc Optmodel語法statement群,大致分為如下重要段落(有些時候某些段落並不須要)。
Proc Optmodel;
1.分析用的資料哪裡來,以及參數宣告
2.決策變項的說明
3.限制條件的說明
4.目標函數的說明
5.求解器的使用
6.答案輸出
quit;

開始進入正題,Let's Go!
本篇文章不做語法教學,我想知道AI分析結果與SAS計算結果有否相同,所以重點在想知道結果(要說娛樂性搏流量我也認同,嗯就醬)。

題目1:烘焙店食用材料精準運用最佳化,最後使營業利潤最大化。


烘焙店共有4種商品,分別如上上表第一欄,每一商品其原料及用量見上上表每一欄,例如製作一箱可頌要用掉3公斤麵粉+2瓶奶油+2包黃油。然後現在麵粉每公斤20元,奶油每瓶40元,黃油每包35元。假設每天製作的商品都能全部售出(在實務端,這種假設,然而,但是後面接的句子最令人討厭,須另想方設法處理),每天應分別製作多少箱才能為烘焙店創造最大盈利。

前面講到的決策變項在這裡就是可頌(Croissant)吐司(Toast)法式麵包(Baguette)餅乾(Cookie)等四項商品要做多少箱;目標函數就是利潤(收入減成本);優化目標就是把利潤函數最大化;限制條件即原物料(麵粉(Kilos)奶油(Bottles)黃油(Bags))供給量有上限。SAS程式碼如下:

proc optmodel;
var Croissant>=0,Toast>=0,Baguette>=0,Cookie>=0;
con Flour: 3*Croissant+3*Toast+4*Baguette+3.5*Cookie<=130;
con Cream: 2*Croissant+1.5*Toast+0.5*Baguette+2*Cookie<=60;
con Butter: 2*Croissant+Toast+Baguette+Cookie<=40;
max Profit=440*Croissant+330*Toast+315*Baguette+385*Cookie
-20*(3*Croissant+3*Toast+4*Baguette+3.5*Cookie)
-40*(2*Croissant+1.5*Toast+0.5*Baguette+2*Cookie)
-35*(2*Croissant+Toast+Baguette+Cookie);
solve;
expand;
print Croissant Toast Baguette Cookie;
quit;

SAS只花了0.33+0.46秒就輸出報表(即完成計算)。

可頌不要賣、吐司賣25箱、法式麵包賣5箱、餅乾賣10箱會最賺錢,最大盈餘為7275元
所以吐司很賺錢,而可頌是賠錢貨。但受限成本和原物料供給上限考量,無法只賣吐司衝高利潤。

也可使用隱式變量,要用impvar statement,如下:
proc optmodel;
var Croissant>=0,Toast>=0,Baguette>=0,Cookie>=0;
impvar Kilos = 3*Croissant+3*Toast+4*Baguette+3.5*Cookie;
impvar Bottles=2*Croissant+1.5*Toast+0.5*Baguette+2*Cookie;
impvar Bags=2*Croissant+Toast+Baguette+Cookie;
con Flour: Kilos<=130,Cream: Bottles<=60,Butter: Bags<=40;
max Profit=440*Croissant+330*Toast+315*Baguette+385*Cookie
-20*Kilos-40*Bottles-35*Bags;
solve;
expand /impvar;
print Croissant Toast Baguette Cookie;
quit;

算出來的結果當然會一致。

過來換AI登場,指令如下:

1.烘焙店可頌(Croissant)每箱可賣440元,吐司(Toast)每箱可賣330元,法式麵包(Baguette)每箱可賣315元,餅乾(Cookie)每箱可賣385元。
2.可頌製作材料為3公斤麵粉、2瓶奶油、2包黃油;
 吐司製作材料為3公斤麵粉、1.5瓶奶油、1包黃油;
 法式麵包製作材料為4公斤麵粉、0.5瓶奶油、1包黃油;
 餅乾製作材料為3.5公斤麵粉、2瓶奶油、1包黃油。
3.製作材料中,麵粉每公斤20元、奶油每瓶40元、黃油每包35元。
4.製作材料供應量部份,麵粉上限為130公斤、奶油上限為60瓶、黃油上限為40包。

基於以上描述,這間烘焙店最大盈餘(即收入減成本)為多少?而可頌、吐司、法式麵包和餅乾要分別賣幾箱?

AI競賽1_後製

題目2:外貿公司精準分配物流路線,最後使物流費用較小化。

接下來分析的是物流網中任一節點的吞吐量(容額)與兩節點間的輸送費用等資源輸送決策問題。
有一加拿大外貿公司,公司在美國境內設有3個中轉站,在中國境內也設有3個中轉站,現有一批800噸貨物須由多倫多物流站發送到北京物流站,如下:


路線運轉圖及每一節點剩餘庫容

節點間的運輸費用如下(dataset為route):



各節點目前剩餘庫容(單位為噸)如下(dataset為capacity):


請問這800噸貨物該如何分配,總費用才會最小?費用是多少?
SAS程式碼如下:

proc optmodel; 
set <str,str> Arcs;  *宣告一個名為{Arcs}的集合,之後用來放「任兩相鄰節點間的路線」;
set <str> Nodes ;  *宣告一個名為{Nodes }的集合,之後用來放「所有節點的庫容」;

num Cost{Arcs};    *{Arcs}理所當然放成本;
num Capacity{Nodes};   *{Nodes}理所當然放庫容;
num Supply{Nodes} init 0;  *每個節點的供應量,初始化為0;
num Demand{Nodes} init 0;  *每個節點的需求量,初始化為0;

read data route into Arcs=[Origin Destination] Cost;       *讀分析用資料;
read data capacity into Nodes = [Warehouse] Capacity;  *讀分析用資料;

Supply['Toronto'] = 800;    *由多倫多供應800噸;
Demand['BeiJing'] = 800;  *北京之後會接收全部的800噸;

var x{Arcs} >= 0 <= 350; *經由各節點庫容可知相鄰兩節點路徑最大輸送量只到350;
impvar Flow_In{k in Nodes} = sum{<i,(k)> in Arcs} x[i,k];     *計算每個節點 k 的入流量總和;
impvar Flow_Out{k in Nodes} = sum{<(k),j> in Arcs} x[k,j];  *計算每個節點 k 的出流量總和;

con Flow_Balance{k in Nodes}: Flow_In[k] + Supply[k] = Flow_Out[k] + Demand[k];  *流量平衡(入流+供應=出流+需求);
con Flow_Node{k in Nodes}: Flow_In[k] + Supply[k]<=Capacity[k];  *容量限制(入流+供應≤節點容量);

min Total_Cost = sum{<i,j> in Arcs} Cost[i,j] * x[i,j];  *求最小費用;
solve with lp / solver=ns;
create data network_flows from [Origin Destination]={<i,j> in Arcs: x[i,j]>0} Amount=x;
quit;  *將答案輸出到名為network_flows的dataset;

SAS只花了0.33+0.67秒就輸出報表(即完成計算)。
Network_flows內容

所以如上表這樣分配物流後,就可繳交少物流費,為646750元

這類模型常用於物流配送、供應鏈管理、資源調度(水電等)以及網絡流量等。

過來換AI表演,,指令如下:

有間加拿大外貿公司,其在美國境內設有3個中轉站,在中國境內也設有3個中轉站,現有一批800噸貨物須由多倫多物流站發送到北京物流站。
由多倫多物流站出發可到芝加哥或洛杉磯或舊金山,而芝加哥物流站可到上海或天津,洛杉磯物流站可到上海或天津或香港,舊金山物流站可到天津或香港,最後上海或天津或香港等物流站再把貨物運送到北京物流站。
各物流站目前剩餘可放庫容如下:
多倫多為1500噸,芝加哥為300噸,洛杉磯為350噸,舊金山為200噸,上海為300噸,天津為300噸,香港為400噸,北京為2000噸。
各物流站間的貨物運送費用如下:
多倫多到芝加哥是105元,多倫多到洛杉磯是120元,多倫多到舊金山是135元,芝加哥到上海是600元,芝加哥到天津是621元,洛杉磯到上海是680元,洛杉磯到天津是650元,洛杉磯到香港是610元,舊金山到天津是710元,舊金山到香港是650元,上海到北京是55元,天津到北京是45元,香港到北京是100元。
請問800噸貨物由多倫多物流站發送到北京物流站,貨物該如何分配,運送費用才會最低。貨物運送過程中,請恪遵各物流站剩餘庫容,不可超過。

AI競賽2_後製

=================摘要=================

*************第1題=烘焙店盈收最大化案例*************
                    參賽選手                  挑戰結果
           Anthropic / Claude                翻車
               Google / Gemini                翻車
     Perplexity AI / Perplexity            成功
            Open AI  / ChatGPT             成功

*************第2題=運輸物流費最小化案例*************
                    參賽選手                  挑戰結果
           Anthropic / Claude                成功
               Google / Gemini                成功
     Perplexity AI / Perplexity            翻車
            Open AI  / ChatGPT             成功

=================總結=================
                    參賽選手                  挑戰結果
           Anthropic / Claude         1成功 1失敗
               Google / Gemini         1成功 1失敗
     Perplexity AI / Perplexity     1成功 1失敗
            Open AI  / ChatGPT      2成功 0失敗   ===>我有很多題庫,下次找一個讓你翻車的題目   ʅ(´◔౪◔)ʃ


附錄:
以上SAS由本地端Base SAS軟體執行,若改用雲端免費版SAS Studio執行,報表產出速度更快。


沒有留言: