php权重分配
时间:2019-12-11
本文章向大家介绍php权重分配,主要包括php权重分配使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
假设有3个人 能力的权重 分别为 A=>1,B=>2,C=>3,那么当有6个案子的时候 A分配到1个,B分配到2个,C分配到3个,这很合理,但是当案子只有5个,或者有7个的时候,怎么分配才算公平呢?而且案子也是一个一个相继产生的,怎么动态分配才算合理呢?
我想到的是将权重大小转换为每个案子被分配到的概率大小,并且加上“周期”结算,这样每个案子的分配就达到了最合理,最优化。
下面直接上代码----
1 class WeightService 2 { 3 protected $container; 4 protected $weight = 0; 5 6 public function __construct($arr) 7 { 8 if (!count($arr)){ 9 $this->container = []; 10 }else { 11 foreach ($arr as $item) { 12 $weight = $item['weight'] * 10000;//扩大权重 提高单次的精确度 我感觉是有用的=。= 觉得没用的 可以拿掉 哈哈哈~ 13 $this->weight += $weight; 14 $array['id'] = $item['id']; 15 $array['weight'] = $weight; 16 $container[] = $array; 17 } 18 $this->container = $container; 19 } 20 } 21 22 public function getUid() 23 { 24 $random = $this->random(); 25 //初始化区间参数 26 $left = 0;//左闭区间 27 $right = 0;//右开区间 28 foreach ($this->container as $item){ 29 //区间宽度 30 $size = $item['weight']; 31 //右区间 + 区间宽度 32 $right += $size; 33 if ($random >= $left && $random < $right) { 34 return $item['id']; 35 }else{ 36 //准备下一轮的循环 左区间 + 区间宽度 37 $left += $size; 38 } 39 } 40 return 0; 41 } 42 43 protected function random() 44 { 45 //右边是开区间 这个生成的是闭区间 所以要 -1 46 return mt_rand(0, $this->weight - 1); 47 } 48 }
附上测试数据精确度
测试数据可以看出精确度在99.95%以上。可以说是非常精确合理了。
至于刚才说到“周期”的问题,解决办法就是加上一个类似“动态权重”的字段,每次被分配到减1,直到0为止。
当所有的账号都是0的时候,说明一轮分配结束,动态权重的值全部重新初始化为权重的值,新一轮的分配开始。
到此,就完美的解决了权重分配的所有问题。
本文属于个人原创,欢迎转载,转载请附链接:https://www.cnblogs.com/x-x-j/p/12021643.html
原文地址:https://www.cnblogs.com/x-x-j/p/12021643.html
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- 我在大厂写React,学到了什么?
- leetcode(4)寻找正序数组中位数
- jvm源码解析(二)HashMap
- 硬件笔记(23)---- PCB的保护走线
- TabLayout+ViewPager实现切页的示例代码
- jvm源码分析(四)ThreadPoolExecutor
- python zip,lambda,map函数代码实例
- python实现控制台输出彩色字体
- Mysql免安装版的使用
- jvm源码解析(八)动态代理是如何实现的,JDK Proxy于CGLib有什么区别
- jvm源码解析(五)synchronized和ReentrantLock
- 手把手教你构建自定义的Mimikatz二进制文件
- APACHE OFBIZ XMLRPC远程代码执行漏洞分析
- Intelspy:一款功能强大的自动化网络侦察扫描工具
- Prometheus入门教程(二):Prometheus + Grafana实现可视化、告警