ix.iplan
Class Slip

java.lang.Object
  extended by ix.icore.IXAgent
      extended by ix.ip2.Ip2
          extended by ix.iplan.IPlan
              extended by ix.iplan.PlannerBase
                  extended by ix.iplan.Slip
All Implemented Interfaces:
Planner

public class Slip
extends PlannerBase

Semi-linear planner.


Nested Class Summary
(package private) static class Slip.HavePlanException
           
(package private) static interface Slip.ParameterMaker
           
(package private)  class Slip.PossibleConditionFinder
           
(package private)  class Slip.PossibleConstraintFinder
           
(package private)  class Slip.PossibleEffectFinder
           
(package private)  class Slip.PossiblesFinder
           
(package private)  class Slip.ReplanStep
           
(package private) static interface Slip.Step
           
static class Slip.StepLimitException
           
 
Nested classes/interfaces inherited from class ix.ip2.Ip2
Ip2.AddExtensionsHandler, Ip2.AddHandlersHandler
 
Field Summary
(package private)  LListCollector alternatives
           
(package private)  DomainAnalyser analysis
           
(package private)  ContextBoolean contextIsPoisoned
           
(package private) static Symbol DEPTH_FIRST
           
(package private)  int hardStepLimit
           
(package private)  LLQueue<java.lang.Object[]> history
           
(package private)  Slip.Step invalidStep
           
(package private)  IPlanModelManager iplanMM
           
(package private)  ContextMap<PNodeEnd,java.lang.Boolean> isWaiting
           
static Keyword K_ALL
           
static Keyword K_NONE
           
(package private)  boolean liberalAchieveSemantics
           
(package private)  Slip.ParameterMaker makeInput
           
(package private)  Slip.ParameterMaker makeOutput
           
(package private)  ContextMap<PNodeEnd,Status> nodeEndStatusMap
           
(package private)  ContextGensym.Generator objectNameGenerator
           
(package private)  boolean pickAlternativesDepthFirst
           
static Symbol S_ACHIEVABLE_CONDS
           
static Symbol S_ACHIEVE
           
(package private) static Symbol S_ACHIEVE_GOAL
           
(package private) static Symbol S_ACHIEVE_PV
           
(package private) static Symbol S_AT_END
           
static Symbol S_CONDITION_TYPE
           
(package private) static Symbol S_EQL
           
static Symbol S_TRUE
           
static Symbol S_USE_CONDITION_TYPES
           
static Symbol S_USE_FOR_EFFECT
           
static Symbol S_USE_FOR_EFFECTS
           
(package private)  java.util.Map savedInitialWorldState
           
(package private) static Symbol SEARCH_PREFERENCE
           
(package private)  boolean singleStep
           
(package private)  SlipStats stats
           
(package private)  int stepLimit
           
(package private)  SlipSingleStepper stepper
           
(package private)  Slip.Step testStep
           
(package private)  ContextMultiMap unwaitTable
           
(package private)  boolean useConditionTypes
           
(package private)  boolean useDomainAnalysis
           
(package private)  ContextHashMap waitingForAchieveTable
           
 
Fields inherited from class ix.ip2.Ip2
activityViewer, agentTypeName, annotationViewer, controller, domain, frame, issueViewer, logoImage, logoLine1, logoLine2, modelManager, optionManager, resetHooks, showOptions, stateViewer
 
Fields inherited from class ix.icore.IXAgent
contactManager, displayName, eventLogger, exitHooks, initialDisplayName, ipcName, ipcStrategyName, iSimTimer, mainAgent, nameListeners, startupDate, startupHooks, symbolName, textFrame
 
Constructor Summary
Slip(boolean standAlone)
           
 
Method Summary
protected  void addHandlers()
          Install any built-in issue and activity handlers.
(package private)  void allComputeStatus(java.util.List nodeEnds)
           
(package private)  boolean allHaveStatus(java.util.List nodeEnds, Status status)
           
(package private) static boolean canBeUsedForEffect(Constraint effect, Refinement r, Domain d)
           
(package private)  void cancelLocalChoices()
           
(package private)  boolean canExecBegin(PNodeEnd ne)
           
(package private)  boolean canExecEnd(PNodeEnd ne)
           
(package private)  void computeProperStatus(PNodeEnd end)
           
(package private)  void computeProperStatusValues()
           
(package private)  void computeStatus(PNodeEnd end)
           
(package private)  void createPlanContext()
           
(package private)  void describeAlternative(Alternative alt)
           
(package private)  void describeAlternatives()
           
(package private)  void describeLinks(PNodeEnd at, java.lang.String relation, java.util.List nodeEnds)
           
(package private)  void describeNodeEnd(PNodeEnd end)
           
(package private)  void describeNodeEnds()
           
(package private)  void describeNodeEnds(java.util.List nodeEnds)
           
(package private)  boolean domainSays(java.lang.String propname)
           
static boolean domainUsesConditionTypes(Domain dom)
           
(package private)  void execBegin(PNodeEnd ne)
           
(package private)  void execEnd(PNodeEnd ne)
           
(package private)  boolean existsAchieversForCond(Constraint cond)
           
(package private)  PNodeEnd findExecutable()
           
(package private)  PNodeEnd findExecutable(java.util.Iterator i)
           
(package private)  boolean findFirstPlan()
           
(package private)  boolean findNextPlan()
           
(package private)  void finishedPlanning(boolean success)
           
(package private)  Symbol generateObjectName(Symbol typeName)
           
(package private)  java.util.List getAchieversForCond(Constraint cond)
          Returns a list of ways to achieve a condition by introducing a node.
(package private)  PNodeEnd getAtEndForGoal(ActivityItem goalNode)
           
(package private)  PNodeEnd getAtEndForGoal(PNodeEnd goalEnd)
           
(package private)  java.util.List getGoalAchievers(PNode goalNode)
           
(package private)  PatternAssignment getGoalCond(PNodeEnd ne)
           
(package private)  java.util.Set getPossibleConditions(PNodeEnd ne)
           
(package private)  java.util.Set getPossibleEffects(PNodeEnd ne)
           
(package private)  java.util.Set getPossibleOtherConstraints(PNodeEnd ne)
           
(package private)  java.util.Set getPossibleTopLevelConditions(PNodeEnd ne)
           
(package private)  java.util.Set getPossibleTopLevelEffects(PNodeEnd ne)
           
(package private)  java.util.Set getPossibleTopLevelOtherConstraints(PNodeEnd ne)
           
 SlipStats getStatistics()
          Returns statistics gathered by the most recent Planner.plan() or Planner.replan().
(package private)  Status getStatus(PNodeEnd end)
           
static boolean hasCondType(Constraint c, Symbol type)
           
(package private)  void history(java.lang.Object... words)
           
(package private)  void initStatusTable()
           
(package private) static boolean isAchievableCondPattern(LList pattern, Domain decider)
           
(package private)  boolean isGoalNode(PNode n)
           
(package private)  boolean isGoalNode(PNodeEnd ne)
           
(package private)  boolean isWaitingForAchieve(PNode node)
           
static void main(java.lang.String[] argv)
          Standalone main program.
(package private)  ActivityItem makeGoalNode(PatternAssignment goalCond, java.util.List achievers, PNodeEnd atNodeEnd)
           
(package private)  IPlanModelManager MM()
           
(package private)  boolean noPossibleTopLevelConstraints(PNodeEnd ne)
           
(package private)  void normalizeGoalNode(ActivityItem goalNode)
           
(package private)  void noteHistory()
           
(package private)  Alternative pickAlternative(java.lang.Object reason)
           
 void plan()
          Finds a plan that is a completion of this planner's current plan and makes it the new current plan.
(package private)  boolean planIsComplete()
           
(package private)  void planLoop()
           
(package private)  Poison poison(java.lang.Object reason)
           
(package private)  boolean possiblyInteracting(PNodeEnd w, PNodeEnd releaser)
           
(package private)  boolean possiblyInteractingCondsOrEffects(PNodeEnd selected, java.util.Set conds, java.util.Set effects, PNodeEnd ne)
           
(package private)  boolean possiblyInteractingConstraints(PNodeEnd selected, java.util.Set constraints, PNodeEnd ne)
           
(package private)  void postAlternative(Alternative alt)
           
(package private)  boolean preferDepthFirst()
           
protected  void processCommandLineArguments()
          Command-line argument processing for arguments used by all versions of I-P2.
(package private)  void recordAsWaitingForAchieve(PNode node)
           
(package private)  void recordInputsAndOutputs()
           
(package private)  void recordInputsAndOutputs(Refinement ref, Activity act)
           
(package private)  void recordParameters(Symbol refKey, Symbol actKey, Refinement ref, Activity act, Slip.ParameterMaker m)
           
(package private)  void releaseWaitingEnds(PNodeEnd ne)
           
 void replan()
          Finds the next in a series of plans that are completions of the plan that was current when Planner.plan() was most recently called.
 void reset()
          Called to restore the initial state.
 void setDomain(Domain dom)
          Sets this planner's domain.
(package private)  void setNextStep(Slip.Step s)
           
(package private)  void setProperStatus(PNode node)
           
(package private)  void setProperStatus(PNodeEnd end, Status status)
           
(package private)  void setStatus(PNodeEnd end, Status status)
           
 void setStepLimit(int limit)
           
 void startup()
          Completes setup and initialization.
(package private)  void stepLimitReached(boolean isHardLimit)
           
(package private)  void testStatusPropagation()
           
(package private)  void tryUnwaiting(PNodeEnd w, PNodeEnd releaser)
           
 
Methods inherited from class ix.iplan.PlannerBase
completeStartup, handleInput, initOptions, isStandAlone, makeInstance, outputOwlSPlan, outputPlan, outputPlanPSGraphData, startServer
 
Methods inherited from class ix.iplan.IPlan
displayFrame, makeDefaultPlanner, makeIp2Frame, makeModelManager
 
Methods inherited from class ix.ip2.Ip2
addAboutInfo, addForwardingHandler, addHandlers, addResetHook, addTest, addTestMenuItems, addTool, clearAllButState, clearModel, do_reloadViewers, ensureTool, getActivityPatternSyntaxes, getAgentTypeName, getController, getDomain, getFrame, getIp2ModelManager, getModelManager, getOptionManager, getPlan, handleInputDirectly, handleNewActivity, handleNewChatMessage, handleNewConstraint, handleNewIssue, handleNewReport, isReloadingViewers, loadDomain, loadInitialPlan, loadPlan, loadPlan, loadPlan, makeActivityViewer, makeAnnotationViewer, makeController, makeIssueViewer, makeLogoPanel, makeStateViewer, makeViewer, readDomain, readDomain, reloadViewers, resetAllButState, resetViewers, savePlanAs
 
Methods inherited from class ix.icore.IXAgent
addAgentNameListener, addExitHook, addStartupHook, adjustLookAndFeel, displayMessage, do_mainStartup, exit, fireSymbolNameChanged, getAgent, getAgentDisplayName, getAgentIPCName, getAgentStartupDate, getAgentSymbolName, getContactManager, getEventLogger, getISimTimer, getKnownAgents, handleReceivedReport, installAgentExtensions, installAgentExtensions, isMainAgent, log, mainStartup, notePossibleNewContact, pre_handleInput, preprocessInput, reportInputException, setAgentSymbolName, setEventLogger, setupISimTimer
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface ix.iplan.Planner
getPlan, loadPlan
 

Field Detail

iplanMM

IPlanModelManager iplanMM

analysis

DomainAnalyser analysis

useDomainAnalysis

boolean useDomainAnalysis

pickAlternativesDepthFirst

boolean pickAlternativesDepthFirst

useConditionTypes

boolean useConditionTypes

alternatives

LListCollector alternatives

contextIsPoisoned

ContextBoolean contextIsPoisoned

nodeEndStatusMap

ContextMap<PNodeEnd,Status> nodeEndStatusMap

isWaiting

ContextMap<PNodeEnd,java.lang.Boolean> isWaiting

unwaitTable

ContextMultiMap unwaitTable

history

LLQueue<java.lang.Object[]> history

savedInitialWorldState

java.util.Map savedInitialWorldState

stats

SlipStats stats

objectNameGenerator

ContextGensym.Generator objectNameGenerator

stepLimit

int stepLimit

hardStepLimit

int hardStepLimit

stepper

SlipSingleStepper stepper

singleStep

boolean singleStep

invalidStep

Slip.Step invalidStep

testStep

Slip.Step testStep

S_TRUE

public static final Symbol S_TRUE

SEARCH_PREFERENCE

static final Symbol SEARCH_PREFERENCE

DEPTH_FIRST

static final Symbol DEPTH_FIRST

liberalAchieveSemantics

boolean liberalAchieveSemantics

K_ALL

public static final Keyword K_ALL

K_NONE

public static final Keyword K_NONE

S_ACHIEVABLE_CONDS

public static final Symbol S_ACHIEVABLE_CONDS

S_USE_FOR_EFFECTS

public static final Symbol S_USE_FOR_EFFECTS

S_USE_CONDITION_TYPES

public static final Symbol S_USE_CONDITION_TYPES

S_CONDITION_TYPE

public static final Symbol S_CONDITION_TYPE

S_ACHIEVE

public static final Symbol S_ACHIEVE

S_USE_FOR_EFFECT

public static final Symbol S_USE_FOR_EFFECT

makeInput

Slip.ParameterMaker makeInput

makeOutput

Slip.ParameterMaker makeOutput

S_ACHIEVE_GOAL

static final Symbol S_ACHIEVE_GOAL

S_ACHIEVE_PV

static final Symbol S_ACHIEVE_PV

S_AT_END

static final Symbol S_AT_END

S_EQL

static final Symbol S_EQL

waitingForAchieveTable

ContextHashMap waitingForAchieveTable
Constructor Detail

Slip

public Slip(boolean standAlone)
Method Detail

MM

IPlanModelManager MM()

main

public static void main(java.lang.String[] argv)
Standalone main program. One plan in, one plan out; To specify the initial plan, use the plan command-line argument. The result will be written to the file specified by the output argument. If no output is specified, the user is asked by a dialog.


startup

public void startup()
Completes setup and initialization.

Overrides:
startup in class PlannerBase

processCommandLineArguments

protected void processCommandLineArguments()
Description copied from class: Ip2
Command-line argument processing for arguments used by all versions of I-P2.

Overrides:
processCommandLineArguments in class Ip2
See Also:
IFUtil.adjustLookAndFeel(), IPC.makeCommunicationStrategy(String methodName), ContactManager.processCommandLineArguments(), Debug.on, Parameters

reset

public void reset()
Called to restore the initial state.

Overrides:
reset in class Ip2

getStatistics

public SlipStats getStatistics()
Description copied from interface: Planner
Returns statistics gathered by the most recent Planner.plan() or Planner.replan().

Specified by:
getStatistics in interface Planner
Overrides:
getStatistics in class PlannerBase

generateObjectName

Symbol generateObjectName(Symbol typeName)

setStepLimit

public void setStepLimit(int limit)

setDomain

public void setDomain(Domain dom)
Description copied from interface: Planner
Sets this planner's domain. This is normally done before plan() or replan() are called. The consequences of calling this method at other times are unspecified.

Specified by:
setDomain in interface Planner
Overrides:
setDomain in class IPlan

addHandlers

protected void addHandlers()
Install any built-in issue and activity handlers.

Overrides:
addHandlers in class PlannerBase

setNextStep

void setNextStep(Slip.Step s)

plan

public void plan()
Description copied from interface: Planner
Finds a plan that is a completion of this planner's current plan and makes it the new current plan. The precise meaning of "completion" depends on the planner in question, but typically it will mean that all activities in the initial plan that might be expanded into subactions, using refinements in this planner's domain, will be expanded, and that all constraints in the initial plan or introduced by expansion would be satisfied if the plan were executed in a way that respected all of the ordering constraints. (Here, the initial plan is the plan that was current when plan() was called.)

A successful call to plan() leaves this planner in a state in which Planner.replan() can be called.

Specified by:
plan in interface Planner
Overrides:
plan in class PlannerBase

replan

public void replan()
Description copied from interface: Planner
Finds the next in a series of plans that are completions of the plan that was current when Planner.plan() was most recently called. That completion then becomes the new current plan. You can think of this as reconsidering some choice made when producing earlier plans in the sequence and making different decision at that point. However, it is not guaranteed that the plan found in this way will be interestingly different from all of the earlier plans in the sequence.

The replan() method should not be called if plan() has not been called or if this planner has thrown an exception.

A successful call to replan() leaves this planner in a state in which Planner.replan() can be called again. plan() may be called instead, but this will begin a new sequence of plans based on this planner's now current plan, rather than on the plan that was the base for the previous sequence.

Specified by:
replan in interface Planner
Overrides:
replan in class PlannerBase

findFirstPlan

boolean findFirstPlan()

findNextPlan

boolean findNextPlan()

planLoop

void planLoop()

stepLimitReached

void stepLimitReached(boolean isHardLimit)

finishedPlanning

void finishedPlanning(boolean success)

createPlanContext

void createPlanContext()

postAlternative

void postAlternative(Alternative alt)

cancelLocalChoices

void cancelLocalChoices()

pickAlternative

Alternative pickAlternative(java.lang.Object reason)

poison

Poison poison(java.lang.Object reason)

history

void history(java.lang.Object... words)

noteHistory

void noteHistory()

domainSays

boolean domainSays(java.lang.String propname)

preferDepthFirst

boolean preferDepthFirst()

domainUsesConditionTypes

public static boolean domainUsesConditionTypes(Domain dom)

hasCondType

public static boolean hasCondType(Constraint c,
                                  Symbol type)

isAchievableCondPattern

static boolean isAchievableCondPattern(LList pattern,
                                       Domain decider)

canBeUsedForEffect

static boolean canBeUsedForEffect(Constraint effect,
                                  Refinement r,
                                  Domain d)

testStatusPropagation

void testStatusPropagation()

findExecutable

PNodeEnd findExecutable()

findExecutable

PNodeEnd findExecutable(java.util.Iterator i)

planIsComplete

boolean planIsComplete()

getStatus

Status getStatus(PNodeEnd end)

setStatus

void setStatus(PNodeEnd end,
               Status status)

computeStatus

void computeStatus(PNodeEnd end)

allComputeStatus

void allComputeStatus(java.util.List nodeEnds)

allHaveStatus

boolean allHaveStatus(java.util.List nodeEnds,
                      Status status)

initStatusTable

void initStatusTable()

computeProperStatusValues

void computeProperStatusValues()

computeProperStatus

void computeProperStatus(PNodeEnd end)

setProperStatus

void setProperStatus(PNodeEnd end,
                     Status status)

setProperStatus

void setProperStatus(PNode node)

canExecBegin

boolean canExecBegin(PNodeEnd ne)

execBegin

void execBegin(PNodeEnd ne)

canExecEnd

boolean canExecEnd(PNodeEnd ne)

execEnd

void execEnd(PNodeEnd ne)

releaseWaitingEnds

void releaseWaitingEnds(PNodeEnd ne)

tryUnwaiting

void tryUnwaiting(PNodeEnd w,
                  PNodeEnd releaser)

possiblyInteracting

boolean possiblyInteracting(PNodeEnd w,
                            PNodeEnd releaser)

possiblyInteractingCondsOrEffects

boolean possiblyInteractingCondsOrEffects(PNodeEnd selected,
                                          java.util.Set conds,
                                          java.util.Set effects,
                                          PNodeEnd ne)

possiblyInteractingConstraints

boolean possiblyInteractingConstraints(PNodeEnd selected,
                                       java.util.Set constraints,
                                       PNodeEnd ne)

recordInputsAndOutputs

void recordInputsAndOutputs()

recordInputsAndOutputs

void recordInputsAndOutputs(Refinement ref,
                            Activity act)

recordParameters

void recordParameters(Symbol refKey,
                      Symbol actKey,
                      Refinement ref,
                      Activity act,
                      Slip.ParameterMaker m)

isGoalNode

boolean isGoalNode(PNodeEnd ne)

isGoalNode

boolean isGoalNode(PNode n)

getGoalCond

PatternAssignment getGoalCond(PNodeEnd ne)

makeGoalNode

ActivityItem makeGoalNode(PatternAssignment goalCond,
                          java.util.List achievers,
                          PNodeEnd atNodeEnd)

getGoalAchievers

java.util.List getGoalAchievers(PNode goalNode)

getAtEndForGoal

PNodeEnd getAtEndForGoal(PNodeEnd goalEnd)

getAtEndForGoal

PNodeEnd getAtEndForGoal(ActivityItem goalNode)

normalizeGoalNode

void normalizeGoalNode(ActivityItem goalNode)

recordAsWaitingForAchieve

void recordAsWaitingForAchieve(PNode node)

isWaitingForAchieve

boolean isWaitingForAchieve(PNode node)

getAchieversForCond

java.util.List getAchieversForCond(Constraint cond)
Returns a list of ways to achieve a condition by introducing a node.


existsAchieversForCond

boolean existsAchieversForCond(Constraint cond)

getPossibleTopLevelConditions

java.util.Set getPossibleTopLevelConditions(PNodeEnd ne)

getPossibleTopLevelEffects

java.util.Set getPossibleTopLevelEffects(PNodeEnd ne)

getPossibleTopLevelOtherConstraints

java.util.Set getPossibleTopLevelOtherConstraints(PNodeEnd ne)

noPossibleTopLevelConstraints

boolean noPossibleTopLevelConstraints(PNodeEnd ne)

getPossibleConditions

java.util.Set getPossibleConditions(PNodeEnd ne)

getPossibleEffects

java.util.Set getPossibleEffects(PNodeEnd ne)

getPossibleOtherConstraints

java.util.Set getPossibleOtherConstraints(PNodeEnd ne)

describeAlternatives

void describeAlternatives()

describeAlternative

void describeAlternative(Alternative alt)

describeNodeEnds

void describeNodeEnds()

describeNodeEnds

void describeNodeEnds(java.util.List nodeEnds)

describeNodeEnd

void describeNodeEnd(PNodeEnd end)

describeLinks

void describeLinks(PNodeEnd at,
                   java.lang.String relation,
                   java.util.List nodeEnds)