背景
現在,研究,修士論文執筆,ジャーナル執筆,後輩指導など様々なことが最終局面になってきて疲弊している修士課程前期2年の理系学生です.
ある日,その疲弊しきっている体を癒そうといい匂いでふわふわのタオルや毛布を使いたいと思い,大量の洗濯物を持ってコインランドリーに行きました.
そのコインランドリーには,2種類の乾燥機がありました.
- 中型 (M): 最大容量16kg / 100円で10分 (時間単価: 10円/分)
- 大型 (L): 最大容量25kg / 100円で8分 (時間単価: 12.5円/分)
時間単価だけ見れば中型(M)の方が20%も安いです.
しかし、16kgの洗濯物を14kgの乾燥機に詰め込むと、明らかに乾燥効率が悪くなり、余計に時間がかかると思いました.(効率を追求せずにはいられないのが理系学生のサガですね笑)
そこで、どちらが本当に安いのかPythonを使ってシミュレーションしてみることにしました。
料金モデルの構築
乾燥に必要な合計金額 $C$ を求める式を考えます。
$$
C = 100 \times \left[ \frac{T_{\text{total}}}{T_{\text{price}}} \right]
$$
- $T_{\text{price}}$: 100円で動作する時間(Mは10分, Lは8分)
- $T_{\text{total}}$: 総乾燥時間
- $[\cdot]$: ガウス記号
総乾燥時間 $T_{\text{total}}$ は、以下の3つの変数で決まると仮定します。
$$
T_{\text{total}} = W \times E \times \alpha
$$
- $W$: 洗濯物の重量 (kg)
- $E$: 乾燥効率 (分/kg) ... 1kgの洗濯物を乾かすのに必要な基本時間
- $\alpha$: 調整係数 ... 乾燥機の容量に対する負荷(積載率)で変動する効率低下の倍率
パラメータの推定
乾燥効率 $E$ (分/kg) の特定
まず、ベースとなる乾燥効率 $E$ が必要です。
[]によると一般的な衣類(約4.5kg)の乾燥時間が20〜30分という情報から、 $E$ は $4.44 \text{ 分/kg}$(最短)から $6.67 \text{ 分/kg}$(最長)の間と推定できます。
ここでは最悪の場合を考慮して,$E = 6.67 \text{ 分/kg}$を採用することにしました.
参考:コインランドリーで洗濯から乾燥までの時間は?時短の裏技も解説
調整係数 $\alpha$ のモデル化
次に、効率低下を表す $\alpha$ です。
$\alpha$ は、洗濯物の量 $W$ が乾燥機の容量 $M$ に近づくほど悪化($\alpha > 1.0$)するはず。
しかし、乾燥機は容量パンパン(100%)で使うより、空間に余裕がある80%程度で使うのが最も効率が良いらしいです。
そこで、$\alpha$ を以下のように定義しました。
$$
\alpha = \max(1.0, \frac{W}{0.8 \times M})
$$
- $M$: 乾燥機の最大容量 (M: 16kg, L: 25kg)
- $0.8 \times M$: 理想容量 (M: 12.8kg, L: 20.0kg)
この式は、洗濯物の量が理想容量(80%)以下であれば $\alpha=1.0$(最高効率)を維持し、理想容量を超えた場合にのみ、その超過率に応じて効率が線形に悪化するというモデルです。
参考 コインランドリー乾燥機の待ち時間は?種類別の所要時間と効率的な使い方ガイド
Pythonによるシミュレーション
ソースコード
ソースコード
# 定義と定数
E_max = 6.67 # 最長乾燥効率 (分/kg)
M_M = 16 # 中型機最大容量 (kg)
M_L = 25 # 大型機最大容量 (kg)
# 中型機 (M) の alpha
# 理想容量 = 0.8 * 16 = 12.8 kg
W_M = np.arange(1, M_M + 1, 1)
R_M = W_M / (0.8 * M_M)
alpha_M = np.maximum(1.0, R_M)
# 大型機 (L) の alpha
# 理想容量 = 0.8 * 25 = 20.0 kg
W_L = np.arange(1, M_L + 1, 1)
R_L = W_L / (0.8 * M_L)
alpha_L = np.maximum(1.0, R_L)
# --- 合計金額 C の計算 ---
# 中型 (M) 乾燥機の合計金額 (100円/10分)
C_M = 100 * np.ceil((W_M * E_max * alpha_M) / 10)
# 大型 (L) 乾燥機の合計金額 (100円/8分)
C_L = 100 * np.ceil((W_L * E_max * alpha_L) / 8)
# --- グラフの作成 ---
plt.figure(figsize=(10, 6))
# データプロット
plt.plot(W_M, C_M, marker='o', linestyle='-', label='中型 (M)', color='blue')
plt.plot(W_L, C_L, marker='x', linestyle='--', label='大型 (L)', color='red')
# 理想容量の縦線
plt.axvline(x=(0.8 * M_M), color='blue', linestyle=':', linewidth=1.5, label=f'M理想容量 ({0.8 * M_M:.1f}kg)')
plt.axvline(x=(0.8 * M_L), color='red', linestyle=':', linewidth=1.5, label=f'L理想容量 ({0.8 * M_L:.1f}kg)')
# グラフ装飾
plt.title('乾燥機のサイズ別料金比較(最長乾燥効率 $6.67$分/kg 採用)')
plt.xlabel('洗濯物の量 $W$ (kg)')
plt.ylabel('合計金額 $C$ (円)')
plt.xticks(np.arange(0, 26, 5)) # 0から25まで5kg刻みで表示
plt.yticks(np.arange(0, max(C_M.max(), C_L.max()) + 200, 200)) # 0から最大料金+αまで200円刻み
plt.grid(True, which='both', linestyle='--', linewidth=0.5)
plt.legend()
plt.tight_layout()
# グラフの表示
plt.show()
# グラフをファイルとして保存する場合
# plt.savefig('dryer_cost_comparison_japanese.png')
結果
- 青線(中型 M):$W=12.8 \text{ kg}$(M理想容量)までは順調に上昇しますが、そこを超えると $\alpha > 1.0$ となり、料金が急激に上昇しています
- 赤破線(大型 L):$W=20.0 \text{ kg}$(L理想容量)までは $\alpha = 1.0$ のままなので、料金は緩やかに上昇します
- 料金の分岐点(クロスオーバー・ポイント)は $W = 16$
まとめ
乾燥させる容量と乾燥機の最大容量を比較して,MかLは決めた方が良い(当たり前やな)
今回のシミュレーションでは、その「当たり前」を料金の分岐点$W = 16 \text{ kg}$ として定量的に示すことができました。
今回はすぐに結果を知りたかったのでざっくりと数式を決めましたが,料金設定者はもっと詳細なパラメータを決めて乾燥機の値段を決めているのでしょう.
日常のささいな疑問を自分でモデル化してみると,こういう裏側を考えることができてなかなか面白いものですね。
