static xbt_dict_t trace_list = NULL;
-// a unique RngStream structure for everyone
-// FIXME : has to be created by someone
-static RngStream common_rng_stream = NULL;
-
XBT_INLINE tmgr_history_t tmgr_history_new(void)
{
tmgr_history_t h;
probabilist_event_generator_t generator2)
{
tmgr_trace_t trace = NULL;
- unsigned int id_hash;
RngStream rng_stream = NULL;
- rng_stream = RngStream_CopyStream(common_rng_stream);
- id_hash = xbt_str_hash(id);
- RngStream_AdvanceState(rng_stream, 0, id_hash);
+ rng_stream = sg_platf_rng_stream_get(id);
trace = xbt_new0(s_tmgr_trace_t, 1);
trace->type = e_trace_probabilist;
trace->s_probabilist.next_event = 0;
if(generator2 == NULL) {
- trace->s_probabilist.event_generator[0] = generator1;
+ trace->s_probabilist.event_generator[1] = generator1;
} else {
trace->s_probabilist.event_generator[1] = generator2;
trace->s_probabilist.event_generator[1]->rng_stream = rng_stream;
return trace;
}
-probabilist_event_generator_t tmgr_event_generator_new_uniform(double alpha,
- double beta)
+probabilist_event_generator_t tmgr_event_generator_new_uniform(double min,
+ double max)
{
probabilist_event_generator_t event_generator = NULL;
event_generator = xbt_new0(s_probabilist_event_generator_t, 1);
event_generator->type = e_generator_uniform;
- event_generator->s_uniform_parameters.alpha = alpha;
- event_generator->s_uniform_parameters.beta = beta;
+ event_generator->s_uniform_parameters.min = min;
+ event_generator->s_uniform_parameters.max = max;
tmgr_event_generator_next_value(event_generator);
return event_generator;
}
-probabilist_event_generator_t tmgr_event_generator_new_exponential(double lambda)
+probabilist_event_generator_t tmgr_event_generator_new_exponential(double rate)
{
probabilist_event_generator_t event_generator = NULL;
event_generator = xbt_new0(s_probabilist_event_generator_t, 1);
event_generator->type = e_generator_exponential;
- event_generator->s_exponential_parameters.lambda = lambda;
+ event_generator->s_exponential_parameters.rate = rate;
return event_generator;
}
-probabilist_event_generator_t tmgr_event_generator_new_weibull(double lambda,
- double k)
+probabilist_event_generator_t tmgr_event_generator_new_weibull(double scale,
+ double shape)
{
probabilist_event_generator_t event_generator = NULL;
event_generator = xbt_new0(s_probabilist_event_generator_t, 1);
event_generator->type = e_generator_weibull;
- event_generator->s_weibull_parameters.lambda = lambda;
- event_generator->s_weibull_parameters.k = k;
+ event_generator->s_weibull_parameters.scale = scale;
+ event_generator->s_weibull_parameters.shape = shape;
tmgr_event_generator_next_value(event_generator);
switch(generator->type) {
case e_generator_uniform:
generator->next_value = (RngStream_RandU01(generator->rng_stream)
- * (generator->s_uniform_parameters.beta - generator->s_uniform_parameters.alpha))
- + generator->s_uniform_parameters.alpha;
+ * (generator->s_uniform_parameters.max - generator->s_uniform_parameters.min))
+ + generator->s_uniform_parameters.min;
break;
case e_generator_exponential:
generator->next_value = -log(RngStream_RandU01(generator->rng_stream))
- / generator->s_exponential_parameters.lambda;
+ / generator->s_exponential_parameters.rate;
break;
case e_generator_weibull:
- generator->next_value = - generator->s_weibull_parameters.lambda
+ generator->next_value = - generator->s_weibull_parameters.scale
* pow( log(RngStream_RandU01(generator->rng_stream)),
- 1.0 / generator->s_weibull_parameters.k );
+ 1.0 / generator->s_weibull_parameters.shape );
}
return generator->next_value;
tmgr_trace_event_t trace_event = NULL;
tmgr_event_t event = NULL;
tmgr_trace_t trace = NULL;
+ double event_delta;
if (event_date > date)
return NULL;
return NULL;
trace = trace_event->trace;
+ *model = trace_event->model;
switch(trace->type) {
case e_trace_list:
event = xbt_dynar_get_ptr(trace->s_list.event_list, trace_event->idx);
*value = event->value;
- *model = trace_event->model;
if (trace_event->idx < xbt_dynar_length(trace->s_list.event_list) - 1) {
xbt_heap_push(h->heap, trace_event, event_date + event->delta);
break;
case e_trace_probabilist:
- THROW_UNIMPLEMENTED;
+
+ //FIXME : Simplist and not tested
+ //Would only work for failure events for now
+ *value = (double) trace->s_probabilist.next_event;
+ if(trace->s_probabilist.next_event == 0) {
+ event_delta = tmgr_event_generator_next_value(trace->s_probabilist.event_generator[0]);
+ trace->s_probabilist.next_event = 0;
+ } else {
+ event_delta = tmgr_event_generator_next_value(trace->s_probabilist.event_generator[1]);
+ trace->s_probabilist.next_event = 1;
+ }
+ xbt_heap_push(h->heap, trace_event, event_date + event_delta);
+
break;
}