Saltar al contenido

Generar paseo aleatorio en un gráfico

Nuestros mejores programadores agotaron sus depósitos de café, en su búsqueda noche y día por la respuesta, hasta que Paúl halló la respuesta en GitHub y hoy la comparte con nosotros.

Solución:

Block[
 
  graph = RandomGraph[20, 100]
  , start
  , path
  ,
 start = RandomChoice[VertexList[graph]];
 path = NestList[RandomChoice[AdjacencyList[graph, #]] &, start, 5];
 ListAnimate[
  Table[
   Graph[graph
    , VertexStyle -> v -> Red
    , VertexSize -> Large
    ]
   , v, path
   ]]]

ingrese la descripción de la imagen aquí


Block[
 
  graph = GridGraph[6, 6]
  , start
  , path
  ,
 start = RandomChoice[VertexList[graph]];
 path = NestList[RandomChoice[AdjacencyList[graph, #]] &, start, 30];
 ListAnimate[
  Table[
   Graph[
    graph
    , VertexStyle -> 
     Append[Map[Rule[#, Pink] &, Union[path[[1 ;; v]]]], 
      path[[v]] -> Red]
    , EdgeStyle -> 
     Evaluate[(UndirectedEdge[#1, #2] -> Directive[Red, Thick]) & @@@ 
       Partition[path[[1 ;; v]], 2, 1]]
    , VertexSize -> Large
    ]
   , v, Length[path]
   ]]]

ingrese la descripción de la imagen aquí

Si necesita un buen rendimiento (por ejemplo, calcular cientos de caminatas aleatorias largas para obtener buenas estadísticas), considere usar IGRandomWalk del paquete IGraph/M.

rg = RandomGraph[100, 200]

walk = IGRandomWalk[rg, 1, 100]

Animate[
 HighlightGraph[rg, vertex],
 vertex, walk
]

Puedes usar DiscreteMarkovProcess.

Por ejemplo,

graph = GridGraph[5, 5]

mp = DiscreteMarkovProcess[1 (* starting vertex index, not name *), graph]

walk = RandomFunction[mp, 1, 10]["Values"]
(* 1, 2, 1, 6, 11, 16, 11, 12, 7, 2 *)

Animar:

Animate[
 HighlightGraph[g, vertex],
 vertex, walk
]

Comparación de rendimiento con IGRandomWalk de IGraph/M:

RandomFunction[mp, 1, 10000]; // RepeatedTiming
(* 0.034, Null *)

IGRandomWalk[graph, 1, 10000]; // RepeatedTiming
(* 0.00038, Null *)

Aquí tienes las comentarios y calificaciones

Si te animas, tienes el poder dejar una reseña acerca de qué te ha impresionado de este artículo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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