Modelo Evolutivo Fatman en Redes Sociales

Prerrequisito: Introducción a las Redes Sociales

En el modelo evolutivo de Fatman, hay 3 conceptos principales para hacer un modelo evolutivo, es decir, homofilia, influencia social y cierre.

  1. Homofilia : las personas que son similares entre sí tienden a entablar amistad entre sí.
  2. Influencia social : las personas cambian su comportamiento y propiedades debido a la influencia social.
  3. Cierre:  hay 3 tipos principales de cierres, es decir, cierre triádico, cierre de miembros y cierre de focos.
  • Cierre triádico: en el cierre triádico, si A es amigo de B y B es amigo de C, entonces C eventualmente se convertirá en amigo de A.
  • Cierre de membresía: en el cierre de membresía, si A y B están en el mismo club, existe la tendencia de que se hagan amigos.
  • Cierre de focos- Es la probabilidad de hacerse amigos cuando tienen los mismos focos.

Entonces, de acuerdo con la hipótesis del hombre gordo, tenga cuidado con los amigos gordos, si su amigo está gordo, entonces la probabilidad de que gane peso se vuelve alta.

Ahora, el siguiente código le mostrará la implementación de los 3 conceptos anteriores utilizando el modelo evolutivo en python tomando un ejemplo.

Suponga que hay una ciudad con varias personas y tenemos el IMC de todos. Luego veremos a medida que continúa la evolución, las personas que tienen un IMC similar se vuelven amigos entre sí, lo que es homofilia. Luego crearemos algunos focos como Gimnasio, etc. y veremos cómo eventualmente las personas con focos similares se vuelven amigos y luego implementaremos focos sociales. 

Algoritmo:

  1. Cree un gráfico con digamos N Nodes,
  2. Agregue bordes y etiquetas para cada Node.
  3. Ahora agregue focos sociales y etiquetas de focos sociales para cada Node
  4. .Ahora implemente la homofilia.
  5. Después de eso implementar el cierre.
  6. Por fin implementar la influencia social.
  7. Ahora visualiza el gráfico.

Código de Python para el modelo evolutivo de Fatman:

Python3

import networkx as nx
import matplotlib.pyplot as plt
import random
import math
 
# 1- Create a graph with lets say 100 nodes
# 2- Add edges and labels.
def create():
    G = nx.Graph()
    G.add_nodes_from(range(1, 101))
    return G
 
 
def visualize(G):
    labeldict = get_labels(G)
    nodesize = get_size(G)
    color = get_colors(G)
    nx.draw(G, labels=labeldict, node_size=nodesize, node_color=color)
    plt.show()
 
 
def assign_bmi(G):
   
    for each in G.nodes():
        G.nodes[each]['name'] = random.randint(15, 40)
        G.nodes[each]['type'] = 'person'
 
 
def get_labels(G):
    dict1 = {}
     
    for each in G.nodes():
        dict1[each] = G.nodes[each]['name']
         
    return dict1
 
 
def get_size(G):
    array1 = []
    for each in G.nodes():
        if (G.nodes[each]['type'] == 'person'):
            array1.append(G.nodes[each]['name'] * 20)
        else:
            array1.append(500)
    return array1
 
# 3. Add foci nodes
def add_foci_nodes(G):
    n = G.number_of_nodes()
    i = n + 1
    foci_nodes = ['gym', 'eatout', 'movie_club',
                  'karate_club', 'yoga_club']
     
    for j in range(5):
        G.add_node(i)
        G.nodes[i]['name'] = foci_nodes[j]
        G.nodes[i]['type'] = 'foci'
        i += 1
 
 
def get_colors(G):
    c = []
     
    for i in G.nodes():
        if (G.nodes[i]['type'] == 'person'):
            if (G.nodes[i]['name'] == 15):
                c.append('yellow')
            elif (G.nodes[i]['name'] == 40):
                c.append('green')
            else:
                c.append('blue')
        else:
            c.append('red')
    return c
 
 
def get_person_nodes(G):
    p = []
     
    for i in G.nodes():
        if (G.nodes[i]['type'] == 'person'):
            p.append(i)
    return p
 
 
def get_foci_nodes(G):
    f = []
     
    for i in G.nodes():
        if (G.nodes[i]['type'] == 'foci'):
            f.append(i)
    return f
 
 
def add_foci_edges(G):
    foci_nodes = get_foci_nodes(G)
    person_nodes = get_person_nodes(G)
     
    for i in person_nodes:
        r = random.choice(foci_nodes)
        G.add_edge(i, r)
 
# 4. Implement Homophily
def homophily(G):
    pnodes = get_person_nodes(G)
     
    for u in pnodes:
        for v in pnodes:
            if (u != v):
                diff = abs(G.nodes[u]['name'] - G.nodes[v]['name'])
                p = 1 / (diff + 1000)
                r = random.uniform(0, 1)
                if (r < p):
                    G.add_edge(u, v)
 
# 5. Implement Closure
def common(u, v, G):
    nu = set(G.neighbors(u))
    nv = set(G.neighbors(v))
    return (len(nu & nv))
 
 
def closure(G):
    array1 = []
    for u in G.nodes():
        for v in G.nodes():
            if (u != v and G.nodes[u]['type'] == 'person' or G.nodes[v]['type'] == 'person'):
               
                # common function will return start node,
                # end node and Graph itself.
                k = common(u, v, G)
                p = 1 - math.pow(1 - 0.01, k)
                tmp = []
                tmp.append(u)
                tmp.append(v)
                tmp.append(p)
                array1.append(tmp)
    for i in array1:
        u = i[0]
        v = i[1]
        p = i[2]
        r = random.uniform(0, 1)
        if r < p:
            G.add_edge(u, v)
 
# 6. Implement Social Influence
def social_influence(G):
    fnodes = get_foci_nodes(G)
     
    for i in fnodes:
        if (G.nodes[i]['name'] == 'eatout'):
            for j in G.neighbors(i):
                if (G.nodes[j]['name'] != 40):
                    G.nodes[j]['name'] = G.nodes[j]['name'] + 1
                     
        if (G.nodes[i]['name'] == 'gym'):
            for j in G.neighbors(i):
                if (G.nodes[j]['name'] != 15):
                    G.nodes[j]['name'] = G.nodes[j]['name'] - 1
 
 
G = create()
assign_bmi(G)
 
# to add foci field in the nodes
add_foci_nodes(G)
add_foci_edges(G)
visualize(G)
 
for t in range(1, 3):
    homophily(G)
    visualize(G)
    closure(G)
    visualize(G)
    social_influence(G)
    visualize(G)

Producción:

La salida contiene gráficos que tienen homofilia, cierre y cambio en el comportamiento, es decir, influencia social.

Publicación traducida automáticamente

Artículo escrito por sankalpsharma424 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *