Multi-Objective Optimization

Lecture

James Doss-Gollin

Monday, April 6, 2026

Today: Two Ideas Combined

We are combining two threads from earlier in the course:

  • Multiple criteria (from the Values lecture): some things are hard to compare on a single scale.
  • Optimization / policy search (from the Optimal Decisions lecture): search a decision space for good actions.

Today: search a decision space when several objectives matter, without collapsing them into one number.

MCA vs. MOO

Multi-Criteria Analysis

  • Fixed list of alternatives
  • Score each on each criterion
  • Aggregate via weights → ranking
  • Scoring a given menu

Multi-Objective Optimization

  • Alternatives generated by search
  • Objectives kept separate
  • Output: a set of trade-off solutions
  • Discovering trade-offs and generating new alternatives

Multiple Conflicting Objectives

\[\min_a \; \{f_1(a),\; f_2(a),\; \ldots,\; f_k(a)\}\]

Coastal adaptation example:

  • \(f_1(a)\): expected flood damages
  • \(f_2(a)\): construction cost

Improving \(f_1\) generally requires accepting worse \(f_2\).

Dominance and Pareto Optimality

Today

  1. Dominance and Pareto Optimality

  2. Multi-Objective Evolutionary Algorithms

  3. A Toy ε-MOEA on ZDT1

  4. Reading and Using the Pareto Front

  5. Wrapup

What Does “Better” Mean?

Dominance: Solution \(a\) dominates solution \(b\) if:

  • \(a\) is at least as good as \(b\) on every objective
  • \(a\) is strictly better than \(b\) on at least one objective

If \(a\) dominates \(b\), there is no reason to choose \(b\).

Which solutions dominate?

Strategy Expected Damages ($M) Construction Cost ($M)
A: Elevate 1 ft 4.0 0.5
B: Elevate 3 ft 2.0 1.5
C: Elevate 5 ft 1.8 3.0
  • A vs. B? A is cheaper, B has lower damages → neither dominates.
  • B vs. C? B is cheaper, C has slightly lower damages → neither dominates.
  • The Pareto front is {A, B, C}.

Your Turn: Which are Dominated?

Both objectives are minimized (lower-left is better).

Identify every dominated solution.

The star marks the (infeasible) ideal point.

Code
let
    points = [
        (1.0, 4.0),  # 1: front
        (2.0, 2.5),  # 2: front
        (5.0, 1.0),  # 3: front
        (4.5, 1.0),  # 4: front
        (3.0, 2.6),  # 5: dominated by 2
        (4.0, 2.0),  # 6: front
        (4.5, 2.8),  # 7: dominated by 3
        (1.5, 3.2),  # 8: front
    ]
    labels = ["1", "2", "3", "4", "5", "6", "7", "8"]

    fig = Figure(; size=(460, 420))
    ax = Axis(
        fig[1, 1];
        xlabel=L"f_1 \text{ (minimize)}",
        ylabel=L"f_2 \text{ (minimize)}",
        xticksvisible=false,
        xticklabelsvisible=false,
        yticksvisible=false,
        yticklabelsvisible=false,
        limits=(0, 6, 0, 5),
    )

    scatter!(ax, [0.4], [0.5]; marker=:star5, markersize=28, color=:goldenrod)
    text!(ax, 0.6, 0.55; text="ideal", fontsize=12, color=:goldenrod)

    for (i, (x, y)) in enumerate(points)
        scatter!(ax, [x], [y]; markersize=22, color=:steelblue)
        text!(ax, x - 0.18, y + 0.22; text=labels[i], fontsize=18, font=:bold)
    end
    fig
end
Figure 1: Five candidate solutions in two-objective space; both objectives minimized.

The Pareto Front

Figure 2: A Pareto front in two objectives. Source: Smith et al. (2022)

Multi-Objective Evolutionary Algorithms

Today

  1. Dominance and Pareto Optimality

  2. Multi-Objective Evolutionary Algorithms

  3. A Toy ε-MOEA on ZDT1

  4. Reading and Using the Pareto Front

  5. Wrapup

How MOEAs Work

  • Maintain a population of candidate solutions that evolves over generations
  • Selection favors non-dominated solutions
  • Diversity preservation spreads solutions across the front
  • Repeat until convergence

Result: a set of solutions approximating the full trade-off curve, including non-convex regions.

Genetic Algorithm Mechanics

A GA is stochastic search with a population instead of a single point.

  • Population: \(N\) candidate solutions in the decision space
  • Evaluation: compute objectives for every member
  • Selection: bias future generations toward better solutions
  • Variation: produce offspring via crossover (mix two parents) and mutation (perturb)
  • Replacement: combine parents + offspring, keep the best \(N\)
  • Repeat for many generations

The population is what makes GAs natural for MOO: many trade-off points evolve at once.

ε-Dominance

Why we need it. Plain Pareto dominance has two practical problems:

  • Diversity. Nothing stops the archive from clustering many near-identical solutions in one region of the front while leaving other regions empty.
  • Computation. The archive can grow without bound — every slightly-different point survives — and every new candidate must be checked against all of them.

We want a rule that keeps only solutions that differ by amounts the decision-maker actually cares about.

ε-Boxes

Pick a vector \(\boldsymbol\epsilon = (\epsilon_1, \ldots, \epsilon_k)\) — one resolution per objective. Tile objective space with boxes of side \(\epsilon_i\) along axis \(i\), and map each solution to the integer coordinates of the box it lands in.

ε-dominance: \(a\) ε-dominates \(b\) if \(a\)’s box dominates \(b\)’s box in the ordinary sense, and the archive keeps at most one solution per box.

  • Two solutions in the same box are treated as equivalent — keep the one closer to the box’s lower corner
  • \(\epsilon_i\) encodes the resolution at which the decision-maker cares about differences on objective \(i\)
  • Resolutions can differ by objective (e.g., damages in $M, lives in counts)
  • Archive size is bounded by the number of boxes the front intersects

ε-Dominance: Picture

Figure 3: An \(\epsilon\)-grid with \(\epsilon_1 = 0.20\), \(\epsilon_2 = 0.30\). Points \(a\) and \(c\) both fall in the same box, so the archive keeps only one (whichever is closer to the box’s lower corner). Point \(b\) lives in a different box and survives. The star marks the (infeasible) ideal point.

A Toy ε-MOEA on ZDT1

Today

  1. Dominance and Pareto Optimality

  2. Multi-Objective Evolutionary Algorithms

  3. A Toy ε-MOEA on ZDT1

  4. Reading and Using the Pareto Front

  5. Wrapup

ZDT1: A Test Problem

A standard MOO benchmark with two decision variables \(x_1, x_2 \in [0, 1]\) and two objectives (both minimized):

\[ \begin{align*} f_1 &= x_1 \\ f_2 &= g(x_2)\left(1 - \sqrt{f_1 / g(x_2)}\right) \\ g(x_2) &= 1 + 9 x_2 \end{align*} \]

The analytical Pareto front is \(x_2 = 0\), giving \(f_2 = 1 - \sqrt{f_1}\) on \(f_1 \in [0, 1]\).

Code
using Random
Random.seed!(1)

function zdt1(x)
    f1 = x[1]
    g = 1 + 9 * x[2]
    f2 = g * (1 - sqrt(f1 / g))
    return [f1, f2]
end

let
    fs = 0.0:0.005:1.0
    fig = Figure(; size=(520, 340))
    ax = Axis(fig[1, 1]; xlabel=L"f_1", ylabel=L"f_2",
        limits=(-0.05, 1.05, -0.05, 1.1))
    lines!(ax, fs, 1 .- sqrt.(fs); color=:tomato, linewidth=3,
        label="Pareto front")
    axislegend(ax; position=:rt)
    fig
end
Figure 4: Canonical visualization of ZDT1: the analytical Pareto front in objective space.

Mutation

The GA’s source of new points: take a parent vector, add small Gaussian noise, clamp back into the unit box.

mutate(x) = clamp.(x .+ 0.1 .* randn(length(x)), 0, 1)

ε-Dominance in Code

Map each point to its \(\epsilon\)-box, then apply ordinary dominance on the integer box coordinates.

# Integer coordinates of the ε-box a point lands in
ebox(f, ε) = floor.(Int, f ./ ε)

# a ε-dominates b if a's box dominates b's box
function eps_dominates(a, b, ε)
    ba, bb = ebox(a, ε), ebox(b, ε)
    return all(ba .<= bb) && any(ba .< bb)
end
  • floor.(Int, f ./ ε) is the entire ε-grid mapping
  • Dominance on integer tuples is the same comparison from the dominance slides — just at coarser resolution

Archive Update

function update_archive!(archive, cand, ε)
    cb = ebox(cand.f, ε)
    drop = Int[]
    for (i, m) in enumerate(archive)
        mb = ebox(m.f, ε)
        if mb == cb
            # Same box: keep whichever is closer to its lower corner
            if sum((m.f .- mb .* ε) .^ 2) <= sum((cand.f .- cb .* ε) .^ 2)
                return
            else
                push!(drop, i)
            end
        elseif eps_dominates(m.f, cand.f, ε)
            return                           # candidate ε-dominated by m
        elseif eps_dominates(cand.f, m.f, ε)
            push!(drop, i)                   # candidate ε-dominates m
        end
    end
    deleteat!(archive, drop)
    push!(archive, cand)
    return
end

Initialize

N = 40
ε = [0.05, 0.05]

pop = [(x=rand(2), f=zeros(2)) for _ in 1:N]
pop = [(x=p.x, f=zdt1(p.x)) for p in pop]

archive = eltype(pop)[]
for p in pop
    update_archive!(archive, p, ε)
end
length(archive)
Figure 5: Initial population (blue) vs. analytical front (dashed).

Running the Model

function step!(pop, archive, ε; p_random=0.3)
    offspring = map(1:length(pop)) do _
        x = rand() < p_random ? rand(2) : mutate(rand(pop).x)
        (x=x, f=zdt1(x))
    end
    for o in offspring
        update_archive!(archive, o, ε)
    end
    # Next generation: half from archive (exploit), half from offspring (explore)
    half = length(pop) ÷ 2
    return vcat(
        [archive[rand(1:length(archive))] for _ in 1:half],
        offspring[1:(length(pop) - half)],
    )
end
Code
gens = 50
# Frame 0: the raw initial random population (before any selection)
snapshots = Vector{Vector{Point2f}}()
push!(snapshots, [Point2f(p.f...) for p in pop])
# Frames 1..gens: archive after each generation
for g in 1:gens
    global pop = step!(pop, archive, ε)
    push!(snapshots, [Point2f(m.f...) for m in archive])
end

Watching It Converge

Reading and Using the Pareto Front

Today

  1. Dominance and Pareto Optimality

  2. Multi-Objective Evolutionary Algorithms

  3. A Toy ε-MOEA on ZDT1

  4. Reading and Using the Pareto Front

  5. Wrapup

What Does Many-Objective Look Like?

With 2 objectives: a curve.

With 3+ objectives: a surface — impossible to visualize directly.

Parallel axis plots show all objectives simultaneously. Each line = one non-dominated solution.

Figure 6: Parallel axis plot of non-dominated solutions across six objectives. Source: Kasprzyk et al. (2013)

Reading a Pareto Front

On a Pareto front plot, each axis is one objective and each point is a non-dominated solution.

The “knee” of the front:

  • Region of high curvature — large gains on one objective for small losses on another
  • Often a practical default if no strong preference exists
  • Not always present; depends on problem structure

How Many Objectives?

More objectives → richer representation, but real costs:

  • Computational: exponentially more solutions to cover the front
  • Conceptual: harder to reason about trade-offs in high dimensions
  • Communication: harder to show decision-makers

Rule of thumb: use as few objectives as possible. Combining objectives is often the right call — when the assumptions hold.

Wrapup

Today

  1. Dominance and Pareto Optimality

  2. Multi-Objective Evolutionary Algorithms

  3. A Toy ε-MOEA on ZDT1

  4. Reading and Using the Pareto Front

  5. Wrapup

Summary

  • Why MOO? When objectives are incommensurable, weighting hides value choices. MOO keeps them separate.
  • Dominance is the comparison rule: better on all, strictly better on one. The non-dominated set is the Pareto front.
  • MOEAs approximate the front with a population of designs, dominance-based selection, and variation operators. No gradients needed.
  • \(\epsilon\)-dominance thins the archive to a manageable, decision-relevant resolution.
  • Division of labor: analysts find the front; decision-makers choose from it.

Looking Ahead

This week:

  • Wednesday: Madison leads discussion of Yang et al. (2023) — come prepared to discuss objectives, algorithm choice, and how results inform decisions
  • Friday: Lab 10 — generate and visualize Pareto fronts for the house elevation problem
  • Friday: Memo 2 due (Evidence & Robustness)

Week 13 (Monday): Putting it all together — how robustness, scenario discovery, sequential decisions, and multi-objective optimization connect in real projects.

References

Kasprzyk, J. R., Nataraj, S., Reed, P. M., & Lempert, R. J. (2013). Many objective robust decision making for complex environmental systems undergoing change. Environmental Modelling & Software, 42, 55–71. https://doi.org/10.1016/j.envsoft.2012.12.007
Smith, S., Southerby, M., Setiniyaz, S., Apsimon, R., & Burt, G. (2022). Multiobjective optimization and Pareto front visualization techniques applied to normal conducting rf accelerating structures. Physical Review Accelerators and Beams, 25(6), 062002. https://doi.org/10.1103/PhysRevAccelBeams.25.062002
Yang, S., Ruangpan, L., Torres, A. S., & Vojinovic, Z. (2023). Multi-objective Optimisation Framework for Assessment of Trade-Offs between Benefits and Co-benefits of Nature-based Solutions. Water Resources Management, 37(6–7), 2325–2345. https://doi.org/10.1007/s11269-023-03470-8