1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 package zeus.rete.action;
24 import zeus.rete.*;
25 import zeus.util.*;
26 import zeus.concepts.*;
27 import zeus.concepts.fn.*;
28 import java.util.*;
29 import java.io.*;
30
31 /***
32
33 @author Simon Thompson
34 @since 1.1
35 */
36 public class AchieveAction extends ReteAction {
37
38 /***
39 execute an action that causes the agent to attempt to achieve a goal.
40 */
41 public void executeAction (Action a, Info info) {
42 ReteFact token = (ReteFact)a.head;
43 OntologyDb ont = getOntologyDb();
44 Fact f1 = ont.getFact(Fact.VARIABLE,token.getType());
45 Enumeration enum = token.data.keys();
46 while( enum.hasMoreElements() ) {
47 String attribute = (String)enum.nextElement();
48 ValueFunction value = (ValueFunction)token.data.get(attribute);
49 f1.setValue(attribute,value);
50 }
51
52 if ( !f1.resolve(info.getBindings()) ) {
53 Core.USER_ERROR("Improperly specified fact in Rete action achieve/sell/buy: " + token);
54 return;
55 }
56 ValueFunction end_time = (ValueFunction)a.table.get("end_time");
57 if ( end_time == null || !end_time.isDeterminate() ) {
58 Core.USER_ERROR("End_time not specified in Rete action achieve/sell/buy: " + token);
59 return;
60 }
61 ValueFunction confirm_time = (ValueFunction)a.table.get("confirm_time");
62 if ( confirm_time == null || !confirm_time.isDeterminate() ) {
63 Core.USER_ERROR("Confirm_time not specified in Rete action achieve/sell/buy: " + token);
64 return;
65 }
66
67 if ( context == null ) {
68 Core.USER_ERROR("attempt to use goal orientated behaviour without agent");
69 return;}
70 String gid = context.newId("goal");
71 double now = context.now();
72 System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
73 System.out.println(" Tim : right class in use!");
74 System.out.println(" Schedule time now = " + now);
75
76 int et = (int)(now + ((PrimitiveNumericFn)end_time).intValue());
77 double ct = now + ((PrimitiveNumericFn)confirm_time).doubleValue();
78 System.out.println("End Time set to : " + et);
79 System.out.println("Confirm Time set to: " + ct);
80 System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
81 Goal g = new Goal(gid,f1,et,0,context.whoami(),ct);
82 ValueFunction cost = (ValueFunction)a.table.get("cost");
83 if ( cost != null )
84 g.setCost(((RealFn)cost).getValue());
85
86 Core.DEBUG(2," ==> " + g);
87 context.Engine().achieve(g);
88
89 }
90
91
92 }