brianzeligson / mabandit
实现多臂老虎机算法
Requires
- blainesch/prettyarray: dev-master
- predis/predis: dev-master
Requires (Dev)
- m6web/redis-mock: ~2.0
- phpunit/phpunit: ~4.3
- psy/psysh: dev-master
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);
一个演示如何使用的简单示例应用程序可在此处找到这里