php权重分配

Posted 寞小陌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于php权重分配的主要内容,如果未能解决你的问题,请参考以下文章

如何手动为 SVM 中的某些特征分配权重?

不确定分配时 PHP 数组在做啥

Unity 使用Animation Clip(动画片段) 对Animation Rig的Rig Weight (rig权重) 进行调整,出现无法调整的问题,及解决方法

Python:使用上限重新分配权重

超级有用的9个PHP代码片段

android weight(权重)的详细分析