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

📄 agents.cs

📁 AE+vb来实现的最短路径的实现功能!gis
💻 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 + -