📄 agents.cs
字号:
using System;
using System.Collections;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.esriSystem;
//Ismael Chivite
//ESRI Redlands
//March 2005
namespace EvacuationRoutes
{
/// <summary>
/// Summary description for Agents.
/// </summary>
public class Young:IAgent,IComparable,ICloneable
{
private Hashtable m_pNetworkPositions;
private long[] m_Positions;
private long m_CurrentPositionIndex;
private string m_Name = "",m_Type = "";
private string m_Status = "Unknown";
private long m_TargetFacility = -1;
private int m_Steps = 0;
private int m_MaxSteps = 2;
public Young()
{
m_CurrentPositionIndex = -1;
}
public string Name
{
get
{
return m_Name;
}
set
{
m_Name = value;
}
}
public long[] GetPositions()
{
return m_Positions;
}
public bool GoesThrough(long position)
{
return m_pNetworkPositions.Contains(position);
}
public string Type
{
get
{
return m_Type;
}
set
{
m_Type = value;
}
}
public string Status
{
get
{
return m_Status;
}
set
{
m_Status = value;
}
}
public int CompareTo(object obj)
{
// TODO: Add Agent.CompareTo implementation
IAgent pAgent = obj as IAgent;
if(this.RemainingPositions>pAgent.RemainingPositions)
{
return 1;
}
else
{
if(this.RemainingPositions==pAgent.RemainingPositions)
{
return 0;
}
else
{
return -1;
}
}
}
public static bool operator > (Young agent1,object agent2)
{
return agent1.CompareTo(agent2)==1;
}
public static bool operator < (Young agent1,object agent2)
{
return agent1.CompareTo(agent2)==-1;
}
public object Clone()
{
Young pNewAgent = new Young();
pNewAgent.LoadPositionIds(this.m_Positions);
pNewAgent.Name = this.m_Name;
pNewAgent.m_CurrentPositionIndex = this.m_CurrentPositionIndex;
return pNewAgent;
}
public long CurrentPositionId
{
get
{
return m_Positions[m_CurrentPositionIndex];
}
}
public bool Arrived
{
get
{
long l = m_CurrentPositionIndex;
l++;
return (l==m_Positions.Length);
}
}
public void LoadPositionIds(string positions)
{
string[] sPositions = positions.Split(',');
m_Positions = new long[sPositions.Length];
for (int i = 0;i<sPositions.Length;i++)
{
m_Positions[i] = Convert.ToInt32(sPositions[i]);
}
m_CurrentPositionIndex = 0;
}
public void LoadPositionIds(long[] positions)
{
m_Positions = positions;
m_CurrentPositionIndex = 0;
}
public void LoadPositionIds(ArrayList positions)
{
long iTotalPostitions = positions.Count;
m_Positions = new long[iTotalPostitions];
for (int i = 0;i<iTotalPostitions;i++)
{
m_Positions[i] = Convert.ToInt32(positions[i]);
}
m_CurrentPositionIndex = 0;
}
public void LoadPositions (Hashtable pNetworkPositions)
{
m_pNetworkPositions = pNetworkPositions;
}
public void MoveForward()
{
m_Steps++;
long iNextPosition = this.NextPositionId;
NetworkPosition pNetNextPosition = m_pNetworkPositions[iNextPosition] as NetworkPosition;
if(pNetNextPosition.AddAgent(false))
{
long iCurrentPosition = this.CurrentPositionId;
NetworkPosition pNetCurrentPosition = m_pNetworkPositions[iCurrentPosition] as NetworkPosition;
pNetCurrentPosition.RemoveAgent();
m_CurrentPositionIndex++;
System.Diagnostics.Debug.WriteLine (pNetCurrentPosition.AgentsInPosition.ToString() + " " + pNetNextPosition.AgentsInPosition.ToString());
if ( (m_Steps < m_MaxSteps) && (!this.Arrived) && (pNetCurrentPosition.AgentsInPosition == 0) && (pNetNextPosition.AgentsInPosition == 1))
{
MoveForward();
Random pRandom = new Random();
if (pRandom.Next(0,5)==1)m_Steps=0;
}
else
{
m_Steps = 0;
}
this.Status = "Moving";
}
else
{
this.Status = "Waiting";
}
}
public NetworkPosition CurrentPosition
{
get
{
long lPositionID = m_Positions[m_CurrentPositionIndex];
return m_pNetworkPositions[lPositionID] as NetworkPosition;
}
}
public long NextPositionId
{
get
{
long l = m_CurrentPositionIndex;
l++;
//System.Diagnostics.Debug.WriteLine("Next position is: " + m_Positions[l].ToString() );
return m_Positions[l++];
}
}
public long RemainingPositions
{
get
{
//System.Diagnostics.Debug.WriteLine("Number of remaining positions: " + (m_Positions.Length - m_CurrentPositionIndex - 1).ToString() + " (" + this.Name + " )");
return m_Positions.Length - m_CurrentPositionIndex - 1;
}
}
public long TargetFacility
{
get
{
return m_TargetFacility;
}
set
{
m_TargetFacility = value;
}
}
}
public class Agent: IAgent,IComparable,ICloneable
{
private Hashtable m_pNetworkPositions;
private long[] m_Positions;
private long m_CurrentPositionIndex;
private string m_Name = "",m_Type = "";
private string m_Status = "Unknown";
private long m_TargetFacility = -1;
public Agent()
{
m_CurrentPositionIndex = -1;
}
public string Name
{
get
{
return m_Name;
}
set
{
m_Name = value;
}
}
public string Type
{
get
{
return m_Type;
}
set
{
m_Type = value;
}
}
public long[] GetPositions()
{
return m_Positions;
}
public bool GoesThrough(long position)
{
return m_pNetworkPositions.Contains(position);
}
public string Status
{
get
{
return m_Status;
}
set
{
m_Status = value;
}
}
public int CompareTo(object obj)
{
// TODO: Add Agent.CompareTo implementation
IAgent pAgent = obj as IAgent;
if(this.RemainingPositions>pAgent.RemainingPositions)
{
return 1;
}
else
{
if(this.RemainingPositions==pAgent.RemainingPositions)
{
return 0;
}
else
{
return -1;
}
}
}
public static bool operator > (Agent agent1,object agent2)
{
return agent1.CompareTo(agent2)==1;
}
public static bool operator < (Agent agent1,object agent2)
{
return agent1.CompareTo(agent2)==-1;
}
public object Clone()
{
Agent pNewAgent = new Agent();
pNewAgent.LoadPositionIds(this.m_Positions);
pNewAgent.Name = this.m_Name;
pNewAgent.m_CurrentPositionIndex = this.m_CurrentPositionIndex;
return pNewAgent;
}
public long CurrentPositionId
{
get
{
return m_Positions[m_CurrentPositionIndex];
}
}
public bool Arrived
{
get
{
long l = m_CurrentPositionIndex;
l++;
return (l==m_Positions.Length);
}
}
public void LoadPositionIds(string positions)
{
string[] sPositions = positions.Split(',');
m_Positions = new long[sPositions.Length];
for (int i = 0;i<sPositions.Length;i++)
{
m_Positions[i] = Convert.ToInt32(sPositions[i]);
}
m_CurrentPositionIndex = 0;
}
public void LoadPositionIds(long[] positions)
{
m_Positions = positions;
m_CurrentPositionIndex = 0;
}
public void LoadPositionIds(ArrayList positions)
{
long iTotalPostitions = positions.Count;
m_Positions = new long[iTotalPostitions];
for (int i = 0;i<iTotalPostitions;i++)
{
m_Positions[i] = Convert.ToInt32(positions[i]);
}
m_CurrentPositionIndex = 0;
}
public void LoadPositions (Hashtable pNetworkPositions)
{
m_pNetworkPositions = pNetworkPositions;
}
public void MoveForward()
{
long iCurrentPosition = this.CurrentPositionId;
long iNextPosition = this.NextPositionId;
NetworkPosition pNetCurrentPosition = m_pNetworkPositions[iCurrentPosition] as NetworkPosition;
NetworkPosition pNetNextPosition = m_pNetworkPositions[iNextPosition] as NetworkPosition;
if(pNetNextPosition.AddAgent(false))
{
pNetCurrentPosition.RemoveAgent();
m_CurrentPositionIndex++;
this.Status = "Moving";
}
else
{
this.Status = "Waiting";
}
}
public NetworkPosition CurrentPosition
{
get
{
long lPositionID = m_Positions[m_CurrentPositionIndex];
return m_pNetworkPositions[lPositionID] as NetworkPosition;
}
}
public long NextPositionId
{
get
{
long l = m_CurrentPositionIndex;
l++;
//System.Diagnostics.Debug.WriteLine("Next position is: " + m_Positions[l].ToString() );
return m_Positions[l++];
}
}
public long RemainingPositions
{
get
{
//System.Diagnostics.Debug.WriteLine("Number of remaining positions: " + (m_Positions.Length - m_CurrentPositionIndex - 1).ToString() + " (" + this.Name + " )");
return m_Positions.Length - m_CurrentPositionIndex - 1;
}
}
public long TargetFacility
{
get
{
return m_TargetFacility;
}
set
{
m_TargetFacility = value;
}
}
}
public class Senior: IAgent,IComparable,ICloneable
{
private Hashtable m_pNetworkPositions;
private long[] m_Positions;
private long m_CurrentPositionIndex;
private string m_Name = "",m_Type = "";
private string m_Status = "Unknown";
private long m_TargetFacility = -1;
public Senior()
{
m_CurrentPositionIndex = -1;
}
public string Name
{
get
{
return m_Name;
}
set
{
m_Name = value;
}
}
public string Type
{
get
{
return m_Type;
}
set
{
m_Type = value;
}
}
public long[] GetPositions()
{
return m_Positions;
}
public bool GoesThrough(long position)
{
return m_pNetworkPositions.Contains(position);
}
public string Status
{
get
{
return m_Status;
}
set
{
m_Status = value;
}
}
public int CompareTo(object obj)
{
// TODO: Add Agent.CompareTo implementation
IAgent pAgent = obj as IAgent;
if(this.RemainingPositions>pAgent.RemainingPositions)
{
return 1;
}
else
{
if(this.RemainingPositions==pAgent.RemainingPositions)
{
return 0;
}
else
{
return -1;
}
}
}
public static bool operator > (Senior agent1,object agent2)
{
return agent1.CompareTo(agent2)==1;
}
public static bool operator < (Senior agent1,object agent2)
{
return agent1.CompareTo(agent2)==-1;
}
public object Clone()
{
Senior pNewAgent = new Senior();
pNewAgent.LoadPositionIds(this.m_Positions);
pNewAgent.Name = this.m_Name;
pNewAgent.m_CurrentPositionIndex = this.m_CurrentPositionIndex;
return pNewAgent;
}
public long CurrentPositionId
{
get
{
return m_Positions[m_CurrentPositionIndex];
}
}
public bool Arrived
{
get
{
long l = m_CurrentPositionIndex;
l++;
return (l==m_Positions.Length);
}
}
public void LoadPositionIds(string positions)
{
string[] sPositions = positions.Split(',');
m_Positions = new long[sPositions.Length];
for (int i = 0;i<sPositions.Length;i++)
{
m_Positions[i] = Convert.ToInt32(sPositions[i]);
}
m_CurrentPositionIndex = 0;
}
public void LoadPositionIds(long[] positions)
{
m_Positions = positions;
m_CurrentPositionIndex = 0;
}
public void LoadPositionIds(ArrayList positions)
{
long iTotalPostitions = positions.Count;
m_Positions = new long[iTotalPostitions];
for (int i = 0;i<iTotalPostitions;i++)
{
m_Positions[i] = Convert.ToInt32(positions[i]);
}
m_CurrentPositionIndex = 0;
}
public void LoadPositions (Hashtable pNetworkPositions)
{
m_pNetworkPositions = pNetworkPositions;
}
public void MoveForward()
{
Random pRandom = new Random();
if (pRandom.Next(0,2)==1)
{
System.Threading.Thread.Sleep(10);
this.Status = "Waiting";
return;
}
long iCurrentPosition = this.CurrentPositionId;
long iNextPosition = this.NextPositionId;
NetworkPosition pNetCurrentPosition = m_pNetworkPositions[iCurrentPosition] as NetworkPosition;
NetworkPosition pNetNextPosition = m_pNetworkPositions[iNextPosition] as NetworkPosition;
if(pNetNextPosition.AddAgent(false))
{
pNetCurrentPosition.RemoveAgent();
m_CurrentPositionIndex++;
this.Status = "Moving";
}
else
{
this.Status = "Waiting";
}
}
public NetworkPosition CurrentPosition
{
get
{
long lPositionID = m_Positions[m_CurrentPositionIndex];
return m_pNetworkPositions[lPositionID] as NetworkPosition;
}
}
public long NextPositionId
{
get
{
long l = m_CurrentPositionIndex;
l++;
//System.Diagnostics.Debug.WriteLine("Next position is: " + m_Positions[l].ToString() );
return m_Positions[l++];
}
}
public long RemainingPositions
{
get
{
//System.Diagnostics.Debug.WriteLine("Number of remaining positions: " + (m_Positions.Length - m_CurrentPositionIndex - 1).ToString() + " (" + this.Name + " )");
return m_Positions.Length - m_CurrentPositionIndex - 1;
}
}
public long TargetFacility
{
get
{
return m_TargetFacility;
}
set
{
m_TargetFacility = value;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -