private void GenerateClustersFromNnc()
        {
            PenaltyCluster = new Cluster();

            if (ClustersCount >= nncClusters.Count)
            {
                Clusters = nncClusters;
            }
            else
            {
                Clusters = new List<Cluster>();

                List<Cluster> newClusters = new List<Cluster>();
                newClusters.AddRange(nncClusters);

                for (int i = 0; i != ClustersCount; i++)
                {
                    int index = TaskController.Rnd.Next(newClusters.Count);
                    Clusters.Add(newClusters[index]);
                    newClusters.RemoveAt(index);
                }

                foreach (Cluster newCluster in newClusters)
                {
                    PenaltyCluster.Merge(newCluster);
                }
            }

            foreach (Cluster cluster in Clusters)
            {
                cluster.Depot = Depot;
            }
        }
        private SiteClusteringCvrpp(SiteClusteringCvrpp site)
            : base(site)
        {
            PenaltyCluster = new Cluster(site.PenaltyCluster);
            kilometerCost = site.kilometerCost;

            FormAllClusters();
        }
        public SiteClusteringCvrpp(List<Node> nodes, int capacityLimit, int clustersCount, double kilometerCost)
            : base(nodes, capacityLimit, clustersCount)
        {
            PenaltyCluster = new Cluster();
            PenaltyCluster.AddNodes(RemainingNodes);

            this.kilometerCost = kilometerCost;

            FormAllClusters();
        }
Example #4
0
        public Cluster(Cluster cluster)
        {
            Nodes = new List<Node>();

            foreach (Node node in cluster.Nodes)
            {
                Nodes.Add(node);
            }

            Depot = cluster.Depot;
            CapacityLimit = cluster.CapacityLimit;
        }
        private void AddCluster()
        {
            Cluster newCluster = new Cluster();
            newCluster.Depot = Depot;
            newCluster.CapacityLimit = CapacityLimit;

            Clusters.Add(newCluster);
        }
        protected static bool ExchangeNodesInClusters(Cluster c1, Cluster c2)
        {
            if (c1.Nodes.Count == 0 || c2.Nodes.Count == 0)
            {
                return false;
            }

            int i1 = TaskController.Rnd.Next(c1.Nodes.Count);
            int i2 = TaskController.Rnd.Next(c2.Nodes.Count);

            Node node1 = c1.Nodes[i1];
            Node node2 = c2.Nodes[i2];

            int volume1 = c1.Volume - node1.Volume;
            int volume2 = c2.Volume - node2.Volume;

            if (volume1 + node2.Volume <= c1.CapacityLimit && volume2 + node1.Volume <= c2.CapacityLimit)
            {
                c1.RemoveNode(node1);
                c2.RemoveNode(node2);

                c1.AddNode(node2);
                c2.AddNode(node1);

                return true;
            }

            return false;
        }
        protected void AddCluster()
        {
            Cluster newCluster = new Cluster();
            newCluster.Depot = Depot;

            Clusters.Add(newCluster);
        }
        protected override void GoToNeighbour(Site site)
        {
            SiteClusteringCvrpp siteClusteringCvrpp = site as SiteClusteringCvrpp;

            Clusters = new List<Cluster>();
            Clusters.AddRange(siteClusteringCvrpp.Clusters);

            kilometerCost = siteClusteringCvrpp.kilometerCost;
            PenaltyCluster = new Cluster(siteClusteringCvrpp.PenaltyCluster);

            FormAllClusters();
        }
        protected static void MoveNodeFromOneClusterToAnother(Cluster cluster1, Cluster cluster2)
        {
            int nodeIndex = TaskController.Rnd.Next(cluster1.Nodes.Count);

            Node node = cluster1.Nodes[nodeIndex];

            cluster1.RemoveNode(node);
            cluster2.AddNode(node);
        }
Example #10
0
 public void Merge(Cluster cluster)
 {
     Nodes.AddRange(cluster.Nodes);
     Nodes = Nodes.Distinct().ToList();
     nodesUpdated = true;
 }