最適化一口話

仕事として数理最適化を実践している立場から、その中身や可能性について概説しております。

「保存」タイプのモデル:大家さん蓄電池導入問題

「電力自由化」の波に乗って電力契約(プロバイダ)を乗り換えた、学生向けアパートの大家さんの話。 プロバイダのホームページの自分のアカウントを見ると電力使用量の履歴がわかります。 どれどれ、と平均的な一日の様子を見てみると次のような感じになっていました。

f:id:optimizationTanabe:20160510144438p:plain

「使用電力量」は夜のピーク利用量を 100(%) としています。 料金単価も単位換算することでこの電力量に単価をかけ算すると電気料金が出るようにしています。 この平均的な一日の電気料金は 5×30 + 9×20 + 7×100 + 3×40 = 1150円。 幸いなことに学生達は昼の最も電気の高い時間帯は出掛けているので ほとんど電気を使わない(ピークの 20%)のですが、 利用量ピークの夜の電気料金が 7円とそれほど安くなく、 深夜の料金が 3円 という思い切った料金設定のメリットはあまり活かせていません。

そんな折に電力プロバイダから営業マンがやってきて、 「蓄電池導入」プランを薦めてきました。 話は単純で、安い深夜に電気を貯めてピークに使うことで電気料金を浮かせましょうという提案です。 ただ設備投資には少なからずお金がかかるし、元がとれるか心配。 この評価、具体的にどうやってやればよいでしょうか。 じつはこの話にずばり対応する数理最適化モデルがありまして、 絵にすると次のようになります。

f:id:optimizationTanabe:20160510191842p:plain

この数理最適化モデルでは、購入した電気が消えてなくなることはなく(保存)、 電池に溜められるのか、外に出て使われるかの二通りであることに着目しています。 右向きの矢印(→)は時間の経過によって引き継がれる量を示していて、 下向きの矢印(↓)はその時間帯の電気の出入りを示しています。 この矢印が複数付いた「○」が連鎖している、 というのが「保存」タイプのモデルに共通の形です。

蓄電池の容量は 100。すなわちフル充電すればピーク時間帯をまるごと賄える、としましょう。 また、この大家さん、ピーク時間帯の利用量を参考に基本契約を調整したため、 電気の購入量についても時間帯毎に最大 100 という制約があるとします。 さて、仮に初期の蓄電量は 50 として、 この設定で最適な電力購入と蓄電池の利用方法を数理最適化に探させてみましょう。 思った通りのことが起きるでしょうか。次がとりあえずの答です。

f:id:optimizationTanabe:20160510144559p:plain

電気料金は 5×80 + 7×20 + 3×40 = 660円で、 1150円のほぼ半分になってますが思ったのとはなんだか違う。 昼の電気が高いときに蓄電された分を使っていますが、 最も安い深夜も必要最小限しか買っていない。 なぜ?これはモデルの欠陥のためです。 モデルにとっては深夜を迎えたら後は世界が終わる設定になっているので、 深夜に蓄電しようという意図が働かず、 単に使い切って終わり、という結果が出ているのです。 これは"end-effect" と呼ばれる、 時間の終端の条件によって解が決まってしまうという現象で、 実務的に結構複雑なモデルを組んでいる時にもよく現れる現象です。 人間、モデルの主要な構造にかかわる部分については、細心の注意を払うものですが、 終端条件についてはついつい注意が疎かになります。 すべてが同時に見えている数理最適化ソルバーはそこを突いて 「アリとキリギリス」でいうところの 「キリギリス」のような解を出してくるわけです。

end-effect を回避する方法としては 次の日の朝に向けて引き継ぐべき蓄電量を外から与える、 もう 1日分の需要パターンを予測しておいて 2 日分を解いて最初の1日だけを使う、 など、幾つかスタンダードな方法がありますが、 ここでは平均的な一日がずっと繰り返されると仮定できる場合に可能な ちょっと面白い方法を提案しましょう。 深夜の蓄電量の残りが朝にそのまま引き継がれると置いてしまうのです。 これで初期の蓄電量 50、という恣意的な設定も不要になります。 結果を次の絵に示しました。

f:id:optimizationTanabe:20160510144625p:plain

コストは 3割以上減らせてますし、 今度はちゃんと「アリ」になって 電気の安い深夜に目一杯買って朝に備える形になっています。 ただ、なぜか朝の充電が 100% ではなく、60% から出発していますね。 どうしてもっと買っておかないのかなと考えると、 それは大家さんが最初に行った電力の基本契約のために 購入量が 100 に制約されているのが原因になっているのがわかります。 蓄電池を購入するならば、少々余計なお金を払ってでも基本契約を変更し、 上限を拡張して、深夜に 140 購入して蓄電池をフル充電にしておけば、さらに割安になりますね。 蓄電池の容量をもうすこし大きくした場合や 夏休みなどで電力需要が変化した場合、 さらにこれはもっと未来の話かもしれませんが、 余った電力をもし売ることができた場合、といった 「シミュレーション」も数理最適化ならば簡単です。 設備投資したときの「最も良いやり方」を自動で導出してくれますので、 もしもこんな設備を増強したらどうなるのか、といった具体的な検討ができます。 「蓄電池導入」プランを売るべきプロバイダの営業マンが備えるべきツール、 だと思いませんか。

さて、数理最適化モデルのタイプのお話に戻ります。 下がこの保存タイプのモデルの「骨組み」の絵で、 連結の数は考える期間の長さ次第です。

f:id:optimizationTanabe:20160510182826p:plain

保存タイプは、 重ね合わせタイプほど多彩な応用があるわけではありませんが、 この例のような電力の融通とか 貯水層を含んだ水の流れ、蓄熱層のある熱の流れ、 倉庫を含む生産計画(ロットサイジング)といった状況においては ほぼ必ずといって良いほど現れ、 状況を実に明快に整理できるという「切れ味」の鋭さにおいて、 覚えておく価値のあるモデルのタイプかと思います。 実を申しますとこの問題の設定も、 Dantzig 先生の教科書の、倉庫の問題(「1.4.3 A SIMPLE WAREHOUSE PROBLEM」)を 構造を変えずに蓄電池に翻案したものです。 この翻案が簡単にできるところがこのタイプのモデルの汎用性を示しています。 深夜の蓄電量を朝と同じにするというアイディアもこの例題から頂きました。 このパターンのモデルは例に示したように end-effect が出やすい問題なので、 終端条件の設定には注意しなければならないという点も老婆心ながら 付け加えておきます。

保存タイプのモデルとその応用についてご紹介しておきたいことはまだ沢山ありますが、 またそれは後にしてタイプを紹介するテンポを上げて、 次回は「マス目埋め」タイプの話に進みましょう。