brianzeligson/mabandit

实现多臂老虎机算法

dev-master 2015-12-20 19:47 UTC

This package is not auto-updated.

Last update: 2024-09-28 15:18:38 UTC


README

#多臂老虎机

此库提供了一个简单的接口,用于使用多臂老虎机算法动态测试和优化一系列可能选项。

###安装

安装Composer

curl -s https://getcomposer.org/installer | php

在项目根目录中添加composer.json

{
  "require": {
    "brianzeligson/mabandit": "dev-master"
  }
}

使用Composer安装

php composer.phar install

将此行添加到主应用程序文件中

require 'vendor/autoload.php';

###基本使用

所有交互都是通过MaBandit\MaBandit类的实例完成的。为了创建一个实例,您需要提供一个策略和一个持久化器。

包括EpsilonGreedy或EpsilonFirst策略,以及ArrayPersistor或RedisPersistor用于持久化。请注意,持久化对于算法的运行是必需的,而ArrayPersistor是一个简单的内存数组,仅适用于长运行的单进程任务或测试。对于需要维护状态的情况,RedisPersistor是最佳选择。

创建老虎机如下

$strategy = \MaBandit\EpsilonGreedy::withExplorationEvery(3) //experiment every 3rd time
// OR
$strategy = \MaBandit\EpsilonFirst::withExploitationAfter(100) //only experiments til 100
$persistor = new \MaBandit\Persistence\RedisPersistor();
$bandit = \MaBandit\MaBandit::withStrategy($strategy)->withPersistor($persistor);

现在您需要一个实验来与之配合。您可以创建一个如下

$experiment = $bandit->createExperiment('cta-size', array('sm', 'med', 'lg'));

要加载持久化的实验,请使用getExperiment。如果找不到您的实验,该方法将抛出ExperimentNotFoundException,因此最好处理这种情况。以下示例检查持久化的实验,并在找不到时进行初始化

try {
  $ex = $bandit->getExperiment('cta-size')
} catch(\MaBandit\Exception\ExperimentNotFoundException $e) {
  $ex = $bandit->createExperiment('cta-size', array('sm', 'med', 'lg'));
}

有了您的实验,现在您可以让老虎机完成工作。要获取用于实验的下一个值的下一个值,请调用chooseLever,如下所示

$nextValue = $bandit->chooseLever($experiment)->getValue();

请注意,此方法会修改“杠杆”(实验中值的表示)以跟踪其被测试的次数,因此只有在您要使用该值时才调用它很重要。

为了使算法能够成功确定获胜的选择,您需要通知它一个转换。当值转换时,使用它来获取相应的杠杆,并将该杠杆传递给registerConversion,如下所示

$lever = $bandit->getLeverByExperimentAndValue('cta-size', $convertedValue);
$bandit->registerConversion($lever);

一个演示如何使用的简单示例应用程序可在此处找到这里