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 */