Exemple #1
0
/*
 * Perform final training and reset neural net.
 */
static void ai_game_over(game *g, int who)
{
	double result[2];

	/* Check for win */
	if (g->p[who].crystals)
	{
		/* Compute margin of victory */
		result[who] = .5 + g->p[who].crystals * 0.1;

		/* Check for instant win */
		if (g->p[who].instant_win) result[who] = 1.0;
	}
	else
	{
		/* Compute margin of defeat */
		result[who] = .5 - g->p[!who].crystals * 0.1;

		/* Check for instant loss */
		if (g->p[!who].instant_win) result[who] = 0.0;
	}

	/* Compute opponent's result */
	result[!who] = 1.0 - result[who];

	/* Perform final training */
	perform_training(g, who, result);

	/* Clear past input array */
	clear_store(&learner[who]);

	/* One more training iteration done */
	learner[who].num_training++;
}
/*! \brief places object in the store so the user can see them
 *
 *  \param [in] state
 *  \param [in] objects the list of objects to put in the store
 */
static void
assign_store (GschemFindTextState *state, GSList *objects)
{
  GSList *object_iter;

  g_return_if_fail (state != NULL);
  g_return_if_fail (state->store != NULL);

  clear_store (state);

  object_iter = objects;

  while (object_iter != NULL) {
    char *basename;
    OBJECT *object = (OBJECT*) object_iter->data;
    const char *str;
    GtkTreeIter tree_iter;

    object_iter = g_slist_next (object_iter);

    if (object == NULL) {
      g_warning ("NULL object encountered");
      continue;
    }

    if (object->page == NULL) {
      g_warning ("NULL page encountered");
      continue;
    }

    if (object->type != OBJ_TEXT) {
      g_warning ("expecting a text object");
      continue;
    }

    str = geda_text_object_get_string (object);

    if (str == NULL) {
      g_warning ("NULL string encountered");
      continue;
    }

    s_object_weak_ref (object, (NotifyFunc) object_weakref_cb, state);

    gtk_list_store_append (state->store, &tree_iter);

    basename = g_path_get_basename (s_page_get_filename (object->page));

    gtk_list_store_set (state->store,
                        &tree_iter,
                        COLUMN_FILENAME, basename,
                        COLUMN_STRING, str,
                        COLUMN_OBJECT, object,
                        -1);

    g_free (basename);
  }
}
Exemple #3
0
/*
 * Destroy a neural net.
 */
void free_net(net *learn)
{
	int i;

	/* Free simple arrays */
	free(learn->input_value);
	free(learn->prev_input);
	free(learn->hidden_sum);
	free(learn->hidden_result);
	free(learn->hidden_error);
	free(learn->net_result);
	free(learn->win_prob);

	/* Free rows of hidden weights */
	for (i = 0; i < learn->num_inputs + 1; i++)
	{
		/* Free weight row */
		free(learn->hidden_weight[i]);
		free(learn->hidden_delta[i]);
	}

	/* Free list of rows */
	free(learn->hidden_weight);
	free(learn->hidden_delta);

	/* Free rows of output weights */
	for (i = 0; i < learn->num_hidden + 1; i++)
	{
		/* Free weight row */
		free(learn->output_weight[i]);
		free(learn->output_delta[i]);
	}

	/* Free list of rows */
	free(learn->output_weight);
	free(learn->output_delta);

	/* Clear old past input sets */
	clear_store(learn);

	/* Free list of past inputs */
	free(learn->past_input);
	free(learn->past_input_player);

	/* Free input names */
	for (i = 0; i < learn->num_inputs; i++)
	{
		/* Free name if set */
		if (learn->input_name[i]) free(learn->input_name[i]);
	}

	/* Free array of input names */
	free(learn->input_name);
}
/*! \brief Dispose of the object
 */
static void
dispose (GObject *object)
{
  GschemFindTextState *state = GSCHEM_FIND_TEXT_STATE (object);

  if (state->store) {
    clear_store (state);
    g_object_unref (state->store);
    state->store = NULL;
  }

  /* lastly, chain up to the parent dispose */

  g_return_if_fail (gschem_find_text_state_parent_class != NULL);
  gschem_find_text_state_parent_class->dispose (object);
}