昨天分享了這個系列的想法:讓 AI 在模擬的水果店裡,學習決定售價與採收量。
今天想接著聊一個更基本的問題。如果要請 AI 幫忙做決定,我們應該先告訴它哪些事情?
就像請一個人幫忙顧店,如果沒有告訴他還剩多少水果、哪些快過期,他也很難決定今天要補多少貨。AI 同樣需要這些資訊。
最容易想到的資訊,就是庫存。
假設店裡還有 10 公斤芒果,光看這個數字,其實還不夠。如果這些芒果都剛採收,和大部分今天就要到保存期限,適合的做法可能很不一樣。
快到期的水果比較多時,我們可能會考慮降價,也可能先少採一點,避免新的水果一直進來,舊的卻賣不完。
所以在 Fruit_RL 裡,我會把不同存放天數的水果分開記錄,讓 AI 看見庫存的組成。這裡用的是模擬中的存放天數,沒有透過照片判斷水果成熟度。
對我來說,這個例子很能說明資訊的重要性。同樣是「還有 10 公斤」,補上放了多久,才比較能理解眼前的問題。
除了庫存,今天有多少水果可以採收,也會影響決定。就算想多採一些,仍然會受到當天可採收量的限制。
我也把季節、星期和天氣放進模擬裡。不同水果有不同的產季,而天氣在這個模型中,也會影響供給與需求。
這些關係目前都是程式中的設定。例如,模型可以設定雨天的需求較少,但這不代表每間水果店在雨天都一定賣得比較差。要套用到真實經營,仍然需要用實際資料確認。
我希望先把這些條件整理清楚,再觀察 AI 會不會隨著情況改變選擇。
如果昨天採了很多,最後卻沒賣完,今天可能就要重新考慮採收量。如果昨天很早就缺貨,也可能代表準備的數量不夠。
因此,專案也會提供前一天的售價、需求、銷售和缺貨紀錄,以及最近幾天的平均需求,作為決策的參考。
這裡有個容易忽略的小地方:賣出去的數量,不一定等於客人原本想買的數量。
例如,客人總共想買 15 公斤,但店裡只有 10 公斤,最後的銷量就只有 10 公斤。如果只看銷量,可能會以為準備 10 公斤就夠了。
在模擬中,程式能記錄需求與缺貨;真實店家則未必知道所有沒買到的需求。這也是之後解讀實驗時,需要記得的一個差別。
前面提到的庫存、天氣和過去紀錄,整理後交給 AI 的資訊,在這個專案裡稱為「觀察」,英文是 Observation。
可以把它想成每天開店前的一份簡單紀錄,告訴 AI 現在的狀況。程式會把這些內容轉成數字,再交給模型處理。
但這份紀錄不會包含今天最後賣了多少,因為做決定的時候,今天的營業還沒結束。如果先把結果告訴 AI,就像先給答案再考試,很難知道它真正學到了什麼。
今天想分享的重點是:在訓練 AI 之前,先想清楚它需要知道什麼,以及做決定時真的能知道什麼。