Raw File
hiddenSemiMarkovModel.wppl
var init = function(dim) {
  return repeat(dim, function() { return gaussian(200, 1) });
}

var observe = function(pos) {
  return map(
      function(x) { return gaussian(x, 5); },
      pos
  );
};

var transition = function(lastPos, secondLastPos) {
  return map2(
      function(lastX, secondLastX) {
        var momentum = (lastX - secondLastX) * .7;
        return gaussian(lastX + momentum, 3);
      },
      lastPos,
      secondLastPos
  );
};

var semiMarkovWalk = function(n, dim) {
  var prevStates = (n == 2) ? [init(dim), init(dim)] : semiMarkovWalk(n - 1, dim);
  var newState = transition(last(prevStates), secondLast(prevStates));
  // var newObservation = observe(newState);
  // could condition on observation here
  return prevStates.concat([newState]);
};

semiMarkovWalk(80, 2);
back to top