1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2026-02-03 16:30:15 +00:00

rogueviz::dhrg:: compute DHRG variant of rank measures

This commit is contained in:
Zeno Rogue
2026-01-27 10:34:05 +01:00
parent 1f27ae428a
commit 415daa0a62
2 changed files with 129 additions and 0 deletions

120
rogueviz/dhrg/dhrg-rank.cpp Normal file
View File

@@ -0,0 +1,120 @@
namespace dhrg {
ll rtally[MAXDIST];
int redgetally[MAXDIST];
using rogueviz::embeddings::directed_edges;
void tallydiredgesof(int i, int delta, mycell *mc) {
for(auto j: directed_edges[i]) {
whichedgetally[quickdist(mc, vertices[j], 0)] += delta;
}
}
void dhrg_ranks() {
int N = isize(rogueviz::vdata);
/*
print(hlog, "check tally = ");
for(int j=0; j<MAXDIST; j++)
if(edgetally[j] || tally[j])
print(hlog, j, ":", int(edgetally[j]), "/", int(tally[j]));
println(hlog);
*/
dynamicval<ll*> dt(whichtally, rtally);
dynamicval<int*> det(whichedgetally, redgetally);
ld meanrank = 0;
ld meanrank_opti = 0;
int tgood = 0;
rtally[0]--; // do not count self
ld maprank = 0;
ld maprank_opti = 0;
progressbar pb(N, "compute_ranks");
for(int i=0; i<N; i++) {
mycell *mc = vertices[i];
tallydiredgesof(i, 1, mc);
add_to_tally(mc, 1, 0);
if(i < -10) {
print(hlog, "tallies for i=", i, " =");
for(int j=0; j<MAXDIST; j++)
if(redgetally[j] || rtally[j])
print(hlog, " ", j, ":", int(redgetally[j]), "/", int(rtally[j]));
println(hlog);
}
// print(hlog, "LINE:");
int pgood = 0;
ld bad = 0;
ld ap = 0;
ld ap_opti = 0;
ld pall = 0;
// ld lastbad = 0;
for(int j=0; j<MAXDIST; j++) {
ld good = redgetally[j];
ld all = rtally[j];
ld err = all - good;
/* for(int k=0; k<good; k++) {
lastbad = bad;
print(hlog, " ", pgood+bad+k+1);
} */
meanrank_opti += bad * good;
bad += err / 2.;
meanrank += bad * good;
bad += err / 2.;
for(int k=1; k<=good; k++) {
ap_opti += (pgood+k) / (pall+k);
}
for(int k=0; k<good; k++) {
pgood++, pall++;
pall += err/2 / good;
ap += pgood / pall;
pall += err/2 / good;
}
if(!good) pall += err;
}
// if(lastbad > 30) print(hlog, " ** BAD");
tgood += pgood;
// print(hlog, " -> ", meanrank/(tgood+pgood), " (pgood ", pgood, ") (tgood ", tgood, ")");
// println(hlog);
if(pgood) maprank += ap / pgood;
if(pgood) maprank_opti += ap_opti / pgood;
tallydiredgesof(i, -1, mc);
add_to_tally(mc, -1, 0);
if(i < -10) {
println(hlog, meanrank, "/", tgood, " ", ap, "/", pgood, " ", ap_opti, "/", pgood);
}
pb++;
}
rtally[0]++;
print(hlog, "tallies for nothing =");
for(int j=0; j<MAXDIST; j++)
if(redgetally[j] || rtally[j])
print(hlog, " ", j, ":", int(redgetally[j]), "/", int(rtally[j]));
println(hlog);
int tot_n = 0;
for(int i=0; i<N; i++)
if(isize(directed_edges[i]))
tot_n++;
println(hlog, "meanrank = ", meanrank / tgood, " MAP = ", maprank / tot_n, " meanrank_opti = ", meanrank_opti / tgood, " MAP_opti = ", maprank_opti / tot_n);
}
}

View File

@@ -13,6 +13,7 @@
#include "tests.cpp"
#include "betweenness.cpp"
#include "groundtruth.cpp"
#include "dhrg-rank.cpp"
namespace dhrg {
@@ -146,6 +147,14 @@ int dhrgArgs() {
ts_vertices = next_timestamp;
}
else if(argis("-discrete-rank")) {
dhrg_ranks();
}
else if(argis("-penalty")) {
shift(); penalty = argf();
}
else return 1;
return 0;