24 #include <yuni/yuni.h>
26 #include <antares/logs/logs.h>
27 #include <antares/study/study.h>
28 #include "antares/solver/ts-generator/xcast/xcast.h"
30 #include "constants.h"
34 namespace Antares::TSGenerator::XCast
53 static float maximum(
float a,
float b,
float g,
float d,
int l)
57 case Data::XCast::dtBeta:
58 case Data::XCast::dtUniform:
59 case Data::XCast::dtNormal:
63 case Data::XCast::dtWeibullShapeA:
67 return (b * (
float(pow(log(1. / NEGLI_WEIB),
double(1. / a))))) - g;
69 case Data::XCast::dtGammaShapeA:
77 return ((
float)(log(1. / NEGLI_GAMM) * a * b)) - g;
80 case Data::XCast::dtMax:
81 case Data::XCast::dtNone:
92 static float esperance(
float a,
float b,
float g,
float d,
int l)
97 case Data::XCast::dtBeta:
98 return (a * (d - g)) / (a + b);
100 case Data::XCast::dtUniform:
101 return (d - g) / 2.f;
103 case Data::XCast::dtNormal:
106 case Data::XCast::dtWeibullShapeA:
107 return b * (float)XCast::GammaEuler(1. + 1. /
double(a));
109 case Data::XCast::dtGammaShapeA:
112 case Data::XCast::dtMax:
113 case Data::XCast::dtNone:
120 static float standard(
float a,
float b,
float g,
float d,
int l)
124 case Data::XCast::dtBeta:
127 s = s * s * (s + 1.f);
133 case Data::XCast::dtUniform:
135 return (d - g) / (3.464101615f );
137 case Data::XCast::dtNormal:
141 case Data::XCast::dtWeibullShapeA:
143 const float x = (float)(XCast::GammaEuler(1. + 2. /
double(a))
144 - pow(XCast::GammaEuler(1. + 1. /
double(a)), 2.));
148 <<
"TS Generator: error when computing the standard deviation (Weibul Shape A)";
153 case Data::XCast::dtGammaShapeA:
155 return (
float)(sqrt(a) * b);
158 case Data::XCast::dtMax:
159 case Data::XCast::dtNone:
166 static float diffusion(
float a,
float b,
float g,
float d,
int l,
float t,
float x)
170 case Data::XCast::dtBeta:
172 return (
float)sqrt(2. * t * x * ((d - g) - x) / (a + b));
174 case Data::XCast::dtUniform:
176 return (
float)sqrt(t * x * ((d - g) - x));
178 case Data::XCast::dtNormal:
180 return b * (float)sqrt(2. * t);
182 case Data::XCast::dtWeibullShapeA:
187 assert(b != 0 &&
"division by zero");
188 const double v = pow(x / b, a);
189 const double w = exp(v);
191 double y = (w - 1.) *
double(d);
192 y -= w * XCast::GammaInc(
double(1. + 1. / a), v);
194 y *= x * b * 2. * t / a;
197 logs.info() <<
" square diff: " << y <<
" (Weibul Shape A)";
200 return (
float)sqrt(y);
202 case Data::XCast::dtGammaShapeA:
204 return (
float)sqrt(2. * t * x * b);
207 case Data::XCast::dtMax:
208 case Data::XCast::dtNone:
247 static bool verification(
float a,
float b,
float g,
float d,
int l,
float t)
251 case Data::XCast::dtBeta:
253 return !(d < g || g < INFININ / 2.f || d > INFINIP / 2.f || t < 0.f || a < 0.f || b < 0.f);
255 case Data::XCast::dtUniform:
257 return !(d < g || g < INFININ / 2.f || d > INFINIP / 2.f || t < 0.f);
259 case Data::XCast::dtNormal:
261 return !(d < g || g < INFININ / 2.f || d > INFINIP / 2.f || a < INFININ / 2.f
262 || a > INFINIP / 2.f || t < 0.f || b < 0.f);
264 case Data::XCast::dtWeibullShapeA:
266 return !(g < INFININ / 2.f || a < 1.f || a > 50.f || t < 0.f || b <= 0.f);
268 case Data::XCast::dtGammaShapeA:
270 return !(g < INFININ / 2.f || a < 1.f || a > 50.f || t < 0.f || b <= 0.f);
273 case Data::XCast::dtMax:
274 case Data::XCast::dtNone:
281 static float maxiDiffusion(
float a,
float b,
float g,
float d,
int l,
float t)
285 case Data::XCast::dtBeta:
287 return (
float)((d - g) * sqrt(t / (2. * (a + b))));
289 case Data::XCast::dtUniform:
291 return (
float)((d - g) * sqrt(t) / 2.);
293 case Data::XCast::dtNormal:
295 return (
float)(b * sqrt(2. * t));
297 case Data::XCast::dtWeibullShapeA:
306 d = float(XCast::GammaEuler(1. + 1. /
double(a)));
309 float m = diffusion(a, b, g, d, l, t, x);
310 float y = diffusion(a, b, g, d, l, t, maximum(a, b, g, d, l));
318 x = (float)pow((
double)x, (double)(1. / a));
320 y = diffusion(a, b, g, d, l, t, x);
328 case Data::XCast::dtGammaShapeA:
330 return diffusion(a, b, g, d, l, t, maximum(a, b, g, d, l));
333 case Data::XCast::dtMax:
334 case Data::XCast::dtNone:
Distribution
All available probability distribution.
Definition: xcast.h:61