德扑人机大战人类完败 九场全负共输79万分|界面新闻 ? 科技4月10日上午,冷扑大师VS中国龙之队德州扑克人机大战表演赛结束了全部比赛,第九场龙之队依旧未能总分取胜,输了47343分。总战绩36000手牌,人类一共输了792327分,平均每百手损失22个大盲注。即使单看九个单场的比赛,人类牌手也未取一胜。
全部36000手牌打完,人类总共输了792327分,平均每百手损失22个大盲注。这个差距在人类牌手之中已经是比较大的了,一般认为每百手超过10个大盲注的战斗就属于大胜。更令人遗憾的是,即使单算九场比赛,龙之队也没有一场能够在总分上超过冷扑大师。
众所周知德州扑克的胜负与手里拿到的牌直接相关,有很大的运气因素,因此比赛采用了复式发牌,你的手牌好,意味着你的队友手牌坏,计算两人的总分,这样更有说服力。在这样一个相同公平的情况下,是人类牌手组合能够获得更多的积分还是人工智能呢?
虽然总分龙之队落败,但有几次单场比赛的两人小组成绩是胜过冷扑大师的,但出于种种原因考虑,本次比赛并未公布个人成绩,只有总分成绩。
赛后几位龙之队的选手坦言,后半程他们其实已经发现了冷扑大师的一些规律性失误,所以成绩也有所提升,但可惜发现得有些晚。如果在进行几场较量的话,他们有信心取得单场比赛的胜利。
今天晚上还将有冷扑大师名人体验赛,李开复等跨界名人将挑战冷扑大师,敬请关注报道。
来源:新浪科技原标题:更多专业报道,请
0相关文章您至少需输入5个字评论()Loading...程序主入口
include "Table.class.php";
function pre($str){
echo '&pre&';
print_r($str);
echo '&/pre&';
$c=new Cards();
$table=new Table(2,$c-&Cards);
扑克牌类 Cards.class.php
class Cards{
public $Cards=array();
function __construct()
$this-&Cards=$this-&createCards();
shuffle($this-&Cards);
private function createCards()
$cards=array();
$suit=array("H","S","D","C");
$p=array("T","J","Q","K","A");
for($i=0;$i&count($suit);$i++){
for($j=2;$j&=9;$j++){
$cards[]=$suit[$i].$j;
for($k=0;$k&count($p);$k++){
$cards[]=$suit[$i].$p[$k];
return $cards;
玩家类 Player.class.php
class Player{
public $score=0;
public $CardInHand=array();
function __construct($cards)
$this-&getCardInHand($cards);
private function getCardInHand($cards){
$randkey=array_rand($cards,2);
$this-&CardInHand[]=$cards[$randkey[0]];
$this-&CardInHand[]=$cards[$randkey[1]];
return $this-&CardInH
牌桌类(核心算法类)Table.class.php
include "Cards.class.php";
include "Player.class.php";
public $players=array();
public $tablecards=array();
function __construct($num,$cards)
for($i=0;$i&$num;$i++){
$this-&players[$i]=new Player($cards);
$cards=array_diff($cards,$this-&players[$i]-&CardInHand);
echo "玩家".$k."的手牌为&br&";
$this-&showCard($this-&players[$i]-&CardInHand);
echo "&br&==========&br&";
array_shift($cards);
for($i=0;$i&3;$i++) {
$this-&tablecards[] = $cards[$i];
$cards=array_diff($cards,$this-&tablecards);
for($i=0;$i&2;$i++){
array_shift($cards);
$this-&tablecards[] = $cards[0];
echo "&br&====公牌为====&br&";
$this-&showCard($this-&tablecards);
for($i=0;$i&count($this-&players);$i++){
echo "&br&----玩家{$k}的结果为----&br&";
$this-&result($this-&players[$i]);
echo "&br&-----------------------&br&";
private function showCard($cards){
foreach ($cards as $ca) {
$path.= "&img src='./pukeImage/". $ca . ".jpg'&";
echo $path;
private function pre($str,$comment){
echo "&pre&=={$comment}===&br&";
print_r($str);
echo '&/pre&====&br&';
private function result(Player $p){
$result=array_merge($p-&CardInHand,$this-&tablecards);
foreach($result as $c){
$suit.=$c[0];
$point.=$c[1];
$su=str_split($suit);
$po=str_split($point);
$su_count=array_count_values($su);
$po_count=array_count_values($po);
switch(max($su_count)){
echo "这是".array_keys($su_count,"5")[0]."同花"."&br&";
switch(max($po_count)){
echo "这是".array_keys($po_count,"4")[0]."四条"."&br&";
$this-&showCard($this-&pukesort($result));
$this-&isStraight($result);
$this-&isStraight($result);
$this-&isStraight($result);
private function pukesort($cards){
foreach($cards as $ca){
$arr[]=$ca[1];
$arr=array_count_values($arr);
foreach(array_keys($arr) as $v) {
switch ($v) {
$poi[] = 14;
$poi[] = 13;
$poi[] = 12;
$poi[] = 11;
$poi[] = 10;
$poi[] = $v;
$puke=array(
"num"=&array_values($arr),
"poi"=&$poi
array_multisort($puke["num"], SORT_NUMERIC, SORT_DESC,
$puke["poi"],SORT_NUMERIC, SORT_DESC
$arr= array_combine($puke["poi"],$puke["num"]);
foreach($arr as $key=&$value){
switch($key){
case "14":
$arr1["A"]=$arr["14"];
case "13":
$arr1["K"]=$arr["13"];
case "12":
$arr1["Q"]=$arr["12"];
case "11":
$arr1["J"]=$arr["11"];
case "10":
$arr1["T"]=$arr["10"];
$arr1[$key]=$value;
$keys=array_keys($arr1);
foreach($keys as $v){
$pstr= '/.'.$v.'/';
foreach($cards as $c) {
if(preg_match($pstr,$c)){
$maxcard[]=$c;
$maxcard=array_slice($maxcard,0,5);
return $maxcard;
private function pointToNum($arr){
foreach($arr as $p){
if(!is_numeric($p))
foreach($arr as $p){
switch($p){
if($num&=5){
$poi[]=14;
$poi[]=13;
$poi[]=12;
$poi[]=11;
$poi[]=10;
$poi[]=$p;
return $poi;
private function numToPoint($arr){
foreach($arr as $p){
switch($p){
case "14":
$poi[]="A";
case "13":
$poi[]="K";
case "12":
$poi[]="Q";
case "11":
$poi[]="J";
case "10":
$poi[]="T";
$poi[]=$p;
return $poi;
private function isStraight($cards){
foreach($cards as $c){
$point.=$c[1];
$po=array_unique(str_split($point));
if(count($po)&5){
$this-&showCard($this-&pukesort($cards));
$po=$this-&pointToNum($po);
arsort($po);
$a1=array_values($po);
for($i=1;$i&count($a1);$i++){
if($a1[$i]==$a1[$i-1]-1){
$a2[]=array_search($a1[$i-1],$po);
$a2[]=array_search($a1[$i],$po);
if($j&=4){
$a2=array_unique($a2);
$a2=array_values($a2);
$a2=array_slice($a2,0,5);
for($i=0;$i&count($a2);$i++){
$result[]=$po[$a2[$i]];
$arr=$this-&numToPoint($result);
foreach($arr as $v){
$pstr= '/.'.$v.'/';
foreach($cards as $c) {
if(preg_match($pstr,$c)){
$maxcard[]=$c;
$this-&showCard($this-&pukesort($maxcard));
$this-&showCard($this-&pukesort($cards));
运行显示效果:
ps:以上算是德州扑克的算法程序的90%内容,还有10%的内容是同花顺的判断,以及玩家分数的计算和胜负的判断,但是这些内容已经很简单,已经没有算法上的挑战性,因此《用PHP实现一个关于德州扑克算法的程序》就告一段落了。
本文已收录于以下专栏:
相关文章推荐
最近在自学PHP,感觉PHP很灵活。通过学习PHP,把以前学习C#、java时没有弄清楚的概念都理顺了,对OOP的认识又上升了一个台阶。为了检验最近的学习成果,决定写一个德扑的算法程序。这个程序很简单...
根据德扑的规则,有四条、葫芦、三条、两对等牌型,暂时放下同花和顺子的情况,先研究一下这些牌型的算法该怎么写。对于每个玩家来说,他面对的选择是从7张牌中选出5张牌组合成最大的牌型,所以输入参数是一个有7...
用上一篇文章的算法已经可以解决大部分牌型的计算,但是还缺少另外一种牌型的计算,那就是顺子。
顺子的特点是至少有5张点数连续的牌面,而且输入的数据是字母与数字混合的数组,不利于排序。因此必须对这样的情...
Open Broadcaster Software首先***FFmpeg添加源:
sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-next
自己想出的一种用于实际开发的AI模糊决策方法
博雅互动:德州扑克,全球挣钱
12:07:00 浏览数(425)
分享到:QQ空间新浪微博人人网腾讯微薄
这是一家典型的招风险投资喜欢的公司:三年前,...
他的最新文章
讲师:王哲涵
讲师:韦玮
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)