private async Task <RSATable> FillTable(RSATable table, Graph graph, Demand demand, List <GraphPath> paths) { bool filled = false; foreach (var path in paths) { await InfoLogger.LogInformation($"trying path: {string.Join("->", path.Path)} distance: {path.ToLinks(graph.Links).Sum(r => r.Length)}"); List <AvailableSlot> availableTableSlots = GetAvailableTableSlots(graph, path, table); if (RSATableFill.FillDemandOnTable(ref table, graph, demand, path, availableTableSlots)) { filled = true; await InfoLogger.LogInformation($"demand supplied\n"); await InfoLogger.LogInformation(table.ToStringTable()); supplied++; break; } } if (filled == false) { await InfoLogger.LogInformation($"It's not possible to supply demand of {demand.Slots} from {demand.NodeIdFrom} to {demand.NodeIdTo}\n"); } return(table); }
private async Task <RSATable> FillTable(RSATable table, Graph graph, Demand demand, List <Tuple <GraphPath, GraphPath> > paths) { bool filled = false; foreach (var path in paths) { var tableMemory = table.CopyObject <RSATable>(); await InfoLogger.LogInformation($"trying main path: {string.Join("->", path.Item1.Path)} distance: {path.Item1.ToLinks(graph.Links).Sum(r=>r.Length)}"); List <AvailableSlot> availableTableSlots = base.GetAvailableTableSlots(graph, path.Item1, tableMemory); if (RSATableFill.FillDemandOnTable(ref tableMemory, graph, demand, path.Item1, availableTableSlots)) { availableTableSlots = GetAdditionalAvailableTableSlots(graph, path, tableMemory); await InfoLogger.LogInformation($"trying secundary path: {string.Join("->", path.Item2.Path)} distance: {path.Item2.ToLinks(graph.Links).Sum(r => r.Length)}"); if (RSATableFill.FillDemandOnTable(ref tableMemory, graph, demand, path.Item2, availableTableSlots, true)) { DemandSupplyMemory.Add(new DemandLinkPair(demand, path)); filled = true; await InfoLogger.LogInformation($"demand supplied\n"); table = tableMemory; await InfoLogger.LogInformation(table.ToStringTable()); supplied++; break; } } } if (filled == false) { await InfoLogger.LogInformation($"It's not possible to supply demand of {demand.Slots} from {demand.NodeIdFrom} to {demand.NodeIdTo}\n"); } return(table); }