⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ambulanceteamagent.java

📁 2004年robotcup世界冠军源代码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/** * Creat By Omid AmirGhiasvand: * 3 Apr 2006 * * Last Edit: * 2006-06-29 * 12:34 pm * */package MRL.Ambulance;import java.net.*;import java.util.*;import yab.agent.*;import yab.agent.object.*;import yab.agent.object.Refuge;import MRL.Utilities.*;import MRL.Utilities.MessageManagement.AgentMessageManager;import MRL.Utilities.MessageManagement.AgentNoStationMessageManager;import yab.agent.*;import yab.agent.Agent.ActionCommandException;public class AmbulanceTeamAgent extends AbstractAmbulanceTeamAgent implements    ConstantConditions {  private boolean iDecide=false;  private HashSet victimSet = new HashSet();  private boolean mainAT=false;  private boolean loaderAT=false;  private boolean setMyType=false;  private HashSet noNeedRescue = new HashSet();  private int targetSelectionTime =-1;  private int startRescueTime=-1;  private MotionlessObject myLastPlace;  public AmbulanceTeamAgent(InetAddress address, int port) {    super(address, port);//         if (!world.ambulanceCenters.isEmpty())//            iDecide=true;      if (world.ambulanceCenters.isEmpty())            messageManager = new AgentNoStationMessageManager(socket(), world);        else            messageManager = new AgentMessageManager(socket(), world);      socket().akAcknowledge(self().id);  }  protected MotionlessObject mlpos() {    return self().motionlessPosition();  }  protected void prepareForAct() {    super.prepareForAct();    if (time() ==3)    {        if (world.ambulanceCenters.isEmpty())            {                iDecide=true;            }    }    if (iDecide==false)      setMyNextTargetAsTarget();      messageManager.sendMessages();  }  private void setMyNextTargetAsTarget()  {      if (self().myAssignedTarget==null && self().tempTarget!=null  )      {        self().setTargetAssignmentTime(-1);        self().myAssignedTarget = self().tempTarget;        self().setTargetAssignmentTime(time());        self().setTargetachivementTime(-1);        self().tempTarget=null;      }  }  protected void act() throws ActionCommandException  {    super.act();    if (time() <=TIME_STARTING_ACTION)       return;     needToGoRefuge();     if (iDecide==false)     {         requestTargetFromCenter();         rescueTargetAssignedByCenter();     }     else     {         rescueMySelectedTarget();     }     searchCivilians(false);//     if (iDecide==false)//       helpOtherAmbulanceTeam();     restAtRefuge();  }  private void helpOtherAmbulanceTeam()  {      HashSet temp = new HashSet();      if (self().myAssignedTarget==null)      {          System.out.println(" I AM FREE :"+ self().id + "   In time:"+time() );          for (Iterator it = world.ambulanceTeams.iterator() ; it.hasNext();)          {              AmbulanceTeam at = (AmbulanceTeam) it.next();              if (at.myAssignedTarget!= null && at.myAssignedTarget.buriedness()>5 )                 temp.add(at);          }           Humanoid nearestHuman;          if (!temp.isEmpty())           {               nearestHuman  = (Humanoid) distancePrp.min(temp);               System.out.println(" EXTRA TARGET SET FOR ME "+nearestHuman);               self().myAssignedTarget=nearestHuman;           }      }  }  private void requestTargetFromCenter()  {     if (self().myAssignedTarget==null && self().buriedness()<=5)     {        request();     }  }  private void requestTargetFromCenterSooner()  {      int workGroup=myWorkGroup().size();     if (tempNumberOfATforLastRescue!=1&&workGroup==1 && self().myAssignedTarget.buriedness()==0)        {           request();        }     else if (workGroup!=1&&mainAT==true && workGroup*3 >= self().myAssignedTarget.buriedness())        {           request();        }     else if (workGroup!=1&& mainAT==false && workGroup*4>= self().myAssignedTarget.buriedness())        {           request();        }  }  private void request()  {    if (time()<=11)        return;    if (self().getRequestForTargetTime()==-1  )    {       messageManager.reportRequestTarget();       self().setRequestForTargetTime(time());    }    else if ( time() -self().getRequestForTargetTime()>=4 )      {          self().setRequestForTargetTime( -1);          request();      }  }  private void rescueTargetAssignedByCenter() throws ActionCommandException  {      if (self().myAssignedTarget!= null)      {          if (mlpos() == self().myAssignedTarget.motionlessPosition())          {            if (self().myAssignedTarget.isVisible())            {              if (setMyType==false &&self().myAssignedTarget.buriedness()<=5*myWorkGroup().size())                  setLoaderAndMainAT(myWorkGroup());              requestTargetFromCenterSooner();                 if (self().myAssignedTarget.needRescue())                 {                     if (self().myAssignedTarget.buriedness()<myWorkGroup().size())                     {                         if (mainAT==true)                             rescue(self().myAssignedTarget);                         else                         {                         //    System.err.println(" I am not main at:"+self().id +"   In time:"+time());                             self().myAssignedTarget=null;                             setMyType=false;                             setMyNextTargetAsTarget();                             rescueTargetAssignedByCenter();                         }                     }                     else                         rescue(self().myAssignedTarget);                 }                 else if (self().myAssignedTarget.needLoad())                 {                     if (loaderAT == true)                     {                         mainAT=false;                         loaderAT=false;                         setMyType=false;                         noNeedRescue.add(self().myAssignedTarget);                         load(self().myAssignedTarget);                     }                     else                     {                         setMyType=false;                         mainAT=false;                         noNeedRescue.add(self().myAssignedTarget);                         self().myAssignedTarget = null;                         setMyNextTargetAsTarget();/////////???                         rescueTargetAssignedByCenter();//////////???                     }                  }                  else  // no need rescue and no need load                  {                  //   System.out.println(" I AM AT:"+self().id +"    My TARGET :"+self().myAssignedTarget.id +"     IS LOST IN TIME:"+time());                     noNeedRescue.add(self().myAssignedTarget);                     self().myAssignedTarget = null;                     setMyType=false;                     mainAT=false;                     loaderAT=false;                     setMyNextTargetAsTarget();                     rescueTargetAssignedByCenter();                  }           }           else           { /// the target is lost or invisible             self().myAssignedTarget = null;             request();           }        }       else       {          move(self().myAssignedTarget.motionlessPosition());       }    }    else  // i have  no target that assign me by center so i going to select myself{      return;  }  int tempNumberOfATforLastRescue=0;  private void setLoaderAndMainAT(ArrayList workGroup )  {      int numberOfAmbulanceForLastRescue= self().myAssignedTarget.buriedness()%workGroup.size() ;      tempNumberOfATforLastRescue=numberOfAmbulanceForLastRescue;      if (numberOfAmbulanceForLastRescue==0)          numberOfAmbulanceForLastRescue=workGroup.size();      if (self().myAssignedTarget instanceof Civilian)      {          AmbulanceTeam loader = (AmbulanceTeam)workGroup.get(0);          if (self().id == loader.id)             {                 loaderAT = true;                 mainAT=true;             }          for (int i=1 ;i<numberOfAmbulanceForLastRescue;i++)          {            AmbulanceTeam at =  (AmbulanceTeam)workGroup.get(i);            if (self().id == at.id)                {                    mainAT = true;                }          }      }      else  // plotoon target      {          for (int i=0 ;i<numberOfAmbulanceForLastRescue;i++)          {            AmbulanceTeam at =  (AmbulanceTeam)workGroup.get(i);            if (self().id == at.id)                {                    mainAT = true;                }          }      }     setMyType=true;  }  private void setLoaderAndMainAT2(ArrayList workGroup )    {        int numberOfAmbulanceForLastRescue= self().mySelectedTarget.buriedness()%workGroup.size() ;        if (numberOfAmbulanceForLastRescue==0)            numberOfAmbulanceForLastRescue=workGroup.size();        if (self().mySelectedTarget instanceof Civilian)        {            AmbulanceTeam loader = (AmbulanceTeam)workGroup.get(0);            if (self().id == loader.id)               {                   loaderAT = true;                   mainAT=true;               }            for (int i=1 ;i<numberOfAmbulanceForLastRescue;i++)            {              AmbulanceTeam at =  (AmbulanceTeam)workGroup.get(i);              if (self().id == at.id)                  {                      mainAT = true;                  }            }        }        else  // plotoon target        {            for (int i=0 ;i<numberOfAmbulanceForLastRescue;i++)            {              AmbulanceTeam at =  (AmbulanceTeam)workGroup.get(i);              if (self().id == at.id)                  {                      mainAT = true;                  }            }        }       setMyType=true;    }////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Agent Base Part    private void rescueMySelectedTarget() throws ActionCommandException    {      updateMyVictimSet();      updateVictimAccessibility();      checkCondition();      rescueVictim();    }    private void updateMyVictimSet()    {        victimSet.clear();       for (Iterator it = world.civilians.iterator();it.hasNext();)       {           Humanoid hum = (Humanoid)it.next();           if (hum.position() == null)               continue;            if ((hum.motionlessPosition() instanceof Building) )            {                 Building bld = (Building)hum.motionlessPosition();                 if ((hum.needRescue()|| hum.needLoad() )&& !bld.isBurned() &&(!bld.isBurning()|| hum.buriedness()<5 ))                        {                            updateHumanoidProperty(hum);                            victimSet.add(hum);                        }            }       }       victimSet.addAll(world.buriedAgents);       victimSet.removeAll(noNeedRescue);     //Collections.sort(civilianVictimSet,timeToDeadComparator);    }    private void checkCondition() throws ActionCommandException    {      checkmyTarget();      cheackMyPlace();    }  private void checkmyTarget() throws ActionCommandException   {     if (self().mySelectedTarget == null)     {       return;     }     else // i have target my self     {         if( self().mySelectedTarget.motionlessPosition() == mlpos() )         {           if (time()-startRescueTime>=3)           {             if (self().mySelectedTarget.isRescueAble(myWorkGroup().size()))               return;             else             {               noNeedRescue.add(self().mySelectedTarget);               self().mySelectedTarget=null;               rescueVictim();             }           }           else             return;         }         else if ( time() - targetSelectionTime>4)         {           Humanoid temp;           self().mySelectedTarget.setAccesible(false);           self().mySelectedTarget.notAccseesibleTime=time();           self().mySelectedTarget = null;           rescueVictim();         }     }   }  private void cheackMyPlace() throws ActionCommandException {    if ((mlpos() instanceof Building) && self().mySelectedTarget!= null)  {      Building bu = (Building)self().motionlessPosition();      if (bu.isBurned() ) /////////      {          if (self().mySelectedTarget.buriedness()<=2 )              return;          else          {              noNeedRescue.add(self().mySelectedTarget);              victimSet.remove(self().mySelectedTarget);              self().mySelectedTarget= null;          }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -