Issue70

Title translator reports problem as unsolvable; FF can solve it
Priority bug Status resolved
Superseder Nosy List gabi, malte, silvia
Assigned To gabi Keywords 1.0
Optional summary

Created on 2010-02-01.13:10:10 by malte, last changed by gabi.

Files
File name Uploaded Type Edit Remove
P03_DOMAIN.PDDL malte, 2010-02-01.13:10:10 application/octet-stream
P03_PHIL4.PDDL malte, 2010-02-01.13:10:26 application/octet-stream
Messages
msg1059 (view) Author: gabi Date: 2011-01-05.19:46:29
Resolved.
msg575 (view) Author: gabi Date: 2010-10-18.18:31:28
This is connected to the more general issue 132.

Waiting for this issue to be resolved...
msg430 (view) Author: malte Date: 2010-08-07.12:12:23
> Summary: find_matching_del_effect needs to check that the atom of the matching
> delete effect must be true whenever the action is applied.

Thanks for the analysis! If I remember correctly, the code actually remarks that
this particular bit is not yet properly implemented. So looks like it has
finally come to bite us.

The translator AIJ paper says how this *should* be implemented. I think it would
be good to meet and discuss an implementation strategy.
msg429 (view) Author: gabi Date: 2010-08-06.17:43:09
Summary: find_matching_del_effect needs to check that the atom of the matching
delete effect must be true whenever the action is applied.

Here the details for the task of this issue:
The invariant synthesis finds an (invalid) mutex group

Atom enabled-philosopher-2-forks--pid-rfork()
Atom advance-tail-forks-3-()
Atom queue-tail-forks-3--qs-0()
Atom blocked-trans-philosopher-2-forks--pid-rfork().

For this mutex group it passes the balance check for actions
block-read-queue-empty-philosopher-2-forks--pid-rfork-forks-2--fork-zero-0
advance-empty-queue-tail-forks-3--queue-1-qs-0-qs-0-fork-fork-zero-one-0
block-read-wrong-message-philosopher-2-forks--pid-rfork-forks-2--fork-empty-0
queue-read-philosopher-2-forks--pid-rfork-forks-2--fork-0
queue-write-philosopher-3-forks--pid-wfork-forks-3--fork-0
advance-empty-queue-tail-forks-3--queue-1-qs-0-qs-0-fork-empty-zero-one-0
queue-write-philosopher-2-forks-__-pidp1__4_-wfork-forks-3--fork-0

among which at least
queue-write-philosopher-3-forks--pid-wfork-forks-3--fork-0 and
queue-write-philosopher-2-forks-__-pidp1__4_-wfork-forks-3--fork-0
seem fishy.

For both actions, no fact from the mutex group occurs as precondition. 
Both actions have an add effect advance-tail-forks-3- and a delete
effect blocked-trans-philosopher-2-forks--pid-rfork that is matched
to this add effect, so for the balance checker the actions are balanced.

The problem is that find_matching_del_effect does not check that
blocked-trans-philosopher-2-forks--pid-rfork must have been true when the action
is applied, which is indeed not the case, leading to an invalid mutex group.
msg428 (view) Author: gabi Date: 2010-08-06.16:02:13
This is a bug of the invariant synthesis:

Action ADVANCE-EMPTY-QUEUE-TAIL-FORKS-3--QUEUE-1-QS-0-QS-0-FORK-EMPTY-ZERO-ONE-0
(step 5 of FF's plan) is removed because it's preconditions 
advance-tail-forks-3- and queue-tail-forks-3--qs-0 are within one mutex group.
msg230 (view) Author: malte Date: 2010-02-01.13:14:03
I can solve this (e.g. in configuration "ou", A* + LM-cut) when disabling
invariant synthesis. (Change first line in function compute_groups in
fact_groups.py from
    groups = invariant_finder.get_groups(task)
to
    groups = []

So it's probably a bug in invariant synthesis or (more likely?) in STRIPS-to-FDR
conversion.
msg229 (view) Author: malte Date: 2010-02-01.13:10:10
Summary says it all. Problem attached. Bug reported by Jussi.

Here are two solutions created by other planners:

PLAN STEP 0.0:
activate-trans-philosopher-0-philosopher-forks--pid-wfork-state-1-state-6-0()
activate-trans-philosopher-1-philosopher-forks--pid-wfork-state-1-state-6-0()
activate-trans-philosopher-2-philosopher-forks--pid-wfork-state-1-state-6-0()
activate-trans-philosopher-3-philosopher-forks--pid-wfork-state-1-state-6-0()
PLAN STEP 1.0:
queue-write-philosopher-0-forks--pid-wfork-forks-0--fork-0()
queue-write-philosopher-1-forks--pid-wfork-forks-1--fork-0()
PLAN STEP 2.0:
advance-empty-queue-tail-forks-0--queue-1-qs-0-qs-0-fork-empty-zero-one-0()
queue-write-philosopher-2-forks--pid-wfork-forks-2--fork-0()
queue-write-philosopher-3-forks--pid-wfork-forks-3--fork-0()
PLAN STEP 3.0:
advance-empty-queue-tail-forks-1--queue-1-qs-0-qs-0-fork-empty-zero-one-0()
advance-empty-queue-tail-forks-2--queue-1-qs-0-qs-0-fork-empty-zero-one-0()
advance-empty-queue-tail-forks-3--queue-1-qs-0-qs-0-fork-empty-zero-one-0()
PLAN STEP 4.0:
perform-trans-philosopher-0-philosopher-forks--pid-wfork-state-1-state-6-0()
perform-trans-philosopher-1-philosopher-forks--pid-wfork-state-1-state-6-0()
perform-trans-philosopher-2-philosopher-forks--pid-wfork-state-1-state-6-0()
perform-trans-philosopher-3-philosopher-forks--pid-wfork-state-1-state-6-0()
PLAN STEP 5.0:
activate-trans-philosopher-0-philosopher-forks--pid-rfork-state-6-state-3-0()
activate-trans-philosopher-1-philosopher-forks--pid-rfork-state-6-state-3-0()
activate-trans-philosopher-2-philosopher-forks--pid-rfork-state-6-state-3-0()
activate-trans-philosopher-3-philosopher-forks--pid-rfork-state-6-state-3-0()
PLAN STEP 6.0:
queue-read-philosopher-0-forks--pid-rfork-forks-0--fork-0()
queue-read-philosopher-1-forks--pid-rfork-forks-1--fork-0()
queue-read-philosopher-2-forks--pid-rfork-forks-2--fork-0()
queue-read-philosopher-3-forks--pid-rfork-forks-3--fork-0()
PLAN STEP 7.0:
advance-queue-head-forks-0--queue-1-qs-0-qs-0-fork-one-zero-0()
advance-queue-head-forks-1--queue-1-qs-0-qs-0-fork-one-zero-0()
advance-queue-head-forks-2--queue-1-qs-0-qs-0-fork-one-zero-0()
advance-queue-head-forks-3--queue-1-qs-0-qs-0-fork-one-zero-0()
PLAN STEP 8.0:
perform-trans-philosopher-0-philosopher-forks--pid-rfork-state-6-state-3-0()
perform-trans-philosopher-1-philosopher-forks--pid-rfork-state-6-state-3-0()
perform-trans-philosopher-2-philosopher-forks--pid-rfork-state-6-state-3-0()
perform-trans-philosopher-3-philosopher-forks--pid-rfork-state-6-state-3-0()
PLAN STEP 9.0:
activate-trans-philosopher-0-philosopher-forks-__-pidp1__4_-rfork-state-3-state-4-0()
activate-trans-philosopher-1-philosopher-forks-__-pidp1__4_-rfork-state-3-state-4-0()
activate-trans-philosopher-2-philosopher-forks-__-pidp1__4_-rfork-state-3-state-4-0()
activate-trans-philosopher-3-philosopher-forks-__-pidp1__4_-rfork-state-3-state-4-0()
PLAN STEP 10.0:
block-read-queue-empty-philosopher-0-forks-__-pidp1__4_-rfork-forks-1--fork-zero-0()
block-read-queue-empty-philosopher-1-forks-__-pidp1__4_-rfork-forks-2--fork-zero-0()
block-read-queue-empty-philosopher-2-forks-__-pidp1__4_-rfork-forks-3--fork-zero-0()
block-read-queue-empty-philosopher-3-forks-__-pidp1__4_-rfork-forks-0--fork-zero-0()
PLAN STEP 11.0:
block-philosopher-0-state-3-philosopher-0()
block-philosopher-1-state-3-philosopher-0()
block-philosopher-2-state-3-philosopher-0()
block-philosopher-3-state-3-philosopher-0()
44 actions in the plan.

ff: found legal plan as follows

step    0:
ACTIVATE-TRANS-PHILOSOPHER-3-PHILOSOPHER-FORKS--PID-WFORK-STATE-1-STATE-6-0
        1:
ACTIVATE-TRANS-PHILOSOPHER-2-PHILOSOPHER-FORKS--PID-WFORK-STATE-1-STATE-6-0
        2:
ACTIVATE-TRANS-PHILOSOPHER-1-PHILOSOPHER-FORKS--PID-WFORK-STATE-1-STATE-6-0
        3:
ACTIVATE-TRANS-PHILOSOPHER-0-PHILOSOPHER-FORKS--PID-WFORK-STATE-1-STATE-6-0
        4: QUEUE-WRITE-PHILOSOPHER-3-FORKS--PID-WFORK-FORKS-3--FORK-0
        5:
ADVANCE-EMPTY-QUEUE-TAIL-FORKS-3--QUEUE-1-QS-0-QS-0-FORK-EMPTY-ZERO-ONE-0
        6:
PERFORM-TRANS-PHILOSOPHER-3-PHILOSOPHER-FORKS--PID-WFORK-STATE-1-STATE-6-0
        7:
ACTIVATE-TRANS-PHILOSOPHER-3-PHILOSOPHER-FORKS--PID-RFORK-STATE-6-STATE-3-0
        8: QUEUE-READ-PHILOSOPHER-3-FORKS--PID-RFORK-FORKS-3--FORK-0
        9: ADVANCE-QUEUE-HEAD-FORKS-3--QUEUE-1-QS-0-QS-0-FORK-ONE-ZERO-0
       10:
PERFORM-TRANS-PHILOSOPHER-3-PHILOSOPHER-FORKS--PID-RFORK-STATE-6-STATE-3-0
       11:
ACTIVATE-TRANS-PHILOSOPHER-3-PHILOSOPHER-FORKS-__-PIDP1__4_-RFORK-STATE-3-STATE-4-0
       12: QUEUE-WRITE-PHILOSOPHER-2-FORKS--PID-WFORK-FORKS-2--FORK-0
       13:
ADVANCE-EMPTY-QUEUE-TAIL-FORKS-2--QUEUE-1-QS-0-QS-0-FORK-EMPTY-ZERO-ONE-0
       14:
PERFORM-TRANS-PHILOSOPHER-2-PHILOSOPHER-FORKS--PID-WFORK-STATE-1-STATE-6-0
       15:
ACTIVATE-TRANS-PHILOSOPHER-2-PHILOSOPHER-FORKS--PID-RFORK-STATE-6-STATE-3-0
       16: QUEUE-READ-PHILOSOPHER-2-FORKS--PID-RFORK-FORKS-2--FORK-0
       17: ADVANCE-QUEUE-HEAD-FORKS-2--QUEUE-1-QS-0-QS-0-FORK-ONE-ZERO-0
       18:
PERFORM-TRANS-PHILOSOPHER-2-PHILOSOPHER-FORKS--PID-RFORK-STATE-6-STATE-3-0
       19:
ACTIVATE-TRANS-PHILOSOPHER-2-PHILOSOPHER-FORKS-__-PIDP1__4_-RFORK-STATE-3-STATE-4-0
       20: QUEUE-WRITE-PHILOSOPHER-1-FORKS--PID-WFORK-FORKS-1--FORK-0
       21:
ADVANCE-EMPTY-QUEUE-TAIL-FORKS-1--QUEUE-1-QS-0-QS-0-FORK-EMPTY-ZERO-ONE-0
       22:
PERFORM-TRANS-PHILOSOPHER-1-PHILOSOPHER-FORKS--PID-WFORK-STATE-1-STATE-6-0
       23:
ACTIVATE-TRANS-PHILOSOPHER-1-PHILOSOPHER-FORKS--PID-RFORK-STATE-6-STATE-3-0
       24: QUEUE-READ-PHILOSOPHER-1-FORKS--PID-RFORK-FORKS-1--FORK-0
       25: ADVANCE-QUEUE-HEAD-FORKS-1--QUEUE-1-QS-0-QS-0-FORK-ONE-ZERO-0
       26:
PERFORM-TRANS-PHILOSOPHER-1-PHILOSOPHER-FORKS--PID-RFORK-STATE-6-STATE-3-0
       27:
ACTIVATE-TRANS-PHILOSOPHER-1-PHILOSOPHER-FORKS-__-PIDP1__4_-RFORK-STATE-3-STATE-4-0
       28: QUEUE-WRITE-PHILOSOPHER-0-FORKS--PID-WFORK-FORKS-0--FORK-0
       29:
ADVANCE-EMPTY-QUEUE-TAIL-FORKS-0--QUEUE-1-QS-0-QS-0-FORK-EMPTY-ZERO-ONE-0
       30:
PERFORM-TRANS-PHILOSOPHER-0-PHILOSOPHER-FORKS--PID-WFORK-STATE-1-STATE-6-0
       31:
ACTIVATE-TRANS-PHILOSOPHER-0-PHILOSOPHER-FORKS--PID-RFORK-STATE-6-STATE-3-0
       32: QUEUE-READ-PHILOSOPHER-0-FORKS--PID-RFORK-FORKS-0--FORK-0
       33: ADVANCE-QUEUE-HEAD-FORKS-0--QUEUE-1-QS-0-QS-0-FORK-ONE-ZERO-0
       34:
PERFORM-TRANS-PHILOSOPHER-0-PHILOSOPHER-FORKS--PID-RFORK-STATE-6-STATE-3-0
       35:
ACTIVATE-TRANS-PHILOSOPHER-0-PHILOSOPHER-FORKS-__-PIDP1__4_-RFORK-STATE-3-STATE-4-0
       36:
BLOCK-READ-QUEUE-EMPTY-PHILOSOPHER-2-FORKS-__-PIDP1__4_-RFORK-FORKS-3--FORK-ZERO-0
       37:
BLOCK-READ-QUEUE-EMPTY-PHILOSOPHER-1-FORKS-__-PIDP1__4_-RFORK-FORKS-2--FORK-ZERO-0
       38:
BLOCK-READ-QUEUE-EMPTY-PHILOSOPHER-3-FORKS-__-PIDP1__4_-RFORK-FORKS-0--FORK-ZERO-0
       39:
BLOCK-READ-QUEUE-EMPTY-PHILOSOPHER-0-FORKS-__-PIDP1__4_-RFORK-FORKS-1--FORK-ZERO-0
       40: BLOCK-PHILOSOPHER-2-STATE-3-PHILOSOPHER-0
       41: BLOCK-PHILOSOPHER-1-STATE-3-PHILOSOPHER-0
       42: BLOCK-PHILOSOPHER-3-STATE-3-PHILOSOPHER-0
       43: BLOCK-PHILOSOPHER-0-STATE-3-PHILOSOPHER-0
History
Date User Action Args
2011-01-05 19:46:30gabisetstatus: deferred -> resolved
messages: + msg1059
2010-10-18 18:31:28gabisetstatus: chatting -> deferred
messages: + msg575
2010-08-07 12:12:23maltesetmessages: + msg430
2010-08-06 17:43:09gabisetmessages: + msg429
2010-08-06 16:02:13gabisetmessages: + msg428
2010-03-22 14:34:21maltesetkeyword: + 1.0
2010-03-22 12:04:50maltesetassignedto: gabi
nosy: + gabi
2010-02-01 13:14:03maltesetstatus: unread -> chatting
messages: + msg230
2010-02-01 13:10:26maltesetfiles: + P03_PHIL4.PDDL
2010-02-01 13:10:10maltecreate