it.unibo.jakta.agents.bdi.plans.Plan.kt Maven / Gradle / Ivy
package it.unibo.jakta.agents.bdi.plans
import it.unibo.jakta.agents.bdi.beliefs.Belief
import it.unibo.jakta.agents.bdi.beliefs.BeliefBase
import it.unibo.jakta.agents.bdi.events.AchievementGoalFailure
import it.unibo.jakta.agents.bdi.events.AchievementGoalInvocation
import it.unibo.jakta.agents.bdi.events.BeliefBaseAddition
import it.unibo.jakta.agents.bdi.events.BeliefBaseRemoval
import it.unibo.jakta.agents.bdi.events.Event
import it.unibo.jakta.agents.bdi.events.TestGoalFailure
import it.unibo.jakta.agents.bdi.events.TestGoalInvocation
import it.unibo.jakta.agents.bdi.events.Trigger
import it.unibo.jakta.agents.bdi.goals.Goal
import it.unibo.jakta.agents.bdi.plans.impl.PlanImpl
import it.unibo.tuprolog.core.Struct
import it.unibo.tuprolog.core.Truth
interface Plan {
val trigger: Trigger
val guard: Struct
val goals: List
/** Determines if a plan is applicable */
fun isApplicable(event: Event, beliefBase: BeliefBase): Boolean
/** Returns the computed applicable plan */
fun applicablePlan(event: Event, beliefBase: BeliefBase): Plan
fun isRelevant(event: Event): Boolean
fun toActivationRecord(): ActivationRecord
companion object {
private fun of(trigger: Trigger, guard: Struct, goals: List): Plan =
PlanImpl(trigger, guard, goals)
fun ofBeliefBaseAddition(
belief: Belief,
goals: List,
guard: Struct = Truth.TRUE,
): Plan = of(BeliefBaseAddition(belief), guard, goals)
fun ofBeliefBaseRemoval(
belief: Belief,
goals: List,
guard: Struct = Truth.TRUE,
): Plan = of(BeliefBaseRemoval(belief), guard, goals)
fun ofAchievementGoalInvocation(
value: Struct,
goals: List,
guard: Struct = Truth.TRUE,
): Plan = of(AchievementGoalInvocation(value), guard, goals)
fun ofAchievementGoalFailure(
value: Struct,
goals: List,
guard: Struct = Truth.TRUE,
): Plan = of(AchievementGoalFailure(value), guard, goals)
fun ofTestGoalInvocation(
value: Struct,
goals: List,
guard: Struct = Truth.TRUE,
): Plan = of(TestGoalInvocation(value), guard, goals)
fun ofTestGoalFailure(
value: Struct,
goals: List,
guard: Struct = Truth.TRUE,
): Plan = of(TestGoalFailure(value), guard, goals)
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy