其实,后期策略有很多麻烦的问题。其中之一就是依据蒙特卡洛方法模拟出来的胜率,我们对其进行分段处理时,会有不连续的问题。后来我们采取数学建模的方法,化离散为连续,解觉了这个问题
下面代码,仅供纪念与参考
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) //对方有大牌,我们可以加大注