Beispiel #1
0
        public void CreateCommodityGraphs()
        {
            lock (objectToLock)
            {
                log.DebugFormat(
                    "CreateCommodityGraphs: {0}",
                    meapContext.Commodities.Count);

                foreach (KeyValuePair <long, Commodity> p in meapContext.Commodities)
                {
                    long      commodityId = p.Key;
                    Commodity commodity   = p.Value;

                    DAG Gi = new("Gi");
                    DAG.MakeCommodity(meapContext.TArbSeqCFG, commodity.sNodeId, commodity.tNodeId, Gi);

                    commodity.Gi = Gi;
                }

                ICommonOptions       commonOptions       = configuration.Get <ICommonOptions>();
                ICheckDataStructures checkDataStructures = configuration.Get <ICheckDataStructures>();

                if (commonOptions.CheckDataStructures)
                {
                    checkDataStructures.CheckCommoditiesHaveNoSingleNodes(meapContext);
                }

                ExcludeDefs();

                if (commonOptions.CheckDataStructures)
                {
                    checkDataStructures.CheckCommoditiesHaveNoSingleNodes(meapContext);
                }
            }
        }
Beispiel #2
0
        private void ExcludeDefs()
        {
            foreach (KeyValuePair <long, Commodity> p in meapContext.Commodities)
            {
                Commodity commodity = p.Value;
                long      commVar   = commodity.Variable;

                List <long> toRemove = new();

                foreach (long uNodeId in commodity.Gi.GetInnerNodeIds())
                {
                    ICollection <long> uVars = meapContext.Assignments[uNodeId];

                    if (uVars.Contains(commVar))
                    {
                        toRemove.Add(uNodeId);
                    }
                }

                toRemove.ForEach(r => commodity.Gi.RemoveNode(commodity.Gi.NodeEnumeration[r]));

                toRemove.ForEach(r =>
                                 log.Debug(
                                     "var " + commVar + " " +
                                     commodity.Gi.GetSourceNodeId() + ", " +
                                     commodity.Gi.GetSinkNodeId() +
                                     " remove: " + r));

                DAG newGi = new("Gi");
                DAG.CutChains(commodity.Gi, newGi);
                commodity.Gi = newGi;

                excludedDefs.AddRange(toRemove);
            }

            ICheckDataStructures checkDataStructures = configuration.Get <ICheckDataStructures>();

            checkDataStructures.CheckCommoditiesHaveNoSingleNodes(meapContext);
        }