private void fillData(int numClients, int numBackbones, int numDemands, int trafficMin, int trafficMax, int minClientDegree, int maxClientDegree, int minBackboneDegree, int maxBackboneDegree, int maxCapacity, int fixedChargeCost, int seed, NetworkRoutingData data) { int size = numBackbones + numClients; string name = $"mp_c{numClients}_b{numBackbones}_d{numDemands}.t{trafficMin}-{trafficMax}.cd{minClientDegree}-{maxClientDegree}.bd{minBackboneDegree}-{maxBackboneDegree}.mc{maxCapacity}.fc{fixedChargeCost}.s{seed}"; data.Name = name; data.NumberOfNodes = size; int numArcs = 0; for (int i = 0; i < size - 1; i++) { for (int j = i + 1; j < size; j++) { if (_network[i][j]) { data.AddArc(i, j, maxCapacity); numArcs++; } } } data.MaximumCapacity = maxCapacity; data.FixedChargeCost = fixedChargeCost; }
public NetworkRoutingData BuildModelFromParameters(int numClients, int numBackbones, int numDemands, int trafficMin, int trafficMax, int minClientDegree, int maxClientDegree, int minBackboneDegree, int maxBackboneDegree, int maxCapacity, int fixedChargeCost, int seed) { Debug.Assert(numBackbones >= 1); Debug.Assert(numClients >= 0); Debug.Assert(numDemands >= 1); Debug.Assert(numDemands <= (numClients == 0 ? numBackbones * numBackbones : numClients * numBackbones)); Debug.Assert(maxClientDegree >= minClientDegree); Debug.Assert(maxBackboneDegree >= minBackboneDegree); Debug.Assert(trafficMax >= 1); Debug.Assert(trafficMax >= trafficMin); Debug.Assert(trafficMin >= 1); Debug.Assert(maxBackboneDegree >= 2); Debug.Assert(maxClientDegree >= 2); Debug.Assert(maxClientDegree <= numBackbones); Debug.Assert(maxBackboneDegree <= numBackbones); Debug.Assert(maxCapacity >= 1); int size = numBackbones + numClients; initData(size, seed); buildGraph(numClients, numBackbones, minClientDegree, maxClientDegree, minBackboneDegree, maxBackboneDegree); NetworkRoutingData data = new NetworkRoutingData(); createDemands(numClients, numBackbones, numDemands, trafficMin, trafficMax, data); fillData(numClients, numBackbones, numDemands, trafficMin, trafficMax, minClientDegree, maxClientDegree, minBackboneDegree, maxBackboneDegree, maxCapacity, fixedChargeCost, seed, data); return(data); }
private void createDemands(int numClients, int numBackbones, int numDemands, int trafficMin, int trafficMax, NetworkRoutingData data) { while (data.NumberOfDemands < numDemands) { int source = randomClient(numClients, numBackbones); int dest = source; while (dest == source) { dest = randomClient(numClients, numBackbones); } int traffic = randomInInterval(trafficMin, trafficMax); data.AddDemand(source, dest, traffic); } }