Finish markov chain generation impl

* Markov chains will train and generate chains correctly now
* Implement Markov.save_chains/0
* Add a couple more utils that help accomplish the above

Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
This commit is contained in:
2020-07-15 16:25:25 -07:00
parent c43c075588
commit 4c93b42fdc
5 changed files with 150 additions and 21 deletions

View File

@@ -9,6 +9,32 @@ defmodule MarkovChainTest do
{["bar", "baz"], %{nil => 1}},
{["foo", "bar"], %{"baz" => 1}},
]
chain = chain |> Chain.train(~w(foo bar baz))
assert chain.chain == [
{["bar", "baz"], %{nil => 2}},
{["foo", "bar"], %{"baz" => 2}},
]
chain = chain |> Chain.train(~w(baz bar foo))
assert chain.chain == [
{["bar", "foo"], %{nil => 1}},
{["baz", "bar"], %{"foo" => 1}},
{["bar", "baz"], %{nil => 2}},
{["foo", "bar"], %{"baz" => 2}},
]
chain = chain |> Chain.train(~w(a b c))
assert chain.chain == [
{["b", "c"], %{nil => 1}},
{["a", "b"], %{"c" => 1}},
{["bar", "foo"], %{nil => 1}},
{["baz", "bar"], %{"foo" => 1}},
{["bar", "baz"], %{nil => 2}},
{["foo", "bar"], %{"baz" => 2}},
]
end
test "chain add_weight works correctly" do
@@ -28,5 +54,17 @@ defmodule MarkovChainTest do
assert chain.chain == [
{["foo", "bar"], %{"baz" => 3, "qux" => 1}}
]
chain = chain |> Chain.add_weight(["bar", "baz"], "qux")
assert chain.chain == [
{["bar", "baz"], %{"qux" => 1}},
{["foo", "bar"], %{"baz" => 3, "qux" => 1}},
]
chain = chain |> Chain.add_weight(["bar", "baz"], nil)
assert chain.chain == [
{["bar", "baz"], %{"qux" => 1, nil => 1}},
{["foo", "bar"], %{"baz" => 3, "qux" => 1}},
]
end
end