📄 srpdribble.cpp
字号:
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 + -