Ejemplo n.º 1
0
        public Sensor Greedy4(Sensor ni, Packet packet)
        {
            List <CoordinationEntry> coordinationEntries = new List <CoordinationEntry>();
            Point endPoint = (packet.Destination != null) ? packet.Destination.CenterLocation : packet.DestinationPoint;

            Sensor sj  = null;
            double sum = 0;

            switch (packet.PacketType)
            {
            case PacketType.ObtainSinkPosition:
            {
                foreach (Sensor nj in ni.NeighborsTable)
                {
                    if (nj.ResidualEnergyPercentage > 0)
                    {
                        if (nj.IsHightierNode)
                        {
                            double aggregatedValue = 1;
                            sum += aggregatedValue;
                            coordinationEntries.Add(new CoordinationEntry()
                                {
                                    Priority = aggregatedValue, Sensor = nj
                                });                                                                                               // candidaite
                            //return nj;
                        }
                        else
                        {
                            double Norangle = Operations.AngleDotProdection(ni.CenterLocation, nj.CenterLocation, endPoint);
                            double dj       = Operations.DistanceBetweenTwoPoints(nj.CenterLocation, endPoint);
                            if (Norangle < 0.5)
                            {
                                double aggregatedValue = dj;
                                sum += aggregatedValue;
                                coordinationEntries.Add(new CoordinationEntry()
                                    {
                                        Priority = aggregatedValue, Sensor = nj
                                    });                                                                                               // candidaite
                            }
                            else if (Norangle == 0 || Double.IsNaN(Norangle))
                            {
                                double aggregatedValue = 1;
                                sum += aggregatedValue;
                                coordinationEntries.Add(new CoordinationEntry()
                                    {
                                        Priority = aggregatedValue, Sensor = nj
                                    });                                                                                               // candidaite
                            }
                        }
                    }
                }
            }
            break;

            case PacketType.ReportSinkPosition:
            {
                foreach (Sensor nj in ni.NeighborsTable)
                {
                    if (nj.ResidualEnergyPercentage > 0)
                    {
                        if (nj.IsHightierNode)
                        {
                            return(nj);
                        }
                        else
                        {
                            double Norangle = Operations.AngleDotProdection(ni.CenterLocation, nj.CenterLocation, endPoint);
                            double dj       = Operations.DistanceBetweenTwoPoints(nj.CenterLocation, endPoint);
                            if (Norangle == 0 || Double.IsNaN(Norangle))
                            {
                                double aggregatedValue = 1;
                                sum += aggregatedValue;
                                coordinationEntries.Add(new CoordinationEntry()
                                    {
                                        Priority = aggregatedValue, Sensor = nj
                                    });                                                                                               // candidaite
                            }
                            else if (Norangle < 0.5)
                            {
                                double aggregatedValue = dj;
                                sum += aggregatedValue;
                                coordinationEntries.Add(new CoordinationEntry()
                                    {
                                        Priority = aggregatedValue, Sensor = nj
                                    });                                                                                               // candidaite
                            }
                        }
                    }
                }
            }
            break;

            default:
            {
                // defaul greedy:
                foreach (Sensor nj in ni.NeighborsTable)
                {
                    if (nj.ResidualEnergyPercentage > 0)
                    {
                        double Norangle = Operations.AngleDotProdection(ni.CenterLocation, nj.CenterLocation, endPoint);
                        double dj       = Operations.DistanceBetweenTwoPoints(nj.CenterLocation, endPoint);

                        if (Norangle == 0 || Double.IsNaN(Norangle))
                        {
                            double aggregatedValue = 1;
                            sum += aggregatedValue;
                            coordinationEntries.Add(new CoordinationEntry()
                                {
                                    Priority = aggregatedValue, Sensor = nj
                                });                                                                                               // candidaite
                        }
                        else if (Norangle < 0.5)
                        {
                            double aggregatedValue = dj;
                            sum += aggregatedValue;
                            coordinationEntries.Add(new CoordinationEntry()
                                {
                                    Priority = aggregatedValue, Sensor = nj
                                });                                                                                               // candidaite
                        }
                    }
                }
            }
            break;
            }

            // coordination"..... here
            sj = counter.CoordinateGetMin1(coordinationEntries, packet, sum);
            return(sj);
        }