1 | // ARCAS Scenario: 4. (just the assembly part, not correct representaion of UAV activity, add subassembly composed of subassemblies) |
---|
2 | // STANDALONE domain |
---|
3 | // created: Raphaël Lallement 20/03/2013 |
---|
4 | |
---|
5 | factdatabase{ |
---|
6 | //Declarations |
---|
7 | //Agent is already declared |
---|
8 | define entityType Element; //Can be basic or a subassembly |
---|
9 | define entityType AssemblyPlan; //Is a todo list |
---|
10 | |
---|
11 | define entityAttributes Agent{ |
---|
12 | } |
---|
13 | |
---|
14 | define entityAttributes Element{ |
---|
15 | static atom string type; //Can be basic or subassembly |
---|
16 | static atom number order; //Represents the order in the partially-oredered assembly plan |
---|
17 | dynamic set Element dependencies; |
---|
18 | dynamic set Element subassembly; //List of elements that compose a subassembly |
---|
19 | } |
---|
20 | |
---|
21 | define entityAttributes AssemblyPlan{ |
---|
22 | dynamic set Element elements; //The todo list |
---|
23 | } |
---|
24 | |
---|
25 | //Creations |
---|
26 | UAV = new Agent; |
---|
27 | AssemblyPlan = new AssemblyPlan; |
---|
28 | |
---|
29 | #include "arcas4.ins" |
---|
30 | } |
---|
31 | |
---|
32 | HTN{ |
---|
33 | action Place(Agent R, AssemblyPlan AssemblyPlan, Element E){ |
---|
34 | preconditions { |
---|
35 | }; |
---|
36 | effects{ |
---|
37 | IF{E >> AssemblyPlan.elements;}{AssemblyPlan.elements =>> E;} //Some element are not in the list if they are in a subassembly |
---|
38 | FORALL(Element F, {E >> F.dependencies;}, {F.dependencies =>> E;}); |
---|
39 | }; |
---|
40 | cost{costFnOrder(AssemblyPlan.elements.size(), E.order)}; |
---|
41 | //cost{costFn(AssemblyPlan.elements.size())}; |
---|
42 | duration{durationFn(1, 1)}; |
---|
43 | } |
---|
44 | |
---|
45 | action Attach(Agent R, Element SubAssembly, Element E){ |
---|
46 | //Should include any part regarding the attach process (glue, screw, ...) |
---|
47 | preconditions { |
---|
48 | E >> SubAssembly.subassembly; |
---|
49 | }; |
---|
50 | effects{ |
---|
51 | SubAssembly.subassembly =>> E; |
---|
52 | FORALL(Element F, {E >> F.dependencies;}, {F.dependencies =>> E;}); |
---|
53 | }; |
---|
54 | cost{costFn(1)}; |
---|
55 | duration{durationFn(1, 1)}; |
---|
56 | } |
---|
57 | |
---|
58 | method Assemble(Agent R, AssemblyPlan AssemblyPlan, Element SubAssembly){ |
---|
59 | empty{SubAssembly.subassembly.size()==0;}; |
---|
60 | { |
---|
61 | preconditions{ |
---|
62 | }; |
---|
63 | subtasks{ |
---|
64 | E=SELECTORDERED(Element, {E>>SubAssembly.subassembly; E.dependencies.size() == 0;}, assemblyPlan(E), <); |
---|
65 | 1: AddToStructure(R, AssemblyPlan, E); |
---|
66 | 2: Attach(R, SubAssembly, E) >1; |
---|
67 | 3: Assemble(R, AssemblyPlan, SubAssembly) >2; |
---|
68 | }; |
---|
69 | } |
---|
70 | } |
---|
71 | |
---|
72 | method AddToStructure(Agent R, AssemblyPlan AssemblyPlan, Element E){ |
---|
73 | empty{AssemblyPlan.elements.size()==0;}; |
---|
74 | { |
---|
75 | preconditions{ |
---|
76 | E.type=="subassembly"; |
---|
77 | }; |
---|
78 | subtasks{ |
---|
79 | //Assemble and then put |
---|
80 | 1: Assemble(R, AssemblyPlan, E); |
---|
81 | 2: Place(R, AssemblyPlan, E) >1; |
---|
82 | }; |
---|
83 | } |
---|
84 | { |
---|
85 | preconditions{ |
---|
86 | E.type=="basic"; |
---|
87 | }; |
---|
88 | subtasks{ |
---|
89 | 1: Place(R, AssemblyPlan, E); |
---|
90 | }; |
---|
91 | } |
---|
92 | } |
---|
93 | |
---|
94 | method BuildStructure(Agent R, AssemblyPlan AssemblyPlan) { |
---|
95 | empty {AssemblyPlan.elements.size()==0;}; |
---|
96 | { |
---|
97 | preconditions{ |
---|
98 | }; |
---|
99 | subtasks{ |
---|
100 | E=SELECTORDERED(Element, {E>>AssemblyPlan.elements; E.dependencies.size() == 0;}, assemblyPlan(E), <); |
---|
101 | 1: AddToStructure(R, AssemblyPlan, E); |
---|
102 | 2: BuildStructure(R, AssemblyPlan)>1; |
---|
103 | }; |
---|
104 | } |
---|
105 | } |
---|
106 | } |
---|
107 | |
---|
108 | //Social rules |
---|
109 | timePart{ priority = 0; } |
---|