mirror of
				https://github.com/zenorogue/hyperrogue.git
				synced 2025-10-31 22:12:59 +00:00 
			
		
		
		
	 62629f3e70
			
		
	
	62629f3e70
	
	
	
		
			
			Since we require C++11, most of these consts can be constexpr. Two `static const ld` remain non-compile-time-evaluable because they depend on the runtime `log` function. One `static const cld` remains non-compile-time because `std::complex<T>` doesn't become constexpr until C++14.
		
			
				
	
	
		
			81 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #ifndef _DHRG_H_
 | |
| #define _DHRG_H_
 | |
| #define DHRGVER "7.1"
 | |
| #include "../rogueviz.h"
 | |
| 
 | |
| #define LONG_BRACKETS
 | |
| 
 | |
| namespace dhrg {
 | |
| 
 | |
| using namespace hr;
 | |
| 
 | |
| typedef long long ll;
 | |
| 
 | |
| #ifndef BOXSIZE
 | |
| static constexpr int BOXSIZE = 32;
 | |
| #endif
 | |
| static constexpr int MAXDIST = (2*BOXSIZE);
 | |
| static constexpr int SETS = 4;
 | |
| 
 | |
| struct segment;
 | |
| 
 | |
| inline cell *croot() { return currentmap->gamestart(); }
 | |
| 
 | |
| extern int M;
 | |
| extern vector<struct mycell*> vertices;
 | |
| 
 | |
| extern vector<ld> disttable0, disttable1;
 | |
| 
 | |
| void memoryInfo();
 | |
| 
 | |
| void cellcoords();
 | |
| void origcoords();
 | |
| void build_disttable();
 | |
| 
 | |
| void dhrg_init();
 | |
| bool dhrg_animate(int sym, int uni);
 | |
| 
 | |
| /* implemented in loglik.cpp: */
 | |
| 
 | |
| /* 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 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; }
 | |
|   };
 | |
| 
 | |
| extern ld llcont_approx_prec;
 | |
| extern vector<array<ll, 2>> disttable_approx;
 | |
| 
 | |
| using logisticfun = std::function<ld(logistic&)>;
 | |
| 
 | |
| extern logistic current_logistic;
 | |
| 
 | |
| ld loglik_cont_approx(logistic& l = current_logistic);
 | |
| 
 | |
| void fast_loglik_cont(logistic& l, const logisticfun& f, const char *name, ld start, ld eps);
 | |
| 
 | |
| /* greedy routing */
 | |
| 
 | |
| struct iddata {
 | |
|   ld tot, suc, routedist, bestdist;
 | |
|   iddata() { tot = suc = routedist = bestdist = 0; }
 | |
|   };
 | |
| 
 | |
| using neighborhoodfun = std::function<vector<int> (int)>;
 | |
| using distfun = std::function<ld(int a, int b)>;
 | |
| 
 | |
| void prepare_pairs(int N, const neighborhoodfun& nei);
 | |
| void greedy_routing(iddata& d, const distfun& distance_function);
 | |
| 
 | |
| }
 | |
| #endif
 |