/// <summary> /// Selects the action for execution. /// </summary> /// <returns>The select.</returns> /// <param name="context">Context.</param> public IAction Select(IAIContext context) { List <IQualifier> qualifiers = rootSelector.qualifiers; IDefaultQualifier defaultQualifier = rootSelector.defaultQualifier; IQualifier winner = rootSelector.Select(context, qualifiers, defaultQualifier); CompositeQualifier cq = winner as CompositeQualifier; // TODO: What if there are no scoreres? //float score = cq.Score(context, cq.scorers); IAction action = winner.action; return(action); }
public virtual void CloneFrom(object other) { Selector selector = other as Selector; if (selector == null) { return; } for (int i = 0; i < selector.qualifiers.Count; i++) { this._qualifiers.Add(selector.qualifiers[i]); } this._id = selector.id; this._defaultQualifier = selector._defaultQualifier; }
/// <summary> /// Clones or transfers settings from the other entity to itself. /// </summary> /// <param name="other">The other entity.</param> public virtual void CloneFrom(object other) { var source = other as Selector; if (source == null) { return; } foreach (var q in source.qualifiers) { _qualifiers.Add(q); } _id = source.id; _defaultQualifier = source._defaultQualifier; }
public override IQualifier Select(IAIContext context, IList <IQualifier> qualifiers, IDefaultQualifier defaultQualifier) { int count = qualifiers.Count; float single = defaultQualifier.score; IQualifier qualifier = null; for (int i = 0; i < count; i++) { IQualifier item = qualifiers[i]; if (!item.isDisabled) { float single1 = item.Score(context); if (single1 > single) { single = single1; qualifier = item; } } } if (qualifier == null) { return(defaultQualifier); } return(qualifier); }
public override IQualifier Select(IAIContext context, List <IQualifier> qualifiers, IDefaultQualifier defaultQualifier) // Need default qualifier. Final return value should be default Qualifier. { List <IQualifier> qList = new List <IQualifier>(qualifiers); if (qList.Count == 0) { return(defaultQualifier as IQualifier); } // Get score for all qualifiers for (int index = 0; index < qList.Count; index++) { CompositeQualifier q = qList[index] as CompositeQualifier; var score = q.Score(context, q.scorers); } // Sort list of qualifiers. qList.Sort(); // Sorts in accending order. qList.Reverse(); // Sorts in decending order. var best = qList[0]; //DebugSelectorWinner(context, qList); return(best); }
/// <summary> /// Initializes a new instance of the <see cref="T:UtilityAI.Selector"/> class. /// </summary> protected Selector() { //Debug.Log(string.Format("Selector: {0} : Abstract Constructor Message", this.GetType().Name)); defaultQualifier = new DefaultQualifier(); RegenerateId(); }
/// <summary> /// This function selects the best score from a list of qualifiers. /// </summary> public abstract IQualifier Select(IAIContext context, List <IQualifier> qualifiers, IDefaultQualifier defaultQualifier);
/// <summary> /// For Debugging /// </summary> public Dictionary <IQualifier, float> GetSelectorResults(IAIContext context, IList <IQualifier> qualifiers, IDefaultQualifier defaultQualifer) { if (selectorResults == null) { selectorResults = new Dictionary <IQualifier, float>(); } else { selectorResults.Clear(); } for (int index = 0; index < qualifiers.Count; index++) { CompositeQualifier qualifier = qualifiers[index] as CompositeQualifier; var score = qualifier.Score(context, qualifier.scorers); selectorResults.Add(qualifier, score); } var dq = defaultQualifer as IQualifier; selectorResults.Add(dq, defaultQualifer.Score(context)); return(selectorResults); }
/// <summary> /// Selects the action for execution, given the specified context. /// This selector choses the first <see cref="IQualifier"/> to score above the <see cref="Selector.defaultQualifier"/>. /// </summary> /// <param name="context">The context.</param> /// <param name="qualifiers">The qualifiers from which to find the action.</param> /// <param name="defaultQualifier">The default qualifier.</param> /// <returns> /// The qualifier whose action should be chosen. /// </returns> public override IQualifier Select(IAIContext context, IList <IQualifier> qualifiers, IDefaultQualifier defaultQualifier) { var count = qualifiers.Count; var threshold = defaultQualifier.score; for (int i = 0; i < count; i++) { var qualifier = qualifiers[i]; if (qualifier.isDisabled) { continue; } var score = qualifier.Score(context); if (score > threshold) { return(qualifier); } } return(defaultQualifier); }
public override IQualifier Select(IAIContext context, IList <IQualifier> qualifiers, IDefaultQualifier defaultQualifier) { int num; if (!this._UpdateTaskQualifiers()) { return(defaultQualifier); } for (int i = 0; i < this._tasks.Count; i++) { this._tasks[i].Reset(); } IQualifier qualifier = defaultQualifier; IHTNContext worldState = context as IHTNContext; bool flag = false; this._plan.Clear(); if (worldState != null) { int decompositionScore = worldState.DecompositionScore; this.DecompositionScore = 0; worldState.PlanResult = PlanResultType.NoPlan; for (int j = 0; j < (int)worldState.WorldStateChanges.Length; j++) { if (worldState.WorldStateChanges[j].Count > 0) { worldState.WorldStateChanges[j].Clear(); } } int num1 = 0; worldState.StartDomainDecomposition(); for (int k = 0; k < this._tasks.Count; k++) { TaskQualifier item = this._tasks[k]; if (!item.isDisabled) { int num2 = num1; if (num1 >= decompositionScore) { worldState.PlanResult = PlanResultType.KeepCurrentPlan; break; } else if (item.Decompose(this, null, worldState, ref this._plan, ref num2, decompositionScore, out num) <= 0f) { num = 0; item.GetFullDecompositionCost(ref num); num1 += num; num1++; } else { num1 += num; if (worldState.PlanState != PlanStateType.Running || num1 < decompositionScore) { flag = true; worldState.DecompositionScore = num1; for (int l = 0; l < qualifiers.Count; l++) { IQualifier item1 = qualifiers[l]; if (item1.Score(context) > 0f) { IConnectorAction connectorAction = item1.action as IConnectorAction; if (connectorAction != null) { connectorAction.Select(context); } else { } qualifier = item1; } } break; } else { worldState.PlanResult = PlanResultType.KeepCurrentPlan; break; } } } } } if (flag) { if (worldState != null) { worldState.HtnPlan.Clear(); for (int m = this._plan.Count - 1; m >= 0; m--) { this._plan[m].State = PrimitiveTaskStateType.NotStarted; worldState.HtnPlan.Push(this._plan[m]); } if (Application.isEditor) { worldState.DebugPlan.Clear(); for (int n = 0; n < this._plan.Count; n++) { PrimitiveTaskSelector primitiveTaskSelector = this._plan[n]; worldState.DebugPlan.Add(primitiveTaskSelector); } } if (worldState.PlanState != PlanStateType.Running) { worldState.PlanResult = PlanResultType.FoundNewPlan; } else { worldState.PlanResult = PlanResultType.ReplacedPlan; } worldState.PlanState = PlanStateType.Running; foreach (KeyValuePair <Guid, Stack <IEffect> > appliedExpectedEffect in worldState.AppliedExpectedEffects) { Stack <IEffect> value = appliedExpectedEffect.Value; value.Clear(); Pool.Free <Stack <IEffect> >(ref value); } worldState.AppliedExpectedEffects.Clear(); foreach (KeyValuePair <Guid, Stack <IEffect> > appliedEffect in worldState.AppliedEffects) { Stack <IEffect> effects = appliedEffect.Value; effects.Clear(); Pool.Free <Stack <IEffect> >(ref effects); } worldState.AppliedEffects.Clear(); for (int o = 0; o < (int)worldState.WorldStateChanges.Length; o++) { Stack <WorldStateInfo> worldStateChanges = worldState.WorldStateChanges[o]; while (worldStateChanges.Count > 0 && worldStateChanges.Peek().Temporary) { worldStateChanges.Pop(); } if (worldStateChanges.Count > 0) { WorldStateInfo worldStateInfo = worldStateChanges.Peek(); worldState.PreviousWorldState[o] = worldState.WorldState[o]; worldState.WorldState[o] = worldStateInfo.Value; } } } } else if (worldState != null) { if (worldState.PlanState != PlanStateType.Running) { worldState.PlanResult = PlanResultType.NoPlan; } else { worldState.PlanResult = PlanResultType.KeepCurrentPlan; } } return(qualifier); }
/// <summary> /// Selects the action for execution, given the specified context. /// </summary> /// <param name="context">The context.</param> /// <param name="qualifiers">The qualifiers from which to find the action.</param> /// <param name="defaultQualifier">The default qualifier.</param> /// <returns> /// The qualifier whose action should be chosen. /// </returns> public override IQualifier Select(IAIContext context, IList <IQualifier> qualifiers, IDefaultQualifier defaultQualifier) { this.lastSelectedQualifier = _selector.Select(context, qualifiers, defaultQualifier); var qv = (IQualifierVisualizer)this.lastSelectedQualifier; if (qv.isBreakPoint) { if (qv.breakpointCondition != null) { qv.breakPointHit = qv.breakpointCondition.Evaluate(qv.lastScore); } else { qv.breakPointHit = true; } } return(this.lastSelectedQualifier); }
/// <summary> /// Selects the action for execution, given the specified context. /// This selector choses the highest scoring <see cref="IQualifier"/>. /// </summary> /// <param name="context">The context.</param> /// <param name="qualifiers">The qualifiers from which to find the action.</param> /// <param name="defaultQualifier">The default qualifier.</param> /// <returns> /// The qualifier whose action should be chosen. /// </returns> public override IQualifier Select(IAIContext context, IList <IQualifier> qualifiers, IDefaultQualifier defaultQualifier) { var count = qualifiers.Count; float max = defaultQualifier.score; IQualifier highRoller = null; for (int i = 0; i < count; i++) { var qualifier = qualifiers[i]; if (qualifier.isDisabled) { continue; } var score = qualifier.Score(context); if (score > max) { max = score; highRoller = qualifier; } } if (highRoller == null) { return(defaultQualifier); } return(highRoller); }
public override IQualifier Select(IAIContext context, IList <IQualifier> qualifiers, IDefaultQualifier defaultQualifier) { this.lastSelectedQualifier = this._selector.Select(context, qualifiers, defaultQualifier); IQualifierVisualizer qualifierVisualizer = this.lastSelectedQualifier as IQualifierVisualizer; if (qualifierVisualizer != null && qualifierVisualizer.isBreakPoint) { if (qualifierVisualizer.breakpointCondition == null) { qualifierVisualizer.breakPointHit = true; } else { qualifierVisualizer.breakPointHit = qualifierVisualizer.breakpointCondition.Evaluate(qualifierVisualizer.lastScore); } } return(this.lastSelectedQualifier); }
public Selector() { this._id = Guid.NewGuid(); this._qualifiers = new List <IQualifier>(); this._defaultQualifier = new DefaultQualifier(); }
public override IQualifier Select(IAIContext context, IList <IQualifier> qualifiers, IDefaultQualifier defaultQualifier) { for (int i = 0; i < qualifiers.Count; i++) { qualifiers[i].Score(context); } defaultQualifier.Score(context); return(defaultQualifier); }
public override IQualifier Select(IAIContext context, IList <IQualifier> qualifiers, IDefaultQualifier defaultQualifier) { IQualifier qualifier = defaultQualifier; for (int i = 0; i < qualifiers.Count; i++) { IQualifier item = qualifiers[i]; if (!item.isDisabled) { float single = item.Score(context); if (this._decomposition == DecompositionType.One && single > 0f) { return(item); } if (this._decomposition == DecompositionType.All && single <= 0f) { return(base.defaultQualifier); } qualifier = item; IConnectorAction connectorAction = item.action as IConnectorAction; if (connectorAction != null) { connectorAction.Select(context); } } } if (this._decomposition == DecompositionType.All) { return(qualifier); } return(defaultQualifier); }
internal DefaultQualifierVisualizer(IDefaultQualifier q, SelectorVisualizer parent) : base(q, parent) { _defQualifier = q; }
public override IQualifier Select(IAIContext context, IList <IQualifier> qualifiers, IDefaultQualifier defaultQualifier) { int count = qualifiers.Count; float single = defaultQualifier.score; for (int i = 0; i < count; i++) { IQualifier item = qualifiers[i]; if (!item.isDisabled && item.Score(context) > single) { return(item); } } return(defaultQualifier); }