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();
}
Example #3
0
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() );
}