Changeset 15 for vtcross/trunk
- Timestamp:
- 10/08/08 11:06:37 (16 years ago)
- Location:
- vtcross/trunk/src
- Files:
-
- 3 modified
Legend:
- Unmodified
- Added
- Removed
-
vtcross/trunk/src/main_utility.c
r14 r15 7 7 8 8 int main() { 9 utility u = utility_create(2.0f, UTIL_SHAPE_BELL, UTIL_REL_LIN, UTIL_MAX); 9 float target=2.0f; 10 int goal = UTIL_GOAL_MAX; 11 int scale = UTIL_SCALE_LIN; 12 utility u = utility_create(target, goal, scale); 10 13 14 printf("target : %f\n", target); 11 15 unsigned int i; 12 16 for (i=0; i<5; i++) -
vtcross/trunk/src/utility.c
r14 r15 5 5 #include <math.h> 6 6 #include <stdlib.h> 7 #include <stdbool.h> 8 7 9 #include "utility.h" 8 10 9 11 typedef float(*utility_function_prototype)(float _x, float _eta, float _sig); 10 float util_func_ atan(float _x, float _eta, float _sig);12 float util_func_tanh(float _x, float _eta, float _sig); 11 13 float util_func_gauss(float _x, float _eta, float _sig); 12 14 13 15 struct utility_s { 14 16 float target; 15 int shape;17 int goal; 16 18 int scale; 17 int minmax;19 bool flip; 18 20 utility_function_prototype f; 19 21 float eta; … … 21 23 }; 22 24 23 utility utility_create(float _target, int _ shape, int _scale, int _minmax)25 utility utility_create(float _target, int _goal, int _scale) 24 26 { 25 27 utility u = (utility) malloc(sizeof(struct utility_s)); 26 28 u->target = _target; 27 u-> shape = _shape;29 u->goal = _goal; 28 30 u->scale = _scale; 29 u->minmax = _minmax;30 31 31 switch (u->shape) { 32 case UTIL_SHAPE_BELL: 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: 33 46 u->f = &util_func_gauss; 34 47 u->eta = u->target; 35 48 u->sig = 1.0f; 49 u->flip = false; 36 50 break; 37 case UTIL_ SHAPE_RAMP:38 u->f = &util_func_ atan;39 u->eta = 0.0f;51 case UTIL_GOAL_AVOID: 52 u->f = &util_func_gauss; 53 u->eta = u->target; 40 54 u->sig = 1.0f; 55 u->flip = true; 41 56 break; 42 57 default:; … … 53 68 float utility_evaluate(utility _u, float _x) 54 69 { 55 float y = _x / _u->target;56 if (_u->scale==UTIL_ REL_LOG)70 float y = _x; 71 if (_u->scale==UTIL_SCALE_LOG) 57 72 y = logf(y); 58 return _u->f( y, _u->eta, _u->sig); 73 float v = _u->f( y, _u->eta, _u->sig); 74 return (_u->flip) ? 1-v : v; 59 75 60 76 } 61 77 62 float util_func_ atan(float _x, float _eta, float _sig) {78 float util_func_tanh(float _x, float _eta, float _sig) { 63 79 return tanhf((_x-_eta)/_sig); 64 80 } -
vtcross/trunk/src/utility.h
r14 r15 3 3 // 4 4 5 #define UTIL_SHAPE_BELL 0 6 #define UTIL_SHAPE_RAMP 1 5 #define UTIL_GOAL_MIN 0 6 #define UTIL_GOAL_MAX 1 7 #define UTIL_GOAL_MEET 2 8 #define UTIL_GOAL_AVOID 3 7 9 8 #define UTIL_REL_LIN 0 9 #define UTIL_REL_LOG 1 10 11 #define UTIL_MAX 0 12 #define UTIL_MIN 1 10 #define UTIL_SCALE_LIN 0 11 #define UTIL_SCALE_LOG 1 13 12 14 13 typedef struct utility_s * utility; 15 14 16 utility utility_create(float _target, int _ shape, int _scale, int _minmax);15 utility utility_create(float _target, int _goal, int _scale); 17 16 void utility_free(utility _u); 18 17