• 沒有找到結果。

本節描述如何使用Python 程式語言將石門水庫供水系統動力模式、水稻田水 平衡模式、前述遊戲情境與規則等內容進行串接整合,完整程式碼請至以下連結下 載:

https://drive.google.com/open?id=1GNgszRifQWIJ71ZjUk06b_kke6QQPntq

首先是石門水庫供水系統動力模式轉檔的部分,使用James Houghton 開發之 免費Python 套件--PySD,PySD 可將 Vensim 模式檔轉換為 Python 語言,操作語法 如下:

執行完畢後,會在所處位置建立一相同檔案名稱的Python 檔。之後在運算時,可 使 用 下 述 語 法 直 接 讀 取 已 轉 換 好 的 供 水 系 統 動 力 模 式 , 提 升 運 算 速 度 。

匯入河川入流量與計畫配水量的部分,利用 Pandas 函式庫讀取 Excel 資料,存成 dictionary 類型,再於執行 PySD「run」函式時,匯入至「params」欄位,並設定

「Level」變數的初始值和模式欲回傳哪些項目。此處需注意依分析年份不同,石 門水庫初始有效庫容量也須跟著調整。操作語法如下:

水稻田水平衡模式本身即為Python 語法撰寫而成,不須轉檔即可直接整合。

設計邏輯上乃將農業分組的五個組別以「for」迴圈寫在一塊,自 Excel 檔案匯入該 年氣象資料(溫度、降雨),以日為單位運算365 天並輸出各組別田間水平衡之結 果。

考量水市場交易必須可同步操作且匿名,以現場舉辦交易協商的方式並不可 行,是故採取線上資料庫的形式,讓玩家透過遊戲使用者介面進行訂單(Order)的提 交(Submit)、刪除(Delete)、下訂(Place)。線上資料庫使用Google雲端硬碟建立Google Sheet,以下列點說明各項表單用途:

 Player PlayerName:供玩家查詢當前已提交及已下訂之訂單,同步更新玩家自 身的決策操作(提交、刪除、下訂定單)。

 Irrigation Plan PlayerName:供農業方玩家查詢每回合交易資訊,包括原計畫配 水量、預計出售量、已出售量、售水所得、調整後計畫配水量、實際得到水量、

灌區耕作面積狀態。每回合玩家需填寫下一回合的灌區耕作面積狀態;實際得 到水量將於回合開始時由主持人更新數據;原計畫配水量不受更動,其值可用 於概估不同旬別種植全灌區面積時所需的水量;其餘項目依交易操作即時變 動更新。「Information」子表單提供組內灌區面積資訊、生產成本與各期作單 位面積產值。

 Production Plan PlayerName:供工業方玩家查詢每回合交易資訊,包括計畫配 水量、計畫購買量、已購買量、購買量上限、最大生產需水量、臨界生產需水 量、購水花費、最大旬收益、旬收益、實際得到水量、單位水價值、缺水耐受 係數、總購水花費。計畫購買量、已購買量、購水花費、總購水花費依交易操 作即時變動更新;實際得到水量與旬收益於回合開始時由主持人更新數據;其 餘項目為固定數值,依工業角色不同而不同。

 公開資訊-出售清單:可查閱架上出售訂單(Sell Order)內容,包括訂單編號、旬 別、水量、單位水價、訂單總價;同步更新所有玩家的決策操作(提交、刪除、

下訂定單)。

65

 公開資訊-欲購清單:可查閱架上預購訂單(Buy Order)內容,包括訂單編號、

旬別、水量、單位水價、訂單總價;同步更新所有玩家的決策操作(提交、刪 除、下訂定單)。

 公開資訊-成交清單:可查閱已成交之訂單內容,包括訂單編號、旬別、水量、

單位水價、訂單總價、成交時間;同步更新所有玩家下訂訂單的交易結果。

 公開資訊-回合結算:由主持人每回合結算後更新,提供水庫水位、農業及工 業之供水打折係數、水庫運用規線等資訊。

 主辦人-成交清單-Master:同「公開資訊-成交清單」,額外紀錄提交者與下訂 者,可用於後續研究分析玩家的互動行為。

 主辦人-Place Priority:記錄玩家提交下訂(Place)動作的先後順序,以利執行先 提出者先得制。

表單建立完成後,接著透過Google API 建立並管理各個角色的憑證,設定各 個Google Sheet 共享編輯功能給需要相關聯之使用者憑證。在 Python 語法的部分,

使用Gspread 和 oauth2client 函式庫進行程式與 Google Sheet 的連結和存取。遊戲 使用者介面則使用Tkinter 函式庫進行建置,農業方(左)與工業方(右)的實際 遊戲使用者介面如下圖所示:

圖4-5、遊戲使用者介面範例

不同玩家的遊戲使用者介面基本功能同樣具備提交訂單(Submit Order)、刪除 訂單(Delete Order)、下訂訂單(Place Order)、訂單分析助手(Assistant),差別在於農 業方(買方)僅能提交或刪除己身之出售訂單(Sell Order)、下訂預購訂單(Buy Order); 工業方(賣方)則反之。訂單分析助手(Assistant)提供玩家分析特定旬別之架上訂 單,程式會自動將架上訂單進行排列組合,並依各個使用者的出售(或購買)限制 篩選組合水量,最後匯出成「訂單最佳化選擇_分析結果(PlayerName)_第 N 旬」

Excel 檔,呈現該旬別可出售(或購買)的所有可能訂單組合供玩家決策參考,範 例如下圖所示:

圖4-6、訂單分析助手之分析結果範例(工業方)

67