見出し画像

P2P電力取引と電力市場取引

本ブログの概要

P2P(Peer-to-Peer)電力取引と市場取引の収益性を比較します。そのためにシミュレーションを用いて分析を行います。(P2P取引というと耳障りが良いが、ただの相対取引です。横文字には注意しましょう。)
シミュレーションを行うためには、まず両者の取引の特徴を理解し、それに基づいてシミュレーションの条件を設定する必要があります。以下にその概要とシミュレーションのための基本的なコードを示します。

P2P電力取引と市場取引の特徴

  1. P2P電力取引:

    • 電力の生産者と消費者が直接取引を行う。

    • 取引価格は双方の合意によって決定される。

    • 中間業者が不要で、効率的な価格設定が可能。

  2. 市場取引:

    • 電力市場を通じて取引が行われる。

    • 価格は市場の供給と需要によって決定される。

    • 市場の変動による価格の不確実性が存在する。

先行研究

P2P(ピア・ツー・ピア)電力取引は、消費者と電力網の両方に利益をもたらす次世代のエネルギー管理技術です。このトピックに関する研究からの主要な洞察には以下のようなものがあります。

P2Pエネルギー取引は、積極的な消費者(プロシューマー)に経済的な利益をもたらし、ピーク需要の削減、予備供給要件の低減、ネットワーク損失のカットによって電力網を助けます。ただし、その大規模な展開は、ネットワークの仮想層と物理層の両方で取引をモデル化する上で課題をもたらします

Tushar et al., 2020

P2Pエネルギー取引のための分散型市場クリアリングメカニズムは、電力損失とネットワーク関連コストに対処でき、電気的距離アプローチを使用してネットワーク利用料金を計算します。

Paudel et al., 2020

P2Pエネルギー取引におけるゲーム理論アプローチは、参加者の対立する利益の意思決定プロセスを効率的に処理し、電力網の効率的な運用を保証することができます。

Tushar et al., 2018

バッテリーの柔軟性に焦点を当てたローカル電力市場の設計は、取引特性と蓄電池の柔軟性を組み合わせることにより、エンドユーザーの節約を最大化できます。

Lüth et al., 2018

ブロックチェーン環境におけるクレジットベースのP2P電力取引モデルは、取引の安定性と効率を高めることができるコスト削減を促進することができます。

Zhou et al., 2022

Ethereumブロックチェーンを介した小規模P2P電力取引は、伝送損失が電力取引に大きな影響を与えないこと、および蓄電池が過剰なP2P取引を防ぐことを示しています。

Takai & Shinomiya, 2020

プロシューマーのための最適なエネルギースケジューリングは、P2Pエネルギー取引を促進するために不可欠であり、異なる電気料金の下で消費者の利益を最大化することに焦点を当てています。

Chung & Hur, 2020

ブロックチェーン対応のP2Pエネルギー取引プラットフォームは試験されており、効率的で公平かつ持続可能な将来のエネルギーシステムの可能性を示しています。

Monroe et al., 2020

P2P電力取引はプロシューマーと電力網に大きな利益をもたらしますが、取引モデリングとシステム統合の面で課題が残っています。

シミュレーション

電力の生成と需要のランダム化: 各ノードの電力生成量と需要量を乱数で決定します。

  1. P2P取引アルゴリズムの定義: 電力の売買価格を決定するためのアルゴリズムを定義します。この価格は供給と需要に基づいて動的に変化します。

  2. 市場取引のシミュレーション: 市場価格を定め、それに基づいて電力を売買します。

  3. 取引のシミュレーション: 各ノードが100回の取引を行い、それぞれの収益を計算します。

  4. 結果の比較: P2P取引と市場取引のそれぞれにおける収益を比較します。

それでは、このシナリオに基づいてPythonコードを作成し、シミュレーションを実行します。各ノードの電力生成量、需要量、および市場価格は乱数で生成されることになります。

import numpy as np
import pandas as pd

# パラメータの設定
num_nodes = 10
num_transactions = 100
min_power = 0  # 最小電力量
max_power = 100  # 最大電力量
market_price = np.random.uniform(5, 15)  # 市場価格 (単位: 通貨/単位電力)

# 各ノードの電力生成量と需要量をランダムに生成
np.random.seed(0)  # 結果の再現性のため
power_generated = np.random.uniform(min_power, max_power, num_nodes)  # 電力生成量
power_required = np.random.uniform(min_power, max_power, num_nodes)   # 需要量

# P2P取引アルゴリズムの定義 (ここでは単純な平均価格を使用)
def p2p_price(supply, demand):
    return (supply + demand) / 2

# 取引のシミュレーション
p2p_revenue = np.zeros(num_nodes)
market_revenue = np.zeros(num_nodes)

for _ in range(num_transactions):
    for i in range(num_nodes):
        # P2P取引
        buyer_index = np.random.choice(num_nodes)  # 買い手をランダムに選択
        seller_index = np.random.choice(num_nodes)  # 売り手をランダムに選択
        if buyer_index != seller_index:
            price = p2p_price(power_generated[seller_index], power_required[buyer_index])
            p2p_revenue[seller_index] += price
            p2p_revenue[buyer_index] -= price

        # 市場取引
        if power_generated[i] > power_required[i]:
            # 余剰電力を売る
            market_revenue[i] += (power_generated[i] - power_required[i]) * market_price
        else:
            # 需要電力を買う
            market_revenue[i] -= (power_required[i] - power_generated[i]) * market_price

# 結果の表示
p2p_results = pd.DataFrame({
    "Node": range(1, num_nodes + 1),
    "P2P Revenue": p2p_revenue
})
market_results = pd.DataFrame({
    "Node": range(1, num_nodes + 1),
    "Market Revenue": market_revenue
})
combined_results = pd.merge(p2p_results, market_results, on="Node")
combined_results["Better Option"] = combined_results.apply(lambda x: "P2P" if x["P2P Revenue"] > x["Market Revenue"] else "Market", axis=1)
combined_results

結果から、市場取引がより収益性が高いノードが多いことが分かります。ただし、この結果はランダムに生成されたデータに基づいており、実際の市場条件や取引アルゴリズム、他の要因によって異なる結果が得られる可能性があります。また、P2P取引アルゴリズムは非常に単純なものを使用しており、より複雑なアルゴリズムを用いると結果が異なる可能性があります。

この記事が気に入ったらサポートをしてみませんか?