本文整理汇总了C#中Domain.GroundActionByName方法的典型用法代码示例。如果您正苦于以下问题:C# Domain.GroundActionByName方法的具体用法?C# Domain.GroundActionByName怎么用?C# Domain.GroundActionByName使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Domain
的用法示例。
在下文中一共展示了Domain.GroundActionByName方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Solve
public List<Action> Solve(Problem p, Domain d)
{
State sStart = p.GetInitialBelief().ChooseState(true);
List<Action> lActions = new List<Action>();
Action aClear = d.GroundActionByName(new string[] { "clear-all", "" }, sStart.Predicates, false);
sStart = sStart.Apply(aClear);
lActions.Add(aClear);
State sComputeUpstream = ApplyCompute(sStart, "upstream", lActions, d);
State sComputeAffected = ApplyCompute(sComputeUpstream, "affected", lActions, d);
State sComputePath = ApplyCompute(sComputeAffected, "path", lActions, d);
State sComputeLine = ApplyCompute(sComputePath, "line", lActions, d);
//State sObserveAll = ObserveAll(sComputeLine, lActions, d);
return lActions;
}
示例2: ApplyCompute
private State ApplyCompute(State s, string sName, List<Action> lActions, Domain d)
{
State sCurrent = s;
Predicate pNew = new GroundedPredicate("new-" + sName);
Predicate pDone = new GroundedPredicate("done-" + sName);
int i = 0;
while (!sCurrent.Contains(pNew.Negate()) || !sCurrent.Contains(pDone) || i < 10)
{
Action a1 = d.GroundActionByName(new string[] { "pre-" + sName, "" }, sCurrent.Predicates, false);
Action a2 = d.GroundActionByName(new string[] { "compute-" + sName, "" }, sCurrent.Predicates, false);
if (a1 != null && a2 != null)
{
sCurrent = sCurrent.Apply(a1);
sCurrent = sCurrent.Apply(a2);
lActions.Add(a1);
lActions.Add(a2);
}
i++;
}
Action a = d.GroundActionByName(new string[] { "observe-new-" + sName + "-F", "" }, sCurrent.Predicates, false);
sCurrent = sCurrent.Apply(a);
lActions.Add(a);
a = d.GroundActionByName(new string[] { "post-" + sName, "" }, sCurrent.Predicates, false);
sCurrent = sCurrent.Apply(a);
lActions.Add(a);
return sCurrent;
}
示例3: ApplyAxiom
private State ApplyAxiom(State s, List<Action> lActions, Domain d)
{
State sCurrent = s;
Predicate pNew = new GroundedPredicate("new");
Predicate pDone = new GroundedPredicate("done");
while (!sCurrent.Contains(pNew.Negate()) || !sCurrent.Contains(pDone))
{
Action a1 = d.GroundActionByName(new string[] { "pre-axiom", "" }, sCurrent.Predicates, false);
Action a2 = d.GroundActionByName(new string[] { "axiom", "" }, sCurrent.Predicates, false);
if (a1 != null && a2 != null)
{
sCurrent = sCurrent.Apply(a1);
sCurrent = sCurrent.Apply(a2);
lActions.Add(a1);
lActions.Add(a2);
}
}
Action a = d.GroundActionByName(new string[] { "observe-new-F", "" }, sCurrent.Predicates, false);
sCurrent = sCurrent.Apply(a);
lActions.Add(a);
a = d.GroundActionByName(new string[] { "fixpoint", "" }, sCurrent.Predicates, false);
sCurrent = sCurrent.Apply(a);
lActions.Add(a);
return sCurrent;
}
示例4: TestCLGPlan
static bool TestCLGPlan(string sPath, Domain domain, Problem problem, List<string> lPlan, State sChosen,
out int cActions, out TimeSpan tsTime)
{
DateTime dtStart = DateTime.Now;
BeliefState bsInitial = problem.GetInitialBelief();
bsInitial.UnderlyingEnvironmentState = sChosen;
PartiallySpecifiedState pssCurrent = bsInitial.GetPartiallySpecifiedState(), pssNext = null;
Formula fObserved = null;
cActions = 0;
foreach (string sAction in lPlan)
{
TimeSpan ts = DateTime.Now - dtStart;
//if (ts.TotalMinutes > MaxTimePerProblem)
// throw new Exception("Execution taking too long");
Debug.WriteLine((int)(ts.TotalMinutes) + "," + cActions + ") " + domain.Name + ", executing action " + sAction);
Action a = domain.GroundActionByName(sAction.Split(' '));
if (a.Observe != null)
{
Predicate pObserve = ((PredicateFormula)a.Observe).Predicate;
if (pssCurrent.Observed.Contains(pObserve) || pssCurrent.Observed.Contains(pObserve.Negate()))
continue;
}
pssNext = pssCurrent.Apply(a, out fObserved);
if (fObserved != null)
{
Debug.WriteLine(domain.Name + ", observed " + fObserved);
}
if (pssNext == null)
{
Debug.WriteLine(domain.Name + ", cannot execute " + sAction);
break;
}
cActions++;
pssCurrent = pssNext;
}
tsTime = DateTime.Now - dtStart;
if (pssCurrent.IsGoalState())
Debug.WriteLine("Plan succeeded!");
Debug.WriteLine("*******************************************************************************");
return pssCurrent.IsGoalState();
}