Quantitative modelling for operational decisions under uncertainty: spatial risk, resource allocation and stochastic planning. Undergraduate in Data Science and Mathematics at Tecnológico de Monterrey.
Practice. Raw data is immutable; every derived table and figure is regenerated from versioned code. Formulations are specified in LaTeX before implementation and, where tractable, validated against an exact solution. Solvers are written in C++; analysis and modelling in Python; editor tooling in Lua.
Current work. Chance-constrained optimisation and metaheuristics for reforestation planning; hierarchical Bayesian models for spatial count data; dataset distillation for convolutional networks.
| Method | GeoStats | RefInit | Casa Monarca | GBM | CNN | MSED |
|---|---|---|---|---|---|---|
| Hierarchical Bayesian models | ● | |||||
| Spatial statistics | ● | |||||
| Mixed-integer programming | ● | ● | ||||
| Chance constraints | ● | |||||
| Metaheuristics | ● | |||||
| Monte Carlo simulation | ● | |||||
| Differential equations | ● | |||||
| Regression | ● | ● | ||||
| Deep learning | ● | |||||
| Implementation | Python | C++ | Python | Python | Python | Python |
Libraries. PyMC, statsmodels, scikit-learn, SciPy, pandas, GeoPandas, PySAL, Pyomo with GLPK, TensorFlow and Keras, Dear ImGui.
Tooling. uv, CMake, Quarto, LaTeX, Jupyter, Streamlit, Weights & Biases, Neovim.
Fig. 1. Traffic incidents recorded by INEGI (ATUS), 2019–2024, aggregated to 1 km hexagonal cells over central Monterrey, from 379,294 geocoded records. Red cells are the top percentile (≥ 2,277 records each). Generated from the repository's processed data.
Problem. Identify where traffic risk concentrates across the 18 municipalities of the Monterrey metropolitan area, who bears its cost, and how predictable it is.
Method. Reproducible INEGI pipeline to Parquet; 2,241-cell hexagonal grid; spatial autocorrelation; hierarchical model forecasting incidents per cell for 2027.
Stack. Python, GeoPandas, PySAL, PyMC, statsmodels.
Output. Interactive presentation and model application.
Fig. 2. Illustrative comparison on a staggered (tresbolillo) grid: ten species in four genera under equal quotas, assigned at random and by a greedy competition-aware rule. Red edges mark same-genus neighbours. The project itself solves this with a memetic algorithm and tabu search.
Problem. Reforest 30 polygons along the Dominica–Charcas transmission line (San Luis Potosí) with ten native species at 658 plants/ha: determine purchase quantities that meet the target with probability at least 1 − α within budget, and arrange species to minimise competition.
Method. Chance-constrained purchasing model; memetic algorithm with tabu search for spatial arrangement, benchmarked against an exact integer program.
Stack. C++, CMake, Dear ImGui and ImPlot desktop application; Python and LaTeX for analysis and reporting.
Output. Planning tool for CONAFOR technicians. Project site.
Fig. 3. Nonzero structure of the mixed-integer program as formulated: 30 ingredients, 7 days, 3 meals, 12 dishes. Columns are variable blocks; rows are constraint families. Recipe coefficients are schematic; every other block follows the published constraints.
Problem. Minimise weekly food-purchasing cost for approximately 100 residents of a migrant shelter, subject to a fixed budget, commercial lot sizes, scheduled donations and inventory continuity.
Method. Mixed-integer linear program with Big-M menu scheduling and inventory balance, solved with GLPK.
Stack. Python, Pyomo, Streamlit, LaTeX.
Output. Web application operated by shelter staff.
The environment in which the work above is written is maintained as a public configuration, from which two plugins have been extracted and published.
Fig. 4. The configuration editing src/main.cpp of Stochastic_RefInit with clangd: file tree, buffer tabs, symbol breadcrumb and fold column. Screenshot from the nvim repository.
nvim. Neovim 0.11 on lazy.nvim, with about 70 plugin specifications and language servers configured through the native vim.lsp.config API. Three subsystems are written from scratch: a PDF viewer drawn with the kitty graphics protocol, with SyncTeX in both directions and pages recoloured to the active theme; Claude Code sessions held in ordinary terminal buffers; and shell-integrated terminals that record each command's directory, exit status and output, so that compiler errors can be sent to the quickfix list. Jupyter notebooks open as plain text through jupytext and execute in live kernels through molten.nvim.
upstream.nvim. A full-screen GitHub interface built on the gh CLI, covering issues, pull requests, review requests and CI runs. Every call is asynchronous and bounded by a timeout; responses are cached and served stale-while-revalidate. Read-only at v0.1.
projectrc.nvim. Per-project settings edited in a floating window. Values that other tools read are written to those tools' own files (.clang-format, .clangd), so the shell, CI and the editor agree; settings that execute commands are ignored until the file is trusted through vim.secure.
Further work
| Repository | Subject |
|---|---|
| random_walk_simulator | Vectorised Monte Carlo under geometric Brownian motion; VaR and CVaR |
| NeuralNetworksTeamEnvironment | 104-class image classification with distribution-matching dataset distillation |
| MSED | Regression-derived ODE systems (RK4) for demographic and economic series |
| LaTeX_Notes | Typeset notes in mathematical methods for physics and multivariate statistics |
| snake_game, cvector | C with ncurses; generic dynamic array |
Figures are generated by assets/build.py.




