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(); }
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); }
public void Merge(Cluster cluster) { Nodes.AddRange(cluster.Nodes); Nodes = Nodes.Distinct().ToList(); nodesUpdated = true; }