Advertisement
Guest User

Generates graph and observations for stats.railway project

a guest
Jan 15th, 2015
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 1.26 KB | None | 0 0
  1. package stats.railway
  2.  
  3. import util.Random
  4.  
  5. case class Graph(n: Int, observationSize: Int) {
  6.  
  7.   val vertices = 0 to (n - 1) map { i =>
  8.     (i, (Random.nextInt(2) % 2) + 1)
  9.   }
  10.  
  11.   val edges = {
  12.     val m = Array.ofDim[Array[Int]](n)
  13.     for (i <- 0 until n) m(i) = Array.ofDim[Int](3)
  14.  
  15.     for (i <- 0 until n) {
  16.       for (j <- 0 until 3) {
  17.         if (m(i)(j) == 0) {
  18.           var start = Random.nextInt(n)
  19.           while (start != i && m(start)(j) != 0) start = Random.nextInt(n)
  20.           m(start)(j) = i
  21.           m(i)(j) = start
  22.         }
  23.       }
  24.     }
  25.  
  26.     m
  27.   }
  28.  
  29.   val observations: Array[Int] = {
  30.     val size = observationSize
  31.  
  32.     val path = Array.ofDim[(Int, Int)](size)
  33.  
  34.     for (i <- 0 until size) {
  35.       if (i == 0) path(0) = (Random.nextInt(n), Random.nextInt(3))
  36.       else {
  37.         val (prev, prevEdge) = path(i - 1)
  38.         val next = edges(prev)(prevEdge)
  39.         val (_, switch) = vertices(next)
  40.  
  41.         val nextEdge = if (prevEdge == 0) switch else 0
  42.         path(i) = (next, nextEdge)
  43.       }
  44.     }
  45.  
  46.     val observations = path.map(_._2).toArray
  47.     for (i <- 0 until size) {
  48.       val r = Random.nextInt(100)
  49.       if (Random.nextInt(100) < 5) observations(i) = Random.nextInt(3)
  50.     }
  51.  
  52.     observations
  53.   }
  54.  
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement