Beispiel #1
0
        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);
        }
Beispiel #2
0
        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;
            }
        }