Selection mechanisms

The selection mechanism identifies the information pieces which the users will propagate each iteration. RELISON provides the following mechanisms:

Count

This mechanism selects, at a given time, a fixed number of pieces created by the user, a fixed number of the received pieces and a fixed number of the already propagated pieces to send to other users. Pieces are randomly selected.

Parameters

  • numOwn: the number of user-created information pieces to propagate.

  • numRec: the number of received pieces to propagate.

  • numRepr: (OPTIONAL) the number of already propagated pieces to repropagate again. By default: 0.

Configuration file

selection:
  name: Count
  params:
    numOwn:
      type: int
      value: number_of_own_pieces
    numRec:
      type: int
      value: number_of_received_pieces
    (numRepr:
      type: int
      value: number_of_pieces_to_repropagate_again)

Independent cascade model

This mechanism selects, at a given time, for each user, a fixed number of pieces created by the user and a fixed number of the already propagated pieces to send to other users. Then, propagates received pieces with a probability that depends only on the user who sent him the conent.

Parameters

  • numOwn: the number of user-created information pieces to propagate.

  • prob: the probability of propagating an information piece.

  • numRepr: (OPTIONAL) the number of already propagated pieces to repropagate again. By default: 0.

Note: when used in code, there is another option, which takes as input a graph containing the probabilities. However, this option is not (at the moment) available from a configuration file.

Configuration file

selection:
  name: Independent cascade model
  params:
    numOwn:
      type: int
      value: number_of_own_pieces
    prob:
      type: double
      value: probability
    (numRepr:
      type: int
      value: number_of_pieces_to_repropagate_again)

Only own

This mechanism only propagates information pieces created by the user. It selects a fixed number of them (chosen randomly).

Parameters

  • numOwn: the number of user-created information pieces to propagate.

  • numRepr: (OPTIONAL) the number of already propagated pieces to repropagate again. By default: 0.

Configuration file

selection:
  name: Only own
  params:
    numOwn:
      type: int
      value: number_of_own_pieces
    (numRepr:
      type: int
      value: number_of_pieces_to_repropagate_again)

Pull-push

This mechanism makes a user share all the information he knows (i.e. all the received information and all the information he has propagated in the past). Along with this, it selects a fixed number of their own (not already propagated) contents.

Parameters

  • numOwn: the number of user-created information pieces to propagate.

Configuration file

selection:
  name: Push-pull
  params:
    numOwn:
      type: int
      value: number_of_own_pieces

Real propagated

This mechanism selects, at a given time, a fixed number of the pieces created by the user, a fixed number of already propagated pieces, and the user repropagates a selection of the received information pieces that he/she forwarded in a previous diffusion process (for example, real retweets extracted from Twitter).

Depending on how many of the received information pieces that the user propagates, we differentiate two variants: * all: each time the user receives a piece he / she forwarded in a previous diffusion process, he / she propagates it. * count: it just selects up to a maximum number of those pieces.

Parameters

Both variants share the following parameters * numOwn: the number of user-created information pieces to propagate. * numRepr: (OPTIONAL) the number of already propagated pieces to repropagate again. By default: 0.

The count version has an additional parameter: * numRec: the number of received pieces to propagate.

Configuration file

The version that propagates all the received pieces passing the filter has the following configuration file: .. code:: yaml

selection:
  name: All real propagated
  params:
    numOwn:
      type: int
      value: number_of_own_pieces
    (numRepr:
      type: int
      value: number_of_pieces_to_repropagate_again)

while the version that propagates only some of them:

selection:
  name: Count real propagated
  params:
    numOwn:
      type: int
      value: number_of_own_pieces
    (numRepr:
      type: int
      value: number_of_pieces_to_repropagate_again)

Recommender

This mechanism selects, at a given time, a fixed number of the pieces created by the user. At the moment of selecting which pieces to propagate from the received ones, it also selects (at most) a fixed number, but considers the origin of those pieces. With a given probability \(p\), it chooses a piece received from a link created via a recommendation. With \(1-p\), it selects a piece from one of the original links.

Depending on how the selection is done, we differentiate three variants:

  • basic: before choosing an information piece, a coin is tossed to determine from which list the information piece to propagate will be selected.

  • batch: each iteration, for each user, it is selected whether all the pieces are selected from the set of recommended links or from the set of original links.

  • pure: here, we take \(p = \), i.e. pieces always come from the recommended links.

Parameters

All variants share the following parameters: * numOwn: the number of user-created information pieces to propagate. * orientation: the neighborhood to consider.

  • IN: it considers the incoming neighborhood of the target user.

  • OUT: it considers the outgoing neighborhood of the target user.

  • UND: it considers the all the possible neighbors of the target users (\(\Gamma_{out}(u) \cup \Gamma_{in}(u)\))

  • MUTUAL: it considers as neighbors those who share a reciprocal link with the target user (\(\Gamma_{out}(u) \cap \Gamma_{in}(u)\))

And the basic and batch variants also have the following one: * prob: probability of choosing pieces which have been sent through recommended links.

Configuration file

The basic version has the following configuration file:

selection:
  name: Recommender
  params:
    numOwn:
      type: int
      value: number_of_own_pieces
    numRec:
      type: int
      value: number_of_received_pieces
    prob:
      type: double
      value: probability
    orientation:
      type: orientation
      value: IN/OUT/UND/MUTUAL
    (numRepr:
      type: int
      value: number_of_pieces_to_repropagate_again)

while the batch version has:

selection:
  name: Batch recommender
  params:
    numOwn:
      type: int
      value: number_of_own_pieces
    numRec:
      type: int
      value: number_of_received_pieces
    prob:
      type: double
      value: probability
    orientation:
      type: orientation
      value: IN/OUT/UND/MUTUAL
    (numRepr:
      type: int
      value: number_of_pieces_to_repropagate_again)

and the pure one:

selection:
  name: Pure recommender
  params:
    numOwn:
      type: int
      value: number_of_own_pieces
    numRec:
      type: int
      value: number_of_received_pieces
    orientation:
      type: orientation
      value: IN/OUT/UND/MUTUAL
    (numRepr:
      type: int
      value: number_of_pieces_to_repropagate_again)

Threshold

In the threshold selection mechanism, the users decide to propagate a received piece of content only if a certain threshold of users has sent it to them. We differentiate two variants:

  • Probability threshold: the user decides to propagate a piece after more than a given proportion of the users have sent him the content.

  • Count threshold: the user decides to propagate a piece after more than a given number of the users have sent him the content.

Then, for each of them, we consider two possibilities, depending on how many pieces that overcome the threshold are shared: * all: we propagate all the received pieces that pass the filter. * limited: we propagate (at most) a fixed number of them.

Reference: D. Kempe, J. Kleinberg, and E. Tardos. Maximizing the spread of influence through a social network, KDD 2003, pp. 137–146 (2003).

Parameters

All versions receive the following parameters: * numOwn: the number of contents created by the user to propagate each iteration. * numRepr: (OPTIONAL) the number of already propagated pieces to repropagate again. By default: 0.

In the probability thresold version, we have this additional parameters * threshold: the minimum proportion of users who must send a user-generated content to the user before it can be propagated. * orientation: the neighbor selection.

  • IN: it considers the incoming neighborhood of the target user.

  • OUT: it considers the outgoing neighborhood of the target user.

  • UND: it considers the all the possible neighbors of the target users (\(\Gamma_{out}(u) \cup \Gamma_{in}(u)\))

  • MUTUAL: it considers as neighbors those who share a reciprocal link with the target user (\(\Gamma_{out}(u) \cap \Gamma_{in}(u)\))

whereas we have the following one for the count version: * threshold: the minimum number of users who must send a user-generated content to the user before it can be propagated.

Finally, both limited versions have this parameter: * numRec: the maximum number of received pieces to propagate.

Configuration file

For the probability threshold version, the configuration is the following:

selection:
  name: Proportion threshold
  params:
    numOwn:
      type: int
      value: value
    orientation:
      type: orientation
      value: IN/OUT/UND/MUTUAL
    threshold:
      type: double
      value: value
    (numRepr:
      type: int
      value: value)

whereas, for the count version, it is:

selection:
  name: Count threshold
  params:
    numOwn:
      type: int
      value: value
    threshold:
      type: int
      value: value
    (numRepr:
      type: int
      value: value)

Then, the limited version of the probability threshold is:

selection:
  name: Limited proportion threshold
  params:
    numOwn:
      type: int
      value: value
    numRec:
      type: int
      value: value
    orientation:
      type: orientation
      value: IN/OUT/UND/MUTUAL
    threshold:
      type: double
      value: value
    (numRepr:
      type: int
      value: value)

and the limited count threshold:

selection:
  name: Limited count threshold
  params:
    numOwn:
      type: int
      value: value
    numRec:
      type: int
      value: value
    threshold:
      type: int
      value: value
    (numRepr:
      type: int
      value: value)

Timestamp-based

In these selection mechanisms, a user does only propagate his own content when the timestamp of the simulation corresponds to the timestamp on a previous diffusion process.

Depending on how the received pieces are shared with other users, we differentiate two cases: * Loose: in this case, a received information piece is shared a) only if the user shared it in a previous process and b) only if the current timestamp is smaller or equal to the timestamp at which the user shared it in that process. * Pure: in this case, a received information piece is shared a) only if the user shared it in a previous process and b) only if the current timestamp is smaller or equal to the timestamp at which the user shared it in that process.

Configuration file

For the loose version, the configuration is the following:

selection
  name: Loose timestamp-based

whereas, for the pure version, it is:

selection
  name: Pure timestamp-based

Timestamp-ordered

This selection mechanism is equivalent to Count, but, pieces are selected according to their creation / reception timestamps.

Parameters

  • numOwn: the number of user-created information pieces to propagate.

  • numRec: the number of received pieces to propagate.

  • numRepr: (OPTIONAL) the number of already propagated pieces to repropagate again. By default: 0.

Configuration file

selection:
  name: Timestamp-ordered
  params:
    numOwn:
      type: int
      value: number_of_own_pieces
    numRec:
      type: int
      value: number_of_received_pieces
    (numRepr:
      type: int
      value: number_of_pieces_to_repropagate_again)