Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

Modules/BehaviorControl/GT2004BehaviorControl/GT2004DTT/DefaultOptionRating.cpp

Go to the documentation of this file.
00001 /**
00002 * @file DefaultOptionRating.cpp
00003 * 
00004 * Implementation of class DefaultOptionRating
00005 *
00006 */
00007 
00008 #include "DefaultOptionRating.h"
00009 #include "Tools/DynamicTeamTactic/RateableOptions.h"
00010 
00011 // defined in OpenChallengeSymbols.cpp
00012 #include "../GT2004Symbols/OpenChallengeSymbols.h"
00013 extern OCSetStatus2 ocstate;
00014 
00015 DefaultOptionRating::DefaultOptionRating(const BehaviorControlInterfaces& interfaces,
00016                                          CollectedBeliefs& collectedBeliefs,
00017                                          ChooserRaterInterfaces& chooserRaterInterfaces)
00018 : OptionRating(interfaces, collectedBeliefs, chooserRaterInterfaces)
00019 {
00020   for(int i=0; i<5; i++)
00021     ocrating[i] = 100;
00022 }
00023 
00024 // doing some preCalculations... used in rateOptions()
00025 void DefaultOptionRating::doPreCals()
00026 {
00027   if (ocstate == dtt_initial)
00028   {
00029     ocrating[0] = 0;
00030     ocrating[1] = 0;
00031     ocrating[2] = 0;
00032     ocrating[3] = 0;
00033     ocrating[4] = 0;
00034     ocrating[getPlayer().getPlayerNumber()] = 100;
00035   }
00036 }
00037 
00038 void DefaultOptionRating::rateOptions()
00039 {
00040   int tmpno = (int)(getPlayer().getPlayerNumber());
00041   if (tmpno != Player::undefinedPlayerNumber)
00042   {
00043     SingleBeliefs& mySingleBeliefs = collectedBeliefs.singleBeliefs[tmpno];
00044     int i;
00045     if (gameControlData.data.state == ROBOCUP_STATE_PENALIZED)
00046     {
00047       for (i=0; i < RateableOptions::numOfOptions; ++i) 
00048         mySingleBeliefs.ratedOptions[i] = 0; 
00049     }
00050     else
00051     {
00052    
00053       // common calculations, that can be used in more than one Rating to
00054       // reduce redundant calculations, the variables are deklared in the 
00055       // header to enabled subroutines to read/write these variables...
00056       doPreCals();
00057 
00058     /***********************************************************************************/
00059       // rate all your options here ;-)
00060       // from 0 to 100; 0 is bad, 100 is good
00061       //
00062       for (i=0; i < RateableOptions::numOfOptions; ++i) {
00063         switch((RateableOptions::OptionID)i) {
00064 
00065           case RateableOptions::stand: 
00066             mySingleBeliefs.ratedOptions[i] = 100; 
00067             break;
00068 
00069           case RateableOptions::doNothing: 
00070             mySingleBeliefs.ratedOptions[i] = 100; 
00071             break;
00072 
00073           case RateableOptions::keepOption: 
00074             mySingleBeliefs.ratedOptions[i] = 100; 
00075             break;
00076 
00077 
00078           case RateableOptions::intro: 
00079             mySingleBeliefs.ratedOptions[i] = 100;
00080             if ((ocstate == dtt_initial)
00081                )  mySingleBeliefs.ratedOptions[i] = 0;
00082             break;
00083           case RateableOptions::extro: 
00084             mySingleBeliefs.ratedOptions[i] = 100;
00085             if ((ocstate != dtt_finished)
00086                &&(ocstate != dtt_finishedWalkWithBridge)
00087                &&(ocstate != dtt_finishedExtro)
00088                )  mySingleBeliefs.ratedOptions[i] = 0;
00089             break;
00090           case RateableOptions::finished: 
00091             mySingleBeliefs.ratedOptions[i] = 100;
00092             if ((ocstate != dtt_finished)
00093                &&(ocstate != dtt_finishedExtro)
00094                )  mySingleBeliefs.ratedOptions[i] = 0;
00095             break;
00096           case RateableOptions::gotoBitePos1:
00097             mySingleBeliefs.ratedOptions[i] = ocrating[0];
00098             if ( (ocstate != dtt_finishedIntro) &&
00099                  (ocstate != dtt_finishedGoToBitePoint)
00100                &&(ocstate != dtt_finishedBite)
00101                &&(ocstate != dtt_loseBitePoints)
00102                &&(ocstate != dtt_finishedExtro)
00103                )  mySingleBeliefs.ratedOptions[i] = 0;
00104             break;
00105           case RateableOptions::gotoBitePos2: 
00106             mySingleBeliefs.ratedOptions[i] = ocrating[1];
00107             if ((ocstate != dtt_finishedIntro) &&
00108                 (ocstate != dtt_finishedGoToBitePoint)
00109                &&(ocstate != dtt_finishedBite)
00110                &&(ocstate != dtt_loseBitePoints)
00111                &&(ocstate != dtt_finishedExtro)
00112                )  mySingleBeliefs.ratedOptions[i] = 0;
00113             break;
00114           case RateableOptions::gotoBitePos3: 
00115             mySingleBeliefs.ratedOptions[i] = ocrating[2];
00116             if ((ocstate != dtt_finishedIntro) &&
00117                  (ocstate != dtt_finishedGoToBitePoint)
00118                &&(ocstate != dtt_finishedBite)
00119                &&(ocstate != dtt_loseBitePoints)
00120                &&(ocstate != dtt_finishedExtro)
00121                )  mySingleBeliefs.ratedOptions[i] = 0;
00122             break;
00123           case RateableOptions::gotoBitePos4: 
00124             mySingleBeliefs.ratedOptions[i] = ocrating[3];
00125             if ((ocstate != dtt_finishedIntro) &&
00126                  (ocstate != dtt_finishedGoToBitePoint)
00127                &&(ocstate != dtt_finishedBite)
00128                &&(ocstate != dtt_loseBitePoints)
00129                &&(ocstate != dtt_finishedExtro)
00130                )  mySingleBeliefs.ratedOptions[i] = 0;
00131             break;
00132           case RateableOptions::bitePos1: 
00133             mySingleBeliefs.ratedOptions[i] = mySingleBeliefs.ratedOptions[RateableOptions::gotoBitePos1];
00134             if ((ocstate != dtt_finishedGoToBitePoint)
00135                &&(ocstate != dtt_finishedBite)
00136                &&(ocstate != dtt_loseBitePoints)
00137                &&(ocstate != dtt_finishedExtro)
00138                )  mySingleBeliefs.ratedOptions[i] = 0;
00139             break;
00140           case RateableOptions::bitePos2: 
00141             mySingleBeliefs.ratedOptions[i] = mySingleBeliefs.ratedOptions[RateableOptions::gotoBitePos2];;
00142             if ((ocstate != dtt_finishedGoToBitePoint)
00143                &&(ocstate != dtt_finishedBite)
00144                &&(ocstate != dtt_loseBitePoints)
00145                &&(ocstate != dtt_finishedExtro)
00146                )  mySingleBeliefs.ratedOptions[i] = 0;
00147             break;
00148           case RateableOptions::bitePos3: 
00149             mySingleBeliefs.ratedOptions[i] = mySingleBeliefs.ratedOptions[RateableOptions::gotoBitePos3];
00150             if ((ocstate != dtt_finishedGoToBitePoint)
00151                &&(ocstate != dtt_finishedBite)
00152                &&(ocstate != dtt_loseBitePoints)
00153                &&(ocstate != dtt_finishedExtro)
00154                )  mySingleBeliefs.ratedOptions[i] = 0;
00155             break;
00156           case RateableOptions::bitePos4: 
00157             mySingleBeliefs.ratedOptions[i] = mySingleBeliefs.ratedOptions[RateableOptions::gotoBitePos4];
00158             if ((ocstate != dtt_finishedGoToBitePoint)
00159                &&(ocstate != dtt_finishedBite)
00160                &&(ocstate != dtt_loseBitePoints)
00161                &&(ocstate != dtt_finishedExtro)
00162                )  mySingleBeliefs.ratedOptions[i] = 0;
00163             break;
00164           case RateableOptions::movePos1: 
00165             mySingleBeliefs.ratedOptions[i] = mySingleBeliefs.ratedOptions[RateableOptions::bitePos1];
00166             if ((ocstate != dtt_finishedBite)
00167                &&(ocstate != dtt_finishedExtro)
00168                )  mySingleBeliefs.ratedOptions[i] = 0;
00169             break;
00170           case RateableOptions::movePos2: 
00171             mySingleBeliefs.ratedOptions[i] = mySingleBeliefs.ratedOptions[RateableOptions::bitePos2];
00172             if ((ocstate != dtt_finishedBite)
00173                &&(ocstate != dtt_finishedExtro)
00174                )  mySingleBeliefs.ratedOptions[i] = 0;
00175             break;
00176           case RateableOptions::movePos3: 
00177             mySingleBeliefs.ratedOptions[i] = mySingleBeliefs.ratedOptions[RateableOptions::bitePos3];
00178             if ((ocstate != dtt_finishedBite)
00179                &&(ocstate != dtt_finishedExtro)
00180                )  mySingleBeliefs.ratedOptions[i] = 0;
00181             break;
00182           case RateableOptions::movePos4: 
00183             mySingleBeliefs.ratedOptions[i] = mySingleBeliefs.ratedOptions[RateableOptions::bitePos4];
00184             if ((ocstate != dtt_finishedBite)
00185                &&(ocstate != dtt_finishedExtro)
00186                )  mySingleBeliefs.ratedOptions[i] = 0;
00187             break;
00188           case RateableOptions::gotoBridge: 
00189             mySingleBeliefs.ratedOptions[i] = ocrating[4];
00190             if ((ocstate != dtt_finishedIntro)&&
00191                (ocstate != dtt_finishedExtro)
00192                &&(ocstate != dtt_finishedGoToBridge)
00193                &&(ocstate != dtt_finishedClimbBridge)
00194                &&(ocstate != dtt_finishedWalkWithBridge)
00195                )  mySingleBeliefs.ratedOptions[i] = 0;
00196             break;
00197           case RateableOptions::climbBridge: 
00198             mySingleBeliefs.ratedOptions[i] = mySingleBeliefs.ratedOptions[RateableOptions::gotoBridge];
00199             if ((ocstate != dtt_finishedExtro)
00200                &&(ocstate != dtt_finishedGoToBridge)
00201                &&(ocstate != dtt_finishedClimbBridge)
00202                &&(ocstate != dtt_finishedWalkWithBridge)
00203                )  mySingleBeliefs.ratedOptions[i] = 0;
00204             break;
00205           case RateableOptions::moveBridge: 
00206             mySingleBeliefs.ratedOptions[i] = mySingleBeliefs.ratedOptions[RateableOptions::climbBridge];
00207             if ((ocstate != dtt_finishedExtro)
00208                &&(ocstate != dtt_finishedClimbBridge)
00209                &&(ocstate != dtt_finishedWalkWithBridge)
00210                )  mySingleBeliefs.ratedOptions[i] = 0;
00211             break;
00212           case RateableOptions::waitForBiteDogs: 
00213             mySingleBeliefs.ratedOptions[i] = mySingleBeliefs.ratedOptions[RateableOptions::climbBridge];
00214             if ((ocstate != dtt_finishedExtro)
00215                &&(ocstate != dtt_finishedClimbBridge)
00216                &&(ocstate != dtt_finishedWalkWithBridge)
00217                )  mySingleBeliefs.ratedOptions[i] = 0;
00218             break;
00219 
00220           default: 
00221             mySingleBeliefs.ratedOptions[i] = 0;
00222             break;
00223         }
00224       }
00225       mySingleBeliefs.ratedOptions[chooserRaterInterfaces.lastChoosenOption] +=
00226         RateableOptions::getRatingBoost(chooserRaterInterfaces.lastChoosenOption);
00227 
00228   LEDRequest::BlinkMode bmode = LEDRequest::oooo;
00229   if(mySingleBeliefs.ratedOptions[RateableOptions::gotoBitePos1] > 25)
00230     bmode = LEDRequest::looo;
00231   if(mySingleBeliefs.ratedOptions[RateableOptions::gotoBitePos1] > 50)
00232     bmode = LEDRequest::lloo;
00233   if(mySingleBeliefs.ratedOptions[RateableOptions::gotoBitePos1] > 75)
00234     bmode = LEDRequest::lllo;
00235   ledRequest.faceLED[1] = bmode;
00236 
00237   bmode = LEDRequest::oooo;
00238   if(mySingleBeliefs.ratedOptions[RateableOptions::gotoBitePos2] > 25)
00239     bmode = LEDRequest::looo;
00240   if(mySingleBeliefs.ratedOptions[RateableOptions::gotoBitePos2] > 50)
00241     bmode = LEDRequest::lloo;
00242   if(mySingleBeliefs.ratedOptions[RateableOptions::gotoBitePos2] > 75)
00243     bmode = LEDRequest::lllo;
00244   ledRequest.faceLED[0] = bmode;
00245 
00246   bmode = LEDRequest::oooo;
00247   if(mySingleBeliefs.ratedOptions[RateableOptions::gotoBitePos3] > 25)
00248     bmode = LEDRequest::looo;
00249   if(mySingleBeliefs.ratedOptions[RateableOptions::gotoBitePos3] > 50)
00250     bmode = LEDRequest::lloo;
00251   if(mySingleBeliefs.ratedOptions[RateableOptions::gotoBitePos3] > 75)
00252     bmode = LEDRequest::lllo;
00253   ledRequest.faceLED[3] = bmode;
00254 
00255   bmode = LEDRequest::oooo;
00256   if(mySingleBeliefs.ratedOptions[RateableOptions::gotoBitePos4] > 25)
00257     bmode = LEDRequest::looo;
00258   if(mySingleBeliefs.ratedOptions[RateableOptions::gotoBitePos4] > 50)
00259     bmode = LEDRequest::lloo;
00260   if(mySingleBeliefs.ratedOptions[RateableOptions::gotoBitePos4] > 75)
00261     bmode = LEDRequest::lllo;
00262   ledRequest.faceLED[2] = bmode;
00263 
00264     } 
00265     // set timestamp - only used locally. The TimeStamps of the other dogs
00266     // come from TeamMessageCollection and are the TimeStamps, when the
00267     // data was send. Don't worry. This doesn't cause any problems. Just
00268     // remember that we're single threadet ;-)
00269     mySingleBeliefs.timeStamp = SystemCall::getCurrentSystemTime();
00270   } // endif playernumber
00271 }
00272 
00273 
00274 /*
00275  * Change log :
00276  * $Log: DefaultOptionRating.cpp,v $
00277  * Revision 1.1  2004/07/22 22:38:31  kerdels
00278  * added DTT used by Open Challenge, RIP and Xabsl-Options will follow
00279  *
00280  *
00281  */

Generated on Thu Sep 23 19:57:26 2004 for GT2004 by doxygen 1.3.6