見出し画像

#28 和歌山県の廃棄物発生量を最適化手法により推計

#27で 、最適化計算を実行しました。

今回は、最適化計算によって得られた重量単価を用いて、和歌山県の廃棄物発生量を推計していきます。

最適化後の重量単価一覧表を取得

まずは、最適化した重量単価の一覧表を取得します。
新規データフレームdf_sol_price_per_tonに、最適化後の重量単価(変数の値)を格納します。

# 最適化後の重量単価をデータフレームに格納
df_sol_price_per_ton = df_price_per_ton.copy()
for i in range(len(df_sol_price_per_ton.index)):
   df_sol_price_per_ton.iat[i, 0] = int(model.u[model.ITEMS[i]].value)
df_sol_price_per_ton

画像1

最適化後の各部門の廃棄物発生量を推計

先述の最適化後の重量単価一覧表を用いて、部門(sector)ごとの廃棄物発生量を推計します。

# 最適化後の廃棄物発生量を推計
df_sol_estimate = df_estimate.copy()

for x in range(len(df_sol_price_per_ton.index)):
   # 投入量を計算
   input = 0 # 投入分
   output = 0 # 産出分
   fuel = 0 # 燃料使用分
   waste = 0 # 廃棄物発生量
   for i in range(187):
       for k in range(len(df_sol_price_per_ton.index)):
           if df_sol_price_per_ton.index[k] == '0131': # 0131(農業サービス)からの投入は考慮しない
               continue
           if df_sol_price_per_ton.index[k] == df_iotable.index[i]:
               input += df_iotable.iat[i, x] * 1000000 // df_sol_price_per_ton.iat[k, 0]
               # 燃料使用分を計算
               if df_sol_price_per_ton.index[k] == '2121': # 石炭製品の燃料使用分
                   fuel += df_iotable.iat[i, x] * 1000000 // df_sol_price_per_ton.iat[k, 0]
               # 石油化学系基礎製品への石油製品の投入ではない場合
               if df_sol_price_per_ton.index[k] == '2111':
                   if df_iotable.columns[x] != '2031':
                       fuel += df_iotable.iat[i, x] * 1000000 // df_sol_price_per_ton.iat[k, 0] # 石油製品の燃料使用分

   # 産出量を計算
   for i in range(187):
       if i == x:
           continue
       if df_sol_price_per_ton.index[x] == '0131': # 0131(農業サービス)の産出は考慮しない
           output = 0
       else:
           output += df_iotable.iat[x, i] * 1000000 // df_sol_price_per_ton.iat[x, 0]
    
   # 廃棄物発生量を計算
   waste = input - output - fuel
   # 計算結果をdf_sol_estimateに格納
   df_sol_estimate.iat[x, 0] = waste
   df_sol_estimate.iat[x, 1] = input
   df_sol_estimate.iat[x, 2] = output
   df_sol_estimate.iat[x, 3] = fuel
   
for sector, group in df_sol_estimate.groupby('sector'):
   print(sector + ':' + str(group['Wx'].sum()))

画像2

最適化後の廃棄物発生量の推計値と統計値を比較

最適化手法によって推計した和歌山県の廃棄物発生量(推計値;Ey)と実態調査報告書の値(統計値;Sy)を部門ごとに比較した表を作成しました。

# 最適化後の推計値と統計値の比較表をデータフレームに格納
df_sol_statistics = df_statistics.copy()
df_sol_statistics['Ey'] = 0
df_sol_statistics = df_sol_statistics[['Ey', 'Sy']]
   
for i in range(len(df_sol_statistics)):
   for sector, group in df_sol_estimate.groupby('sector'):
       if sector == df_sol_statistics.index[i]:
           df_sol_statistics.iat[i, 0] = group['Wx'].sum()
           
df_sol_statistics

画像3

推計値(Ey)にマイナスが多いのが気になりますね。

サポート、本当にありがとうございます。サポートしていただいた金額は、知的サイドハッスルとして取り組んでいる、個人研究の費用に充てさせていただきますね♪