mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2026-01-31 06:50:16 +00:00
rogueviz::embeddings:: loglik computation can now take the missing edge fraction into account
This commit is contained in:
@@ -104,10 +104,19 @@ string embedding::get_space() {
|
||||
return ss.s;
|
||||
}
|
||||
|
||||
void set_missing_edges(ld x) {
|
||||
missing_edges = x;
|
||||
log_missing_edges = log(x);
|
||||
remaining_edges = 1 - x;
|
||||
log_remaining_edges = log(1 - x);
|
||||
}
|
||||
|
||||
int a = arg::add3("-edgelist", [] { arg::shift(); read_edgelist(arg::args()); })
|
||||
+ addHook(hooks_gamedata, 230, store_gamedata)
|
||||
+ arg::add3("-write-edges", [] { arg::shift(); write_edgelist(arg::args()); })
|
||||
+ arg::add3("-esaveas", [] { arg::shift(); esave(arg::args()); })
|
||||
+ arg::add3("-missing-edges", [] { arg::shift(); set_missing_edges(arg::argf()); })
|
||||
+ arg::add3("-missing-edges-env", [] { auto env = std::getenv("MISSING_EDGES"); if(env) set_missing_edges(atof(env)); })
|
||||
+ arg::add3("-el-rv", [] { if(rogueviz::rv_quality == 0) force_rvgraph(); current = std::make_shared<rv_embedding> (); });
|
||||
|
||||
}
|
||||
|
||||
@@ -34,16 +34,22 @@ struct untiled_embedding : embedding {
|
||||
|
||||
extern shared_ptr<embedding> current;
|
||||
|
||||
inline ld missing_edges = 0, remaining_edges = 1, log_missing_edges = log(0), log_remaining_edges = 0;
|
||||
|
||||
/* for logistic regression */
|
||||
struct logistic {
|
||||
ld R, T;
|
||||
ld yes1(ld d) { return 1/(1 + exp(d)); }
|
||||
ld no1(ld d) { return 1/(1 + exp(-d)); }
|
||||
|
||||
ld nor(ld d) { return (d-R) / 2 / T; }
|
||||
|
||||
ld yes1(ld d) { return remaining_edges /(1 + exp(d)); }
|
||||
ld no1(ld d) { return missing_edges + remaining_edges /(1 + exp(-d)); }
|
||||
ld lyes(ld d) { d = nor(d); return d > 200 ? -d + log_remaining_edges : log(yes1(d)); }
|
||||
ld lno(ld d) { d = nor(d); return d < -200 ? max(d, log_missing_edges) : log(no1(d)); }
|
||||
|
||||
ld yes(ld d) { return yes1(nor(d)); }
|
||||
ld no(ld d) { return no1(nor(d)); }
|
||||
ld lyes(ld d) { d = nor(d); return d > 200 ? -d : log(yes1(d)); }
|
||||
ld lno(ld d) { d = nor(d); return d < -200 ? d : log(no1(d)); }
|
||||
|
||||
logistic() {}
|
||||
logistic(ld _R, ld _T) : R(_R), T(_T) {}
|
||||
void setRT(ld _R, ld _T) { R = _R; T = _T; }
|
||||
|
||||
Reference in New Issue
Block a user