bandart 0.1.1 bandart: ^0.1.1 copied to clipboard
Bandart (combination of "Bandits" and "Dart") is a library for bandit algorithms in Dart. It provides Bayesian Models for statistical analysis for the data..
Bandart (combination of "Bandits" and "Dart") is a library for bandit algorithms in Dart. It provides Bayesian Models for statistical analysis for the data.
Features #
- Bandit algorithms:
- Fixed Schedule
- Thompson Sampling
- Bayesian Models:
- Beta Model: Approximating success probability using Beta Distributions
- Gaussian Model: Approximating mean and variance using conjugate priors
Getting started #
Install the package using dart pub add bandart
.
Now you can use
import 'package:bandart/bandart.dart';
Usage #
Create A Fixed Schedule #
import 'package:bandart/bandart.dart';
int numberOfInterventions = 3;
var policy = FixedPolicy(numberofInterventions);
for (int i = 0; i < 10; i++) {
print(policy.choseAction({"decisionPoint": i}))
}
// Prints 0, 1, 2, 0, 1, 2, 0, 1, 2, 0
Analyze data using Normal Model #
import 'package:bandart/bandart.dart';
var history = DataFrame(
{'intervention': [0, 0, 1, 1], 'outcome': [1.0, 1.0, 2.0, 2.0]})
// Mean and L are priors for the normal model
var gaussianModel = GaussianModel(
numberOfInterventions: 2, mean: 1.0, l: 1.0, random: Random(0))
gaussianModel.history = history
// Update the samples
gaussianModel.sample()
print(gaussianModel.maxProbabilities())
// Prints around [0.2, 0.8]
Create an adaptive schedule using Thompson Sampling #
import 'package:bandart/bandart.dart';
var history = DataFrame(
{'intervention': [0, 0, 1, 1], 'outcome': [1.0, 1.0, 2.0, 2.0]})
// Mean and L are priors for the normal model
var gaussianModel = GaussianModel(
numberOfInterventions: 2, mean: 1.0, l: 1.0, random: Random(0))
var policy = ThompsonSampling(numberOfInterventions: 2);
print(policy.choseAction({}, history));
// Prints either 0 or 1 (randomized), but will more often pick 1 as this is the intervention with the better history
Additional information #
Development #
Setup
Test can be run with dart test
.
Some tests need mock code generated by mockito.
To update the mock code, run dart run build_runner build
.
Goals
- Performance: Since Dart is most often used for mobile development, the goal of the library is to support calculations fast enough to run on smartphones.
- Seedability: When seeded with the same seed, the library should always return the same result.
- Well tested