⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 srpdribble.cpp

📁 RoboCup 2D 仿真组老牌强队Mersad 2005的完整源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		if (!worldModel->getCurKickCalculate().getSimulate(i).existFastestOppPlayer())		{			oppBallVectorValue[i] = 1;			continue;		}				oppFastestPoint = worldModel->getCurKickCalculate().getSimulate(i).						getFastestOppInterPlayer().getPlayer().getPos();		meToInterPointVector.setByPoints(worldModel->getBody().getPos(), myGoToBallPoint[i]);		oppToInterPointVector.setByPoints(oppFastestPoint, myGoToBallPoint[i]);				oppDeltaDir = meToInterPointVector.getDirection() - oppToInterPointVector.getDirection();		oppDeltaDir = Degree::normalizeAngle(oppDeltaDir);		oppDeltaDir = fabs(oppDeltaDir);				oppBallVectorValue[i] = pow(Degree::cos(oppDeltaDir), 3);	}}void SRPDribble::getBreakDefenseLineValue(){	float oppOffsideLine = worldModel->getOppLocalOffLine();	if (oppOffsideLine == -0xFFFF)		oppOffsideLine = worldModel->getOppOffsideLine();	for (unsigned i = 0; i < worldModel->getCurKickCalculate().getSimulatesNum(); i++)	{	    if (!worldModel->getCurKickCalculate().getSimulate(i).isValid())	    {			breakDefenseLineValue[i] = -999;			continue;	    }	    if (!worldModel->getCurKickCalculate().getSimulate(i).existFastestPlayer())	    {			breakDefenseLineValue[i] = -999;	    	continue;	    }			if (oppOffsideLine == worldModel->getBall().getPos().getX())			breakDefenseLineValue[i] = 5.9999;		else		{			breakDefenseLineValue[i] = worldModel->getCurKickCalculate().getSimulate(i).						getFastestInterPlayer().getInterPoint().x - oppOffsideLine;			if (breakDefenseLineValue[i] < 0)				breakDefenseLineValue[i] = 0;							if (breakDefenseLineValue[i] > 8)				breakDefenseLineValue[i] = 8; 		}	}}void SRPDribble::getSeeInformationValue(){    Vector neckSimVector;	for (unsigned i = 0; i < worldModel->getCurKickCalculate().getSimulatesNum(); i++)	{	    if (!worldModel->getCurKickCalculate().getSimulate(i).isValid())	    {			seeInformationValue[i] = -999;			continue;	    }	    if (!worldModel->getCurKickCalculate().getSimulate(i).existFastestPlayer())	    {			seeInformationValue[i] = -999;	    	continue;	    }		    neckSimVector.setByPoints(Point(worldModel->getBody().getPos().getX(), worldModel->getBody().getPos().getY()), myGoToBallPoint[i]);		float seeInfoValue = 0.9323;		seeInfoValue = worldModel->getSeeDeltaCycle(neckSimVector.getDirection(), 0.5);		seeInformationValue[i] = 0.333 * (seeInfoValue * seeInfoValue) + seeInfoValue;	    seeInformationValue[i] *= -1; // It is a big TOF.	    //////////	    float deltaAngleToSarePa;	    deltaAngleToSarePa = worldModel->getBody().getBodyDir() - neckSimVector.getDirection();	    deltaAngleToSarePa = Degree::normalizeAngle(deltaAngleToSarePa);	    deltaAngleToSarePa = fabs(deltaAngleToSarePa);		if(deltaAngleToSarePa > 25)			seeInformationValue[i] -= (deltaAngleToSarePa / 5) * .1;	    //////////	    if(seeInformationValue[i] < -8)			seeInformationValue[i] = -100;	}}void SRPDribble::getQuantomicStaminaValue(){	float subStamina;	for (unsigned i = 0; i < worldModel->getCurKickCalculate().getSimulatesNum(); i++)	{    	if (!worldModel->getCurKickCalculate().getSimulate(i).isValid())		{			quantomicStaminaValue[i] = false;			continue;		}	    	if (!worldModel->getCurKickCalculate().getSimulate(i).existFastestPlayer())		{			quantomicStaminaValue[i] = false;			continue;		} 	    if (sarePaTime[i] < 0)		{			quantomicStaminaValue[i] = false;			continue;		}		subStamina = worldModel->getBody().getStamina() + 				sarePaTime[i] * worldModel->getBody().getStaminaIncMax() - 				(sarePaTime[i] - 1) * 100; // 100 = default dash power#ifdef SRPDRIBBLE_LOGLEVEL1		LOG << "subStamina of " << i << "th sarePa : " << subStamina << endl;#endif				if (subStamina < 1400)			quantomicStaminaValue[i] = false;		else				quantomicStaminaValue[i] = true;	}}float SRPDribble::getValue(const Library &library){	LOG << "SRPDribble::getValue" << endl;    deltaTimeWeightRate = 3;    nextStatusWeightRate = 4;    seeInformationWeightRate = 1.5;    pathWeightRate = .8;    dangerFieldWeightRate = 150;    speedWeightRate = 4;	breakDefenseLineWeightRate = 4;	oppBallVectorWeightRate = 0;        getNextStatusValue();    getDangerActionValue();    getSeeInformationValue();        getPathValue();    getDangerFieldValue();    getSpeedValue();	getBreakDefenseLineValue();	getOppBallVectorValue();	getQuantomicStaminaValue();        bestSarePaCounter = 0;    	for (unsigned i = 0; i < worldModel->getCurKickCalculate().getSimulatesNum(); i++)	{	    sarePaWeight[i] = nextStatusValue[i] * nextStatusWeightRate;	    sarePaWeight[i] += deltaToFirstTime[i] * deltaTimeWeightRate;      	    sarePaWeight[i] += seeInformationValue[i] * seeInformationWeightRate;      	    sarePaWeight[i] += pathValue[i] * pathWeightRate;      	    sarePaWeight[i] += dangerFieldValue[i] * dangerFieldWeightRate;      	    sarePaWeight[i] += speedValue[i] * speedWeightRate;      	    sarePaWeight[i] += breakDefenseLineValue[i] * breakDefenseLineWeightRate;      	    sarePaWeight[i] += oppBallVectorValue[i] * oppBallVectorWeightRate;      	    if (!quantomicStaminaValue[i])			sarePaWeight[i] -= 10001;		if (sarePaTime[i] > 10)			sarePaWeight[i] -= pow((sarePaTime[i] - 10), 3);		if (sarePaTime[i] > 6 && deltaToFirstTime[i] == 0)			sarePaWeight[i] -= 10001;	  		if (sarePaTime[i] == 1)		    sarePaWeight[i] -= 10001;						if (worldModel->getCurKickCalculate().getSimulate(i).			isValid() &&			worldModel->getCurKickCalculate().getSimulate(i).			existFastestPlayer() &&			worldModel->getCurKickCalculate().getSimulate(i).			existFastestOppPlayer())		{	#ifdef SRPDRIBBLE_LOGLEVEL1						LOG << "])" << i << "([ FastestOpp : " << worldModel->getCurKickCalculate().getSimulate(i).			getFastestOppInterPlayer().getPlayer().getPos() << endl;#endif		}		if (worldModel->getCurKickCalculate().getSimulate(i).			isValid() &&			worldModel->getCurKickCalculate().getSimulate(i).			existFastestPlayer() &&			worldModel->getCurKickCalculate().getSimulate(i).			existFastestOppPlayer() &&			worldModel->getCurKickCalculate().getSimulate(i).			getFastestOppInterPlayer().getPlayer().isGoalie() &&			deltaToFirstTime[i] / deltaTimeWeightRate <= 1)		{#ifdef SRPDRIBBLE_LOGLEVEL1			LOG << "))" << i << "((opponent goalie is in the SRP path" << endl; #endif			sarePaWeight[i] -= 10000;				}		if (deltaToFirstTime[i] <= 0)			sarePaWeight[i] -= 35;	    if(sarePaWeight[i] > sarePaWeight[bestSarePaCounter])	    {			bestSarePaCounter = i;	    }#ifdef SRPDRIBBLE_LOGLEVEL1LOG << "---------------------[)" << i << "(]--------------------" << endl;//LOG << "Command               : " << //	worldModel->getCurKickCalculate().//	getSimulate(i).getKickCommand().toString() << endl;LOG << "Point                 : " << 	myGoToBallPoint[i] << endl;	    LOG << "SarePa SeeInformation   : " << 			seeInformationValue[i] * 			seeInformationWeightRate << endl;		    LOG << "SarePa nextStatus       : " << 			nextStatusValue[i] * 			nextStatusWeightRate << endl;		    LOG << "SarePa deltaToFirstTime : " << 			deltaToFirstTime[i] * 			deltaTimeWeightRate << endl;		    LOG << "SarePa sarePaTime       : " << 			sarePaTime[i] << endl;		    LOG << "SarePa oppGtbTime       : " << 			oppGtbTime[i] << endl;		    LOG << "SarePa path             : " << 			pathValue[i] * 			pathWeightRate << endl;		    LOG << "SarePa dangerField      : " << 			dangerFieldValue[i] * 			dangerFieldWeightRate << endl;		    LOG << "SarePa speed            : " << 			speedValue[i] * 			speedWeightRate << endl;		    LOG << "SarePa breakDefense     : " << 			breakDefenseLineValue[i] * 			breakDefenseLineWeightRate << endl;		    LOG << "SarePa oppBallVector    : " << 			oppBallVectorValue[i] * 			oppBallVectorWeightRate << endl;		    LOG << "SAREPA         TOTAL    : " << 			sarePaWeight[i] << endl;		#endif	}    	LOG << "bestSarePaWeight : " << sarePaWeight[bestSarePaCounter] << endl;	LOG << "bestSarePaCounter : " << bestSarePaCounter << endl;	LOG << "worldModel->getCurKickCalculate().getSimulatesNum() : "		<< 	worldModel->getCurKickCalculate().getSimulatesNum() << endl;		if (worldModel->getCurKickCalculate().getSimulate(bestSarePaCounter).isValid())		srpCommand = new KickCommand(*dynamic_cast<const KickCommand *>			(&worldModel->getCurKickCalculate().getSimulate(bestSarePaCounter).getKickCommand()));	else		srpCommand = NULL;	if (worldModel->getBall().getPos().getX() > 46)		sarePaWeight[bestSarePaCounter] -= 10009;	sarePaWeight[bestSarePaCounter] += oppBallVectorValue[bestSarePaCounter] *										oppBallVectorWeightRate;	if (breakDefenseLineValue[bestSarePaCounter] <= 0 && 		!(worldModel->getBall().getPos().getX() > 25 ||		((worldModel->getBody().getPostNum() == 6 && 		worldModel->getBall().getPos().getY() > 15) || 		(worldModel->getBody().getPostNum() == 7 &&  		worldModel->getBall().getPos().getY() < -15))))		sarePaWeight[bestSarePaCounter] = -9090;	else		sarePaWeight[bestSarePaCounter] += breakDefenseLineValue[bestSarePaCounter] * 2;	if (pathValue[bestSarePaCounter] < 10.2)		sarePaWeight[bestSarePaCounter] -= 35 + (10.2 - pathValue[bestSarePaCounter]) * 20;	if (oppGtbTime[bestSarePaCounter] == 1 && 		deltaToFirstTime[bestSarePaCounter] == 0)	{		LOG << "the target point of best sarepa counter was in opp kickable" << endl;			sarePaWeight[bestSarePaCounter] -= 10000;	}//	if (worldModel->getCurKickCalculate().getSimulate(bestSarePaCounter).//		existFastestPlayer() &&//		worldModel->getCurKickCalculate().getSimulate(bestSarePaCounter).//		existFastestOppPlayer() &&//		worldModel->getCurKickCalculate().getSimulate(bestSarePaCounter).//		getFastestOppInterPlayer().getPlayer().isGoalie() &&//		deltaToFirstTime[bestSarePaCounter] <= 1)//	{//		LOG << "opp fastest player is goalie" << endl;	//		sarePaWeight[bestSarePaCounter] -= 100;//	}			float latestSarePaValue = sarePaWeight[bestSarePaCounter];				//	if(worldModel->getBody().getStamina() <= 1800)//		latestSarePaValue -= 400;//    if(worldModel->getBody().getStamina() > 1800 && worldModel->getBody().getStamina() <= 2200)//		latestSarePaValue -= 50;			if (latestSarePaValue < 15)		latestSarePaValue = -10000;    return latestSarePaValue;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -