void ResultTracker::HandleTurn( int turn ) { UNUSED_ARG( turn ); if( turn > 1 ) { // turn 1 (first player) happens before game is in-effect [mulligan] QImage label; float score; int rank = mRankClassifier.DetectCurrentRank( &score, &label ); mRanks.push_back( rank ); DBG( "Turn %d. Set Rank %d", turn, rank ); METADATA( QString( "RANK_CLASSIFIER_%1_RANK" ).arg( turn ), rank ); METADATA( QString( "RANK_CLASSIFIER_%1_SCORE" ).arg( turn ), score ); } }
CPitchControl::CPitchControl(CConfigNode* pConfigNode) { METADATA("World", "Pitch-control"); m_sSetpointPitch = addStateVariable("setpoint-pitch","rad", -3.14159265, 3.14159265); m_sAttackAngle = addStateVariable("attack-angle","rad", -3.14159265, 3.14159265); m_sPitch= addStateVariable("pitch","rad", -3.14159265, 3.14159265); m_sPitchRate = addStateVariable("pitch-rate","rad/s",-0.1,0.1); m_sControlDeviation = addStateVariable("control-deviation","rad",-6.5,6.5); m_aPitch = addActionVariable("pitch","rad",-1.4,1.4); FILE_PATH_PARAM filename= FILE_PATH_PARAM(pConfigNode, "Set-Point-File","The setpoint file", "../config/world/pitch-control/setpoint.txt"); m_pSetpoint = new CFileSetPoint(filename.get()); m_pRewardFunction = new CRewardFunction(); m_pRewardFunction->addRewardComponent(new CToleranceRegionReward("control-deviation", 0.02, 1.0)); m_pRewardFunction->initialize(); }
void ResultQueue::Add( const Result& res ) { if( res.mode == MODE_SOLO_ADVENTURES ) { LOG( "Ignore solo adventure" ); return; } if( res.mode == MODE_TAVERN_BRAWL ) { LOG( "Ignore tavern brawl" ); return; } if( res.outcome == OUTCOME_UNKNOWN ) { LOG( "Outcome unknown. Skip result" ); METADATA( "PREVIOUS_RESULT_INVALID", "OUTCOME" ); return; } if( res.mode == MODE_UNKNOWN ) { LOG( "Mode unknown. Skip result" ); METADATA( "PREVIOUS_RESULT_INVALID", "MODE" ); return; } if( res.order == ORDER_UNKNOWN ) { LOG( "Order unknown. Skip result" ); METADATA( "PREVIOUS_RESULT_INVALID", "ORDER" ); return; } if( res.hero == CLASS_UNKNOWN ) { LOG( "Own Class unknown. Skip result" ); METADATA( "PREVIOUS_RESULT_INVALID", "OWN_CLASS" ); return; } if( res.opponent == CLASS_UNKNOWN ) { LOG( "Class of Opponent unknown. Skip result" ); METADATA( "PREVIOUS_RESULT_INVALID", "OPPONENT_CLASS" ); return; } // Clear some metadata if mode not ranked for( auto it : Metadata::Instance()->Map().toStdMap() ) { const QString& key = it.first; // Skip rank classification metadata for nonranked games if( key.startsWith( "RANK_CLASSIFIER" ) && res.mode != MODE_RANKED ) { Metadata::Instance()->Remove( key ); } } LOG( "Result: %s %s vs. %s as %s. Went %s", MODE_NAMES[ res.mode ], OUTCOME_NAMES[ res.outcome ], CLASS_NAMES[ res.opponent ], CLASS_NAMES[ res.hero ], ORDER_NAMES[ res.order ] ); // Try to upload immediately UploadResult( res.AsJson() ); }