Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Instantiated action has wrong effects #112

Open
o-fir opened this issue Sep 7, 2023 · 0 comments
Open

Instantiated action has wrong effects #112

o-fir opened this issue Sep 7, 2023 · 0 comments

Comments

@o-fir
Copy link

o-fir commented Sep 7, 2023

For the action (do_decontaminate env1 c1) of type

(:action do_decontaminate
		:parameters (?env - environment ?c - contamination)
		:precondition (and 
			(contaminated ?env ?c)	
		)
		:effect (and
			(not(contaminated ?env ?c))
		)
	)

the positive effects include (contaminated env1 c1)

Code to display effects of all actions:

 for (int i = 0; i < problem.getTasks().size(); i++) {
                Task t = problem.getTasks().get(i);
                if (t.isPrimtive()) {
                    Action ac = problem.getActions().get(i);
                    BitVector pos = ac.getUnconditionalEffect().getPositiveFluents();
                    BitVector neg = ac.getUnconditionalEffect().getNegativeFluents();
                    System.out.println("ACTION: " + PrintFunctions.taskToString(i, problem));

                    for (int g = pos.nextSetBit(0); g >= 0; g = pos.nextSetBit(g + 1)) {
                        System.out.println("+++ " + PrintFunctions.predicateToString(g, problem));
                    }
                    for (int g = neg.nextSetBit(0); g >= 0; g = neg.nextSetBit(g + 1)) {
                        System.out.println("--- " + PrintFunctions.predicateToString(g, problem));
                    }
                }
            }



    public static String predicateToString(int index, Problem problem) {
        Fluent f = problem.getFluents().get(index);
        String tmp = "";
        tmp += problem.getPredicateSymbols().get(f.getSymbol()) + "(";

        for (Integer i : f.getArguments()) {
            tmp += problem.getConstantSymbols().get(i) + ", ";
        }
        tmp += ")";
        return tmp;
    }

DOMAIN:

; problem is performing experiments
; experiments are performed in the lab by 2 scientists, after which lab equipment must be rearranged by 1 scientist
; labs are accessed via ports
; a new person can't enter a lab, if there is already someone inside.
; only one person can enter via port

(define (domain quarantine)
	(:requirements :hierarchy :negative-preconditions :equality :typing :method-preconditions)

	(:types
		contamination
		subject
		environment
		experiment
		decontamination-procedure
	)

	(:predicates
		(assigned ?e - experiment ?env - environment)
		(contaminated ?e - environment ?c - contamination)
		(carrier ?s - subject ?c - contamination)
		(decontamination-type ?d - decontamination-procedure ?c - contamination)
		(experiment-type ?e - experiment ?c - contamination)
	)

	(:task perform_experiment
		:parameters (?e - experiment)
	)

	(:task contaminate
		:parameters (?env - environment ?c - contamination)
	)

	(:task decontaminate
		:parameters (?env - environment ?c - contamination)
	)

	(:method m0_perform_experiment
		:parameters (?e - experiment ?c - contamination ?env - environment)
		:task (perform_experiment ?e)
		:precondition (and
			(experiment-type ?e ?c)
		)
		:ordered-subtasks (and
			(contaminate ?env ?c)
			(do_experiment ?e ?env ?c)
			(decontaminate ?env ?c)
		)
	)


	(:method m0_contaminate
		:parameters (?env - environment ?c - contamination)
		:task (contaminate ?env ?c)
		:precondition (and
			(not(contaminated ?env ?c))
		)
		:ordered-subtasks (and
			(do_contaminate ?env ?c)
		)
	)
	(:method m1_contaminate
		:parameters (?env - environment ?c - contamination)
		:task (contaminate ?env ?c)
		:precondition (and
			(contaminated ?env ?c)
		)
		:ordered-subtasks (and
			(nop)
		)
	)
	(:method m0_decontaminate
		:parameters (?env - environment ?c - contamination ?d - decontamination-procedure)
		:task (decontaminate ?env ?c)
		:precondition (and
			(contaminated ?env ?c)
			(decontamination-type ?d ?c)
		)
		:ordered-subtasks (and
			(do_clear_environment ?env)
			(do_initiate_decontamination ?env ?d)
			(do_decontaminate ?env ?c)
		)
	)
	(:method m1_decontaminate
		:parameters (?env - environment ?c - contamination)
		:task (decontaminate ?env ?c)
		:precondition (and
			(not(contaminated ?env ?c))
		)
		:ordered-subtasks (and
			(nop)
		)
	)

	(:action do_experiment
		:parameters (?e - experiment ?env - environment ?c - contamination)
		:precondition (and 
			(contaminated ?env ?c)
			(experiment-type ?e ?c)
		)
		:effect (and
		)
	)

	(:action do_contaminate
		:parameters (?env - environment ?c - contamination)
		:precondition (and )
		:effect (and
			(contaminated ?env ?c)
		)
	)

	(:action do_clear_environment
		:parameters (?env - environment)
		:precondition (and )
		:effect (and
		)
	)

	(:action do_initiate_decontamination
		:parameters (?env - environment ?d - decontamination-procedure)
		:precondition (and )
		:effect (and
		)
	)

	(:action do_decontaminate
		:parameters (?env - environment ?c - contamination)
		:precondition (and 
			(contaminated ?env ?c)	
		)
		:effect (and
			(not(contaminated ?env ?c))
		)
	)


	(:action nop
  	:parameters ()
  	:precondition ()
  	:effect ())
)

PROBLEM:

; num_oven: 2
; num_brick: 4
; num_temp: 2

(define
   (problem pfile0)
   (:domain quarantine)
   (:objects
      c1 - contamination
      e1 e2 e3 - experiment
      env1 - environment
      d1 - decontamination-procedure
   )

   (:htn
      :parameters ()
      :subtasks (and
         (task0 (perform_experiment e1))
         (task1 (perform_experiment e2))
         (task2 (perform_experiment e3))
      )
   )

   (:init
      (experiment-type e1 c1)
      (experiment-type e2 c1)
      (experiment-type e3 c1)
      (decontamination-type d1 c1)
   )
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant