Satiation (Bliss Point)
Utility rises toward the bliss point \((x^*, y^*)\) and falls away in all directions. Indifference curves are closed ellipses centred on the bliss point. This violates the standard monotonicity axiom — a consumer can have "too much" of a good.
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
bliss_x |
float | 5.0 | \(x\)-coordinate of the bliss point \(x^*\) |
bliss_y |
float | 5.0 | \(y\)-coordinate of the bliss point \(y^*\) |
a |
float | 1.0 | Curvature along the \(x\)-axis (must be positive) |
b |
float | 1.0 | Curvature along the \(y\)-axis (must be positive) |
Optimisation
The consumer solves
The Lagrangian is
First-order conditions:
Dividing the first two conditions gives the tangency condition:
If the bliss point \((x^*, y^*)\) is interior to the budget set (i.e.\ \(p_x x^* + p_y y^* \le I\)), the unconstrained maximum is attained at the bliss point itself and the consumer does not spend all income.
Note
Satiation is not compatible with solve() because the standard budget-tangency optimum may lie outside the bliss ellipse. Use --no-budget --no-equilibrium in the CLI, or omit add_budget / add_equilibrium in Python.
Usage
import numpy as np
from econ_viz import Canvas, levels
from econ_viz.models import Satiation
model = Satiation(bliss_x=6.0, bliss_y=4.0)
x_pts = np.linspace(0.1, 12, 300)
y_pts = np.linspace(0.1, 10, 300)
X, Y = np.meshgrid(x_pts, y_pts)
lvls = levels.percentile(model(X, Y), n=5)
Canvas(x_max=12, y_max=10, title="Satiation — bliss at $(6, 4)$") \
.add_utility(model, levels=lvls) \
.save("satiation.png")