Tunny Icon
TunnyDocs

The next-gen Grasshopper optimization tool.

VIKOR

Overview

VIKOR (VIseKriterijumska Optimizacija I Kompromisno Resenje) finds the compromise solution closest to the ideal by combining L1 (Manhattan) and L∞ (Chebyshev) distance measures. A lower Q score means a better compromise.

For each trial, Tunny Dashboard provides:

Output Description
Utility measure S Overall gap from the ideal (smaller is better)
Regret measure R Gap on the worst objective (smaller is better)
Compromise score Q S and R combined (smaller is a better compromise)
Display score 1 − Q; higher is better (shown in the UI for readability)
Ranking Trials ordered by Q ascending (closest compromise first)
Best / worst values The best and worst value of each objective across valid trials
Compromise set The compromise solutions that satisfy conditions C1/C2

Algorithm

Inputs

Variable Description
f_ij Value of trial i for objective j
w_j Weight for objective j (normalized, Σ = 1)
v Strategy weight (default 0.5)

Weight normalization: if the weights do not sum to 1, they are divided by their sum when it is positive and finite; otherwise (zero, negative, or NaN sum) uniform weights are used instead.

Step 1: Best and Worst Values

For each objective j:

fj=best value across all trials(min if minimize, max if maximize)f_j^* = \text{best value across all trials} \quad (\min \text{ if minimize, } \max \text{ if maximize})

fj=worst value across all trials(max if minimize, min if maximize)f_j^- = \text{worst value across all trials} \quad (\max \text{ if minimize, } \min \text{ if maximize})

Step 2: S and R Values

Si=jwjfjfijfjfjS_i = \sum_j w_j \cdot \frac{f_j^* - f_{ij}}{f_j^* - f_j^-}

Ri=maxj[wjfjfijfjfj]R_i = \max_j \left[ w_j \cdot \frac{f_j^* - f_{ij}}{f_j^* - f_j^-} \right]

  • S_i (utility): sum of weighted gaps — lower is better overall
  • R_i (regret): maximum weighted gap — lower means even the worst criterion is acceptable

When f*_j = f-_j (all trials identical for that objective), the contribution is 0.

Step 3: S*, S-, R*, R-

S=miniSi,S=maxiSiS^* = \min_i S_i, \quad S^- = \max_i S_i

R=miniRi,R=maxiRiR^* = \min_i R_i, \quad R^- = \max_i R_i

Step 4: Q Score

Qi=vSiSSS+(1v)RiRRRQ_i = v \cdot \frac{S_i - S^}{S^- - S^} + (1 - v) \cdot \frac{R_i - R^}{R^- - R^}

v value Emphasis Meaning
v > 0.5 S (utility) Maximize overall consensus
v = 0.5 Balanced Balance utility and regret
v < 0.5 R (regret) Minimize worst-case objective

Zero-division guard: if S- = S*, the first term is 0; if R- = R*, the second term is 0.

Step 5: Ranking

Sort trials by Q ascending — lower Q is the better compromise solution.

Step 6: Compromise Acceptance Conditions (C1/C2)

Whether the top-ranked solution A(1)A^{(1)} can be accepted as the single compromise solution is decided by the two conditions of Opricovic & Tzeng (2004):

C1 (acceptable advantage):

Q(A(2))Q(A(1))DQ,DQ=1J1Q(A^{(2)}) - Q(A^{(1)}) \geq DQ, \qquad DQ = \frac{1}{J - 1}

where JJ is the number of valid trials (all objectives finite).

C2 (acceptable stability in decision making): A(1)A^{(1)} is also ranked first (ties allowed) by S or by R.

Compromise set:

  • C1 and C2 both hold → A(1)A^{(1)} is the single compromise solution
  • Only C2 fails → A(1)A^{(1)} and A(2)A^{(2)}
  • C1 fails → all A(1),,A(k)A^{(1)}, \dots, A^{(k)} with Q(A(k))Q(A(1))<DQQ(A^{(k)}) - Q(A^{(1)}) < DQ

Edge cases: J=1J = 1 yields the single valid trial; J=0J = 0 yields an empty set.

In Tunny Dashboard: the compromise set is shown with a ★ marker in the MCDM Scatter Chart 2D / 3D widgets (and in the click-detail modal).

Numerical Example

3 trials × 2 objectives, both minimized, weights w=[0.5,0.5]w = [0.5, 0.5], v=0.5v = 0.5:

Trial Obj 1 Obj 2
0 1 2
1 3 1
2 2 2

Step 1 — best/worst: Obj 1: f1=1f_1^* = 1, f1=3f_1^- = 3, range = 2. Obj 2: f2=1f_2^* = 1, f2=2f_2^- = 2, range = 1.

Step 2 — S and R:

Trial contrib1 contrib2 S R
0 0.5×(11)/2=00.5 \times (1-1)/2 = 0 0.5×(12)/1=0.50.5 \times (1-2)/1 = 0.5 0.5 0.5
1 0.5×(31)/2=0.50.5 \times (3-1)/2 = 0.5 0.5×(11)/1=00.5 \times (1-1)/1 = 0 0.5 0.5
2 0.5×(21)/2=0.250.5 \times (2-1)/2 = 0.25 0.5×(12)/1=0.50.5 \times (1-2)/1 = 0.5 0.75 0.5

Step 3: S=0.5S^* = 0.5, S=0.75S^- = 0.75, R=0.5R^* = 0.5, R=0.5R^- = 0.5 (tied).

Step 4 — Q: since R=RR^* = R^-, the second term is 0 for every trial:

  • Q0=0.5×(0.50.5)/0.25+0.5×0=0Q_0 = 0.5 \times (0.5 - 0.5)/0.25 + 0.5 \times 0 = 0
  • Q1=0.5×(0.50.5)/0.25+0.5×0=0Q_1 = 0.5 \times (0.5 - 0.5)/0.25 + 0.5 \times 0 = 0
  • Q2=0.5×(0.750.5)/0.25+0.5×0=0.5Q_2 = 0.5 \times (0.75 - 0.5)/0.25 + 0.5 \times 0 = 0.5

Step 5 — ranking: Q=[0,0,0.5]Q = [0, 0, 0.5] → trials 0 and 1 tie for first, trial 2 is last.

Comparison with TOPSIS

Aspect TOPSIS VIKOR
Distance measure Euclidean (L2) Manhattan (L1) + Chebyshev (L∞)
Ranking order Score descending Q ascending
Strategy param None v (utility vs. regret)
Zero-div guard score = 0.5 contribution = 0
Best for Overall similarity Compromise / balance-focused decisions

Complexity

O(m × n + m log m) — under 100 ms for 50,000 trials × 4 objectives.

When to Use

Minimize worst-case objective (max-regret)?   → VIKOR with v < 0.5
Maximize overall consensus across objectives? → VIKOR with v > 0.5
Want a parameter-free intuitive [0,1] score?  → TOPSIS

References

  • Opricovic, S. (1998). Multicriteria Optimization of Civil Engineering Systems. Faculty of Civil Engineering, Belgrade.
  • Opricovic, S., & Tzeng, G.-H. (2004). Compromise solution by MCDM methods: A comparative analysis of VIKOR and TOPSIS. European Journal of Operational Research, 156(2), 445–455. https://doi.org/10.1016/S0377-2217(03)00020-1