The Analytic Hierarchy Process

Multicriteria Decision Making for Vehicle Routing

A principled introduction to pairwise comparison, priority weights, and consistency.

Outline

  1. Why AHP? — The problem of multicriteria decisions
  2. Structuring the hierarchy — Goals, criteria, alternatives
  3. The fundamental scale — Pairwise comparisons
  4. From judgments to weights — Why simple methods break down
  5. The eigenvector solution — A natural derivation
  6. Consistency — Detecting contradictory judgments
  7. Application to VRP — Worked example with two KPIs
  8. Discussion — Strengths, limitations, and extensions

The Decision Problem

In operations research, we often face decisions where no single objective tells the whole story.

In VRP, a planner must balance, for example:

  • Total travel distance (cost)
  • Driver workload equity
  • Number of vehicles used
  • Customer time-window violations
  • Employee satisfaction Turnover risk

The trap of arbitrary scoring:

Assigning ad-hoc weights and normalizing arbitrary numbers is “mere number crunching”: it can produce any desired answer (Saaty 1990).

Why Not Just Normalize and Assign Weights?

Faced with multiple KPIs with different units and scales, a candidate approach is to normalize each KPI to \([0,1]\) and then assign weights to combine them into a single score:

\[ \text{Score} = w_1 \cdot \text{Distance}_{\text{norm}} + w_2 \cdot \text{Balance}_{\text{norm}} + w_3 \cdot \text{Satisfaction}_{\text{norm}} \]

However, some criteria are inherently ordinal (they express a rank order but no meaningful quantity). Examples include:

  • Customer satisfaction ratings (e.g., “Good,” “Acceptable,” “Poor”)
  • Employee performance levels (e.g., “Exceeds expectations,” “Meets expectations,” “Needs improvement”)
  • Risk levels (e.g., “Low,” “Medium,” “High”)

Example: Encoding Ordinal Data

A logistics planner rates each route plan’s driver acceptance as Good, Acceptable, or Poor. Everyone agrees on the ranking:

\[\text{Good} \;>\; \text{Acceptable} \;>\; \text{Poor}\]

But to plug these into a weighted sum, we must assign numbers. And there is no principled way to do it.

The Ordinal Trap: Arbitrary Encodings

Consider two plausible encodings of the same ordinal data in Table 1, where:

  • Distance: measured in kilometers (lower is better)
  • Workload balance: measured as standard deviation of driver hours (lower is better)
  • Employee satisfaction: measured qualitatively as Good > Acceptable > Poor.
Table 1: Same qualitative labels encoded two ways: evenly spaced (A) vs. top-heavy (B).
Plan Distance (km) Worload
Balance (h)
Employee
Satisfaction
Encoding A Encoding B
P1 135 0.9 Good 3 3
P2 142 0.4 Acceptable 2 2.8
P3 158 1.8 Poor 1 1

Which encoding is better?

Both encodings respect Good > Acceptable > Poor. The only difference is where “Acceptable” sits between Good and Poor.

  • Encoding A says: Acceptable is halfway between Good and Poor.
  • Encoding B says: Acceptable is almost as good as Good.

Neither is wrong; the labels simply don’t carry distance information.

The Ordinal Trap: Same Labels, Different Winner

Let’s see what happens when we:

  1. Normalize each column to \([0,1]\) (min-max)
  2. Assign weights to each criterion and compute a weighted sum for each plan.

We will consider weights: \(w_{\text{dist}} = 0.3\), \(w_{\text{bal}} = 0.4\), \(w_{\text{sat}} = 0.3\).

Figure 1 shows the results for both encodings.

Figure 1

Outcome: With Encoding A, Plan 1 wins. With Encoding B, Plan 2 wins.

Why Not Just Normalize and Assign Weights?

  • Faced with multiple KPIs with different units and scales, a candidate approach is to normalize each KPI to \([0,1]\) and then assign weights to combine them into a single score.
  • Normalizing has a critical flaw: ordinal scales (e.g., 1 to 10) only preserve order, not meaningful ratios. For example:
    • Consider a scale of 1 to 10 for employee satisfaction. The difference between 1 and 2 is not necessarily the same as the difference between 9 and 10. Normalizing these scores to \([0,1]\) would give equal weight to all differences, which may not reflect the true importance of changes in satisfaction.

Weighting and adding such numbers can produce any ranking depending on the choice of ordinals.

The ordinal trap

When initial numbers are ordinals (preserving only order), normalizing them to \([0,1]\) preserves only order — not meaningful ratios. Weighting and adding such numbers can produce any ranking depending on the choice of ordinals.

Example: Two route plans scored on “distance” as 3 and 7 (ordinal). Normalizing gives 0.30 and 0.70. But scoring them as 1 and 9 gives 0.10 and 0.90 — same order, wildly different weights.

\(\Rightarrow\) We need a method that produces ratio scales from judgments.

Structuring the Hierarchy

🎯 Best Route Plan
(Overall Goal)

📏 Total Distance

⚖️ Workload Balance

Route Plan A

Route Plan B

Route Plan C

Three levels:

  1. Goal: Select the best VRP solution
  2. Criteria: The KPIs we care about
  3. Alternatives: Candidate route plans

The Fundamental Scale

Saaty’s fundamental scale adapted for VRP criteria comparison
Intensity Definition VRP Interpretation
1 Equal importance Both KPIs matter equally
3 Moderate importance Distance is moderately more important than balance
5 Strong importance Distance is strongly more important
7 Very strong importance Distance demonstrably dominates
9 Extreme importance Distance is the sole practical concern
2,4,6,8 Intermediate values Compromise between adjacent judgments

Reciprocal property

If criterion \(i\) is rated \(a_{ij}\) relative to criterion \(j\), then \(a_{ji} = 1/a_{ij}\).

From Judgments to Weights: The Core Challenge

Suppose a planner compares three route plans on total distance and gives these pairwise ratios:

\[ A = \begin{pmatrix} 1 & 3 & 5 \\ 1/3 & 1 & 2 \\ 1/5 & 1/2 & 1 \end{pmatrix} \]

The question: What weight vector \(\mathbf{w} = (w_1, w_2, w_3)\) best represents these judgments?

This is not obvious. Several methods come to mind:

  1. Normalize any column of \(A\)
  2. Average the normalized columns (row geometric mean)
  3. Something else?

Let’s see what happens when judgments are perfectly consistent — and when they’re not.

The Easy Case: Perfect Consistency

If the planner is perfectly consistent, every ratio is exact: \(a_{ij} = w_i / w_j\).

Then \(a_{ik} = a_{ij} \cdot a_{jk}\) for all \(i, j, k\). (Transitivity of ratios)

Example: If Plan A is 3× better than B, and B is 2× better than C, then A must be 6× better than C.

\[ A_{\text{consistent}} = \begin{pmatrix} 1 & 3 & 6 \\ 1/3 & 1 & 2 \\ 1/6 & 1/2 & 1 \end{pmatrix} \]

Every method agrees for this matrix:

  • Normalize column 1: \((0.667, 0.222, 0.111)\)
  • Normalize column 2: \((0.667, 0.222, 0.111)\)
  • Normalize column 3: \((0.667, 0.222, 0.111)\)

All columns give the same answer!

Note

When judgments are consistent, any column (normalized) recovers the true weights. The matrix has rank 1 — all columns carry the same information.

The Hard Case: Inconsistent Judgments

Now suppose the planner says:

  • A is 3× better than B ✓
  • B is 2× better than C ✓
  • A is 5× better than C ⚠️ (should be 6 if consistent)

\[ A_{\text{inconsistent}} = \begin{pmatrix} 1 & 3 & 5 \\ 1/3 & 1 & 2 \\ 1/5 & 1/2 & 1 \end{pmatrix} \]

Now the columns disagree:

Method \(w_1\) \(w_2\) \(w_3\)
Normalize column 1 0.652 0.217 0.130
Normalize column 2 0.667 0.222 0.111
Normalize column 3 0.625 0.250 0.125

Which column should we trust? None of them — each reflects only part of the information.

Why Not Just Average?

A natural first idea: average the normalized columns, or equivalently, compute row sums and normalize.

This works reasonably well in many cases. But it misses something important.

The problem with row-sum averaging

Row sums only capture one-step dominance: how much does Plan A directly dominate each other plan?

But dominance can also be indirect.

Analogy from sports: In a tournament, Team A might not play Team C directly. But if A beat B, and B beat C, we learn something about A vs. C.

The comparison matrix \(A\) is like a weighted tournament. We need a method that considers all paths of comparison, not just direct ones.

Dominance Walks: The Key Idea

Think of the comparison matrix as a directed graph with weighted edges:

3×

2×

5×

Plan A

Plan B

Plan C

Direct (1-step) dominance: Row sums of \(A\)

Indirect (2-step) dominance: Row sums of \(A^2\)

A dominates C through B: \(3 \times 2 = 6\)

All-step dominance: Row sums of \(A + A^2 + A^3 + \cdots\)

This captures the total influence of each alternative through every possible comparison path.

The big question

Does this infinite sum converge to something meaningful?

Yes — it converges to the principal eigenvector of \(A\).

The Eigenvector Emerges Naturally

Definition (Saaty, 1990): The total dominance of alternative \(i\) across walks of length \(1, 2, \ldots, m\) is:

\[ t_m = \frac{1}{m} \sum_{k=1}^{m} \frac{A^k \mathbf{e}}{\mathbf{e}^T A^k \mathbf{e}} \]

where \(\mathbf{e} = (1, 1, \ldots, 1)^T\) (so \(A^k \mathbf{e}\) gives the row sums of \(A^k\)).

Theorem 3 (Saaty, 1990): As \(m \to \infty\), this converges to \(\mathbf{w}\), the solution of:

\[A \mathbf{w} = \lambda_{\max} \mathbf{w}\]

In plain language

The eigenvector is the unique ranking that is self-consistent with all direct and indirect comparisons in the matrix. It’s not an arbitrary algebraic choice — it’s the answer to the question “what ranking respects all comparison paths?”

Seeing It Work: Power Method by Hand

Eigenvector (converged): [0.6483 0.2297 0.122 ]

Why the Eigenvector and Not Some Other Method?

Saaty (1990, p. 19) lists five ways to derive priorities from the comparison matrix:

  1. Eigenvector — captures dominance through all walk lengths
  2. Row sum average — captures only direct (1-step) dominance
  3. Normalized column average — averages multiple partial views
  4. Least squares — minimizes sum of squared deviations
  5. Logarithmic least squares (geometric mean) — minimizes product-form deviations

All agree for consistent matrices. For inconsistent ones, the eigenvector is special:

Saaty’s argument (p. 19)

“So long as inconsistency is tolerated, dominance is the basic theoretical concept for deriving a scale and no other method qualifies.”

The eigenvector is the only method that accounts for the full structure of indirect comparisons. Row averages see one step; the eigenvector sees infinitely many.

Now: What Is Consistency, Exactly?

A planner comparing three route plans says:

Consistent judgments ✅

  • A is 3× better than B
  • B is 2× better than C
  • A is 6× better than C

The indirect path (3 × 2 = 6) matches the direct judgment (6).

Inconsistent judgments ⚠️

  • A is 3× better than B
  • B is 2× better than C
  • A is 5× better than C

The indirect path says 6, but the direct judgment says 5. Something doesn’t add up.

Consistency = transitivity of ratios

A matrix is consistent when \(a_{ij} \cdot a_{jk} = a_{ik}\) for all \(i, j, k\).

This means: every indirect comparison path gives the same answer as the direct comparison.

Why Does Inconsistency Matter?

Consider a logistics manager who says:

  • Route A is much better than Route B on distance (7×)
  • Route B is much better than Route C on distance (7×)
  • Route C is better than Route A on distance (3×)

This is circular: A ≫ B ≫ C > A.

\[ A_{\text{bad}} = \begin{pmatrix} 1 & 7 & 1/3 \\ 1/7 & 1 & 7 \\ 3 & 1/7 & 1 \end{pmatrix} \]

λ_max = 6.467, CI = 1.734, CR = 2.99

These judgments cannot be trusted — the planner needs to revisit them.

How \(\lambda_{\max}\) Captures Inconsistency

The consistent case: The matrix has rank 1 (all information is redundant). Only one eigenvalue is nonzero, and it equals \(n\).

\[\lambda_{\max} = n, \quad \text{all other } \lambda_i = 0\]

. . .

The inconsistent case: The matrix has rank > 1. The “extra” information (contradictions) pushes \(\lambda_{\max}\) above \(n\).

\[\lambda_{\max} > n\]

. . .

The consistency index normalizes this deviation:

\[\text{CI} = \frac{\lambda_{\max} - n}{n - 1}\]

Why divide by \(n - 1\)?

A consistent matrix of order \(n\) has \(n - 1\) zero eigenvalues. When the matrix becomes inconsistent, these zeros become nonzero. The CI is their negative average.

. . .

Why compare to random matrices?

The RI tells us: “how inconsistent would a random set of judgments be?” If our CI is small relative to random noise, our inconsistency is acceptably low.

\[\text{CR} = \frac{\text{CI}}{\text{RI}} \leq 0.10\]

Consistency: A Practical Summary

Random Index (RI) values and the 10% threshold
\(n\) RI Max acceptable CI
2 0.00 — (always consistent)
3 0.58 0.058
4 0.90 0.090
5 1.12 0.112
6 1.24 0.124
7 1.32 0.132
8 1.41 0.141

Why 10%?

Saaty (1990, p. 13): the threshold is “carefully specified to be about 10% or less.” It’s not a hard statistical cutoff — it’s a practical guideline calibrated against what random (i.e., meaningless) judgments would produce.

If CR > 0.10: revisit the most inconsistent judgment(s) and ask: “Do I really believe this?”

VRP Example: Problem Setup

A logistics company has generated three candidate route plans for a daily delivery problem with 20 customers and 4 vehicles.

Metric Plan A Plan B Plan C
Total distance (km) 142 158 135
Max driver hours 7.2 6.1 6.8
Workload std. dev. (h) 1.8 0.4 0.9

Plan profiles:

  • Plan A: Short total distance, but one driver is overloaded
  • Plan B: Longest distance, but very balanced workload
  • Plan C: Moderate on both dimensions

Step 1: Structure the hierarchy (as shown earlier)

Step 2: Pairwise compare the criteria, then the alternatives under each criterion

Step 2a: Criteria Comparison

Question: For selecting the best route plan, how much more important is total distance vs. workload balance?

Suppose the planner judges distance to be moderately more important (3):

\[ C = \begin{pmatrix} 1 & 3 \\ 1/3 & 1 \end{pmatrix} \]

Priority vector (normalized eigenvector):

\[\mathbf{w}_C = \begin{pmatrix} 0.75 \\ 0.25 \end{pmatrix}\]

\(\lambda_{\max} = 2.000\), \(\text{CI} = 0.000\), \(\text{CR} = 0.000\) ✅

A \(2 \times 2\) reciprocal matrix is always perfectly consistent — there is only one free judgment.

Step 2b: Alternatives vs. Distance

Question: Comparing route plans pairwise, how much better is one than another on total distance?

Recall: Plan A = 142 km, Plan B = 158 km, Plan C = 135 km.

\[ D = \begin{pmatrix} & A & B & C \\ A & 1 & 3 & 1/2 \\ B & 1/3 & 1 & 1/4 \\ C & 2 & 4 & 1 \end{pmatrix} \]

Priority vector: \(\mathbf{w}_D = (0.320,\; 0.122,\; 0.558)^T\)

\(\lambda_{\max} = 3.018\), \(\text{CI} = 0.009\), \(\text{CR} = 0.016\) ✅

Step 2c: Alternatives vs. Workload Balance

Question: Comparing route plans pairwise, how much better is one than another on workload balance?

Recall: Plan A std.dev. = 1.8h, Plan B std.dev. = 0.4h, Plan C std.dev. = 0.9h.

\[ W = \begin{pmatrix} & A & B & C \\ A & 1 & 1/7 & 1/3 \\ B & 7 & 1 & 3 \\ C & 3 & 1/3 & 1 \end{pmatrix} \]

Priority vector: \(\mathbf{w}_W = (0.072,\; 0.649,\; 0.279)^T\)

\(\lambda_{\max} = 3.007\), \(\text{CI} = 0.003\), \(\text{CR} = 0.006\) ✅

Step 3: Global Priorities

Combine local priorities using the criteria weights:

\[ \text{Global priority}_i = \sum_{j} w_{C_j} \cdot w_{ij} \]

Distance (0.75) Balance (0.25) Global
Plan A 0.320 0.072 0.258
Plan B 0.122 0.649 0.254
Plan C 0.558 0.279 0.488

Result

Plan C is the recommended choice with 48.8% of the overall priority, followed closely by Plan A (25.8%) and Plan B (25.4%).

Sensitivity: What If Balance Matters More?

Let’s vary the criteria weight for distance from 0 to 1:

Scarcity and Abundance in VRP

Saaty introduces a nuanced idea about how criteria differentiate alternatives:

  • A criterion where all plans score similarly is “abundant” — it contributes little to rank determination
  • A criterion where plans differ sharply is “scarce” — it is decisive

In our example:

Criterion Contrast Effect
Distance Moderate Moderate influence
Balance High High influence per unit weight

This means even a lower-weighted criterion can be decisive if it provides high contrast among alternatives.

Relative vs. Absolute Measurement

Saaty describes two modes of AHP:

Relative Measurement

  • Compare alternatives pairwise under each criterion
  • Best for small sets of distinct alternatives
  • Rank can change when alternatives are added/removed

VRP use: Comparing 3–5 candidate route plans from different solvers.

Absolute Measurement (Ratings)

  • Define grade levels per criterion (e.g., Excellent, Good, Average, Poor)
  • Rate each alternative against these standards
  • Rank is preserved when alternatives are added/removed

VRP use: Rating 100+ route plans against predefined quality standards.

Practical Considerations

Strengths for VRP

  • Transparent weighting of KPIs
  • Handles intangible criteria (driver satisfaction, route aesthetics)
  • Built-in consistency check
  • Supports group decision making (combine planners’ judgments)

Limitations

  • Number of pairwise comparisons grows as \(n(n-1)/2\)
  • Assumes hierarchical independence of criteria
  • Potential rank reversal in relative mode when alternatives change
  • Subjectivity in pairwise judgments

For large VRP instances

Use absolute measurement with predefined quality grades, or cluster alternatives before relative comparison (Saaty, Section 7).

Summary

The AHP provides:

  1. A structured framework for balancing competing VRP objectives
  2. Ratio scales derived from pairwise judgments — not arbitrary scores
  3. The eigenvector as the natural method for extracting weights from all direct and indirect comparisons
  4. A consistency check rooted in how far \(\lambda_{\max}\) deviates from \(n\)
  5. Sensitivity analysis to understand robustness

Key takeaway for VRP:

When choosing among route plans, the “best” depends on how you weight the criteria. AHP makes this weighting explicit, traceable, and mathematically grounded.

Reference

Saaty, T.L. (1990). How to make a decision: The Analytic Hierarchy Process. European Journal of Operational Research, 48(1), 9–26. doi:10.1016/0377-2217(90)90057-I

Appendix: Computing Eigenvectors

For small matrices, the eigenvector can be approximated by repeated squaring and normalization:

Priority vector: [0.75 0.25]
λ_max = 2.000, CI = 0.000
Saaty, Thomas L. 1990. “How to Make a Decision: The Analytic Hierarchy Process.” European Journal of Operational Research 48 (1): 9–26. https://doi.org/10.1016/0377-2217(90)90057-I.