View Javadoc

1   /*
2   * The contents of this file are subject to the BT "ZEUS" Open Source 
3   * Licence (L77741), Version 1.0 (the "Licence"); you may not use this file 
4   * except in compliance with the Licence. You may obtain a copy of the Licence
5   * from $ZEUS_INSTALL/licence.html or alternatively from
6   * http://www.labs.bt.com/projects/agents/zeus/licence.htm
7   * 
8   * Except as stated in Clause 7 of the Licence, software distributed under the
9   * Licence is distributed WITHOUT WARRANTY OF ANY KIND, either express or 
10  * implied. See the Licence for the specific language governing rights and 
11  * limitations under the Licence.
12  * 
13  * The Original Code is within the package zeus.*.
14  * The Initial Developer of the Original Code is British Telecommunications
15  * public limited company, whose registered office is at 81 Newgate Street, 
16  * London, EC1A 7AJ, England. Portions created by British Telecommunications 
17  * public limited company are Copyright 1996-9. All Rights Reserved.
18  * 
19  * THIS NOTICE MUST BE INCLUDED ON ANY COPY OF THIS FILE
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  }