BiMDP flow inversion

CodeSnippet

You can download all the code on this page from the code snippets directory

Example on how calculate the inverse of a BiFlow.

A BiFlow does inherit the ‘inverse’ method from the mdp.Flow class, but this doesn’t support BiMDP features like messages. If these features are needed then one can use an alternative way to calucalte the inverse, which is presented here.

>>> import numpy as np
>>> import bimdp

Create a simple pointless flow

>>> pca_node = bimdp.nodes.PCABiNode()
>>> sfa_node = bimdp.nodes.SFABiNode()
>>> flow = pca_node + sfa_node
>>> x = np.random.random((50,5))
>>> flow.train(x)
>>> x = np.random.random((3,5))
>>> y, msg = flow.execute(x)

The target value 1 is the absolute index of the sfa_node, alternatively one could have used a node_id

>>> inv_x, _ = flow.execute(y, {"method": "inverse"}, 1)
>>> #_, (inv_x, _) = bimdp.show_execution(flow, y, {"method": "inverse"}, 1)
>>> assert np.all(np.abs(x - inv_x) < 0.0000001)

Compare the result to the standard inverse

>>> inv2_x = flow.inverse(y)
>>> assert np.all(np.abs(inv2_x - inv_x) < 0.0000001)