Monte Carlo Simulation and Bounded Rationality
- Manogane Sydwell
- Apr 10
- 7 min read
When initially exploring an idea, an individual may be drawn to it for a variety of reasons, be it inspiration, duty, or random chance amongst others. The pursuit of the idea will lead the individual to a variety of material which will help build a better grasp of the concept, and in so doing our individual will be equipped with the tools and apparatus to actualize on it. The idea could be gardening, financial planning, travel, or anything else you fancy.
Depending on the level of preparedness, motivation, and time invested, amongst other factors, the execution of the idea in question can go in so many ways. This multitude of possibilities brings us to the subjects of this article: Monte Carlo Simulation, and Bounded Rationality.
Monte Carlo simulation refers to a broad class of computational algorithms that rely on repeated random sampling to solve problems or model complex systems. The core idea is to use randomness to address deterministic problems that are difficult to solve with analytic methods. First developed in the mid-20th century, Monte Carlo methods have become a fundamental tool in fields ranging from finance to computer science, and more.
The first noted use of Monte Carlo in finance came in 1964. Economist David B. Hertz published an article in the Harvard Business Review introducing Monte Carlo simulation as a tool for business decision-making under uncertainty. Hertz applied the method to capital investment projects, essentially simulating distributions of possible project outcomes (NPVs, IRRs) by modeling the uncertainty of cash flows. This was a breakthrough for corporate finance and project risk analysis – it allowed analysts to move beyond single-point “best guess” estimates and instead examine the range of possible outcomes and probabilities.
It is important to note that the widespread use of Monte Carlo in finance was enabled by technological advancements. By the 2010s, computing infrastructure such as high-performance clusters and cloud computing allowed financial firms to run millions of simulation scenarios in parallel. Programming languages and libraries like MATLAB, R, Python (with libraries like NumPy, Pandas, and PyMC) made it easier for financial analysts to build and run Monte Carlo models without needing low-level programming.
A Practical Example:
The code to generate the spaghetti plot for our Monte Carlo Simulation includes various components, some of which are not found in this article for the sake of brevity. However, interested readers can find the full code at my Github in the relevant repository. In this article, we will only focus on the function of interest, that being simulate_multiple_paths, which simulates stock price trajectories:
def simulate_multiple_paths(S0, sigma, r, T, N, paths, random_seed=None):
"""
Simulate multiple paths for a single stock following Geometric Brownian Motion.
Parameters:
-----------
S0 : float, initial stock price.
sigma : float, volatility of the stock.
r : float, risk-free interest rate.
T : float, time to maturity (years).
N : int, number of discrete time steps.
paths : int, number of Monte Carlo paths to simulate.
random_seed : int, optional seed for reproducibility.
Returns:
--------
times : numpy.ndarray, time grid from 0 to T.
all_paths : numpy.ndarray, 2D array of simulated paths.
"""
Reproducibility
Random Seed: If a seed is provided, the random number generator is initialized (np.random.seed(random_seed)). This ensures that each time you run the simulation with the same seed, you get identical results—a crucial feature for debugging and sharing reproducible results.
Time Grid and Initialization
Time Increment (dt): The time step dt is calculated as T/N. This represents the length of each discrete step.
Time Array (times): A linearly spaced array is generated from 0 to T with N+1 points using np.linspace(0, T, N + 1).
Paths Array (all_paths): A 2D NumPy array of zeros is created with shape (paths, N + 1). This pre-allocation is a common practice to improve performance. Each row will eventually hold one simulated stock price path. The initial stock price S0 is set for all paths at time 0.
Monte Carlo Simulation Loop
The nested loops simulate the evolution of each path:
for i in range(paths):
for j in range(1, N + 1):
Z = np.random.normal() # Draw a random sample from a standard normal distribution
all_paths[i, j] = all_paths[i, j - 1] * np.exp(
(r - 0.5 * sigma**2) * dt + sigma * np.sqrt(dt) * Z
)
Inner Loop (Time Steps): For each path, the price is updated for every time step using the GBM formula:

Drift Term:
Drift Term This represents the deterministic part of the model: it incorporates the risk-free rate and adjusts for the volatility’s effect on the mean.
Diffusion Term:

Here, Z is a normally distributed random number, introducing randomness into the simulation to capture random market fluctuations.
Multiplicative Update: The next price is determined by multiplying the current price by the exponential of the sum of the drift and diffusion components. This multiplication ensures that the price evolution is proportional—a key feature of GBM.
After simulating all the paths, the function returns the time grid and the simulated paths array

Having simulated the stock prices, users of the simulation can move on and take decisions of interest, or make additional analysis like computing VaR using the Monte Carlo method. It is paramount to note that users should not just simulate for the sake of it, but with the aim of taking action. Additionally, there are many flavors to Monte Carlo Simulation, some of them being:
Monte Carlo Tree Search;
Markov Chain Monte Carlo; and
Monte Carlo Localization amongst others.
Additionally, it is important to execute on the reasons behind which the model was created and used for, as opposed to endeavoring for a situation where users pursue an instance where the model serves as a stand-in for decision making, which can be costly and/or time consuming. Striving for perfect information—a theoretical ideal in economics—is not the goal; instead, the aim is to harness the model’s insights to support effective and timely decision making in the face of real-world uncertainties. This brings us to bounded rationality.
Bounded Rationality
Bounded rationality refers to the empirically grounded notion that human decision-makers are not perfectly rational, but rather operate under constraints of limited information, finite cognitive processing, and time pressure. This concept, introduced by Nobel Laureate Herbert Simon in the 1950s, marked a paradigm shift from the classic economic assumption of omniscient rationality. Simon urged replacing the “global rationality of economic man” with behavior compatible with the actual information access and computational abilities of real organisms.
Embracing bounded rationality results in more robust decision-making systems. Financial institutions that account for investor psychology can better manage tail risks. Organizations that design processes for how people actually behave (not how we wish they did) see gains in efficiency and employee satisfaction. And technologies that assist (rather than replace) human decision-makers are proving effective – from decision support AI to dashboard analytics – because they acknowledge and compensate for human bounds.
At its core, bounded rationality reminds us that context matters – whether it’s the informational context of traders, the environmental structure for decision-makers, or the constraints in an operational process. Across domains, the successful models and strategies are those that combine normative logic with realistic human behavior.
Modern research often aims to find the right mixture between ideal optimization and practical heuristics. This unified understanding is leading to cross-pollination: techniques from behavioral economics inform pragmatic choice selection, cognitive science’s heuristics inspire algorithms in Artificial Intelligence and Operations Research, and insights from the study of group dynamics in complex systems inform organizational psychology.
Having simulated the stock prices, users of the simulation can move on and take decisions of interest, or make additional analysis like computing VaR using the Monte Carlo method. It is paramount to note that users should not just simulate for the sake of it, but with the aim of taking action. Additionally, there are many flavors to Monte Carlo Simulation, some of them being:
Monte Carlo Tree Search;
Markov Chain Monte Carlo; and
Monte Carlo Localization amongst others.
Additionally, it is important to execute on the reasons behind which the model was created and used for, as opposed to endeavoring for a situation where users pursue an instance where the model serves as a stand-in for decision making, which can be costly and/or time consuming. Striving for perfect information—a theoretical ideal in economics—is not the goal; instead, the aim is to harness the model’s insights to support effective and timely decision making in the face of real-world uncertainties. This brings us to bounded rationality.
Bounded Rationality
Bounded rationality refers to the empirically grounded notion that human decision-makers are not perfectly rational, but rather operate under constraints of limited information, finite cognitive processing, and time pressure. This concept, introduced by Nobel Laureate Herbert Simon in the 1950s, marked a paradigm shift from the classic economic assumption of omniscient rationality. Simon urged replacing the “global rationality of economic man” with behavior compatible with the actual information access and computational abilities of real organisms.
Embracing bounded rationality results in more robust decision-making systems. Financial institutions that account for investor psychology can better manage tail risks. Organizations that design processes for how people actually behave (not how we wish they did) see gains in efficiency and employee satisfaction. And technologies that assist (rather than replace) human decision-makers are proving effective – from decision support AI to dashboard analytics – because they acknowledge and compensate for human bounds.
At its core, bounded rationality reminds us that context matters – whether it’s the informational context of traders, the environmental structure for decision-makers, or the constraints in an operational process. Across domains, the successful models and strategies are those that combine normative logic with realistic human behavior.
Modern research often aims to find the right mixture between ideal optimization and practical heuristics. This unified understanding is leading to cross-pollination: techniques from behavioral economics inform pragmatic choice selection, cognitive science’s heuristics inspire algorithms in Artificial Intelligence and Operations Research, and insights from the study of group dynamics in complex systems inform organizational psychology.
Conclusion
Strong modelling capability serves as a crucial bedrock for many of the worlds industries, from banking to physics. Before making decisions in today’s fast paced world, it is important that individuals be as prepared as can be. However, at the end of the day, as comprehensive as some models may be, it is important to remember models exist to provide actionable insight. Decisions are made in high pressure environments, where good results are essential. Bounded rationality helps users of models like Monte Carlo Simulations to act on the insights thereby provided instead of focusing on impractical ideals, considering day to day constraints.
References
Monte Carlo method, wikipedia
Decision Making Under Uncertainty, stanford
Microsoft acquires Cycle Computing, techcrunch
Monte Carlo Basics, github
Bounded Rationality, stanford
Taming animal spirits: Tail risk hedging, barclays
The Role of Artificial Intelligence in Digital Transformation, harvard business school
The future of finance: how AI and data can boost business performance, financial times
留言