From b798d2bfd0ed49a2509ed942b31abdd67c48bcbb Mon Sep 17 00:00:00 2001 From: Zeno Rogue Date: Tue, 27 Jan 2026 11:26:32 +0100 Subject: [PATCH] rogueviz::dhrg:: penalty --- rogueviz/dhrg/embedder.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/rogueviz/dhrg/embedder.cpp b/rogueviz/dhrg/embedder.cpp index 9f60572c..61eaa3fc 100644 --- a/rogueviz/dhrg/embedder.cpp +++ b/rogueviz/dhrg/embedder.cpp @@ -18,6 +18,9 @@ vector tomove; bool smartmove = false; bool dorestart = false; +/* penalty, to improve control. 0 = no penalty */ +ld penalty = 0; + int lastmoves; int movearound() { @@ -59,7 +62,10 @@ int movearound() { llo2[d] = loglik_chosen(); if(lc_type == 'C') add_to_set(mc2[d], -1, 0); - if(llo2[d] > bestllo) bestd = d, bestllo = llo2[d]; + ld with_penalty = llo2[d]; + if(penalty) with_penalty += cgi.expansion->get_descendants(mc->lev).log_approx() * penalty; + if(penalty) with_penalty -= cgi.expansion->get_descendants(mc2[d]->lev).log_approx() * penalty; + if(with_penalty > bestllo) bestd = d, bestllo = with_penalty; add_to_tally(mc2[d], -1, 0); tallyedgesof(i, -1, mc2[d]); @@ -81,6 +87,7 @@ int movearound() { }} // dispnewmoves(); println(hlog, " moves = ", moves); + if(penalty) println(hlog, "penalty = ", penalty); return lastmoves = moves; }