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 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); }