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);