public static List <TradeZoneModel> AddSystemzoneFromListConflict(List <TradeZoneModel> list, double?avg, List <SystemZone> graph) { var g = InitGraph(graph); List <TradeZoneModel> tempList = list.Select(x => new TradeZoneModel { ListSuitable = new List <SystemZone>(x.ListSuitable), ListSystemZones = new List <SystemZone>(x.ListSystemZones), SelectedSystemzone = x.SelectedSystemzone, Store = x.Store, TotalWeight = x.TotalWeight }).ToList(); foreach (var model in list) { var tempGraph2 = InitGraph(model.ListSystemZones); tempGraph2.DFS(model.SelectedSystemzone.Id); model.ListSystemZones = tempGraph2.Where(x => x.IsVisit).Select(x => x.SystemZone).ToList(); double?weight = 0.0; foreach (var item in model.ListSystemZones) { weight += item.WeightNumber; } model.TotalWeight = weight; model.ListSuitable.AddRange(tempGraph2.Where(x => !x.IsVisit).Select(x => x.SystemZone).ToList()); model.ListSuitable.AddRange(model.ListSystemZones); Graph.Graph tempGraph = new Graph.Graph(); tempGraph = InitGraph(model.ListSuitable); tempGraph.BFS(model.SelectedSystemzone.Id); List <Vertex> tempGraph1 = new List <Vertex>(); tempGraph1 = tempGraph.OrderBy(x => x.Level).ToList(); tempGraph1 = tempGraph1.Where(x => x.Level != -1).ToList(); model.ListSuitable = tempGraph1.Select(x => x.SystemZone).ToList(); model.ListSuitable = model.ListSuitable.Where(x => model.ListSystemZones.All(c => c != x)).ToList(); foreach (var systemzone in model.ListSystemZones) { g.GetVertex(systemzone.Id).IsCollect = true; g.GetVertex(systemzone.Id).SelectedId = model.SelectedSystemzone.Id; } } foreach (var model in list) { double?standardDeviation = double.MaxValue; double?range = 0; foreach (var item in model.ListSuitable) { if (model.ListSystemZones.Any(x => x.Geom.Intersects(item.Geom)) && g.GetVertex(item.Id).IsCollect == false) { var temp1 = model.TotalWeight + item.WeightNumber; range = Math.Abs((double)(avg - temp1)); if (range < standardDeviation) { standardDeviation = range; model.ListSystemZones.Add(item); model.TotalWeight = temp1; g.GetVertex(item.Id).IsCollect = true; g.GetVertex(item.Id).SelectedId = model.SelectedSystemzone.Id; } if (range <= standardDeviation && (avg - temp1) < 0) { break; } } } } List <SystemZone> remainSystemzone = new List <SystemZone>(); foreach (var item in g) { if (item.IsCollect == false) { remainSystemzone.Add(item.SystemZone); } } var deleteList = new List <SystemZone>(); foreach (var item in remainSystemzone) { var selectSystemzone = list.Where(x => x.ListSystemZones.Any(c => c.Geom.Intersects(item.Geom))); if (selectSystemzone != null) { if (selectSystemzone.Count() == 1) { selectSystemzone.First().TotalWeight = selectSystemzone.First().TotalWeight + item.WeightNumber; selectSystemzone.First().ListSystemZones.Add(item); g.GetVertex(item.Id).SelectedId = selectSystemzone.First().SelectedSystemzone.Id; deleteList.Add(item); } } } foreach (var item in deleteList) { remainSystemzone.Remove(item); } while (remainSystemzone.Any()) { var deleteDuplicateList = new List <SystemZone>(); foreach (var item in remainSystemzone) { var selectSystemzone = list.Where(x => x.ListSystemZones.Any(c => c.Geom.Intersects(item.Geom))).OrderBy(x => x.TotalWeight).FirstOrDefault(); if (selectSystemzone != null) { selectSystemzone.TotalWeight += item.WeightNumber; selectSystemzone.ListSystemZones.Add(item); g.GetVertex(item.Id).SelectedId = selectSystemzone.SelectedSystemzone.Id; deleteDuplicateList.Add(item); } } foreach (var item in deleteDuplicateList) { remainSystemzone.Remove(item); } } List <TradeZoneModel> listNeedToSplit = new List <TradeZoneModel>(list); var listSelected = list.Select(x => x.SelectedSystemzone.Id).ToList(); while (listNeedToSplit.Any()) { var minTradeZone = listNeedToSplit.OrderBy(x => x.TotalWeight).First(); for (int i = 0; i < list.Where(x => x.SelectedSystemzone.Id == minTradeZone.SelectedSystemzone.Id).FirstOrDefault().ListSystemZones.Count; i++) { var item = list.Where(x => x.SelectedSystemzone.Id == minTradeZone.SelectedSystemzone.Id).FirstOrDefault().ListSystemZones.ElementAt(i); var templist = g.GetVertex(item.Id).AdjList.ToList(); foreach (var edge in templist) { double?tempWeght = list.Where(x => x.SelectedSystemzone.Id == minTradeZone.SelectedSystemzone.Id).FirstOrDefault().TotalWeight; tempWeght += edge.V.SystemZone.WeightNumber; if (tempWeght / avg <= 0.95) { var selectedId = g.GetVertex(edge.V.SystemZone.Id).SelectedId; if (selectedId != 0) { List <SystemZone> listToCheckLink = new List <SystemZone>(list.Where(x => x.SelectedSystemzone.Id == selectedId).FirstOrDefault().ListSystemZones); listToCheckLink.Remove(edge.V.SystemZone); if (CheckLinkTradeZone(listToCheckLink) && listSelected.All(x => x != edge.V.SystemZone.Id)) { g.GetVertex(edge.V.SystemZone.Id).SelectedId = 0; list.Where(x => x.SelectedSystemzone.Id == minTradeZone.SelectedSystemzone.Id).FirstOrDefault().ListSystemZones.Add(edge.V.SystemZone); list.Where(x => x.SelectedSystemzone.Id == selectedId).FirstOrDefault().ListSystemZones.Remove(edge.V.SystemZone); list.Where(x => x.SelectedSystemzone.Id == minTradeZone.SelectedSystemzone.Id).FirstOrDefault().TotalWeight = tempWeght; list.Where(x => x.SelectedSystemzone.Id == selectedId).FirstOrDefault().TotalWeight -= edge.V.SystemZone.WeightNumber; } } } } } listNeedToSplit.Remove(minTradeZone); } return(list); }
private void OnPhraseRecognized(PhraseRecognizedEventArgs args) { myLogs.LogMessage(LoggingLevels.Verbose, "OnPhraseRecognized: " + String.Format("{0} ({1})", args.text, args.confidence), Module: "SpeechProcessing.OnPhraseRecognized", Version: "ALPHA"); //Do Some work switch (args.text) { case "Dense": m_graph.RaiseFeedback("Showing highly connected nodes"); myLogs.LogMessage(LoggingLevels.Verbose, "OnPhraseRecognized: Dense (Test)", Module: "SpeechProcessing.OnPhraseRecognized", Version: "ALPHA"); m_graph.ShowDenseNodes(); break; case "Depth First Search": m_graph.RaiseFeedback("Visualizing Depth First Search"); myLogs.LogMessage(LoggingLevels.Verbose, "OnPhraseRecognized: Depth First Search (Test)", Module: "SpeechProcessing.OnPhraseRecognized", Version: "ALPHA"); m_graph.DFS(); break; case "Breadth First Search": m_graph.RaiseFeedback("Visualizing breadth First Search"); myLogs.LogMessage(LoggingLevels.Verbose, "OnPhraseRecognized: Breadth First Search(Test)", Module: "SpeechProcessing.OnPhraseRecognized", Version: "ALPHA"); m_graph.BFS(); break; case "Stop": m_graph.RaiseFeedback(" Stopping "); break; case "Graph Properties": myLogs.LogMessage(LoggingLevels.Verbose, "OnPhraseRecognized: Graph Properties (Test)", Module: "SpeechProcessing.OnPhraseRecognized", Version: "ALPHA"); m_graph.RaiseFeedback(AR.Core.Voice.VoiceManager.RelayGraphProperties(m_graph)); break; case "Reset": m_graph.RaiseFeedback("Reseting graph properties"); myLogs.LogMessage(LoggingLevels.Verbose, "OnPhraseRecognized: Reset (Test)", Module: "SpeechProcessing.OnPhraseRecognized", Version: "ALPHA"); m_graph.ResetColors(); break; case "Load Simple Graph": m_graph.RaiseFeedback("Loading Simple Graph"); myLogs.LogMessage(LoggingLevels.Verbose, "OnPhraseRecognized: Load Simple Graph (Test)", Module: "SpeechProcessing.OnPhraseRecognized", Version: "ALPHA"); m_graph.ReloadGraph(GraphTypes.Simple); break; case "Load Sample Graph": m_graph.RaiseFeedback("Loading Sample Graph"); myLogs.LogMessage(LoggingLevels.Verbose, "OnPhraseRecognized: Load Sample Graph(Test)", Module: "SpeechProcessing.OnPhraseRecognized", Version: "ALPHA"); m_graph.ReloadGraph(GraphTypes.Sample); break; case "Load Database Graph": m_graph.RaiseFeedback("Loading Graph from Neo 4 Jay"); myLogs.LogMessage(LoggingLevels.Verbose, "OnPhraseRecognized: Load Database Graph (Test)", Module: "SpeechProcessing.OnPhraseRecognized", Version: "ALPHA"); m_graph.ReloadGraph(GraphTypes.Neo4jLocal); break; case "Move Nodes": m_graph.RaiseFeedback("Moving Nodes"); myLogs.LogMessage(LoggingLevels.Verbose, "OnPhraseRecognized: Moving Nodes (Test)", Module: "SpeechProcessing.OnPhraseRecognized", Version: "ALPHA"); m_graph.RandomMoveAllNodes(false); break; case "Disable Speach": m_graph.RaiseFeedback("Disabling Speach"); myLogs.LogMessage(LoggingLevels.Verbose, "OnPhraseRecognized: Disable Speach (Test)", Module: "SpeechProcessing.OnPhraseRecognized", Version: "ALPHA"); m_graph.removeSpeach = true; break; case "Enable Speach": m_graph.removeSpeach = false; m_graph.RaiseFeedback("Enabling Speach"); myLogs.LogMessage(LoggingLevels.Verbose, "OnPhraseRecognized: Enable Speach (Test)", Module: "SpeechProcessing.OnPhraseRecognized", Version: "ALPHA"); break; case "Show Edges": m_graph.RaiseFeedback("Showing All Edges"); m_graph.ShowAllEdges(); break; case "Hide Edges": m_graph.RaiseFeedback("Hiding All Edges"); m_graph.HideAllEdges(); break; case "Show Nodes": m_graph.RaiseFeedback("Showing All Nodes"); m_graph.ShowAllNodes(); break; case "Hide Nodes": m_graph.RaiseFeedback("Hiding All Nodes"); m_graph.HideAllNodes(); break; case "List Commands": myLogs.LogMessage(LoggingLevels.Verbose, "OnPhraseRecognized: List Commands (Test)", Module: "SpeechProcessing.OnPhraseRecognized", Version: "ALPHA"); m_graph.RaiseFeedback("Listing Commands "); StringBuilder sb = new StringBuilder(); //can be used to dedupe HashSet <String> uniqueCommands = new HashSet <string>(); foreach (var st in m_Keywords) { sb.Append(st + " . "); } m_graph.RaiseFeedback("Commands Available. " + sb.ToString()); myLogs.LogMessage(LoggingLevels.Verbose, "Commands Available:" + sb.ToString(), Module: "SpeechProcessing.OnPhraseRecognized", Version: "ALPHA"); break; default: //handle the approximate matches here if (args.text.Contains("Node Scale Color")) { var propname = args.text.Replace("Node Scale Color", "").Trim(); m_graph.RaiseFeedback(args.text); //say what you're doing here m_graph.ColorNodesPropBased(propname); } if (args.text.Contains("Node Scale Size")) { var propname = args.text.Replace("Node Scale Size", "").Trim(); m_graph.RaiseFeedback(args.text); //say what you're doing here m_graph.ScaleNodesPropBased(propname); } if (args.text.Contains("Edge Scale Color")) { var propname = args.text.Replace("Edge Scale Color", "").Trim(); m_graph.RaiseFeedback(args.text); //say what you're doing here m_graph.ColorEdgePropBased(propname); } if (args.text.Contains("Edge Scale Size")) { var propname = args.text.Replace("Edge Scale Size", "").Trim(); m_graph.RaiseFeedback(args.text + ", Not Implemented Correctly"); //say what you're doing here //m_graph.ScaleEdgePropBased(propname); } break; } }