Method, assumptions and interpretation
1. Make the decision model explicit
Begin with a question, a feasible set of alternatives, measurable criteria and a common evaluation period. For a fictional port-service package, capacity can be a benefit, planned downtime a cost and training coverage another benefit. The names and units are part of the model: comparing annual downtime for one package with monthly downtime for another would be a data error even if the arithmetic runs. Establish legal, technical and safety constraints separately before entering alternatives. A low score cannot make an infeasible package permissible, and a high score cannot certify it.
2. Differences carry direction and units
For a benefit criterion, compare a against b using x(a)−x(b); for a cost criterion reverse the subtraction. A positive oriented difference always favors a. Values are not first min–max normalized: q and p live in the original criterion unit. A change from hours to minutes therefore needs the entire downtime column and both of its thresholds multiplied by 60. Mathematically, adding the same constant to a criterion leaves its differences unchanged. Decimal input is converted to IEEE-754 JavaScript Number, so large offsets with tiny differences can lose this property before calculation. Center or rescale the original data before entry when those differences matter; subtracting an offset after digits were lost cannot recover them. The workbench flags observed gaps or thresholds near 128 times machine epsilon times the largest absolute input, and identifies columns constant after conversion. The flag is advisory, not a rigorous error bound. Parsed numbers, rather than every original typed decimal digit, are exported. These checks are useful for detecting accidental unit conversions. A criterion measured on an ordinal scale still needs a defensible meaning for its numerical differences.
3. State how much difference matters
The usual function assigns full preference to every strictly positive difference and zero otherwise. This can fit a deliberate all-or-nothing policy, but it can exaggerate a difference smaller than the measurement uncertainty. The linear-with-indifference function gives zero through q, grows linearly between q and p, and reaches one at p. Thresholds are not probabilities or weights. Here p is the absolute full-preference threshold, not the width of the sloping region. In the 1985 Type V notation, q equals s and p equals s+r. For the usual function, both threshold fields must be zero because they have no role.
4. Combine comparisons and inspect both directions
Nonnegative raw weights are normalized to sum to one. Multiplying every raw weight by the same positive number leaves the result unchanged. The aggregate index is the weighted sum of the criterion preferences for an ordered pair. Its reverse must be calculated separately: π(a,b) is generally neither equal to π(b,a) nor equal to one minus it. Indifference bands can make both indices small. Read the complete pairwise tables before trusting the final order; they show which differences contribute and which are suppressed by the chosen thresholds.
5. Separate the flow summaries
Positive flow averages how strongly an alternative is preferred over its competitors. Negative flow averages how strongly those competitors are preferred over it. The self-comparison is zero and the averaging divisor is m−1. The original 1985 presentation uses flow sums; division by this common positive divisor preserves its ranking while putting each gross flow in [0,1]. Net flow is positive minus negative. A favorable net flow may combine substantial preference and substantial opposition, so the two gross flows remain visible. The sum of all net flows is zero up to rounding; this is an internal consistency identity, not external validation.
6. Understand what “complete” means
PROMETHEE II orders alternatives by decreasing net flow. Equal net flows are allowed: a complete preorder is not necessarily a strict total order. PROMETHEE I retains a different, partial relationship using the two gross flows and can leave alternatives incomparable; that method is not implemented here. This tool groups near-equal net flows using an absolute 10⁻¹² anchored tolerance. Starting from the highest ungrouped score, all scores within that tolerance of the group leader receive the same competition rank. Members retain decreasing raw-score order within a numerical tie group; exactly equal raw scores keep input order. Neither convention chooses a winner within the group.
7. Investigate sensitivity before a recommendation
The comparison table changes one raw weight at a time by −20% or +20% and renormalizes the full vector. The other weight ratios are preserved. All data, alternatives, directions and thresholds stay fixed, so the table isolates one declared modeling change. A stable rank over these few points says little about different thresholds, missing alternatives or incorrect measurements. When a decision matters, elicit plausible q/p ranges, examine alternative sets and review individual pairwise conflicts. A weight expresses the relative importance of modeled preference, not a direct exchange rate between tonnes per hour and hours.
8. Read the worked case as a reproducible lesson
The three fictional packages below have capacity, downtime and training scores chosen solely to make the calculations inspectable. Capacity thresholds are q=3 t/h and p=12 t/h; downtime thresholds are q=1 h and p=8 h; training thresholds are q=0 and p=2 score units. The loader restores every label, cell, direction, function, threshold and raw weight. The result favors Package C at these settings. That sentence describes this synthetic preference model, not a procurement recommendation. The downloadable CSV records all ordered-pair calculations, flow ranks, weight perturbations, conventions, source links and model version.
dⱼ(a,b) = xₐⱼ − xᵦⱼ (benefit); dⱼ(a,b) = xᵦⱼ − xₐⱼ (cost)
Usual: Pⱼ(d) = 0 when d ≤ 0; Pⱼ(d) = 1 when d > 0
Linear with indifference: Pⱼ(d) = 0 for d ≤ qⱼ; (d − qⱼ)/(pⱼ − qⱼ) for qⱼ < d < pⱼ; 1 for d ≥ pⱼ
wⱼ = wraw,ⱼ / Σₖwraw,ₖ; π(a,b) = Σⱼ wⱼPⱼ(a,b)
φ⁺(a) = Σb≠a π(a,b)/(m−1); φ⁻(a) = Σb≠a π(b,a)/(m−1)
φ(a) = φ⁺(a) − φ⁻(a); larger φ ranks first; equal φ may tie
| Symbol | Definition and unit |
|---|---|
| m; n | Alternative count; criterion count (dimensionless) |
| xₐⱼ; dⱼ(a,b) | Criterion measurement and oriented difference, both in criterion j’s unit |
| qⱼ; pⱼ | Indifference and absolute full-preference thresholds, in that same unit |
| Pⱼ(a,b); π(a,b) | Criterion and aggregate preferences in [0,1], dimensionless |
| wraw,ⱼ; wⱼ | Supplied nonnegative relative weight; normalized weight (dimensionless) |
| φ⁺; φ⁻; φ | Positive, negative and net flow, all dimensionless |
A complete synthetic maritime example
All names, ratings and performance figures below were invented for this lesson. They are not observations from a vessel, port or company.
Decision or study question: Compare fictional port-service package preferences.
PROMETHEE II flows and numerical-tie ranks
| Criterion | Unit | Direction | Preference function | Raw weight | Normalized weight | q | p |
|---|---|---|---|---|---|---|---|
| Service capacity | t/h | Benefit: larger is preferred | Linear with indifference (Type V) | 0.45 | 0.45 | 3 | 12 |
| Planned downtime | h | Cost: smaller is preferred | Linear with indifference (Type V) | 0.35 | 0.35 | 1 | 8 |
| Training coverage | 1 | Benefit: larger is preferred | Linear with indifference (Type V) | 0.2 | 0.2 | 0 | 2 |
| ↓ / → | Service capacity | Planned downtime | Training coverage |
|---|---|---|---|
| Package A | 72 | 18 | 4 |
| Package B | 85 | 25 | 3 |
| Package C | 78 | 20 | 5 |
| Criterion | max |x| | Resolution guard | Smallest positive gap | Constant after conversion | Near-resolution flag |
|---|---|---|---|---|---|
| Service capacity | 85 | 2.415845302e-12 | 6 | No | No |
| Planned downtime | 25 | 7.105427358e-13 | 2 | No | No |
| Training coverage | 5 | 1.421085472e-13 | 1 | No | No |
Service capacity: d1, P1
| ↓ / → | Package A | Package B | Package C |
|---|---|---|---|
| Package A | 0 | -13 | -6 |
| Package B | 13 | 0 | 7 |
| Package C | 6 | -7 | 0 |
| ↓ / → | Package A | Package B | Package C |
|---|---|---|---|
| Package A | 0 | 0 | 0 |
| Package B | 1 | 0 | 0.4444444444 |
| Package C | 0.3333333333 | 0 | 0 |
Planned downtime: d2, P2
| ↓ / → | Package A | Package B | Package C |
|---|---|---|---|
| Package A | 0 | 7 | 2 |
| Package B | -7 | 0 | -5 |
| Package C | -2 | 5 | 0 |
| ↓ / → | Package A | Package B | Package C |
|---|---|---|---|
| Package A | 0 | 0.8571428571 | 0.1428571429 |
| Package B | 0 | 0 | 0 |
| Package C | 0 | 0.5714285714 | 0 |
Training coverage: d3, P3
| ↓ / → | Package A | Package B | Package C |
|---|---|---|---|
| Package A | 0 | 1 | -1 |
| Package B | -1 | 0 | -2 |
| Package C | 1 | 2 | 0 |
| ↓ / → | Package A | Package B | Package C |
|---|---|---|---|
| Package A | 0 | 0.5 | 0 |
| Package B | 0 | 0 | 0 |
| Package C | 0.5 | 1 | 0 |
| ↓ / → | Package A | Package B | Package C |
|---|---|---|---|
| Package A | 0 | 0.4 | 0.05 |
| Package B | 0.45 | 0 | 0.2 |
| Package C | 0.25 | 0.4 | 0 |
| Alternative | Positive φ⁺ | Negative φ⁻ | Net φ | Rank |
|---|---|---|---|---|
| Package A | 0.225 | 0.35 | -0.125 | 3 |
| Package B | 0.325 | 0.4 | -0.075 | 2 |
| Package C | 0.325 | 0.125 | 0.2 | 1 |
Rank groups: Package C > Package B > Package A
Substitute the numbers
d1(A1,A2) = 72 − 85 = -13 t/h; P1(A1,A2) = 0
d2(A1,A2) = 25 − 18 = 7 h; P2(A1,A2) = 0.8571428571
d3(A1,A2) = 4 − 3 = 1 1; P3(A1,A2) = 0.5
π(A1,A2) = 0.45 × 0 + 0.35 × 0.8571428571 + 0.2 × 0.5 = 0.4
φ⁺(A1) = (0.4 + 0.05) / 2 = 0.225
φ⁻(A1) = (0.45 + 0.25) / 2 = 0.35
φ(A1) = 0.225 − 0.35 = -0.125
A1 and A2 denote the first two input alternatives; numbers are rounded for display.
Weight sensitivity with held assumptions
Each row multiplies one raw criterion weight by 0.8 or 1.2, then renormalizes all weights. Other raw-weight ratios, all alternatives, matrix entries, units, directions, preference functions and q/p thresholds are held fixed. This small deterministic comparison is not a confidence interval or a complete robustness analysis. Zero weights remain zero.
| Changed criterion | Multiplier | φ: Package A | φ: Package B | φ: Package C | Rank groups |
|---|---|---|---|---|---|
| — | 1 | -0.125 | -0.075 | 0.2 | Package C > Package B > Package A |
| Service capacity | 0.8 | -0.07142857143 | -0.1538461538 | 0.2252747253 | Package C > Package A > Package B |
| Service capacity | 1.2 | -0.1697247706 | -0.009174311927 | 0.1788990826 | Package C > Package B > Package A |
| Planned downtime | 0.8 | -0.1720430108 | -0.02688172043 | 0.1989247312 | Package C > Package B > Package A |
| Planned downtime | 1.2 | -0.08411214953 | -0.1168224299 | 0.2009345794 | Package C > Package A > Package B |
| Training coverage | 0.8 | -0.1302083333 | -0.046875 | 0.1770833333 | Package C > Package B > Package A |
| Training coverage | 1.2 | -0.1201923077 | -0.1009615385 | 0.2211538462 | Package C > Package B > Package A |
| Changed criterion | Multiplier | Service capacity | Planned downtime | Training coverage |
|---|---|---|---|---|
| — | 1 | 0.45 | 0.35 | 0.2 |
| Service capacity | 0.8 | 0.3956043956 | 0.3846153846 | 0.2197802198 |
| Service capacity | 1.2 | 0.495412844 | 0.3211009174 | 0.1834862385 |
| Planned downtime | 0.8 | 0.4838709677 | 0.3010752688 | 0.2150537634 |
| Planned downtime | 1.2 | 0.4205607477 | 0.3925233645 | 0.1869158879 |
| Training coverage | 0.8 | 0.46875 | 0.3645833333 | 0.1666666667 |
| Training coverage | 1.2 | 0.4326923077 | 0.3365384615 | 0.2307692308 |
Tables display up to 10 significant digits as formatting, not guaranteed accuracy. Computation and CSV use unrounded JavaScript numbers. Numerical tolerance is not an operational acceptance criterion.
What the result does and does not establish
- Preferences, weights and thresholds are judgments. They do not estimate failure probabilities, operational risk or confidence levels.
- Changing the alternative set can change flows and ranks. A rank is conditional on the displayed set, not a permanent property of an option.
- A zero-weight criterion has no effect; identical rows tie. All-zero or entirely indifferent comparisons yield zero flows and no unique first choice.
- The input envelope, near-equal threshold rejection and numerical-tie grouping are implementation policies, not formulas prescribed by the original paper.
- Review evidence quality, measurement uncertainty and constraints independently. An attractive rank never supplies operational approval.
If capacity changes from t/h to kg/h, should the ranking change?
No, if every capacity value and both capacity thresholds are multiplied by 1000 and all other assumptions are held fixed. Scaling only the data changes the preference model. The implementation tests both unit-consistent scaling and alternative permutations.
Primary sources and implementation scope
Brans & Vincke (1985), A Preference Ranking Organisation Method, Management Science 31(6), 647–656. Type I and V: equations (3.5), (3.9); weighted-index discussion §4; flows and complete preorder: (5.1), (5.2), (5.6), (5.7). The q=s, p=s+r mapping and m−1 flow scale are declared here.
Original teaching text and synthetic examples. Numerical limits, tie handling and the no-information branch are explicit implementation policies. promethee v1.0.0.