MyEnigmaスマートフォン用の表示で見るMyEnigmaとあるエンジニアのブログです。解いてみたいと思います。下記のようなグラフで表すことができるとします。初めに、上記の各ノードはそれぞれ電気を必要とする街であるとします。(都市でも、電気が必要な機械でもなんでもOKです。)それぞれのノードは方向をもつエッジでつながっており、それらのエッジは電力を送電するコストを表します。この場合は各都市の距離と思っても良いと思います。下記エッジには流すことができる最大電力を設定します。今回は、3-5のノードのみ1しか電力を流せないとし、その他のノードは無限(総電力量と比べて大きな値)としました。両方リストにすることも簡単にできます。現時点での電力保有量です。マイナスの値は、電力が不足していることを表し、プラスは電力を共有することができることを意味します。上記の例では、ノード2が発電所を持っており、そこから、各ノードに必要な電力を送電することを考えます。今回は、ノード1,2,4,5が必要な電力量がわかっており、それらを供給する分をすべてノード2が発電するという形にしました。すべてのノードの電力量を足すと0になるようにできるとします。上記の図もすべてのノードの電力量を足すと0になるようになっています。最小コストフロー問題と呼ばれます。Wikipedia線形計画法の一種です。定式化すると下記のようになります。xは各エッジの送電量で最適化変数です。cは各エッジのコスト、bは現在の各ノードの電力量、uは各エッジの最大送電量です。各エッジの送電料の最大量と最小値(0)を設定しています。解くPythonコードが下記です。main()github.com今回は最適化モデリングツールとして、Python製のcvxpyをmyenigma.hatenablog.comソルバーとしてはデフォルトのECOSを使っています。上記の結果を図示すると、下記のようになります。赤文字が最終的な電力送電量です。すべてのノードに電力が供給されており、かつ無駄な送電は発生していないように見えます。Supportersもしこの記事が参考になり、ブログをサポートしたいと思われた方は、こちらからよろしくお願いします。はてなブログProとあるエンジニアのブログです。Page月別アーカイブスポンサーリンクスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。