Method and assumptions
1. Define best and worst
Choose a monotonic benefit or cost direction for every criterion. Best and worst are observed extrema within the current alternative set. Normalize each option’s distance from best to the interval [0,1]. A constant criterion has no observed discrimination; this tool explicitly gives it zero loss.
2. Calculate S and R
Normalize the supplied nonnegative weights to sum one, including zero and constant-criterion weights in the declared vector. S sums all weighted losses; R takes the largest. Smaller values are better. These values express modeled dissatisfaction, not accident probability.
3. Balance the strategies
Normalize S and R across the alternatives. Q combines their normalized values with v and 1 − v. v = 1 emphasizes total loss, v = 0 emphasizes the worst single weighted loss; 0.5 is a chosen balance, not an empirically optimal value.
4. Test and retain the compromise set
Sort S, R and Q ascending. Let a′ and a″ occupy first and second Q positions. C1 requires Q(a″) − Q(a′) ≥ 1/(m−1). C2 requires a′ also to be best in S or R. Both pass: retain a′ alone. Only C2 fails: retain the first two positions, expanded to include any tied runner-up. If C1 fails: retain every alternative with Qᵢ − Qmin < 1/(m−1).
gᵢⱼ = (bestⱼ − xᵢⱼ)/(bestⱼ − worstⱼ)
Sᵢ = Σⱼ wⱼgᵢⱼ; Rᵢ = maxⱼ(wⱼgᵢⱼ)
Qᵢ = v(Sᵢ − Smin)/(Smax − Smin) + (1−v)(Rᵢ − Rmin)/(Rmax − Rmin)
DQ = 1/(m−1); C1: Q(a″) − Q(a′) ≥ DQ
| Symbol | Definition |
|---|---|
| i, m | Alternative index and count; 2 ≤ m ≤ 8 |
| j, n | Criterion index and count; 2 ≤ n ≤ 6 |
| xᵢⱼ | Performance of option i on criterion j, in its declared column unit |
| wⱼ | Dimensionless nonnegative criterion weight; sum is 1 when defined |
| gᵢⱼ | Dimensionless normalized distance from the criterion best |
| Sᵢ, Rᵢ | Sum and maximum of weighted losses; smaller is better |
| v | Strategy parameter in [0,1]; a stated preference, not a probability |
| Qᵢ | Dimensionless compromise index; smaller is better |
| DQ, C1, C2 | Required advantage, advantage test and S-or-R stability test |
Worked maritime example
These four service-vessel options and all quantities are original, synthetic teaching data. They are not measured vessel performance, a procurement recommendation or safety approval.
Objective: Compare synthetic port service vessel options. v = 0.5.
The original formulas divide by criterion ranges and S/R spans. Our explicit extensions give a constant criterion zero loss and a numerically unresolved S or R span a zero normalized term. A span ≤ 64 × machine epsilon × maximum absolute score is unresolved; the raw span and threshold remain in the intermediate table and CSV. No hidden weight redistribution occurs. If all Q values tie, the full set remains, with no invented single winner.
| Criterion | Unit | Preference direction | Raw weight |
|---|---|---|---|
| Daily energy | kWh/day | Cost: minimize | 4 |
| Duty capacity | jobs/day | Benefit: maximize | 3 |
| Maintenance time | h/month | Cost: minimize | 2 |
| Alternative | Daily energy | Duty capacity | Maintenance time |
|---|---|---|---|
| Vessel A | 100 | 6 | 12 |
| Vessel B | 120 | 9 | 10 |
| Vessel C | 80 | 5 | 18 |
| Vessel D | 110 | 8 | 8 |
| Criterion | Best | Worst | Range | Weight w |
|---|---|---|---|---|
| Daily energy | 80 | 120 | 40 | 0.44444444 |
| Duty capacity | 9 | 5 | 4 | 0.33333333 |
| Maintenance time | 8 | 18 | 10 | 0.22222222 |
| Alternative | Daily energy | Duty capacity | Maintenance time |
|---|---|---|---|
| Vessel A | 0.5 | 0.75 | 0.4 |
| Vessel B | 1 | 0 | 0.2 |
| Vessel C | 0 | 1 | 1 |
| Vessel D | 0.75 | 0.25 | 0 |
| Alternative | Daily energy | Duty capacity | Maintenance time |
|---|---|---|---|
| Vessel A | 0.22222222 | 0.25 | 0.088888889 |
| Vessel B | 0.44444444 | 0 | 0.044444444 |
| Vessel C | 0 | 0.33333333 | 0.22222222 |
| Vessel D | 0.33333333 | 0.083333333 | 0 |
| Alternative | S | R | S term | R term | Q | S Rank | R Rank | Q Rank | Compromise set |
|---|---|---|---|---|---|---|---|---|---|
| Vessel A | 0.56111111 | 0.25 | 1 | 0 | 0.5 | 4 | 1 | 2 | Yes |
| Vessel B | 0.48888889 | 0.44444444 | 0.5 | 1 | 0.75 | 2 | 4 | 4 | No |
| Vessel C | 0.55555556 | 0.33333333 | 0.96153846 | 0.42857143 | 0.69505495 | 3 | 2 | 3 | No |
| Vessel D | 0.41666667 | 0.33333333 | 0 | 0.42857143 | 0.21428571 | 1 | 2 | 1 | Yes |
| Parameter | Value |
|---|---|
| v | 0.5 |
| Smin | 0.41666667 |
| Smax | 0.56111111 |
| Rmin | 0.25 |
| Rmax | 0.44444444 |
| S raw span | 0.14444444 |
| R raw span | 0.19444444 |
| S span tolerance | 7.9738685e-15 |
| R span tolerance | 6.3159354e-15 |
| DQ | 0.33333333 |
| ΔQ | 0.28571429 |
| C1: acceptable advantage | No |
| C2: acceptable stability | Yes |
Compromise set: Vessel D, Vessel A
C1 fails: retain all options strictly within DQ of the best Q, with the declared numerical tolerance.
Substitute the values
w₁ = 4 / (4 + 3 + 2) = 0.44444444
g₁₁ = (80 − 100) / (80 − 120) = 0.5
S₁ = 0.22222222 + 0.25 + 0.088888889 = 0.56111111; R₁ = max(0.22222222, 0.25, 0.088888889) = 0.25
Q₁ = 0.5 × 1 + (1 − 0.5) × 0 = 0.5
DQ = 1 / (4 − 1) = 0.33333333; ΔQ = 0.5 − 0.21428571 = 0.28571429
Sensitivity checks
Hold raw weights fixed and vary v over 0, 0.25, 0.5, 0.75 and 1. Read the full compromise set at each value. This grid does not establish global robustness to weights, data error or changes in alternatives.
| v | Q: Vessel A | Q: Vessel B | Q: Vessel C | Q: Vessel D | Compromise set | C1: acceptable advantage | C2: acceptable stability |
|---|---|---|---|---|---|---|---|
| 0 | 0 | 1 | 0.42857143 | 0.42857143 | Vessel A | Yes | Yes |
| 0.25 | 0.25 | 0.875 | 0.56181319 | 0.32142857 | Vessel A, Vessel D, Vessel C | No | Yes |
| 0.5 | 0.5 | 0.75 | 0.69505495 | 0.21428571 | Vessel D, Vessel A | No | Yes |
| 0.75 | 0.75 | 0.625 | 0.8282967 | 0.10714286 | Vessel D | Yes | Yes |
| 1 | 1 | 0.5 | 0.96153846 | 0 | Vessel D | Yes | Yes |
Tables display 8 significant digits. Calculations use unrounded binary64 values; CSV preserves round-trip numeric precision. “Undefined” is never replaced by an invented score.
Interpretation and limits
- The original formulas divide by criterion ranges and S/R spans. Our explicit extensions give a constant criterion zero loss and a numerically unresolved S or R span a zero normalized term. A span ≤ 64 × machine epsilon × maximum absolute score is unresolved; the raw span and threshold remain in the intermediate table and CSV. No hidden weight redistribution occurs. If all Q values tie, the full set remains, with no invented single winner.
- Ranks are competition ranks using an absolute 10⁻¹² tolerance from each group’s anchor. C1 accepts a gap within that tolerance of DQ. The strict compromise cutoff excludes differences within 10⁻¹² of DQ. This numerical boundary policy, runner-up tie closure and tied-minimum stability are implementation interpretations, not extra original-paper claims.
- For m = 2 the original DQ is 1. It is not capped at 0.5. At v endpoints or with a zero span the Q gap can be smaller than 1, leaving a compromise set. Single-alternative inputs are not supported.
- VIKOR uses compensatory weights and observed extrema. Different alternatives, benefit/cost choices, priorities or preprocessing can change the ranking. It does not verify feasibility, regulatory compliance or safety constraints; apply those before comparing feasible options.
Check your understanding: option D has the lowest Q but the gap to the runner-up is below DQ. Should the calculator name D as the unique accepted compromise?
No. C1 fails. The output must retain the alternatives whose Q difference from the best is strictly below DQ, including all tied leaders.
Primary methodology sources
The declared zero, tie and numerical edge-case policies are implementation choices of this tool. vikor v1.0.0.