public void RepairThreat(IPlan plan, ThreatenedLinkFlaw tclf)
        {
            var cl     = tclf.causallink;
            var threat = tclf.threatener;

            if (threat is CompositePlanStep cps)
            {
                if (!plan.Orderings.IsPath(cps.InitialStep, cl.Tail))
                {
                    var promote = plan.Clone() as IPlan;
                    promote.ID += "pc";
                    if (cl.Tail.Name.Equals("DummyInit"))
                    {
                        promote.Orderings.Insert(cl.Tail.GoalCndt, cps.InitialStep);
                    }
                    promote.Orderings.Insert(cl.Tail, cps.InitialStep);
                    Insert(promote);
                }
                if (!plan.Orderings.IsPath(cl.Head, cps.GoalStep))
                {
                    var demote = plan.Clone() as IPlan;
                    demote.ID += "dc";
                    if (cl.Head.Name.Equals("DummyGoal"))
                    {
                        demote.Orderings.Insert(cps.GoalStep, cl.Head.InitCndt);
                    }
                    demote.Orderings.Insert(cps.GoalStep, cl.Head);
                    Insert(demote);
                }
            }
            else
            {
                // Promote
                if (!plan.Orderings.IsPath(threat, cl.Tail))
                {
                    var promote = plan.Clone() as IPlan;
                    promote.ID += "p";
                    if (cl.Tail.Name.Equals("DummyInit"))
                    {
                        promote.Orderings.Insert(cl.Tail.GoalCndt, threat);
                    }
                    promote.Orderings.Insert(cl.Tail, threat);
                    Insert(promote);
                }

                // Demote
                if (!plan.Orderings.IsPath(cl.Head, threat))
                {
                    var demote = plan.Clone() as IPlan;
                    demote.ID += "d";
                    if (cl.Head.Name.Equals("DummyGoal"))
                    {
                        demote.Orderings.Insert(threat, cl.Head.InitCndt);
                    }
                    demote.Orderings.Insert(threat, cl.Head);
                    Insert(demote);
                }
            }
        }
Пример #2
0
        public void RepairThreat(IPlan plan, ThreatenedLinkFlaw tclf)
        {
            var cl     = tclf.causallink;
            var threat = tclf.threatener;

            // Promote
            if (!plan.Orderings.IsPath(threat, cl.Tail))
            {
                var promote = plan.Clone() as IPlan;
                promote.Orderings.Insert(cl.Tail, threat);
                Insert(promote);
            }

            // Demote
            if (!plan.Orderings.IsPath(cl.Head, threat))
            {
                var demote = plan.Clone() as IPlan;
                demote.Orderings.Insert(threat, cl.Head);
                Insert(demote);
            }
        }
Пример #3
0
        public new void RepairThreat(IPlan plan, ThreatenedLinkFlaw tclf)
        {
            var cl     = tclf.causallink;
            var threat = tclf.threatener;

            if (threat is CompositeSchedulePlanStep cps)
            {
                if (!plan.Orderings.IsPath(cps.InitialStep, cl.Tail))
                {
                    var promote = plan.Clone() as IPlan;
                    promote.ID += "p";

                    if (cl.Tail.Name.Equals("DummyInit"))
                    {
                        promote.Orderings.Insert(cl.Tail.GoalCndt, cps.InitialStep);
                    }

                    promote.Orderings.Insert(cl.Tail, cps.InitialStep);
                    // because no guaranteed ordering between head and tail
                    promote.Orderings.Insert(cl.Head, cps.InitialStep);
                    //promote.ID += string.Format("(^Opc[{0},{1}])", cl.Tail.ID, cps.InitialStep.ID);

                    Insert(promote);
                }
                if (!plan.Orderings.IsPath(cl.Head, cps.GoalStep))
                {
                    var demote = plan.Clone() as IPlan;
                    demote.ID += "d";

                    if (cl.Head.Name.Equals("DummyGoal"))
                    {
                        demote.Orderings.Insert(cps.GoalStep, cl.Head.InitCndt);
                    }
                    demote.Orderings.Insert(cps.GoalStep, cl.Head);
                    // because no guaranteed ordering between head and tail
                    demote.Orderings.Insert(cps.GoalStep, cl.Tail);
                    //demote.ID += string.Format("(^Odc[{0},{1}])", cps.GoalStep.ID, cl.Head.ID);

                    Insert(demote);
                }
            }
            else
            {
                // Promote
                if (!plan.Orderings.IsPath(threat, cl.Tail))
                {
                    var promote = plan.Clone() as IPlan;
                    promote.ID += "p";

                    if (cl.Tail.Name.Equals("DummyInit"))
                    {
                        promote.Orderings.Insert(cl.Tail.GoalCndt, threat);
                    }
                    promote.Orderings.Insert(cl.Tail, threat);
                    //promote.ID += string.Format("(^Op[{0},{1}])", cl.Tail.ID, threat.ID);
                    Insert(promote);
                }

                // Demote
                if (!plan.Orderings.IsPath(cl.Head, threat))
                {
                    var demote = plan.Clone() as IPlan;
                    demote.ID += "d";
                    if (cl.Head.Name.Equals("DummyGoal"))
                    {
                        demote.Orderings.Insert(threat, cl.Head.InitCndt);
                    }
                    demote.Orderings.Insert(threat, cl.Head);
                    //demote.Orderings.Insert(threat, cl.Tail);
                    //demote.ID += string.Format("(^Odp[{0},{1}])", threat.ID, cl.Head);
                    Insert(demote);
                }
            }
        }