diff --git a/build.sbt b/build.sbt new file mode 100644 index 0000000..60491c9 --- /dev/null +++ b/build.sbt @@ -0,0 +1,5 @@ +name := "org.xcit.nback.markov" + +version := "0.1" + +scalaVersion := "2.12.7" diff --git a/build.sbt b/build.sbt new file mode 100644 index 0000000..60491c9 --- /dev/null +++ b/build.sbt @@ -0,0 +1,5 @@ +name := "org.xcit.nback.markov" + +version := "0.1" + +scalaVersion := "2.12.7" diff --git a/project/build.properties b/project/build.properties new file mode 100644 index 0000000..44fcb4a --- /dev/null +++ b/project/build.properties @@ -0,0 +1 @@ +sbt.version = 1.1.2 \ No newline at end of file diff --git a/build.sbt b/build.sbt new file mode 100644 index 0000000..60491c9 --- /dev/null +++ b/build.sbt @@ -0,0 +1,5 @@ +name := "org.xcit.nback.markov" + +version := "0.1" + +scalaVersion := "2.12.7" diff --git a/project/build.properties b/project/build.properties new file mode 100644 index 0000000..44fcb4a --- /dev/null +++ b/project/build.properties @@ -0,0 +1 @@ +sbt.version = 1.1.2 \ No newline at end of file diff --git a/src/main/scala/org/xcit/nback/markov/Main.scala b/src/main/scala/org/xcit/nback/markov/Main.scala new file mode 100644 index 0000000..5cbed26 --- /dev/null +++ b/src/main/scala/org/xcit/nback/markov/Main.scala @@ -0,0 +1,7 @@ +package org.xcit.nback.markov + +class Main extends App { + //TODO create a MarkovChain object or use the singleton + //TODO train to set transitions + //TODO benchmark +} diff --git a/build.sbt b/build.sbt new file mode 100644 index 0000000..60491c9 --- /dev/null +++ b/build.sbt @@ -0,0 +1,5 @@ +name := "org.xcit.nback.markov" + +version := "0.1" + +scalaVersion := "2.12.7" diff --git a/project/build.properties b/project/build.properties new file mode 100644 index 0000000..44fcb4a --- /dev/null +++ b/project/build.properties @@ -0,0 +1 @@ +sbt.version = 1.1.2 \ No newline at end of file diff --git a/src/main/scala/org/xcit/nback/markov/Main.scala b/src/main/scala/org/xcit/nback/markov/Main.scala new file mode 100644 index 0000000..5cbed26 --- /dev/null +++ b/src/main/scala/org/xcit/nback/markov/Main.scala @@ -0,0 +1,7 @@ +package org.xcit.nback.markov + +class Main extends App { + //TODO create a MarkovChain object or use the singleton + //TODO train to set transitions + //TODO benchmark +} diff --git a/src/main/scala/org/xcit/nback/markov/models/MarkovChain.scala b/src/main/scala/org/xcit/nback/markov/models/MarkovChain.scala new file mode 100644 index 0000000..07c4752 --- /dev/null +++ b/src/main/scala/org/xcit/nback/markov/models/MarkovChain.scala @@ -0,0 +1,20 @@ +package org.xcit.nback.markov.models + +import scala.collection.mutable + +object MarkovChain extends MarkovChain() { +} + +class MarkovChain() { + val states: mutable.MutableList[State] = mutable.MutableList[State]() + + def totalTransitions(): Int = { + var total = 0 + states.foreach(total += _.transitions.size) + total + } + + def addTransition(fromState: State, toState: State): Unit = { + states.find(s => s == fromState).getOrElse(new State(fromState.label)) + } +} diff --git a/build.sbt b/build.sbt new file mode 100644 index 0000000..60491c9 --- /dev/null +++ b/build.sbt @@ -0,0 +1,5 @@ +name := "org.xcit.nback.markov" + +version := "0.1" + +scalaVersion := "2.12.7" diff --git a/project/build.properties b/project/build.properties new file mode 100644 index 0000000..44fcb4a --- /dev/null +++ b/project/build.properties @@ -0,0 +1 @@ +sbt.version = 1.1.2 \ No newline at end of file diff --git a/src/main/scala/org/xcit/nback/markov/Main.scala b/src/main/scala/org/xcit/nback/markov/Main.scala new file mode 100644 index 0000000..5cbed26 --- /dev/null +++ b/src/main/scala/org/xcit/nback/markov/Main.scala @@ -0,0 +1,7 @@ +package org.xcit.nback.markov + +class Main extends App { + //TODO create a MarkovChain object or use the singleton + //TODO train to set transitions + //TODO benchmark +} diff --git a/src/main/scala/org/xcit/nback/markov/models/MarkovChain.scala b/src/main/scala/org/xcit/nback/markov/models/MarkovChain.scala new file mode 100644 index 0000000..07c4752 --- /dev/null +++ b/src/main/scala/org/xcit/nback/markov/models/MarkovChain.scala @@ -0,0 +1,20 @@ +package org.xcit.nback.markov.models + +import scala.collection.mutable + +object MarkovChain extends MarkovChain() { +} + +class MarkovChain() { + val states: mutable.MutableList[State] = mutable.MutableList[State]() + + def totalTransitions(): Int = { + var total = 0 + states.foreach(total += _.transitions.size) + total + } + + def addTransition(fromState: State, toState: State): Unit = { + states.find(s => s == fromState).getOrElse(new State(fromState.label)) + } +} diff --git a/src/main/scala/org/xcit/nback/markov/models/State.scala b/src/main/scala/org/xcit/nback/markov/models/State.scala new file mode 100644 index 0000000..a705600 --- /dev/null +++ b/src/main/scala/org/xcit/nback/markov/models/State.scala @@ -0,0 +1,13 @@ +package org.xcit.nback.markov.models + +import scala.collection.mutable + +class State(lbl: String) { + + val transitions: mutable.HashMap[State, Transition] = mutable.HashMap[State, Transition]() + + def label: String = lbl + + //TODO move to chain + def probability(): Double = transitions.size.toDouble / MarkovChain.totalTransitions().toDouble +} diff --git a/build.sbt b/build.sbt new file mode 100644 index 0000000..60491c9 --- /dev/null +++ b/build.sbt @@ -0,0 +1,5 @@ +name := "org.xcit.nback.markov" + +version := "0.1" + +scalaVersion := "2.12.7" diff --git a/project/build.properties b/project/build.properties new file mode 100644 index 0000000..44fcb4a --- /dev/null +++ b/project/build.properties @@ -0,0 +1 @@ +sbt.version = 1.1.2 \ No newline at end of file diff --git a/src/main/scala/org/xcit/nback/markov/Main.scala b/src/main/scala/org/xcit/nback/markov/Main.scala new file mode 100644 index 0000000..5cbed26 --- /dev/null +++ b/src/main/scala/org/xcit/nback/markov/Main.scala @@ -0,0 +1,7 @@ +package org.xcit.nback.markov + +class Main extends App { + //TODO create a MarkovChain object or use the singleton + //TODO train to set transitions + //TODO benchmark +} diff --git a/src/main/scala/org/xcit/nback/markov/models/MarkovChain.scala b/src/main/scala/org/xcit/nback/markov/models/MarkovChain.scala new file mode 100644 index 0000000..07c4752 --- /dev/null +++ b/src/main/scala/org/xcit/nback/markov/models/MarkovChain.scala @@ -0,0 +1,20 @@ +package org.xcit.nback.markov.models + +import scala.collection.mutable + +object MarkovChain extends MarkovChain() { +} + +class MarkovChain() { + val states: mutable.MutableList[State] = mutable.MutableList[State]() + + def totalTransitions(): Int = { + var total = 0 + states.foreach(total += _.transitions.size) + total + } + + def addTransition(fromState: State, toState: State): Unit = { + states.find(s => s == fromState).getOrElse(new State(fromState.label)) + } +} diff --git a/src/main/scala/org/xcit/nback/markov/models/State.scala b/src/main/scala/org/xcit/nback/markov/models/State.scala new file mode 100644 index 0000000..a705600 --- /dev/null +++ b/src/main/scala/org/xcit/nback/markov/models/State.scala @@ -0,0 +1,13 @@ +package org.xcit.nback.markov.models + +import scala.collection.mutable + +class State(lbl: String) { + + val transitions: mutable.HashMap[State, Transition] = mutable.HashMap[State, Transition]() + + def label: String = lbl + + //TODO move to chain + def probability(): Double = transitions.size.toDouble / MarkovChain.totalTransitions().toDouble +} diff --git a/src/main/scala/org/xcit/nback/markov/models/Transition.scala b/src/main/scala/org/xcit/nback/markov/models/Transition.scala new file mode 100644 index 0000000..82a28d7 --- /dev/null +++ b/src/main/scala/org/xcit/nback/markov/models/Transition.scala @@ -0,0 +1,7 @@ +package org.xcit.nback.markov.models + +//TODO change to case class? +class Transition(from: State, to: State, probability: Double = 0.0) { + +} +