root/vtcross/trunk/src/utility.c @ 15

Revision 15, 1.7 KB (checked in by jgaeddert, 16 years ago)

reformatting goals, etc.; still needs work

Line 
1//
2// Utility
3//
4
5#include <math.h>
6#include <stdlib.h>
7#include <stdbool.h>
8
9#include "utility.h"
10
11typedef float(*utility_function_prototype)(float _x, float _eta, float _sig);
12float util_func_tanh(float _x, float _eta, float _sig);
13float util_func_gauss(float _x, float _eta, float _sig);
14
15struct utility_s {
16    float target;
17    int goal;
18    int scale;
19    bool flip;
20    utility_function_prototype f;
21    float eta;
22    float sig;
23};
24
25utility utility_create(float _target, int _goal, int _scale)
26{
27    utility u = (utility) malloc(sizeof(struct utility_s));
28    u->target = _target;
29    u->goal = _goal;
30    u->scale = _scale;
31
32    switch (u->goal) {
33    case UTIL_GOAL_MIN:
34        u->f = &util_func_tanh;
35        u->eta = u->target;
36        u->sig = 1.0f;
37        u->flip = true;
38        break;
39    case UTIL_GOAL_MAX:
40        u->f = &util_func_tanh;
41        u->eta = u->target;
42        u->sig = 1.0f;
43        u->flip = false;
44        break;
45    case UTIL_GOAL_MEET:
46        u->f = &util_func_gauss;
47        u->eta = u->target;
48        u->sig = 1.0f;
49        u->flip = false;
50        break;
51    case UTIL_GOAL_AVOID:
52        u->f = &util_func_gauss;
53        u->eta = u->target;
54        u->sig = 1.0f;
55        u->flip = true;
56        break;
57    default:;
58    }
59
60    return u;
61}
62
63void utility_free(utility _u)
64{
65    free(_u);
66}
67
68float utility_evaluate(utility _u, float _x)
69{
70    float y = _x;
71    if (_u->scale==UTIL_SCALE_LOG)
72        y = logf(y);
73    float v = _u->f( y, _u->eta, _u->sig);
74    return (_u->flip) ? 1-v : v;
75
76}
77
78float util_func_tanh(float _x, float _eta, float _sig) {
79    return tanhf((_x-_eta)/_sig);
80}
81
82float util_func_gauss(float _x, float _eta, float _sig) {
83    return expf( -powf((_x-_eta),2)/(2*_sig*_sig) );
84}
85
Note: See TracBrowser for help on using the browser.