You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Correctness:
- ch8: fix the DPP regularization path (loss and penalty were on separate
variables, so every path coefficient came out zero); share one variable.
- ch13: fix the near-isotonic penalty sign (pos(diff) penalized upward
steps and flattened to the mean; pos(-diff) penalizes downward steps).
- ch14: clear the fixed start before best_of so the random restarts run
(a preset value(x) silently pinned them all to the same result).
Math and notation:
- ch4: add standard-form definitions for LP, QP, SOCP, SDP.
- ch5: normalize the elastic-net loss by 1/(2n) to match the code.
- ch6/ch7/ch8/ch10: use n (observations) / p (variables) consistently.
- ch15: define monomial and posynomial in the DGP intro.
- ch2/ch3: align exercise statements with their code and solutions.
Content:
- ch9: replace the arbitrary alphabetical stock subset with daily adjusted
prices for the 12 largest US companies (Yahoo Finance, 2022-2024); the
data is now our own, models cited to Markowitz and Rockafellar-Uryasev;
drop all Riskfolio-Lib references and the bib entry.
- ch11: present the HiGHS/MIQP solver limitations as current, changeable
behavior rather than permanent rules.
- ch16: rewrite as a participant-facing open session with honest
expectations; drop internal planning notes.
- index: clarify the Render button note.
@@ -106,7 +106,7 @@ mask of the truth alongside each fit:
106
106
#| fig-height: 2.4
107
107
#| fig-cap: "Nonzero pattern (dark = nonzero) of the true precision matrix and the estimates. Smaller alpha -> sparser. Around alpha = 4 the estimate matches the truth's sparsity."
108
108
mask_df <- function(M, lab) {
109
-
data.frame(i = rep(seq_len(n), n), j = rep(seq_len(n), each = n),
109
+
data.frame(i = rep(seq_len(p), p), j = rep(seq_len(p), each = p),
0 commit comments