-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
Promemoria: Implementazione Social Influence tramite rete spaziale / k-NN in Mesa
1️⃣ Setup dello spazio
Usa ContinuousSpace di Mesa per posizionare gli agenti con coordinate fisiche.
from mesa.space import ContinuousSpace
# Creazione dello spazio (100x100 unità, non toroidale)
space = ContinuousSpace(width=100, height=100, torus=False)
# Posiziona ogni agente nello spazio
for agent in model.schedule.agents:
space.place_agent(agent, (agent.x, agent.y))2️⃣ Rete spaziale (radius network)
Ogni agente si connette a tutti gli agenti entro un raggio r.
def get_neighbors_radius(agent, r):
neighbors = space.get_neighbors(pos=(agent.x, agent.y), radius=r, include_center=False)
return neighbors
# Esempio utilizzo
raggio = 10 # unità di distanza
vicini = get_neighbors_radius(agent, raggio)Vantaggi: realistico per comunità urbane / vicinato.
3️⃣ Rete k-NN (k nearest neighbors)
Ogni agente si connette ai k agenti più vicini.
import numpy as np
def get_k_nearest(agent, k):
all_agents = [a for a in model.schedule.agents if a != agent]
all_positions = np.array([(a.x, a.y) for a in all_agents])
distances = np.linalg.norm(all_positions - np.array([agent.x, agent.y]), axis=1)
nearest_indices = distances.argsort()[:k]
nearest_agents = [all_agents[i] for i in nearest_indices]
return nearest_agents
# Esempio utilizzo
k = 5
vicini_knn = get_k_nearest(agent, k)Vantaggi: garantisce che ogni agente abbia sempre k vicini, evita agenti isolati.
4️⃣ Social Influence Formula
Una volta determinati i vicini, l’influenza sociale può essere calcolata come:
def social_influence(agent, neighbors):
# frazione di vicini adottanti
if len(neighbors) == 0:
return 0.0
return sum([1 for n in neighbors if n.adoption == 1]) / len(neighbors)
# Esempio utilizzo
S_i = social_influence(agent, vicini)Nota: S_i(t) sarà poi combinata nella probabilità di adozione:
[
P(A_i(t)=1) = \sigma(w_C C_i + w_I I_i + w_S S_i)
]
5️⃣ Suggerimenti pratici
- Per comunità piccole:
raggiodi 10–20 unità oppurek=5sono valori plausibili. - Controlla agenti isolati (nessun vicino) nella rete spaziale.
- Entrambe le opzioni sono facilmente integrabili nel loop principale di Mesa.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels