brianzeligson/mabandit
Composer 安装命令:
composer require brianzeligson/mabandit
包简介
Implements the Multi Armed Bandit algorithm
README 文档
README
#Multi-Armed Bandit
This library provides a simple interface for using the Multi-Armed Bandit algorithm to dynamically test and optimize between a set of possible options.
###Installation
Install composer
curl -s https://getcomposer.org/installer | php
Add a composer.json to your project root
{
"require": {
"brianzeligson/mabandit": "dev-master"
}
}
Install using composer
php composer.phar install
Add this line to your main application file:
require 'vendor/autoload.php';
###Basic Use
All interaction is done through an instance of the MaBandit\MaBandit class. In order to create an instance, you need to provide a Strategy and a Persistor.
Included are EpsilonGreedy or EpsilonFirst strategies, and ArrayPersistor or RedisPersistor for persistence. Note that persistence is required for the algorithm to work, and ArrayPersistor is a simple in-memory array, suitable only for long-running single process tasks, or testing. For anything requiring maintenance of state, RedisPersistor is the way to go.
Create a bandit as follows:
$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);
Now you will need an experiment to work with. You can create one as follows:
$experiment = $bandit->createExperiment('cta-size', array('sm', 'med', 'lg'));
To load a persisted experiment, use getExperiment. This method throws an ExperimentNotFoundException if your experiment is not found, so it's best to handle this. The following example checks for a persisted experiment and initializes if it is not found:
try { $ex = $bandit->getExperiment('cta-size') } catch(\MaBandit\Exception\ExperimentNotFoundException $e) { $ex = $bandit->createExperiment('cta-size', array('sm', 'med', 'lg')); }
With your experiment you can now let the bandit do it's job. To ask the bandit for the next value for use in your experiment, call chooseLever as follows:
$nextValue = $bandit->chooseLever($experiment)->getValue();
Note that this method mutates the "lever" (representation of a value in an experiment) to keep track of the number of times it has been tested, so it is important to call it only when you are going to use the value.
In order for the algorithm to successfully determine the winning choice, you need to inform it of a conversion. When a value converts, use it to fetch the corresponding lever and pass that to registerConversion, as follows:
$lever = $bandit->getLeverByExperimentAndValue('cta-size', $convertedValue); $bandit->registerConversion($lever);
A small sample app demonstrating use is available here
brianzeligson/mabandit 适用场景与选型建议
brianzeligson/mabandit 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 17 次下载、GitHub Stars 达 6, 最近一次更新时间为 2014 年 11 月 14 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 brianzeligson/mabandit 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 brianzeligson/mabandit 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 17
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 7
- 点击次数: 16
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: GPL
- 更新时间: 2014-11-14