需要地点と施設候補を地図上に置き、目的関数と制約を選んで実行すると、 「どの施設を開設し、どの需要地点をどの施設に割り当てるのが最適か」を 厳密に計算して見せるデモ用ツールです。インストールは不要で、ブラウザだけで動きます。
flplab フォルダの start.ps1 を右クリックして「PowerShell で実行」、
または PowerShell で次を実行します。
.\start.ps1
自動的にブラウザが開き、http://127.0.0.1:8000/index.html が表示されます
(8000 番が使用中なら 8001, 8002… と自動的にずれます)。
file:// で開くと計算エンジン(Web Worker と WebAssembly)が動作しません。
必ず start.ps1 経由で開いてください。
127.0.0.1 / localhost が除外されているか確認してください。
プロキシ経由になると自分の PC に到達できず、画面が表示されません。
| エリア | 役割 |
|---|---|
| 上部ツールバー | シナリオの選択・保存・書き出し/読み込み、比較ビューと感度分析の開閉、地図の表示切り替え |
| 左パネル | モデル、目的関数、施設数、制約、ソルバ設定、最適化実行 ボタン |
| 中央の地図 | 需要地点(丸)と施設候補(角丸四角)の配置、計算結果(開設施設・割当線・カバー円) |
| 右パネル | 計算結果のサマリ(総コストなどの指標と、開設施設ごとの内訳) |
| 下部のドロワー | ▲ 需要地点・施設候補一覧 をクリックすると開く、表形式の一覧編集画面 |
左パネル上部の「モデル」から、代表的な6つの型を選べます。選ぶと、目的関数と制約が その型に応じた初期値へまとめて切り替わります。
| モデル | 何を最小化/最大化するか | 特徴 |
|---|---|---|
| UFLP (容量なし施設配置) | 総コスト最小 (固定費+輸送費) | 施設の容量制約なし。最も基本的な型 |
| CFLP (容量制約付き施設配置) | 総コスト最小 | 各施設が扱える需要量に上限がある |
| p-Median | 総距離最小 | 開設施設数を決めたうえで、移動距離の合計を最小化 |
| p-Center | 最大距離最小 | 最も不利な需要地点の距離を最小化(公平性を重視) |
| Set Covering | 総コスト最小 | 全需要地点をカバー半径内に収める、最小コストの配置 |
| Maximal Covering (MCLP) | カバー需要最大 | 施設数の上限内で、カバーできる需要量を最大化 |
このプルダウンは「選んだ瞬間にパラメータを一括設定するボタン」であり、 選んだモデルを排他的なモードとして覚えているわけではありません。 選択後に制約チェックボックスを自由に足し引きできるよう、意図的にこうしてあります。
パラメータ自体(目的関数・制約)はきちんと反映されています。 反映されたかどうかは、プルダウンの下の説明文と、制約チェックボックスの状態で確認してください。
モデルを選ばず、目的関数と制約を自分で組み合わせて独自の設定を作ることもできます。 その場合、説明文には「6モデルの標準的な組み合わせとは異なる、カスタムな設定です」と表示されます。
「総コスト最小」「総距離最小」「最大距離最小」「カバー需要最大」から1つ選びます。
| 制約 | 内容 |
|---|---|
| 容量制約 | 各施設が対応できる需要量に上限を設けます。 |
| 最大距離制約 | 需要地点から割り当てられる施設までの距離に上限(km)を設けます。 |
| 需要分割を許可 | 1つの需要地点を複数の施設で分担できるようにします。 |
| 予算制約 | 開設する施設の固定費の合計に上限(円)を設けます。 |
| カバー制約 (Set Covering / MCLP) | 各需要地点から半径(km)以内に開設施設が1つ以上あることを制約にします。 |
| 操作 | 結果 |
|---|---|
| 空いている場所をクリック | 需要地点を追加 |
| Shift を押しながらクリック | 施設候補を追加 |
| マーカーにマウスを乗せる | 需要量・割当先・開設状況などをツールチップで表示 |
| マーカーをクリック | 吹き出しが開き、需要量・重み(需要地点)や固定費・容量(施設候補)を編集 |
| マーカーをドラッグ | その地点を移動 |
| マーカーを右クリック | その地点を削除 |
画面下部の ▲ 需要地点・施設候補一覧 をクリックすると、表形式の一覧が開きます。
「この施設は必ず開ける」「この施設は絶対に開けない」という条件を置いて計算したい場合に使います。 地図上のマーカーの吹き出し、または一覧ドロワーの「強制」列から設定します。
設定したら 最適化実行 を押すと、その条件を守った最適解が求まります。 「既存拠点を残す前提でどうなるか」「この拠点を閉じたらいくら悪化するか」を見るのに使えます。
右パネルに次の指標が表示されます。
| 指標 | 意味 |
|---|---|
| ステータス | 「最適」なら文字通りの最適解。それ以外は下の注意を参照。 |
| 総コスト / 固定費 / 輸送費 | 総コストの内訳。目的関数が総コスト最小以外でも参考値として計算されます。 |
| 開設数 | 開設した施設数 / 施設候補の総数。 |
| 平均距離 / 最大距離 | 需要地点から担当施設までの距離。 |
| カバー率 | カバーできている需要量の割合。 |
| 求解時間 | ソルバが計算に要した時間。 |
その下に、開設された施設ごとの内訳(担当件数・固定費・容量制約がある場合は稼働率)が並びます。 行にマウスを乗せると地図上の対応する割当線がハイライトされ、逆に地図のマーカーに マウスを乗せても連動します。
ツールバー右側のチェックボックスで、地図上の補助表示を切り替えられます。
カバー円は「半径」というパラメータを持つ制約が有効なときだけ描かれます。つまり カバー制約 または 最大距離制約 のどちらかを有効にしている場合です。
UFLP・CFLP・p-Median・p-Center をそのまま解く場合、モデルの中に半径という概念が 存在しないため、描くべき円がありません。この状態では「カバー円を表示」チェックボックスは 押せない状態になり、マウスを乗せると理由が表示されます。
また、Set Covering と MCLP は「どの需要地点をどの施設に割り当てるか」を扱わない型のため、 これらのモデルでは割当線が引かれません(カバーできているかどうかだけを問う問題であり、 担当関係を決めていないため)。こちらも仕様です。
| ボタン | 動作 |
|---|---|
| 保存 | 名前を付けてブラウザ内に保存します。保存したものは「シナリオ」プルダウンの「保存済み」から呼び出せます。 |
| JSON出力 | 現在のシナリオを JSON ファイルとしてダウンロードします。共有やバックアップに使います。 |
| JSON読込 | JSON ファイルを選ぶと、そのシナリオを読み込みます。 |
2つの設定とその結果を並べて見比べる機能です。
「施設数を変えたら総コストがどう変わるか」を自動で調べてグラフ化します。
施設候補が多いシナリオでは時間がかかります。途中でやめたいときは 中断 を押してください。それまでに計算できた点は残ります。
| 症状 | 原因と対処 |
|---|---|
| 地図の背景(道路や地名)が表示されず、灰色の格子になる | インターネットに接続できない環境などで地図タイルを取得できないと、 自動的に簡易表示へ切り替わります。計算そのものには影響しません。 |
| 「実行不可能」と表示される | 制約が厳しすぎて解が存在しません。制約を緩めるか施設候補を増やしてください。 |
| 計算が終わらない | ソルバ設定の「制限時間(秒)」を確認してください。時間内に終わらない場合は そこまでの最良解で打ち切られ、ステータスに「制限時間で打ち切り」と表示されます。 中断 でいつでも止められます。 |
| カバー円が表示されない | 仕様です。9章を参照してください。 |
| 割当線が表示されない | Set Covering / MCLP では担当関係を決めないため引かれません(9章)。 それ以外のモデルなら「割当線を表示」のチェックを確認してください。 |
| モデルを選んだのに「(カスタム)」に戻る | 仕様です。4章を参照してください。 |
| 画面が真っ白、または動作がおかしい |
start.ps1 を再起動し、ブラウザで再読み込み(Ctrl + R)してください。
|