您的位置:首页 > 其它

2015华为软件精英挑战赛德州扑克之后期策略

2015-08-16 00:32 363 查看
其实,后期策略有很多麻烦的问题。其中之一就是依据蒙特卡洛方法模拟出来的胜率,我们对其进行分段处理时,会有不连续的问题。后来我们采取数学建模的方法,化离散为连续,解觉了这个问题

下面代码,仅供纪念与参考

void flopraise00strategy(double weight)

{

if (callmoney == 0)

snprintf(reg_msg, sizeof(reg_msg)-1, "raise %d \n", 2*blindmoney);

else if (totalpot <= 20 * blindmoney )

snprintf(reg_msg, sizeof(reg_msg)-1, "raise %d \n", 4*blindmoney);

else

snprintf(reg_msg, sizeof(reg_msg)-1, "raise %d \n", totalpot/2);

}

void flopraise01strategy(double weight,char uptime)

{

if(player[myid].jetton<=40*blindmoney && player[myid].money>blindmoney)

{

if (callmoney == 0)

snprintf(reg_msg, sizeof(reg_msg)-1, "raise %d \n", 2*blindmoney);

else if (totalpot <= 20 * blindmoney )

snprintf(reg_msg, sizeof(reg_msg)-1, "raise %d \n", 4*blindmoney);

else

snprintf(reg_msg, sizeof(reg_msg)-1, "raise %d \n", totalpot/2);

}

else

{

int upline=max( int( (uptime+8-seatnum)*blindmoney*weight*weight),int(totalpot*weight*weight+blindmoney) );

if(callmoney>upline)

snprintf(reg_msg, sizeof(reg_msg) - 1, "fold \n");

else if (callmoney >= 5*blindmoney)

snprintf(reg_msg, sizeof(reg_msg)-1, "call \n");

else

{

int raisemoney=upline-callmoney-player[myid].bet; //投入到 1200

if(raisemoney>0)

{

if(callmoney>=3*blindmoney) //对方有大牌,我们可以加大注

snprintf(reg_msg, sizeof(reg_msg) - 1, "raise %d \n",callmoney);

else

snprintf(reg_msg, sizeof(reg_msg) - 1, "raise %d \n",2*blindmoney);

}

else

snprintf(reg_msg, sizeof(reg_msg) - 1, "call \n");

}

}

//freopen("siyuan.txt", "a", stdout);

//printf("jushu,%dcallmoney,%d,myaction,%s weight,%f,upline,%d,\n",JUSHU,callmoney,player[myid].action.c_str(),weight,upline);

}

void flopraise1strategy(double weight,char uptime)

{

int upline=max( int ((uptime+8-seatnum)*blindmoney*weight*weight),int(totalpot*weight*weight+blindmoney) );

if(callmoney>upline)

snprintf(reg_msg, sizeof(reg_msg) - 1, "fold \n");

else if (callmoney >= 3*blindmoney)

snprintf(reg_msg, sizeof(reg_msg)-1, "call \n");

else

{

int raisemoney=upline-callmoney-player[myid].bet; //投入到 1200

if(raisemoney>0)

{

snprintf(reg_msg, sizeof(reg_msg) - 1, "raise %d \n",4*blindmoney);

}

else

snprintf(reg_msg, sizeof(reg_msg) - 1, "check \n");

//freopen("siyuan.txt", "a", stdout);

//printf("jushu,%dcallmoney,%d,myaction,%s weight,%f,upline,%d,\n",JUSHU,callmoney,player[myid].action.c_str(),weight,upline);

}

}

void floptigerstrategy(double weight,char uptime)

{

int upline= int ((uptime+8-seatnum)*blindmoney*weight*weight);

if(callmoney==0)

{

if(tigerflag==0)

{

snprintf(reg_msg, sizeof(reg_msg)-1, "raise %d \n", blindmoney);

tigerflag=1;

}

else

snprintf(reg_msg, sizeof(reg_msg)-1, "check \n");

}

else if(callmoney<=upline)

snprintf(reg_msg, sizeof(reg_msg)-1, "call \n");

else

snprintf(reg_msg, sizeof(reg_msg)-1, "fold \n");

//freopen("siyuan.txt", "a", stdout);

//printf("jushu,%dcallmoney,%d,myaction,%s weight,%f,upline,%d,\n",JUSHU,callmoney,player[myid].action.c_str(),weight,upline);

}

void flopcallstrategy(double weight,char uptime)

{

int upline= int ((uptime+8-seatnum)*blindmoney*weight*weight);

if(callmoney>upline)

snprintf(reg_msg, sizeof(reg_msg) - 1, "fold \n");

else

snprintf(reg_msg, sizeof(reg_msg) - 1, "call \n");

//freopen("siyuan.txt", "a", stdout);

//printf("jushu,%dcallmoney,%d,myaction,%s weight,%f,upline,%d,\n",JUSHU,callmoney,player[myid].action.c_str(),weight,upline);

}

void flopfoldstrategy()

{

if(callmoney==0)

snprintf(reg_msg, sizeof(reg_msg)-1, "call \n");

else

snprintf(reg_msg, sizeof(reg_msg)-1, "fold \n");

}

void aiflop3(double weight)

{

//int upline;

//upline= int ((uptime+8-seatnum)*blindmoney*weight*weight);

if (callmoney>player[myid].jetton) callmoney = player[myid].jetton; //我们只能跟注这么多了

if(seatnum>=4)

{

if(livenum>=4)

{

if(weight>0.97)

flopraise00strategy(weight);

else if(weight>0.93)

flopraise01strategy(weight,20);

else if(weight>0.5)

flopraise1strategy(weight,20);

else if(weight>0.3)

{

if(myrelativeid2==2||myrelativeid2==3) //sb || bb

flopcallstrategy(weight,20);

else if(myrelativeid==1||myrelativeid==2) //button button-1

floptigerstrategy(weight,20);

else

{

if(weight>0.4)

floptigerstrategy(weight,20);

else

flopcallstrategy(weight,20);

}

}

else

flopfoldstrategy();

}

else if(livenum==3)

{

if(weight>0.97)

flopraise00strategy(weight);

else if(weight>0.93)

flopraise01strategy(weight,22);

else if(weight>0.5)

flopraise1strategy(weight,22);

else if(weight>0.3)

floptigerstrategy(weight,22);

else

flopfoldstrategy();

}

else

{

if(weight>0.97)

flopraise00strategy(weight);

else if(weight>0.93)

flopraise01strategy(weight,25);

else if(weight>0.5)

flopraise1strategy(weight,25);

else if(weight>0.3)

floptigerstrategy(weight,25);

else

flopfoldstrategy();

}

}

else if(seatnum==3)

{

if(livenum==3)

{

if(weight>0.97)

flopraise00strategy(weight);

else if(weight>0.93)

flopraise01strategy(weight,22);

else if(weight>0.5)

flopraise1strategy(weight,22);

else if(weight>0.3)

floptigerstrategy(weight,22);

else

flopfoldstrategy();

}

else

{

if(weight>0.97)

flopraise00strategy(weight);

else if(weight>0.93)

flopraise01strategy(weight,25);

else if(weight>0.5)

flopraise1strategy(weight,25);

else if(weight>0.3)

floptigerstrategy(weight,25);

else

flopfoldstrategy();

}

}

else

{

if(weight>0.97)

flopraise00strategy(weight);

else if(weight>0.93)

flopraise01strategy(weight,25);

else if(weight>0.5)

flopraise1strategy(weight,25);

else if(weight>0.3)

floptigerstrategy(weight,25);

else

flopfoldstrategy();

}

freopen("siyuan.txt", "a", stdout);

printf("jushu,%dcallmoney,%d,myaction,%s weight,%f\n",JUSHU,callmoney,player[myid].action.c_str(),weight);

}

参数很难调;

总之一句话:开源节流;尽量少输钱,多挣钱。抓住主要因素

例如:对对手采取机器学习,如果方法不当,会拖累整个策略。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: