-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathDryer.py
85 lines (68 loc) · 2.52 KB
/
Dryer.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
from unified_planning.shortcuts import Not, And, Exists
from AIROB.domain import PDDLObject
from AIROB.domain.decorators import PDDLEffect, PDDLPrecondition, PDDLPredicate, PDDLType, PDDLAction, PDDLActionMessage
@PDDLType
class Dryer(PDDLObject):
def __init__(self, idx):
super().__init__()
self.turnedOn = False
self.picked = False
self.loaded = False
self.idx = idx
def get_id(self) -> str:
return f"Dryer_{self.idx}"
def isLoaded(self):
return self.loaded
@PDDLPredicate()
def loaded(self: 'Dryer'):
return self.isLoaded()
@PDDLPrecondition(lambda dryer, env:
And(Not(dryer.loaded()),
Not(Exists(Dryer.loaded(env.var(Dryer)), env.var(Dryer)))))
@PDDLEffect(lambda dryer: dryer.loaded(), True)
@PDDLAction()
def load(dryer: 'Dryer'):
print(f"Loading dryer {dryer.idx}")
dryer.loaded = True
@PDDLActionMessage("Dryer_load")
def load_message(dryer: 'Dryer'):
return f"Please load the dryer {dryer.idx}"
@PDDLPrecondition(lambda dryer: And(dryer.loaded(),
Not(dryer.turnedOn()),
Not(dryer.picked())))
@PDDLEffect(lambda dryer: dryer.loaded(), False)
@PDDLAction()
def unload(dryer: 'Dryer'):
print(f"Unloading dryer {dryer.idx}")
dryer.loaded = False
@PDDLActionMessage("Dryer_unload")
def unload_message(dryer: 'Dryer'):
return f"Please unload the dryer {dryer.idx}"
@PDDLPrecondition(lambda dryer:
And(Not(dryer.turnedOn()), dryer.loaded(), dryer.picked()))
@PDDLEffect(lambda dryer: dryer.turnedOn(), True)
@PDDLAction()
def turnOn(dryer: 'Dryer'):
print(f"Turning on dryer {dryer.idx}")
dryer.turnedOn = True
@PDDLPrecondition(lambda dryer:
And(dryer.turnedOn(), dryer.loaded(), dryer.picked()))
@PDDLEffect(lambda dryer: dryer.turnedOn(), False)
@PDDLAction()
def turnOff(dryer: 'Dryer'):
print(f"Turning off dryer {dryer.idx}")
dryer.turnedOn = False
@PDDLPredicate()
def turnedOn(self: 'Dryer'):
return self.isTurnedOn()
def isTurnedOn(self):
return self.turnedOn
def setTurnedOn(self, on):
self.turnedOn = on
@PDDLPredicate()
def picked(self: 'Dryer'):
return self.isPicked()
def isPicked(self: 'Dryer'):
return self.picked
def setPicked(self, p):
self.picked = p