TORCS  1.3.9
The Open Racing Car Simulator
MathFunctions.cpp
Go to the documentation of this file.
1 // -*- Mode: c++ -*-
2 /* VER: $Id$ */
3 // copyright (c) 2004 by Christos Dimitrakakis <dimitrak@idiap.ch>
4 /***************************************************************************
5  * *
6  * This program is free software; you can redistribute it and/or modify *
7  * it under the terms of the GNU General Public License as published by *
8  * the Free Software Foundation; either version 2 of the License, or *
9  * (at your option) any later version. *
10  * *
11  ***************************************************************************/
12 #include <learning/MathFunctions.h>
13 #include <cmath>
14 #include <cassert>
15 
24 int ArgMin (int n, real* x)
25 {
26  real min = x[0];
27  int arg_min = 0;
28  for (int i=1; i<n; i++) {
29  if (min>x[i]) {
30  min = x[i];
31  arg_min = i;
32  }
33  }
34  return arg_min;
35 }
36 int ArgMax (int n, real* x)
37 {
38  real max = x[0];
39  int arg_max = 0;
40  for (int i=1; i<n; i++) {
41  if (max<x[i]) {
42  max = x[i];
43  arg_max = i;
44  }
45  }
46  return arg_max;
47 }
48 
49 void SoftMax (int n, real* Q, real* p, real beta)
50 {
51  real sum = 0.0;
52  int i;
53  for (i=0; i<n; i++) {
54  p[i] = (real) exp (beta * Q[i]);
55  sum += p[i];
56  }
57  sum = 1.0f/sum;
58  for (i=0; i<n; i++) {
59  p[i] *= sum;
60  }
61 }
62 
63 void SoftMin (int n, real* Q, real* p, real beta)
64 {
65  real sum = 0.0f;
66  int i;
67  for (i=0; i<n; i++) {
68  p[i] = (real) exp (-beta * Q[i]);
69  sum += p[i];
70  }
71  sum = 1.0f/sum;
72  for (i=0; i<n; i++) {
73  p[i] *= sum;
74  }
75 }
76 
77 
117 real SmoothMaxGamma (real f1, real f2, real lambda, real c)
118 {
119  real t = f2-f1;
120  real gamma;
121 
122  assert(c>0);
123  assert(lambda>=0 && lambda<=1);
124 
125  if (1-lambda/c <= t) {
126  gamma = t - (1-lambda)*(1-lambda) / (2*c);
127  } else if (t>=-lambda/c) {
128  gamma = lambda * t + t*t*c/2;
129  } else {
130  gamma = - lambda * lambda / (2*c);
131  }
132  return f1 + gamma;
133 }
134 
135 
148 {
149  assert(p>0);
150  return (real) pow(pow(f1,p)+pow(f2,p),1/p);
151 }
152 
160 void Normalise (real* src, real* dst, int n_elements)
161 {
162  real sum = 0.0f;
163  int i;
164  for (i=0; i<n_elements; i++) {
165  sum += src[i];
166  }
167  if (sum==0) {
168  for (i=0; i<n_elements; i++) {
169  dst[i] = src[i];
170  }
171  return;
172  }
173  assert(sum>0);
174  for (i=0; i<n_elements; i++) {
175  dst[i] = src[i]/sum;
176  }
177 }
178 
179 real SquareNorm (real* a, real* b, int n)
180 {
181  real sum = 0;
182  for (int i=0; i<n; i++) {
183  register real d = (*a++) - (*b++);
184  sum += d*d;
185  }
186  return sum;
187 }
188 
189 real EuclideanNorm (real* a, real* b, int n)
190 {
191  real sum = 0;
192  for (int i=0; i<n; i++) {
193  register real d = (*a++) - (*b++);
194  sum += d*d;
195  }
196  return (real) sqrt(sum);
197 }
198 
199 real LNorm (real* a, real* b, int n, real p)
200 {
201  real sum = 0;
202  for (int i=0; i<n; i++) {
203  register real d = (*a++) - (*b++);
204  sum += (real) pow(d,p);
205  }
206  return (real) pow((double)sum,1.0/p);
207 }
208 
209 real Sum (real* a, int n)
210 {
211  real sum = 0;
212  for (register int i=0; i<n; i++) {
213  sum += *a++;
214  }
215  return sum;
216 }
int ArgMin(int n, real *x)
int ArgMax(int n, real *x)
Scalar max(Scalar x, Scalar y)
Definition: Basic.h:50
int n
number of items
Definition: List.h:41
real SmoothMaxGamma(real f1, real f2, real lambda, real c)
Approximate max (f1,f2) via a gamma function.
real LNorm(real *a, real *b, int n, real p)
real SquareNorm(real *a, real *b, int n)
static Point p[4]
Definition: Convex.cpp:54
void SoftMin(int n, real *Q, real *p, real beta)
real EuclideanNorm(real *a, real *b, int n)
Scalar min(Scalar x, Scalar y)
Definition: Basic.h:49
real Sum(real *a, int n)
void Normalise(real *src, real *dst, int n_elements)
Normalise a vector to a destination vector (low level)
void SoftMax(int n, real *Q, real *p, real beta)
real SmoothMaxPNorm(real f1, real f2, real p)
Approximate max (f1,f2) via a power function.
float real
Definition: real.h:13