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

📄 taskhandler.java

📁 2004年robotcup世界冠军源代码
💻 JAVA
字号:
package MRL.Police;import yab.agent.*;import yab.agent.object.*;import java.util.*;public class TaskHandler implements  PoliceConstantsAndConditions{    private DisasterSpace world;    private EPoliceForce self;    public TaskHandler(EPoliceForce self){        this.world = self.world;        this.self = self;        freePolices = self.freePolices;        initTasks();    }    private EPoliceForce self() {//        return (EPoliceForce) world.self;        return self;    }    private int time(){        return world.time();    }    private final Map <PoliceForce , ArrayList[] > polTaskTimeFinishedTimeMap = new HashMap(); // Center Assigned Tasks&Times&FinishedTime    private final Map <PoliceForce , Integer []> currentPolTaskTimeMap = new HashMap();    private int myCurrentAssignedTask = -1 ;    private int myCurrentAssignedTaskTime = -1;    private int myCurrentDecidedTaskTime = 0;    private int myCurrentDecidedTask = 0;    private final List freePolices;    private void initTasks(){        PoliceForce pf;        for(Iterator it = freePolices.iterator();it.hasNext();){            pf = (PoliceForce) it.next();            initPF(pf);        }    }    private void initPF(PoliceForce pf){        ArrayList [] taskTimeFinishedTimeMap;        ArrayList tasks , times , finishedTime;        taskTimeFinishedTimeMap = new ArrayList [3];        tasks = new ArrayList();        times = new ArrayList();        finishedTime = new ArrayList();        taskTimeFinishedTimeMap[0]=tasks ;        taskTimeFinishedTimeMap[1]=times ;        taskTimeFinishedTimeMap[2]=finishedTime ;        polTaskTimeFinishedTimeMap.put(pf,taskTimeFinishedTimeMap);    }    public int getLastPoliceTask(PoliceForce pf){        ArrayList [] taskTimeFinishedTimeMap;        ArrayList tasks;        int indx ;        taskTimeFinishedTimeMap = polTaskTimeFinishedTimeMap.get(pf);        tasks = taskTimeFinishedTimeMap[0];        indx =tasks.size() -1;        return ((Integer)tasks.get(indx)).intValue();    }    public int getLastPoliceTaskStartTime(PoliceForce pf){        ArrayList [] taskTimeFinishedTimeMap;        ArrayList tasks , times;        int indx ;        taskTimeFinishedTimeMap = polTaskTimeFinishedTimeMap.get(pf);        tasks = taskTimeFinishedTimeMap[0];        times = taskTimeFinishedTimeMap[1];        indx =tasks.size() -1;        return ((Integer)times.get(indx)).intValue();    }    public int getLastPoliceTaskFinishedTime(PoliceForce pf){        ArrayList [] taskTimeFinishedTimeMap;        ArrayList tasks ,finishedTime;        int indx ;        taskTimeFinishedTimeMap = polTaskTimeFinishedTimeMap.get(pf);        tasks = taskTimeFinishedTimeMap[0];        finishedTime = taskTimeFinishedTimeMap[2];        indx =tasks.size() -1;        if(indx >= finishedTime.size()) return -1;        return ((Integer)finishedTime.get(indx)).intValue();    }    public void updateTasks(){        PoliceForce pf;//        RealObject self = self();        int curTask , curTaskStTime ,tTask;        for(Iterator it = freePolices.iterator();it.hasNext();){            pf = (PoliceForce) it.next();            if(! polTaskTimeFinishedTimeMap.containsKey(pf))                initPF(pf);            if(isLastTaskAssignedByCenterDone(pf)){                currentPolTaskTimeMap.remove(pf);            }else{                curTask = getCurrentPoliceTaskAssignedByCenter(pf);                tTask = getLastPoliceTask(pf);                if(curTask != tTask){//                    System.err.println(self() + " Error , Tasks Doesnt Match For : " + pf + " . Current Task : " + curTask + " , Last Task : " + tTask);//                    System.out.println(self() + " Correctint Task For : " + pf);                    curTask = tTask;                    curTaskStTime = getLastPoliceTaskStartTime(pf);                    setCurrentTask(pf,curTask,curTaskStTime);                }            }        }    }    private void setCurrentTask(PoliceForce pf , int task , int time){        currentPolTaskTimeMap.remove(pf);        Integer [] taskTime = new Integer[2];        Integer ctask = new Integer(task) , ctime = new Integer(time);        taskTime[0] = ctask;        taskTime[1] = ctime;        currentPolTaskTimeMap.put(pf,taskTime);    }    public int getCurrentPoliceTaskAssignedByCenter(PoliceForce pf){        Integer [] taskTime = currentPolTaskTimeMap.get(pf);        if(taskTime == null) return -1;        return taskTime[0];    }    public int getCurrentPoliceTaskAssignedByCenterStartTime(PoliceForce pf){        Integer [] taskTime = currentPolTaskTimeMap.get(pf);        if(taskTime == null) return -1;        return taskTime[1];    }    public List getFreePolicesInTask(int task){        List res = new ArrayList();        Integer [] taskTime;        int ptask;        PoliceForce pf;        for(Iterator it = currentPolTaskTimeMap.keySet().iterator();it.hasNext();){            pf = (PoliceForce) it.next();            taskTime = currentPolTaskTimeMap.get(pf);            ptask = taskTime[0];            if(ptask == task)                res.add(pf);        }        return res;    }    public int getFreePolicesInTaskCount(int task){        int res = 0;        Integer [] taskTime;        int ptask;        PoliceForce pf;        for(Iterator it = currentPolTaskTimeMap.keySet().iterator();it.hasNext();){            pf = (PoliceForce) it.next();            taskTime = currentPolTaskTimeMap.get(pf);            ptask = taskTime[0];            if(ptask == task)                res++;        }        return res;    }    public List getWithoutTaskFreePolices(){        List res = new ArrayList(freePolices);        res.removeAll(currentPolTaskTimeMap.keySet());        return res;    }    public int getWithoutTaskFreePolicesCount(){        int res = freePolices.size();        res -= currentPolTaskTimeMap.keySet().size();        return res;    }    public boolean isLastTaskAssignedByCenterDone(PoliceForce pf){        ArrayList [] taskTimeFinishedTimeMap;        ArrayList tasks , times, finishedTime;        taskTimeFinishedTimeMap = polTaskTimeFinishedTimeMap.get(pf);        if(taskTimeFinishedTimeMap == null){            initPF(pf);            taskTimeFinishedTimeMap = polTaskTimeFinishedTimeMap.get(pf);        }        tasks = taskTimeFinishedTimeMap[0];        times = taskTimeFinishedTimeMap[1];        finishedTime = taskTimeFinishedTimeMap[2];        return (finishedTime.size() == tasks.size());    }    public void setTaskAssignedByCenterFinished(PoliceForce pf , int finishTime){        if(isLastTaskAssignedByCenterDone(pf)){            System.err.println(self() + " , Task Is Already Done For : " + pf + " In : " + getLastPoliceTaskFinishedTime(pf) + " , Time : " + time());            return;        }        ArrayList [] taskTimeFinishedTimeMap;        ArrayList tasks , times, finishedTime;        taskTimeFinishedTimeMap = polTaskTimeFinishedTimeMap.get(pf);        finishedTime = taskTimeFinishedTimeMap[2];        finishedTime.add(new Integer(finishTime));        currentPolTaskTimeMap.remove(pf);        if(!isLastTaskAssignedByCenterDone(pf)){            System.err.println(self() + " , Error , Task Didn't Set Finished For : " + pf);            return;        }        if(pf == self()){            myCurrentAssignedTask =-1;            myCurrentAssignedTaskTime = -1;        }    }    public void setNewTaskAssignedByCenter(PoliceForce pf , int task){         if(!isLastTaskAssignedByCenterDone(pf)){            System.err.println(self() + " , Previous Task Is Not Done For : " + pf + " , Assign Time : " + getLastPoliceTaskStartTime(pf) + " , Time : " + time());            return;        }        ArrayList [] taskTimeFinishedTimeMap;        ArrayList tasks , times, finishedTime;        taskTimeFinishedTimeMap = polTaskTimeFinishedTimeMap.get(pf);        tasks = taskTimeFinishedTimeMap[0];        times = taskTimeFinishedTimeMap[1];        tasks.add(new Integer(task));        times.add(new Integer(time()));        if(isLastTaskAssignedByCenterDone(pf)){            System.err.println(self() + " , Error , Task Didn't Set For : " + pf);            return;        }        if(pf == self()){            setNewAssignedTaskToMe(task,time());          //  System.out.println(self() + " , Task Assigned : " + task + " , In Time : " + time());        }        anyTaskAssigned = true;    }    private void setNewAssignedTaskToMe(int task , int time){        myCurrentAssignedTask = task;        myCurrentAssignedTaskTime = time;        myCurrentDecidedTask = -1;        myCurrentDecidedTaskTime = -1;    }    public boolean isMyLastCenterAssignedTaskDone(){        return isLastTaskAssignedByCenterDone(self());    }    public void setNewDecidedTaskToMe(int task){        if(! isMyLastCenterAssignedTaskDone()){         //   System.err.println(self() + " , Prev Task Assigned By Center Is'nt Done .");            return;        }        myCurrentDecidedTask = task;        myCurrentDecidedTaskTime = time();        myCurrentAssignedTask = -1;        myCurrentAssignedTaskTime = -1;    }    public int myCurrentTask(){        if(myCurrentAssignedTask != -1)            return myCurrentAssignedTask;        else            return myCurrentDecidedTask;    }    public int myCurrentTaskTime(){        if(myCurrentAssignedTask != -1)            return myCurrentAssignedTaskTime;        else            return myCurrentDecidedTaskTime;    }    public void setTaskAssignedByCenterFinishedForMe(){        setTaskAssignedByCenterFinished(self(),time());    }    public boolean isCurrentTaskTimedout(){        return time() - myCurrentTaskTime() > TASK_TIMEOUT_PERIOD;    }    private boolean anyTaskAssigned = false;    public boolean isAnyTaskAssignedByCenter(){        return anyTaskAssigned;    }}

⌨️ 快捷键说明

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