起動停止問題に対する定式化とシステム

起動停止問題

起動停止問題(unit commitment problem)とは,発電機の起動と停止を最適化するためのモデルであり, 各日の電力需要を満たすように時間ごとの発電量を決定する.

定式化のためには,動的ロットサイズ決定問題に以下の条件を付加する必要がある.

  • 一度火を入れると $\alpha$ 時間は停止できない.
  • 一度停止すると $\beta$ 時間は再稼働できない.

この制約の定式化が実用化のための鍵になるので,簡単に説明しておく.

集合:

  • $P$: 発電機(ユニット)の集合

変数:

  • $y_t^p$: 期 $t$ に発電機 $p$ が稼働するとき $1$

  • $z_t^p$: 期 $t$ に発電機 $p$ が稼働を開始(switch-on)するとき $1$

  • $w_t^p$: 期 $t$ に発電機 $p$ が停止を開始(switch-off)するとき $1$

上の変数の関係は以下の式で表すことができる.

$$ \begin{array}{l l } z_t^p \leq y_t^p & \forall p \in P, t=1,2, \ldots,T \\ z_t^p -w_{t}^p = y_t^p -y_{t-1}^p & \forall p \in P, t=1,2, \ldots,T \end{array} $$

変数の関係は以下のようになる.

変数  t-3  t-2 t-1  t  t+1 t+2 t+3
$y_t$ 0 0 0 1 1 1 0
$z_t$ 0 0 0 1 0 0 0
$w_t$ 0 0 0 0 0 0 1
  • 開始したら最低でも $\alpha$ 期 は連続稼働:

$\Rightarrow$ 「期 $t$ に稼働していない」  ならば  「$t-\alpha+1$ から $t$ までは開始できない」

$\Rightarrow$ $y_t^p$ ならば $z_{s}^p=0$ ($\forall s=t-\alpha+1,\ldots,t$)

$$ \displaystyle\sum_{s=t-\alpha+1}^t z_{s}^p \leq y_t^p \ \ \ \forall t=\alpha,\alpha+1, \ldots,T $$

弱い定式化:

$\Rightarrow$ 「期 $t$ に開始した」 ならば 「$t$ から$t+\alpha+1$ までは稼働」

$$ \alpha z_{t}^p \leq \displaystyle\sum_{s=t}^{t+\alpha-1} y_t^p \ \ \ \forall t=1,2, \ldots,T+1-\alpha $$
  • 稼働を終了したら,再び稼働を開始するためには,$\beta$ 期以上:

$\Rightarrow$ 「期 $t$ に稼働した」  ならば 「$t-\beta+1$ から $t$ までは終了できない」

$\Rightarrow$ $y_t^p=1$ ならば $w_{s}^p=0$ ($\forall s=t-\beta+1,\ldots,t$)

$$ \displaystyle\sum_{s=t-\beta+1}^{t} w_{s}^p \leq 1-y_t^p \ \ \ \forall t=\beta,\beta+1, \ldots,T $$

弱い定式化:

$\Rightarrow$ 「期 $t$ に停止した」 ならば 「$t$から $t+\beta-1$ までは稼働しない」

$$ \beta w_{t}^p \leq \displaystyle\sum_{s=t}^{t+\beta-1} (1-y_t^p) \ \ \ \forall t=1,2, \ldots,T+1-\beta $$

ベンチマーク問題が以下のサイトで管理されている.

https://github.com/power-grid-lib/pglib-uc

本格的な運用のためには,以下のオープンソースプロジェクトがある.

https://pypsa.org/

実問題に対する定式化

現実には様々な制約を考慮する必要がある.以下に例を示す. この定式化を用いて商用の数理最適化ソルバーを使えば,ほとんどの実問題を解くことができる.

集合(添字):

  • $g \in {\mathcal G}$: 発電機の集合
  • $g \in {\mathcal G}_{\textit{on}}^0$: 初期状態でオンになっている発電機の集合
  • $g \in {\mathcal G}_{\textit{off}}^0$: 初期状態でオフになっている発電機の集合
  • $w \in {\mathcal W}$: 再生可能発電機の集合
  • $t \in {\mathcal T}$: 期の集合; $1, \ldots, T$
  • $l \in {\mathcal L}_g$: 発電機 $g$ の区分的線形な費用関数の区分; $g$: $1, \ldots, L_g$.
  • $s \in {\mathcal S}_g$: 発電機 $g$ の初期状態でのカテゴリー; 高温 ($1$)... 低温 ($S_g$); $1, \ldots, S_g$.

システムパラメータ:

  • $D(t)$: 期 $t$ における需要量 (MW)
  • $R(t)$ 期 $t$ における運転予備力 (MW)

発電機パラメータ:

  • $CS_g^s$: 発電機 $g$ のカテゴリー $s$ に対する始動費用
  • $CP_g^l$: 発電機 $g$ の区分的線形関数の区分 $l$ (MW) に対する費用
  • $DT_g$: 発電機 $g$ の最小再稼働時間 (h)
  • $DT^0_g$: 開始時における発電機 $g$ の停止時間 (h)
  • $\overline{P}_g$: 発電機 $g$ の最大出力 (MW)
  • $\underline{P}_g$: 発電機 $g$ の最小出力 (MW)
  • $P_g^0$: 開始時における発電機 $g$ の出力 (MW)
  • $P_g^l$ 発電機 $g$ の区分的線形関数の区分 $l$ における出力; $P^1_g = \underline{P}_g$ and $P^{L_g}_g = \overline{P}_g$
  • $RD_g$: 発電機 $g$ のランプダウン率 (MW/h)
  • $RU_g$: 発電機 $g$ のランプアップ率 (MW/h)
  • $SD_g$: 発電機 $g$ の停止可能余力 (MW)
  • $SU_g$: 発電機 $g$ の開始可能余力 (MW)
  • $TS^s_g$: 発電機 $g$ のカテゴリー $s$ 開始時からのオフライン時間 (h)
  • $UT_g$: 発電機 $g$ の最小稼働時間 (h)
  • $UT^0_g$: 開始時における発電機 $g$ の稼働時間 (h)
  • $U_g^0$: 開始時における発電機 $g$ のオン・オフの状態 $U_g^0=1$ は $g \in {\mathcal G}_{\textit{on}}^0$ を $U_g^0=0$ は $g \in {\mathcal G}_{\textit{off}}^0$ を表す.
  • $U_g$: 発電機 $g$ を必ず稼働させるとき $1$ のパラメータ

再生可能発電機パラメータ:

  • $\overline{P}_w(t)$: 期 $t$ に使用できる再生可能発電機 $w$ の発電量上限 (MW)
  • $\underline{P}_w(t)$: 期 $t$ に使用できる再生可能発電機 $w$ の発電量下限 (MW)

変数:

  • $c_g(t)$: 期 $t$ における発電機 $g$ の費用
  • $p_g(t)$: 期 $t$ における発電機 $g$ の下限以上の出力 (MW)
  • $p_w(t)$: 期 $t$ における再生可能発電機 $w$ の発電量 (MW)
  • $r_g(t)$: 期 $t$ における発電機 $g$ の予備電力量 (MW)
  • $u_g(t)$: 期 $t$ に発電機 $g$ が稼働するとき $1$ の $0$-$1$ 変数
  • $v_g(t)$: 期 $t$ に発電機 $g$ が開始するとき $1$ の $0$-$1$ 変数
  • $w_g(t)$: 期 $t$ に発電機 $g$ が停止するとき $1$ の $0$-$1$ 変数
  • $\delta^s_g(t)$: 期 $t$ に発電機 $g$ のカテゴリー $s$ が開始するとき $1$ の $0$-$1$ 変数
  • $\lambda_g^l(t)$: 期 $t$,発電機 $g$ における区分的線形関数の区分 $l$ の割合

目的関数:

$$ minimize \ \ \sum_{g \in {\mathcal G}} \sum_{t \in {\mathcal T}} \left( c_g(t) + CP_g^1 \, u_g(t) + \sum_{s = 1}^{S_g} \left( CS^s_g \delta^s(t) \right) \right) $$
  • 需要満足条件と予備電力量制約 $$ \begin{array}{lll} & \sum_{g \in {\mathcal G}} \left( p_g(t) + \underline{P}_g u_g(t) \right) + \sum_{w\in{\mathcal W}} p_w(t) = D(t) & \forall t \in {\mathcal T} \\ & \sum_{g \in {\mathcal G}} r_g(t) \geq R(t) & \forall t \in {\mathcal T} \end{array} $$

  • 開始時の条件 $$ \begin{array}{lll} & \sum_{t=1}^{\min\{UT_g - UT_g^0, T\}} (u_g(t) - 1) = 0 & \forall g \in {\mathcal G}_{\textit{on}}^0 \\ & \sum_{t=1}^{\min\{DT_g - DT_g^0, T\}} u_g(t) = 0 & \forall g \in {\mathcal G}_{\textit{off}}^0 \\ & u_g(1) - U_g^0 = v_g(1) - w_g(1) & \forall g \in {\mathcal G} \\ & \sum_{s=1}^{S_g-1} \sum_{t=\max\{1, TS^{s+1}_g - DT^0_g + 1\}}^{\min\{TS^{s+1}_g -1,T\}} \delta^s_g(t) = 0 & \forall g \in {\mathcal G}\\ & p_g(1) + r_g(1) - U_g^0(P_g^0-\underline{P}_g) \leq RU_g & \forall g \in {\mathcal G} \\ & U_g^0(P_g^0-\underline{P}_g) - p_g(1) \leq RD_g & \forall g \in {\mathcal G} \\ & U_g^0(P_g^0-\underline{P}_g) \leq (\overline{P}_g - \underline{P}_g) U_g^0 - \max\{(\overline{P}_g - SD_g),0\} w_g(1) & \forall g \in {\mathcal G} \end{array} $$

  • 基本制約と最小(再)稼働時間条件 $$ \begin{array}{lll} & u_g(t) \geq U_g & \forall t \in {\mathcal T}, \, \forall g \in {\mathcal G} \\ & u_g(t) - u_g(t-1) = v_g(t) - w_g(t) & \forall t \in {\mathcal T}\setminus\{1\}, \, \forall g \in {\mathcal G} \\ & \sum_{i= t-\min\{UT_g,T\} + 1}^t v_g(i) \leq u_g(t) & \forall t \in \{\min\{UT_g,T\} \ldots, T\}, \, \forall g \in {\mathcal G} \\ & \sum_{i= t-\min\{DT_g,T\} + 1}^t w_g(i) \leq 1 - u_g(t) & \forall t \in \{\min\{DT_g, T\}, \ldots, T\}, \, \forall g \in {\mathcal G} \\ & \delta^s_g(t) \leq \sum_{i = TS^s_g}^{TS^{s+1}_g-1} w_g(t-i) & \forall t \in \{TS^{s+1}_g,\ldots,T\},\,\forall s \in {\mathcal S}_g\!\setminus\!\{S_g\},\, \forall g \in {\mathcal G} \\ & v_g(t) = \sum_{s = 1}^{S_g} \delta^s_g(t) & \forall t \in {\mathcal T},\, \forall g \in {\mathcal G} \end{array} $$

  • 出力量条件 $$ \begin{array}{lll} & p_g(t) + r_g(t) \leq (\overline{P}_g - \underline{P}_g) u_g(t) - \max\{(\overline{P}_g - SU_g),0\} v_g(t) & \forall t \in {\mathcal T}, \, \forall g \in {\mathcal G} \end{array} $$ $$ \begin{array}{lll} & p_g(t) + r_g(t) \leq (\overline{P}_g - \underline{P}_g) u_g(t) - \max\{(\overline{P}_g - SD_g),0\} w_g(t+1) & \forall t \in {\mathcal T}\setminus \{T\}, \, \forall g \in {\mathcal G} \end{array} $$

  • ランプアップ(ダウン)条件

$$ \begin{array}{lll} & p_g(t) + r_g(t) - p_g(t-1) \leq RU_g & \forall t \in {\mathcal T}\setminus\{1\}, \, \forall g \in {\mathcal G} \\ & p_g(t-1) - p_g(t) \leq RD_g & \forall t \in {\mathcal T}\setminus\{1\}, \, \forall g \in {\mathcal G} \end{array} $$
  • 区分的線形関数の定義 $$ \begin{array}{lll} & p_g(t) = \sum_{l \in {\mathcal L}_g} (P_g^l - P_g^1) \lambda_g^l(t) & \forall t \in {\mathcal T}, \, \forall g \in {\mathcal G} \\ & c_g(t) = \sum_{l \in {\mathcal L}_g} (CP_g^l - CP_g^1) \lambda_g^l(t) & \forall t \in {\mathcal T}, \, \forall g \in {\mathcal G} \\ & u_g(t) = \sum_{l \in {\mathcal L}_g} \lambda_g^l(t) & \forall t \in {\mathcal T}, \forall g \in {\mathcal G} \end{array} $$

  • 再生可能発電機制約 $$ \begin{array}{ll} & \underline{P}_w(t) \leq p_w(t) \leq \overline{P}_w(t) & \forall t \in {\mathcal T}, \, \forall w \in {\mathcal W} \end{array} $$