// Copyright (C) 2002 Takeshi Morimoto <morimoto@takopen.cs.uec.ac.jp>
// All rights reserved.
// Edited By Omid Aghazadeh
package yab.agent;
import java.net.*;
import yab.agent.*;
import yab.agent.object.*;
import java.util.*;
import MRL.Utilities.Partitioning.*;
import MRL.Utilities.*;
import MRL.Utilities.MessageManagement.AgentMessageManager;
public abstract class PlatoonAgent extends HumanoidAgent implements MRL.
Utilities.ConstantConditions {
//Ashkan added
public AgentMessageManager messageManager = null;
RealObject lastPosition = null;
RealObject currentPosition = null;
//Ashkan added
protected PlatoonAgent(int agentType, InetAddress address, int port) {
super(agentType, address, port);
}
private Humanoid self() {
return (Humanoid) world.self;
}
protected void rest() throws ActionCommandException {
self().setAct(REST_ACT);
super.rest(); //To change body of overridden methods use File | Settings | File Templates.
}
// ---------------------------------------------------------------- OMID Aghazadeh
protected final Set visitedBuildingsIC = new HashSet();
protected final Collection shouldEmptyPoses = new HashSet(); // For Handling Police's MOVE Message.
public static final int NEAR_FIRE_UB_SEARCH_RADIUS = 40000;
public static final int NEAR_FIRE_LB_SEARCH_RADIUS = 10000;
public static final int TIME_STARTING_TO_SEARCH_BY_AVAILABILITY = 100;
public final static int MAX_HEARING_DISTANCE = 30000;
public final static int MIN_FIRE_AVAILABLE_SEARCH = EXTINGUISHABLE_DISTANCE + 10000;
public final int MAX_BLDGS_SEARCH_COUNT= 500 ;
public final static int MAX_WAITING_TO_ROAM = 4;
public static final int MIN_TIME_TO_CLEAR_TRAFFIC = 5;
public static final int MAX_TIME_WAIT_TO_SET_TRAFFIC = 3;
public static final int MAX_TIME_WAIT_TO_ROAM_FROM_TRAFFIC = 4;
public static final int HUMANOID_SEARCH_RADIUS = 30000;
public static final int MIN_BURNING_BLDGS_TO_START_SEARCH_AROUND_FIRE = 5;
public static final int MAX_TIME_TO_SEARCH_FOR_HEARED_CIV = 10;
public static final int MIN_TIME_AT_SEARCH_HEARED_CIVS = 30;
public static final int MIN_TIME_AT_SEARCH_DEEP = 25 ;
public static final int OBJS_TO_REQUEST_TO_CLEAR = 10;
protected final int CIV_REPORT_PERIOD = 5;
public static final int MAX_HP_TO_START_KANE = 5000;
protected final Collection shouldUpdateCivBuildings = new HashSet();
protected Civilian prevCheckCivilian;
protected final Condition SHOULD_UPDATE_CIV_C = new Condition(){
Civilian civ;
Integer lc;
int lastCheck;
public boolean eval(Object obj){
if(obj instanceof Civilian){
civ = (Civilian) obj;
if(! civ.needRescue()) return false;
lc =(Integer) world.civCheckTime.get(civ);
if(lc == null) return false;
lastCheck =lc.intValue();
return (time() - lastCheck >= CIV_REPORT_PERIOD);
}
else return false;
}
};
protected void checkAndReportCivilians() throws ActionCommandException {
checkAndStay();
updateShouldUpdateCivs();
// if(onlyInPartition && searchingPartition() == null) return;
// List toCheck = null;
// int time = time();
// if(onlyInPartition){
// toCheck = searchingPartition().MO_OBJS_IN_PART_CND.extract(world.needRescueCivs);
// }
// else{
// toCheck = new ArrayList(world.needRescueCivs);
// }
//
// if(toCheck.isEmpty()) return;
//
// Building bldg;
// if (prevCheckCivilian != null) {
// if (prevCheckCivilian.needRescue() && ! prevCheckCivilian.isVisible() && self().motionlessPosition() != prevCheckCivilian.motionlessPosition() && NOT_IN_TRAFFIC_C.eval(prevCheckCivilian.motionlessPosition()))
// if (prevCheckCivilian.position() instanceof Building && ! fullBuildings.contains(prevCheckCivilian.motionlessPosition())) {
// if (SHOULD_UPDATE_CIV_C.eval(prevCheckCivilian)) {
// bldg = (Building) prevCheckCivilian.motionlessPosition();
// if (!bldg.isBurned() && !bldg.isBurning())
// move(bldg);
// }
// }
// }
//
// prevCheckCivilian = null;
//
// List needCheckCivs;
// needCheckCivs = getNeedUpdateCivs(toCheck);
//
// if(needCheckCivs.isEmpty()) return;
//
// List needCheckPoses = POSITION_PRP.collect(needCheckCivs);
//
// int indx = random.nextInt(needCheckPoses.size());
// bldg = (Building) needCheckPoses.get(indx);
//
// List civs = POSITION_PRP.eq(bldg).extract(needCheckCivs);
// prevCheckCivilian = (Civilian) civs.iterator().next();
// move(bldg);
}
public final Condition SHOULD_KANE_CIVS = new Condition (){
Humanoid hum;
public boolean eval(Object obj){
if(obj instanceof Humanoid){
hum =(Humanoid)obj;
return hum.hp()<MAX_HP_TO_START_KANE &&( hum.needRescue() || hum.needLoad()) ;
}else{
return false;
}
}
};
Building m_lastKANEBUILDING = null;
protected void checkAndStay() throws ActionCommandException{
List civKanePoses = getNeedKaneCivPoses();
if(m_lastKANEBUILDING != null && ! (m_lastKANEBUILDING.isBurning() || m_lastKANEBUILDING.isBurned())
&& REACHABLE_C.eval(m_lastKANEBUILDING)){
List visAgents = VISIBLE_C.and(POSITION_PRP.eq(m_lastKANEBUILDING)).extract(world.platoonAgents);
world.sortByID(visAgents);
if(!(Utils.getConditionCount(visAgents,AMBULANCE_TEAM_C) >0 ||
visAgents.indexOf(self()) > 0) && civKanePoses.contains(m_lastKANEBUILDING)){
if(self().motionlessPosition() == m_lastKANEBUILDING){
rest();
}
else{
// System.out.println(self() + " ----------- 7");
checkShouldContinueToBuildingAndMove(m_lastKANEBUILDING,false,false);
}
}
}
m_lastKANEBUILDING = null;
int kanePosSize = civKanePoses.size();
List freeAgents = getFreeAgentsToUpdate();
int indx = freeAgents.indexOf(self());
if(indx == -1 ) return;
// System.out.println(self() + " CivNeedKanePosesSize : " + kanePosSize + " FreeAgentsSize : " + freeAgents.size() + " In Time : " + time());
if(freeAgents.size() > kanePosSize){
if(indx >= kanePosSize){
// System.out.println(self() + " ----------- 0");
return;
}
else{
m_lastKANEBUILDING =getKaneBuilding(civKanePoses,indx);
// if(Utils.getConditionCount(world.ambulanceTeams,POSITION_PRP.equal(m_lastKANEBUILDING).and(VISIBLE_C))>0)
// System.out.println(self() + " ----------- 1");
}
}
else if(freeAgents.size() == kanePosSize){
m_lastKANEBUILDING =getKaneBuilding(civKanePoses,indx);
// System.out.println(self() + " ----------- 2");
}
else{ // freeAgents < posSize
if(kanePosSize > ((1f + MAX_KANE_PERCENT) * freeAgents.size()) ) {
// System.out.println(self() + " ----------- 3");
return;
}
int maxKaneIndx = getMaxKaneIndex();
// if(maxKaneIndx <= 0 )
// System.err.println(self() + " <=0 MAX KANE INDEX.");
if(indx > maxKaneIndx) {
// System.out.println(self() + " ----------- 4");
return;
}
else{
m_lastKANEBUILDING =getKaneBuilding(civKanePoses,indx);
// System.out.println(self() + " ----------- 5");
}
}
}
protecte
没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
收起资源包目录
mrl.gz_2007_robocup_robocup rescue (415个子文件)
AbstractFireBrigadeAgent.java.bak 2KB
Humanoid.java.bak2 5KB
AbstractFireBrigadeAgent.java.bak2 2KB
Humanoid.java.bak3 5KB
Humanoid.java.bak4 5KB
Humanoid.java.bak5 5KB
PlatoonAgent.class 31KB
Path.class 25KB
FireBrigadeAgent.class 24KB
DisasterSpace.class 24KB
PoliceForceAgent.class 22KB
AmbulanceTeamAgent.class 14KB
BaseMessageManager.class 13KB
AmbulanceCenterAgent.class 12KB
PoliceOfficeAgent.class 10KB
FireSite.class 8KB
TaskHandler.class 6KB
Partitioner.class 6KB
Civilian.class 6KB
MovingObject.class 6KB
Route.class 5KB
AgentMessageManager.class 5KB
ConstantConditions.class 5KB
Building.class 5KB
Road.class 5KB
Agent.class 5KB
Partition.class 5KB
EAmbulanceCenter.class 5KB
QuadPartition.class 5KB
HumanoidAgent.class 5KB
KdTree.class 5KB
Humanoid.class 4KB
HearData.class 4KB
Property.class 4KB
BlockData.class 4KB
ProtocolConstants.class 4KB
RCRSSProtocol.class 4KB
RCRSSProtocolSocket.class 4KB
VictimMessage.class 4KB
AccessibleData.class 4KB
Main.class 4KB
Utils.class 3KB
RCRObject.class 3KB
Util.class 3KB
PositionMessage.class 3KB
LockedByBlockadeMessage.class 3KB
CenterMessageManager.class 3KB
HeardCivilianMessage.class 3KB
SetPartitionMessage.class 3KB
AbstractFireBrigadeAgent.class 3KB
HumanoidAgent$6.class 3KB
FireBrigadeConstantsConditions.class 3KB
HumanoidAgent$3.class 3KB
LongUDPSocket.class 2KB
PoliceConstantsAndConditions.class 2KB
TargetMessage.class 2KB
FireMessage.class 2KB
KdTree$AList.class 2KB
BaseBuilding.class 2KB
AmbulanceCenterAgent$2.class 2KB
Router.class 2KB
ClearedPathMessage.class 2KB
Node.class 2KB
BlockMessage.class 2KB
TaskFinishedMessage.class 2KB
RequestTargetMessage.class 2KB
TCPIO.class 2KB
ClearMessage.class 2KB
EmptyBuildingMessage.class 2KB
BaseRCRObject.class 2KB
UnClearMessage.class 2KB
TaskMessage.class 2KB
AbstractAmbulanceTeamAgent.class 2KB
RequestPartitionChangingMessage.class 2KB
PartitionFinishedMessage.class 2KB
BaseRoad.class 2KB
Type.class 2KB
HumanoidAgent$2.class 2KB
PoliceForceAgent$1.class 2KB
MotionlessObject.class 2KB
AgentNoStationMessageManager.class 1KB
Edge.class 1KB
RealObject.class 1KB
EPoliceForce.class 1KB
FireStationAgent.class 1KB
AmbulanceTeam.class 1KB
Condition.class 1KB
PoliceForceAgent$4.class 1KB
DisasterSpace$4.class 1KB
AgentConstants.class 1KB
HumanoidAgent$4.class 1KB
PoliceOfficeAgent$3.class 1KB
DisasterSpace$2.class 1KB
BaseMovingObject.class 1KB
KaConnectOk.class 1KB
MessageConstants.class 1KB
EPoliceOffice.class 1KB
PlatoonAgent$4.class 1KB
SimulatorsConstants.class 1KB
Vertex.class 1KB
共 415 条
- 1
- 2
- 3
- 4
- 5
APei
- 粉丝: 63
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 旅行活动的微信小程序页面
- 第三节课,后端代码优化 & 结束
- 基于matlab实现的10自由度齿轮传动系统动力学模型,通过调用ode45进行求解,考虑了轴承刚度和阻尼.rar
- 基于matlab实现齿轮系统非线性动力学模型和动力学求解 齿轮非线性动力学研究.rar
- 基于matlab实现的 流体力学有限元NS方程,有限元离散,得到速度场、压力场,流体力学.rar
- 基于matlab实现的GROWTH2.0是一个地球物理反演工具
- 基于matlab实现的matlab法求解椭圆轴承支承的刚性jeffcott转子的振动方程
- 基于matlab实现的sfs算法对目标的多角度图像进行三维重构.rar
- 基于matlab实现的VRPWT离散粒子群优化解决带时间窗的车辆路径问题.rar
- 基于matlab实现的齿轮系统非线性动力学模型和动力学求解 齿轮非线性动力学研究.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0