27 #define MU_EPSILON 0.0005
33 static const double mrates[
N_RATES] = { 0.0005, 0.001, 0.002, 0.003, 0.005,
34 0.01, 0.015, 0.02, 0.05, 0.1 };
43 sam_init(
double *mu,
const int N,
const int *type)
45 for (
int i = 0; i < N; ++i) {
55 printf(
"sam_init(): invalid sam function: %d\n", type[i]);
70 for (
int i = 0; i < N; ++i) {
87 printf(
"sam_adapt(): invalid sam function: %d\n", type[i]);
102 const cJSON *item = cJSON_GetObjectItem(json,
"mutation");
103 if (item != NULL && cJSON_IsArray(item)) {
104 if (cJSON_GetArraySize(item) != N) {
105 printf(
"Import error: mutation length mismatch\n");
108 for (
int i = 0; i < N; ++i) {
109 const cJSON *item_i = cJSON_GetArrayItem(item, i);
110 if (item_i->valuedouble < 0 || item_i->valuedouble > 1) {
111 printf(
"Import error: mutation value out of bounds\n");
114 mu[i] = item_i->valuedouble;
static const double mrates[(10)]
Values for rate selection adaptation.
void sam_json_import(double *mu, const int N, const cJSON *json)
Initialises a mutation vector from a cJSON object.
void sam_init(double *mu, const int N, const int *type)
Initialises self-adaptive mutation rates.
void sam_adapt(double *mu, const int N, const int *type)
Self-adapts mutation rates.
#define N_RATES
number of mutation rates for rate selection adaptation
#define MU_EPSILON
smallest mutation rate allowable
Self-adaptive mutation functions.
#define SAM_RATE_SELECT
Ten normally distributed rates.
#define SAM_LOG_NORMAL
Log normal self-adaptation.
#define SAM_UNIFORM
Uniformly random self-adaptation.
int rand_uniform_int(const int min, const int max)
Returns a uniform random integer [min,max] not inclusive of max.
double rand_normal(const double mu, const double sigma)
Returns a random Gaussian with specified mean and standard deviation.
double rand_uniform(const double min, const double max)
Returns a uniform random float [min,max].
Utility functions for random number handling, etc.
static double clamp(const double a, const double min, const double max)
Returns a float clamped within the specified range.