static bool _do_prediction(Context *ctx) { char *result = ""; float prediction; sml_variable_set_value(ctx->sml, ctx->offense1, ctx->val_offense1); sml_variable_set_value(ctx->sml, ctx->defense1, ctx->val_defense1); sml_variable_set_value(ctx->sml, ctx->offense2, ctx->val_offense2); sml_variable_set_value(ctx->sml, ctx->defense2, ctx->val_defense2); sml_variable_set_value(ctx->sml, ctx->winner, NAN); sml_predict(ctx->sml); ctx->reads++; prediction = roundf(sml_variable_get_value(ctx->sml, ctx->winner)); if (!isnan(prediction)) { ctx->predictions++; if (ctx->val_winner == ((int)prediction)) { ctx->rights++; result = "right"; } else result = "wrong"; } printf("Game %d team 1 (%d, %d) x team2 (%d, %d): predicted winner: %.0f " "real winner: %d %s\n", ctx->reads, ctx->val_offense1, ctx->val_defense1, ctx->val_offense2, ctx->val_defense2, prediction, ctx->val_winner, result); return true; }
static void _output_state_changed_cb(struct sml_object *sml, struct sml_variables_list *changed, void *data) { uint16_t i, j, len, changed_len, found = 0; struct sml_variable *var, *changed_var; struct sml_variables_list *list; Context *ctx = data; char var_name[SML_VARIABLE_NAME_MAX_LEN + 1]; printf("SML Change State {"); list = sml_get_output_list(sml); changed_len = sml_variables_list_get_length(sml, changed); len = sml_variables_list_get_length(sml, list); for (i = 0; i < len; i++) { var = sml_variables_list_index(sml, list, i); for (j = 0; j < changed_len; j++) { changed_var = sml_variables_list_index(sml, list, j); if (var == changed_var) { ctx->output_state_changed_outputs[i] = sml_variable_get_value( sml, var); if (found++ > 0) printf(", "); if (!sml_variable_get_name(sml, var, var_name, sizeof(var_name))) printf("%s: %f", var_name, ctx->output_state_changed_outputs[i]); } } } printf("}\n"); }
static void _output_state_changed_cb(struct sml_object *sml, struct sml_variables_list *changed, void *data) { struct sml_variable *sml_var = sml_variables_list_index(sml, changed, 0); float new_value = sml_variable_get_value(sml, sml_var); _update_air_conditioner_power(data, new_value); }
static void output_state_changed_cb(struct sml_object *sml, struct sml_variables_list *changed, void *data) { GList *itr; Context *ctx = data; float val; if (ctx->debug) printf("%i::output_state_changed_cb called.\n", ctx->read_counter - 1); for (itr = ctx->outputs; itr; itr = itr->next) { Variable *var = itr->data; val = sml_variable_get_value(sml, var->sml_var); if (!isnan(val)) var->guess_value = val; } }