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

Tools/DynamicTeamTactic/CollectedBeliefs.cpp

Go to the documentation of this file.
00001 /**
00002  * @file CollectedBeliefs.cpp
00003  *
00004  * Implementation of class CollectedBeliefs.
00005  */
00006 
00007 #include "CollectedBeliefs.h"
00008 
00009 
00010 
00011 /** Implementation of SingleBeliefs*/
00012 
00013 SingleBeliefs::SingleBeliefs()
00014 {
00015   int i;
00016   for (i = 0; i < RateableOptions::numOfOptions; ++i)
00017     ratedOptions[i].reset(1);
00018   timeStamp = SystemCall::getCurrentSystemTime();
00019   for (i = 0; i < RateableOptions::numOfOptionClasses; ++i)
00020     lastBestOpt[i] = RateableOptions::getClassMember((RateableOptions::OptionClassID)(i+RateableOptions::numOfOptions),0);
00021 }
00022 
00023 SingleBeliefs::~SingleBeliefs()
00024 {
00025 }
00026 
00027 RateableOptions::OptionID SingleBeliefs::getBestOptionInOptionClass(RateableOptions::OptionClassID id)
00028 {
00029   RateableOptions::OptionID maxopt = lastBestOpt[(int)(id)-RateableOptions::numOfOptions];
00030   int maxval = ratedOptions[(int)(maxopt)];
00031   int ct = RateableOptions::getOptionClassChangeThreshold(id);
00032 
00033   for (int i = 0; i < RateableOptions::getNumberOfClassMembers(id); ++i)
00034     if (ratedOptions[(int)(RateableOptions::getClassMember(id,i))] >= (maxval+ct))
00035     {
00036       maxval = ratedOptions[(int)(RateableOptions::getClassMember(id,i))];
00037       maxopt = RateableOptions::getClassMember(id,i);
00038     }
00039 
00040   lastBestOpt[(int)(id)-RateableOptions::numOfOptions] = maxopt;
00041   return maxopt;
00042 }
00043 
00044 
00045 In& operator>>(In& stream,SingleBeliefs& singleBeliefs)
00046 {
00047   int tmp = 0;
00048   for (int i = 0; i < RateableOptions::numOfOptions; ++i){
00049     stream.read(&tmp,sizeof(int));
00050     singleBeliefs.ratedOptions[i] = tmp;
00051   }
00052   return stream;
00053 }
00054 
00055 
00056 Out& operator<<(Out& stream,SingleBeliefs& singleBeliefs)
00057 {
00058   int tmp = 0;
00059   for (int i = 0; i < RateableOptions::numOfOptions; ++i){
00060     tmp = singleBeliefs.ratedOptions[i];
00061     stream.write(&tmp,sizeof(int));
00062   }
00063   return stream;
00064 }
00065 
00066 
00067 
00068 
00069 
00070 
00071 /** Implementation of CollectedBeliefs*/
00072 
00073 CollectedBeliefs::CollectedBeliefs(const BehaviorControlInterfaces& interfaces)
00074 : BehaviorControlInterfaces(interfaces)
00075 {
00076   for (int i=0; i < Player::numOfPlayerNumbers; ++i) {
00077     for (int j=0; j < RateableOptions::numOfOptions; ++j) {
00078       singleBeliefs[i].ratedOptions[j].reset(RateableOptions::getSlidingAverageRange(j));
00079     }
00080     singleBeliefs[i].timeStamp = SystemCall::getCurrentSystemTime();
00081   }
00082 
00083 }
00084 
00085 CollectedBeliefs::~CollectedBeliefs()
00086 {
00087 }
00088 
00089 void CollectedBeliefs::update()
00090 {
00091   // update the singleBeliefs ...
00092   // the BehaviorControlInterfaces should provide the needed information...
00093   // btw: the "own" SingleBeliefs is
00094   // singleBeliefs[(int)(getPlayer().getPlayerRole())]
00095 
00096 
00097   // due to some problems with aging based on timestamps from the other dogs
00098   // we use the timestamp of the last change in a singleBeliefs structure...
00099   //bool somethingChanged;
00100 
00101   for (int i=0; i<Player::numOfPlayerNumbers-1; ++i)
00102   {
00103     if ((teamMessageCollection[i].isActual()) &&
00104         (teamMessageCollection[i].playerNumberOfSender != Player::undefinedPlayerNumber))
00105     {
00106       SingleBeliefs& actSingleBeliefs =
00107         singleBeliefs[(int)(teamMessageCollection[i].playerNumberOfSender)];
00108       /*
00109       somethingChanged = false;
00110       for (int j=0; j<RateableOptions::numOfOptions; ++j)
00111         if (actSingleBeliefs.ratedOptions[j] != 
00112               teamMessageCollection[i].behaviorTeamMessage.ratedOptions[j])
00113         {
00114           actSingleBeliefs.ratedOptions[j] =
00115             teamMessageCollection[i].behaviorTeamMessage.ratedOptions[j];
00116           somethingChanged = true;
00117         }
00118       if (somethingChanged)
00119         actSingleBeliefs.timeStamp = SystemCall::getCurrentSystemTime();
00120         */
00121       for (int j=0; j<RateableOptions::numOfOptions; ++j)
00122           actSingleBeliefs.ratedOptions[j] =
00123             teamMessageCollection[i].behaviorTeamMessage.ratedOptions[j];
00124       actSingleBeliefs.timeStamp = SystemCall::getCurrentSystemTime();
00125     }
00126   }
00127   
00128 }
00129 
00130 void CollectedBeliefs::broadcast()
00131 {
00132   // broadcast your singleBeliefs
00133   // maybe use the outgoingBehaviorTeamMessage property for this
00134   int tmpno = (int)(getPlayer().getPlayerNumber());
00135   if (tmpno != Player::undefinedPlayerNumber)
00136   {
00137     for (int j=0; j<RateableOptions::numOfOptions; ++j)
00138       outgoingBehaviorTeamMessage.ratedOptions[j] = 
00139         singleBeliefs[tmpno].ratedOptions[j].getLastValue();
00140 
00141     INFO(sendOptionRatings,idSingleBeliefs,bin,singleBeliefs[tmpno]);
00142   }
00143 }
00144 
00145 void CollectedBeliefs::trigger()
00146 {
00147   for (int i=0; i < Player::numOfPlayerNumbers; ++i)
00148   {
00149     for (int j=0; j<RateableOptions::numOfOptions; ++j)
00150       singleBeliefs[i].ratedOptions[j].trigger();
00151   }
00152 }
00153 
00154 
00155 
00156 In& operator>>(In& stream,CollectedBeliefs& collectedBeliefs)
00157 {
00158   stream.read(&collectedBeliefs,sizeof(CollectedBeliefs));
00159   return stream;
00160 }
00161 
00162 
00163 Out& operator<<(Out& stream, const CollectedBeliefs& collectedBeliefs)
00164 {
00165   stream.write(&collectedBeliefs,sizeof(CollectedBeliefs));
00166   return stream;
00167 }
00168 
00169 
00170 /*
00171  * Change log :
00172  *
00173  * $Log: CollectedBeliefs.cpp,v $
00174  * Revision 1.3  2004/07/22 22:38:34  kerdels
00175  * added DTT used by Open Challenge, RIP and Xabsl-Options will follow
00176  *
00177  *
00178  */

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