Tunny Icon
TunnyDocs

The next-gen Grasshopper optimization tool.

TOPSIS

概要

TOPSIS(Technique for Order Preference by Similarity to Ideal Solution)は、複数の目的関数を同時に考慮してトライアルをランキングする多基準意思決定(MCDM)手法です。 理想解に近く、反理想解から遠い解を最良とみなします。

Tunny Dashboard では、各トライアルについて次の情報が得られます:

出力 説明
TOPSIS スコア 各トライアルのスコア(0〜1、高いほど理想解に近い)
ランキング スコアの高い順に並べたトライアルの順位
正理想解(A+) 各目的関数で最も望ましい値を集めた仮想的な解
負理想解(A-) 各目的関数で最も望ましくない値を集めた仮想的な解

理論背景

アルゴリズムの概要

m 個のトライアル × n 個の目的関数からなる決定行列 V(m×n)を入力とし、以下の 6 ステップで各トライアルのスコアを計算します。

Step 1: 決定行列の正規化
Step 2: 重み付き正規化行列の構築
Step 3: 正理想解・負理想解の決定
Step 4: 各解から理想解・反理想解までの距離計算
Step 5: TOPSIS スコア(相対的近接度)の計算
Step 6: スコア降順によるランキング

Step 1: ベクトル正規化

各目的関数列 jj について、ユークリッドノルムで正規化します:

rij=vijivij2r_{ij} = \frac{v_{ij}}{\sqrt{\sum_i v_{ij}^2}}

これにより異なるスケールの目的関数が比較可能になります。


Step 2: 重み付き正規化行列

正規化値に目的関数ごとの重み wjw_j を乗じます:

wij=wjrijw_{ij} = w_j r_{ij}

重みはユーザが設定します。 Tunny Dashboard は VIKOR と同様に、設定された重みを内部で合計 1 に正規化して使用します(すべて 0 や NaN など無効な重みの場合は均一な重みが使われます)。 重要な目的関数の影響が大きくなる点は変わりません。


Step 3: 正理想解・負理想解の決定

各目的関数の方向(minimize / maximize)に応じて、列ごとの最善値と最悪値を選びます:

方向 正理想解 A+_j 負理想解 A-_j
minimize miniwij\min_i w_{ij} maxiwij\max_i w_{ij}
maximize maxiwij\max_i w_{ij} miniwij\min_i w_{ij}

Step 4: ユークリッド距離の計算

各トライアル ii から正理想解・負理想解までのユークリッド距離

Di+=j(wijAj+)2,Di=j(wijAj)2D_i^+ = \sqrt{\sum_j (w_{ij} - A_j^+)^2},\qquad D_i^- = \sqrt{\sum_j (w_{ij} - A_j^-)^2}


Step 5: 相対的近接度(TOPSIS スコア)

scorei=DiDi++Di\mathrm{score}_i = \frac{D_i^-}{D_i^+ + D_i^-}

  • score_i → 1: 正理想解に近い(優れたトライアル)
  • score_i → 0: 負理想解に近い(劣ったトライアル)
  • D+_i + D-_i = 0 の場合は score_i = 0.5(縮退ケース)

特殊ケース

NaN / Inf トライアルの扱い

いずれかの目的関数値が非有限(NaN または ±Inf)のトライアルは有効トライアルから除外され、スコアは 0.0 となってランキング末尾に配置されます。 すべてのトライアルが非有限値の場合は、縮退ケースとして全トライアルに 0.5 のスコアを割り当てます。

全トライアルが同一値のとき

列ノルムが 0 になる場合(全トライアルの目的関数値が等しい)は rij=0.0r_{ij} = 0.0 として処理します。 正理想解と負理想解が一致して D+=D=0D^+ = D^- = 0 となるため、スコアは 0.5 になります。

重みのスケール不変性

[0.7, 0.3][7.0, 3.0] は同じ結果になります。 Tunny Dashboard が重みを内部で合計 1 に正規化すること、そしてスコアがそもそも重みベクトルの定数倍に不変(比率のみが効く)であることによります。


計算量

ステップ 計算量
正規化 O(m × n)
理想解決定 O(m × n)
距離計算 O(m × n)
ソート O(m log m)
合計 O(m × n + m log m)

50,000 トライアル × 4 目的関数で 100ms 未満です(実測)。


特性・限界

強み:

  • 複数の目的関数を一つの総合スコアに集約できます
  • minimize / maximize が混在していても対応できます
  • 重みで目的関数の相対的重要度を調整できます
  • スコアが [0, 1] に収まるため直感的に解釈しやすいです

弱み:

  • 重みの設定が恣意的になりやすいです(どの目的関数をどれだけ重視するかはユーザが決めます)
  • 目的関数間のスケールが大きく異なると、正規化後も影響が均等にならない場合があります
  • 選好関係の推移律が成立しない場合があります(TOPSIS スコアのランクが入れ替わるランキング逆転問題)
  • 目的関数が真に非可換のトレードオフ(パレートフロント上)の場合、重み次第で恣意的な選択になります

使用場面の目安

多目的最適化結果から「総合的に優秀なトライアル」を選びたい
  ↓
目的関数の相対重要度をユーザが指定できる
  ↓
TOPSIS ランキング

各目的関数の重要度が不明な場合は均等重みから始め、
TOPSIS Ranking チャートのスライダーで感度確認するのが有効。

アプリ内での操作

TOPSIS Ranking チャートで以下を操作できます:

  • 重みスライダー:各目的関数の重み(0〜1)をリアルタイムに変更すると、スコアを再計算します
  • 上位 N 件表示:5 / 10 / 20 件を切り替えます
  • バークリック:選択したトライアルを、ダッシュボード内の他のウィジェットでもハイライトします

参考文献