研究筆記

家居塑膠回收隱藏的碳足跡

以生命週期帳目拆解清洗、運輸、處理及取代原生塑膠的效益,並審核一個示意回收設施選址模型。

2024年12月9日 · 約 4 分鐘閱讀

本文源於 IMMC 2025 Problem C,研究家居塑膠回收是否真的減少溫室氣體排放。這個問題把環境科學、生命週期邊界、設施選址與數學建模連在一起。

回收悖論

回收可以減少塑膠污染,碳足跡卻取決於整條系統:

  1. 污染
    • 食物殘留可能需要清洗;
    • 紙標籤及混合物料影響分選;
    • 污染可令部分收集物被棄置。
  2. 運輸
    • 由家居到收集點;
    • 由收集點到 sorting/reprocessing facility;
    • 車輛載重、回程與路線影響每公斤排放。
  3. 處理
    • 分選、清洗、粉碎、熔融及造粒使用能源與水;
    • 不同 polymer、顏色與品質的 recovery yield 不同。
  4. 避免生產
    • 再生料只有在真正取代原生塑膠時,才產生避免排放;
    • replacement ratio 不一定是 1:1。

因此,問題不只是「回收有沒有排放」,而是:

在一致的 functional unit 與 system boundary 下,回收情境相對基準處理情境的淨生命週期排放是多少?

碳帳目

令 functional unit 為「每月由一戶家庭收集的塑膠」,淨影響可寫成

CFnet=CFwash+CFcollection+CFsort+CFreprocess+CFresidueCFavoided.CF_{\mathrm{net}} =CF_{\mathrm{wash}} +CF_{\mathrm{collection}} +CF_{\mathrm{sort}} +CF_{\mathrm{reprocess}} +CF_{\mathrm{residue}} -CF_{\mathrm{avoided}}.

按塑膠類別 ii 展開:

CFnet=iwi(eiwash+eitransport+eiprocess+eiresidueρiyieivirgin),CF_{\mathrm{net}} =\sum_iw_i \left( e_i^{wash}+e_i^{transport} +e_i^{process}+e_i^{residue} -\rho_i y_i e_i^{virgin} \right),

其中 wiw_i 是投入質量,yiy_i 是回收產率,ρi\rho_i 是再生料取代原生料比例。這比原文

iwiCFiEi+j(Tj+PS)\sum_iw_iCF_iE_i+\sum_j(T_j+P-S)

更清楚,因為後者把每個運輸階段重複加入同一個 PSP-S,而且 CFiCF_iEiE_i 的物理意義與單位未一致。

流程效率

Material yield 可寫成

Yi=Rout,iWin,i,Y_i=\frac{R_{out,i}}{W_{in,i}},

但原文使用

E=RoutWin11+CfE=\frac{R_{out}}{W_{in}}\frac{1}{1+C_f}

會在污染已經包含於 Rout/WinR_{out}/W_{in} 時重複懲罰。較合理做法是分開記錄 contamination fraction、sorting yield、reprocessing yield 及 substitution ratio。

設施選址

jj 為需求/收集點、kk 為候選設施,xjk{0,1}x_{jk}\in\{0,1\} 表示點 jj 是否分配到設施 kkyky_k 表示是否啟用:

minkFkyk+jkqjdjketransportxjk.\min \sum_kF_ky_k +\sum_j\sum_k q_jd_{jk}e^{transport}x_{jk}.

約束為

kxjk=1j,\sum_kx_{jk}=1\quad\forall j, jqjxjkQkykk,\sum_jq_jx_{jk}\leq Q_ky_k \quad\forall k, xjkyk.x_{jk}\leq y_k.

可再加入最大 access distance、設施數、道路容量及公平約束。原文三重索引 xijkx_{ijk} 混合塑膠類別、需求點、設施與區域,而且 assignment constraint 的索引不一致,不能直接視為可運行模型。

原 Python 參數

原專案為 PET、HDPE、LDPE 與 PP 設定:

類別月質量 kgwashing factorprocessing factorefficiencysaving kg CO₂/kg
PET2.50.200.400.951.08
HDPE1.80.300.500.921.08
LDPE1.20.250.450.901.08
PP1.50.280.480.881.08

這些數值在原文章沒有來源、地區、年份、能源 mix 或單位說明,而且四種 polymer 使用相同 co2_savings=1.08。它們只能作示意 input,不能支持「PET 95% 最可持續」等經驗結論。

核心計算為:

def calculate_household_footprint(
    plastic_input,
    washing_data,
    transport_distance,
    factors
):
    totals = {
        'washing_cf': 0.0,
        'transport_cf': 0.0,
        'processing_cf': 0.0,
        'savings': 0.0,
        'net_cf': 0.0,
        'by_type': {}
    }

    for polymer, weight in plastic_input.items():
        p = factors[polymer]

        washing_cf = (
            weight
            * p['washing_liters_per_kg']
            * (
                washing_data['cold_water_cf']
                + washing_data['hot_water_ratio']
                * washing_data['heating_cf']
            )
        )
        transport_cf = (
            weight * transport_distance
            * p['transport_cf_per_kg_km']
        )
        processing_cf = (
            weight * p['processing_cf_per_kg']
        )
        savings = (
            weight
            * p['yield']
            * p['substitution_ratio']
            * p['virgin_minus_recycled_cf']
        )
        net_cf = (
            washing_cf + transport_cf
            + processing_cf - savings
        )

        totals['by_type'][polymer] = {
            'washing_cf': washing_cf,
            'transport_cf': transport_cf,
            'processing_cf': processing_cf,
            'savings': savings,
            'net_cf': net_cf
        }
        for key in (
            'washing_cf', 'transport_cf',
            'processing_cf', 'savings', 'net_cf'
        ):
            totals[key] += (
                totals['by_type'][polymer][key]
            )
    return totals

這個結構要求每個 factor 有清楚單位及來源,亦避免把無因次 efficiency 直接乘入排放因子而不解釋。

原 appendix 實作問題

Carbon model

transport_cf = weight * distance * 0.1 沒有說明車輛載重,實際相當於每公斤每公里排放因子,但名稱只寫 transport_cf_per_kmprocessing_factor * efficiency * (1 + contamination) 亦把效率提高變成更高排放,未必符合物料流。

transport_efficiency = 1 - distance/100 在距離超過 100 km 時變成負數,不是物理效率。

Location model

calculate_location_score() 使用 self.environmental_impact,但 constructor 沒有定義;optimize_location() 只是把隨機人口密度與基建分數作 0.6/0.4 加權後取最大,沒有需求分配、距離、容量或碳排放,並非前述 facility-location optimization。

Sensitivity analysis

RecyclingAnalyzer.sensitivity_analysis() 呼叫未定義的 _calculate_parameter_impact(),不能運行。

Dashboard

Dashboard 的流程效率 [0.95,0.88,0.92,0.90] 是硬編碼;「優化後減少 30%」及「潛在減少 70%」亦只是把結果乘 0.7 及 0.3,並非模型輸出。

net_cf 為負數,直接以各 polymer 的負值畫 pie chart 亦沒有合理 part-to-whole 意義。

因此,下圖是輸入假設的視覺摘要,不是經驗驗證的碳 dashboard:

原專案塑膠回收示意 dashboard

原文百分比不能當作結果

文章聲稱:

  • 清洗佔 20–30%;
  • 運輸佔 25–35%;
  • 處理佔 30–40%;
  • PET、HDPE、LDPE、PP 效率分別為 95%、92%、90%、88%;
  • 都市適合多個小中心、鄉郊適合集中設施;
  • 一分鐘內完成 real-time processing。

但原 code 沒有來源資料、情境比較、時間量度、選址求解或不確定性分析。這些數字至多是設定或敘述,不能稱為模型發現。

應如何建立可辯護研究

1. 固定 functional unit 與 baseline

例如比較「處理 1 tonne 分類後 PET」在:

  • 回收;
  • 焚化發電;
  • 堆填;
  • 原生塑膠生產被部分取代

之間的 net kg CO₂e。

2. 收集有來源的參數

  • 本地電力與熱水排放因子;
  • 收集車型、載重及實際路線;
  • sorting 和 reprocessing yield;
  • 殘渣處理;
  • virgin/recycled resin 的 cradle-to-gate factors;
  • substitution ratio;
  • 家庭實際清洗水量。

3. 情境與不確定性

對 grid mix、運距、污染、yield、清洗方式與 substitution ratio 建立 distributions,報告 net saving 的區間及

Pr(CFnet<0).\Pr(CF_{\mathrm{net}}<0).

4. 聯合選址

使用真實需求點、道路距離、候選地、固定建設成本與容量,解 facility-location model;再比較集中與分散設施的運輸和處理 economies of scale。

5. 分開多種環境目標

較低碳排放不等於較少 plastic leakage、毒性、水耗或微塑膠;應避免用單一 carbon score 代表整體可持續性。

結語

家居塑膠回收的碳影響確實由清洗、運輸、處理、污染與避免原生生產共同決定。這個建模框架有助列出帳目,也揭示設施選址與家庭行為的互動。

原專案 dashboard 使用大量未引用、硬編碼與隨機生成數值,部分程式亦不能運行,所以不能證明淨負碳足跡或最佳設施位置。真正有用的下一步,是把每個因子連到明確地區及資料來源,再報告 baseline-relative、帶不確定性的生命週期結果。

致謝

感謝 International Mathematical Modeling Challenge 提供問題情境,促使學生以數學模型探索家居回收系統。