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);
}
参数很难调;
总之一句话:开源节流;尽量少输钱,多挣钱。抓住主要因素
例如:对对手采取机器学习,如果方法不当,会拖累整个策略。
下面代码,仅供纪念与参考
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);
}
参数很难调;
总之一句话:开源节流;尽量少输钱,多挣钱。抓住主要因素
例如:对对手采取机器学习,如果方法不当,会拖累整个策略。
相关文章推荐
- 【转帖】常量指针与指针常量的区别
- uva 11552 dp
- <四>java数据结构与算法 插入排序
- POJ - 1515 Street Directions(无向图变有向图)
- yaml
- 面向对象,Java泛型篇
- LeetCode Different Ways to Add Parentheses
- uva 10534 dp
- HDU 1695 GCD (容斥 + 莫比乌斯反演)
- JAVA编程——static与final详解
- iOS开发-assign、retain、copy、strong、weak的区别
- 封装scrollView 循环滚动,tableViewCell(连载) mvc
- 交错正负数
- uva 1424 dp
- win7安装openssl,编译32位&64位
- Java基础之反射
- POJ - 3177 Redundant Paths(强连通分量)
- Gym - 100203I I WIN 网络流
- UVA 11584 dp
- 手动查杀skypee病毒(AutoIt3木马)