mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2024-11-24 05:17:17 +00:00
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
|