https://github.com/nomemory/markovneat
Markov chains in Java
https://github.com/nomemory/markovneat
Last synced: over 1 year ago
JSON representation
Markov chains in Java
- Host: GitHub
- URL: https://github.com/nomemory/markovneat
- Owner: nomemory
- License: apache-2.0
- Created: 2019-02-04T08:23:08.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2021-02-09T12:16:46.000Z (over 5 years ago)
- Last Synced: 2025-03-22T06:32:38.019Z (over 1 year ago)
- Language: Java
- Size: 136 KB
- Stars: 1
- Watchers: 1
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[Markov chain](https://en.wikipedia.org/wiki/Markov_chain)s in Java.
# Installing
Maven:
```xml
net.andreinc
markovneat
1.8
```
Gradle:
```groovy
implementation 'net.andreinc:markovneat:1.8'
```
You can also create a "fat" jar using the `shadowJar` gradle tasks:
```groovy
gradle shadowJar
```
The jar will be generated in `/build/libs/markovneat*.jar`.
# Example 1 - Modelling a simple discrete-time markov chain
A directed graph is used bellow to picture the state transitions for a Markov Chain.
The states represent whether a hypothetical stock market is exhibiting a bull market, bear market, or stagnant market trend during a given week.
(See [Market trends](https://en.wikipedia.org/wiki/Market_trend)).

With the **markovneat** library this can be modelled using the following code:
```java
MChain marketMChain = new MChain<>();
// Transitioning from "BULL" to "BULL" has a 90% chance
marketMChain.add(new MState<>("BULL"), "BULL", 0.9);
// Transitioning from "BULL" to "BEAR" has a 7,5% chance
marketMChain.add(new MState<>("BULL"), "BEAR", 0.075);
// Transitioning from "BULL" to "STAGNANT" has a 2,5% chance
marketMChain.add(new MState<>("BULL"), "STAGNANT", 0.025);
marketMChain.add(new MState<>("BEAR"), "BEAR", 0.8);
marketMChain.add(new MState<>("BEAR"), "BULL", 0.15);
marketMChain.add(new MState<>("BEAR"), "STAGNANT", 0.05);
marketMChain.add(new MState<>("STAGNANT"), "STAGNANT", 0.5);
marketMChain.add(new MState<>("STAGNANT"), "BULL", 0.25);
marketMChain.add(new MState<>("STAGNANT"), "BEAR", 0.25);
marketMChain.generate(10000).forEach(System.out::println);
```
Output:
```
STAGNANT
BULL
BULL
BULL
BULL
... and so on
```