The selected set of negotiation acts is now specified using STRIPS plan rules. By using STRIPS rules the repertoire can be formally specified and programmed within the plan-rule language of the domain-level planner. The repertoire was chosen by enumerating the different STRIPS rules that could be used for an act. Only two were found, one whose precondition refers to a belief of the agent, and one that refers to its intention. These respectively correspond with informing and proposing types of act. The control structures were also investigated, leading to different ways of assembling subdialogues with these acts. For example, in a question and answer pair, the questioner may intend that the hearer unconditionally answers his question, in which case one control structure is used, or he may intend that the hearer choose between answering his question and something else. The control structures are expressed using different rules of decomposition for the subdialogues. Each of the acts that emerged from this investigation was checked for adherence to the properties listed above.
name: pass parameter: {} precondition: {} effects: {} decomposition: {}
Since pass has no preconditions and effects, it has no direct effect, through the belief revision process (Section 3.4.7), on the belief state of the speaker and hearer. However, the dry-land component of the belief revision process may change the belief state, in explaining why the agent chose to say nothing.
name: tell-true parameter: P precondition: bel(P) effects: {} decomposition: {}
Since tell-true has a precondition that the speaker believes the proposition, the belief revision process will update the belief at level three, five, and so on.
name: tell-false parameter: P precondition: bel(not(P)) effects: {} decomposition: {}
name: tell parameter: P precondition: {} effects: {} decomposition: { [tell-true(P)], [tell-false(P)] }
name: propose parameter: P precondition: {intend(P)} effects: {} decomposition: {}
Understanding a propose requires the hearer to apply the dry-land algorithm. The hearer uses the algorithm to search for the simplest belief state in which the speaker would choose the proposed alternative in the domain-level plan. This state must also be one in which the speaker would choose to propose. There is a simpler pragmatic sense for propose, and that is for the hearer to merely prune the game tree at the choice node of the proposed alternative. While it is partly effective, it does not allow the hearer to take advantage by revising beliefs using the dry-land algorithm.
name: request-pair(P) parameter: P precondition: {intend(P)} effects: {} decomposition: { [request(P), P ]}
name: request(P) parameter: P precondition: {} effects: {} decomposition: {}
The hearer of a request revises his beliefs in a way that is similar to that for a propose. He searches for a state in which the speaker would both choose the requested alternative in the domain-level plan, and in which the speaker would choose a request in the negotiation plan.
ask is defined as either a propose to tell, or a request to tell:
name: ask-forced parameter: P precondition: {} effects: {} decomposition: { [request(tell(P))] }
name: ask-autonomous parameter: P precondition: {} effects: {} decomposition: { [propose(tell(P))] }
Finally, some plan rules are required that construct a sequence of negotiation acts, and append the domain-level plan. These are:
name: negotiation-plan parameter: {} precondition: {} effects: {} decomposition: { [domain-plan], [negotiation-act, negotiation-plan] }
name: negotiation-act parameter: {} precondition: {} effects: {} decomposition: { [request], [propose], [tell], [pass] }
Lacking any empirical data, it was impossible to find suitable cost values for each of the acts. Instead, estimates were used, with each act valued at ten units, except pass, which due to its empty propositional content, was given a value of four. It was assumed, as it was in chapter 4 (see Sections 4.5.1 and 2.13), that these costs are additive over the dialogue.
utility(pass,-4). utility(tell-true(_),-10). utility(tell-false(_),-10). utility(propose(_),-10). utility(request(_),-10).
Since these values are estimated, they may not reflect the real performance of the planner very well. However, it was found that the results obtained in the examples of this chapter do not vary much in character given small variations to the estimates.