// RogueViz -- SAG embedder: some experiments // Copyright (C) 2011-24 Zeno Rogue, see 'hyper.cpp' for details #include "../rogueviz.h" namespace rogueviz { namespace sag { int recover_from; vector> results; ld bestcost; int logid; int lastmethod = 0; int mul_used; bool optimized_embedding(int mul, ld bonus = 0) { if(logid < recover_from) { println(hlog, "skipped ", logid++, " due to recover"); return false; } println(hlog, "starting, logid = ", logid, " recover_from = ", recover_from, " R = ", best.R+bonus, " T = ", best.T); int DN = isize(sagid); mul_used = mul; lgsag_pre = best; lgsag_pre.R += bonus; lgsag = lgsag_pre; compute_loglik_tab(); compute_cost(); dofullsa_iterations(mul * DN); optimize_sag_loglik_logistic(); hlog.flush(); while(true) { int ch = hillclimb(); println(hlog, "changes = ", ch, " cost = ", cost, " R=", lgsag.R, " T=", lgsag.T); if(!ch) break; optimize_sag_loglik_logistic(); hlog.flush(); } bool new_best = cost < bestcost; if(new_best) best = lgsag, bestcost = cost; sag::output_stats(); results.emplace_back(lgsag, cost); return new_best; } void sag_new_experiment() { view_each = 999999; println(hlog, "SAG new experiment started"); int DN = isize(sagid); println(hlog, "N = ", DN); hlog.flush(); twoway = true; allow_doubles = true; method = smLogistic; if(recover_from) lgsag = best; if(!recover_from) lgsag.R = max_sag_dist; if(!recover_from) lgsag.T = 1; compute_loglik_tab(); compute_cost(); best = lgsag; bestcost = HUGE_VAL; for(int i=10; i<=1; i--) optimized_embedding(15000, i); for(int i=1; i<=10; i++) optimized_embedding(15000); for(int i=1; i<=10; i++) optimized_embedding(15000, -i); optimized_embedding(24000); optimized_embedding(32000); optimized_embedding(40000); optimized_embedding(48000); optimized_embedding(60000); optimized_embedding(80000); optimized_embedding(100000); optimized_embedding(120000); optimized_embedding(120000); optimized_embedding(120000); } void sag_v5() { println(hlog, "SAG v5 started"); int DN = isize(sagid); println(hlog, "N = ", DN); recost_each = DN; autofix_rt = 2; hlog.flush(); twoway = true; allow_doubles = true; method = smLogistic; lgsag.R = max_sag_dist; lgsag.T = 1; compute_loglik_tab(); compute_cost(); best = lgsag; bestcost = HUGE_VAL; for(int i=0; i<30; i++) optimized_embedding(10000); } void sag_v6() { println(hlog, "SAG v6 started"); int DN = isize(sagid); println(hlog, "N = ", DN); recost_each = DN; autofix_rt = 2; hlog.flush(); twoway = true; allow_doubles = true; method = smLogistic; lgsag.R = max_sag_dist; lgsag.T = 1; compute_loglik_tab(); compute_cost(); best = lgsag; bestcost = HUGE_VAL; for(int i=0; i<30; i++) optimized_embedding(100000); autofix_rt = 1; for(int i=0; i<30; i++) optimized_embedding(100000); autofix_rt = 0; for(int i=0; i<30; i++) optimized_embedding(100000); } void sag_test_mul() { allow_doubles = true; twoway = true; int DN = isize(sagid); // lgsag.R=9.19925; lgsag.T=0.587723; method = smLogistic; lgsag.R = max_sag_dist; lgsag.T = 1; compute_loglik_tab(); compute_cost(); best = lgsag; bestcost = 999999; recost_each = DN; autofix_rt = 2; output_fullsa = false; println(hlog, "sag_test_mul started"); if(1) for(int mul=25;; mul *= 2) for(int af: {3, 2, 1, 0}) { autofix_rt = af; ld tcost = 0; ld tcost2 = 0; int qty = 100; vector costs; // println(hlog, "R=", best.R, " T=", best.T); for(int i=0; i