public function marchOpponents()

{

$rstep = Yii::$app->params[‘ratingStep’];//(随机范围)

$rsN=100;

$db=Yii::$app->db;

$m= $this->streak*$rstep;//根据连败取人数

$c = GmPlayerRating::find()->where(“rating > :rating”,[‘:rating’=>$this->rating])->count();//分数所在排名

Yii::error(“gid “.$this->gid.” 排名 “.$c );

if ($c<$m)//如50名 要取6连胜后的-10-0名

{

$m=0;

Yii::error(” c < m “);

}else {//否则取开头 如取3连胜则取 20-30区间

$m = $c-$m;

}

//从上到下取匹配到的玩家

$sql = “select gid from gm_player_rating where gid !=:uid and protect_tm<:nowtm order by rating desc limit :m,:n”;

$values = [‘:uid’=>$this->gid,‘:nowtm’=>time(),‘:m’=>$m,‘:n’=>$rsN];

$res = $db->createCommand($sql)->bindValues($values)

->queryAll();

//         if ($this->streak > 0 && count($res==0)){//连胜 取高分,上方无人

//             $sql = “select gid from gm_player_rating where protect_tm<:nowtm order by rating desc limit :n”;

//             $values = [‘:nowtm’=>time(),':n’=>$rstep];

//             $res = $db->createCommand($sql)->bindValues($values)

//             ->queryAll();

//         }

if ($this->streak < 0 && count($res)==0){//连败取低分,下方无人

//

$sql = “select gid from gm_player_rating where  gid !=:uid and protect_tm<:nowtm order by rating asc limit :n”;

$values = [‘:uid’=>$this->gid,‘:nowtm’=>time(),‘:n’=>$rsN];

$res = $db->createCommand($sql)->bindValues($values)

->queryAll();

}

//         echo “count rest:”.count($res);

if ($res==“” || count($res)==0)

return 0;

$rx=$res[array_rand($res)];

//         print_r($rx);

return $rx[‘gid’];

}

///核心 elo 算法内容计算期望值

public static function eloRatingScore($pa,$pb,$win=1)

{//按照rating 获取期望所得的声望值

$Ra=GmPlayerRating::findOne($pa)->rating;

$Rb=GmPlayerRating::findOne($pb)->rating;

$Ea = 1/(1+pow(10, ($Rb-$Ra)/400));

//         $Eb = 1/(1+pow(10, ($Ra-$Rb)/400));

//胜利期望值

$rssss=(1 – $Ea);

if ($rssss<(1/Yii::$app->params[‘ratingK’]/2))$rssss=0;

$RSa = intval(Yii::$app->params[‘ratingK’] *$rssss);

//失败期望值

if ($win==-1) $RSa = intval(Yii::$app->params[‘ratingK’] * (0 – $Ea));

return $RSa;

}

php实现dota天梯、wow竞技场、lol排位赛匹配加分算法ELO的更多相关文章

  1. 论文翻译 DOTA:A Large-scale Dataset for Object Detection in Aerial Images

      简介:武大遥感国重实验室-夏桂松和华科电信学院-白翔等合作做的一个航拍图像数据集 摘要: 目标检测是计算机视觉领域一个重要且有挑战性的问题.虽然过去的十几年中目标检测在自然场景已经有了较重要的成就 ...

  2. lol匹配算法

    这是Riot的Design Director Tom Cadwell专门为中国玩家写的解说匹配系统工作原理的帖子. 同一时候为了让大家更好的理解匹配系统,假设您认为您遇到了特别不公平的匹配,请回复游戏 ...

  3. elo system

    今天了解了一下游戏中的PVP模块的实现,大多数的游戏都使用到了ELO算法,刚开始的时候并不清楚这个算法是做什么的,对此开始大量查找有关于ELO算法的资源,功夫不负有心人,总算找到一些有用的资源了. 先 ...

  4. 《社交网络》里的评分公式——ELO排名系统

    <社交网络>里的Mark Zackburg被女朋友甩后,在舍友的启发下,充分发挥了技术宅男自娱自乐的恶搞天分,做出了Facemash网站,对学校女生的相貌进行排名打分,结果网站访问流量过大 ...

  5. 腾讯首度公开S级手游品质管理方法

    weimjsam   引言 在最新的手游市场占有率统计中,腾讯游戏稳稳占据一半江山,目前仍以每月一到两款的速度推出新品,在如此复杂多变.响应要求极高的市场环境下,能持续推出高质量产品并保持高效迭代更新 ...

  6. DOTA 2 Match History WebAPI(翻译)

    关于DOTA 2 Match History WebAPI 的 源网页地址: http://dev.dota2.com/showthread.php?t=47115 由于源网页全英文,这边做下翻译方便 ...

  7. dota 路人水平鉴定器

    测试的dota水平...目的是学习一下tornado框架 #coding:utf8 import tornado.web,tornado.httpserver,tornado.ioloop,torna ...

  8. 2018天梯赛第一次训练题解和ac代码

    随着评讲的进行代码和题解会逐步放上来 2018天梯赛第一次训练 1001 : 进制转换 Time Limit(Common/Java):1000MS/10000MS     Memory Limit: ...

  9. [转] 评 WOW技能天赋设计

    本文转至:http://bbs.chinaunix.net/thread-1692302-8-1.html(只作转载, 不代表本站和博主同意文中观点或证实文中信息)再比如,传说中的面向对象本该大显神威 ...

随机推荐

  1. js apply 引申

    apply 可以接受两个参数, fun.apply(thisArg[, argsArray]) 其中第二个参数是数组或类数组对象,所以有时传 arguments 也很正常,但是,认真的说,我测试出来: ...

  2. klg-jpa:spring-data-jpa 最佳实践

    klg-jpa:spring-data-jpa 最佳实践 项目介绍 码云地址:https://gitee.com/klguang/klg-jpa JPA是sun为POJO持久化制定的标准规范,用来操作 ...

  3. Python全栈day18(三元运算,列表解析,生成器表达式)

    一,什么是生成器 可以理解为一种数据类型,这种数据类型自动实现了迭代器协议(其他数据类型需要调用自己内置的__iter__方法),所以生成器是可迭代对象. 二,生成器分类在python中的表现形式 1 ...

  4. Spark 源码分析 – BlockManagerMaster&Slave

      BlockManagerMaster 只是维护一系列对BlockManagerMasterActor的接口, 所有的都是通过tell和askDriverWithReply从BlockManager ...

  5. 剑指Offer——字符串的排列

    题目描述: 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入描述: ...

  6. squee_spoon and his Cube VI---郑大校赛(求最长子串)

    市面上最常见的魔方,是三阶魔方,英文名为Rubik's Cube,以魔方的发明者鲁比克教授的名字命名.另外,二阶魔方叫Pocket Cube,它只有2*2*2个角块,通常也就比较小:四阶魔方叫Reve ...

  7. openresty环境搭建问题记录

    第一次在mac安装遇到如下问题: 截图: 具体code如下: Sonofelice:bch-flowrouter baidu$ brew install openresty/brew/openrest ...

  8. Flask的配置与路由

    配置管理 flask中的配置文件是一个flask.config.Config对象(继承字典),默认配置为:    {        'DEBUG':                    get_de ...

  9. 学习HashMap的笔记

    对于HashMap只是学习了下put,remove方法,hashMap是数组+链表+红黑树组成 所以下面贴出我自己给代码的注释,看不懂的见谅哈,毕竟我也是刚了解,如果有错误的地方请指出,非常感谢 pu ...

  10. Spring-BeanFactory容器

    Spring的BeanFactory容器 这是Spring中最简单地容器,它主要的功能是为依赖注入(DI)提供支持.这个容器接口在org.springframework.beans.factory.B ...