-------------------------------------------------------------- Version 2.2.0: Summary of changes from 2.1.0 -------------------------------------------------------------- ---------------------------------- NEW AGENT INCLUDED IN DISTRIBUTION ---------------------------------- Alarm agent: Implements time triggers for all agents connected to the same facilitator. See http://www.ai.sri.com/~oaa/distribution/distribv2/doc/agents/alarm Note: the "Attain" natural language agents, which were included in release 2.1.0, are not included with release 2.2.0. They are still available, however, here: http://www.ai.sri.com/~oaa/contributions/ -------------------- GENERAL IMPROVEMENTS -------------------- Except as noted, the general improvements described below apply to the facilitator and all language libraries (Java, C, Prolog). Application agent code that works with version 2.1.0 should still work with 2.2.0 libraries. In using the Java and C libraries, you may see some deprecation warnings, and it is recommended that the appropriate changes be made. ------------------ New "direct connect" capabilities for oaa_Solve requests To support more efficient exchange of large messages and rapidfire messages between agents, the prolog library now supports a nearly transparent means of enabling direct exchange of messages associated with oaa_Solve requests. That is, oaa_Solve requests and their responses can now be routed directly between the requester and provider, rather than going through the facilitator. At present this is only supported for the case of a single provider. When direct_connect(true) is included in the Params of the requester's call to oaa_Solve, library code contacts the facilitator to determine what providers are available. If there is only one provider, and if that provider is listening on a socket, the requester opens a connection and communicates directly with the provider. If a provider address is already known to the requester, and is specified in the Params list, along with direct_connect(true), the facilitator is not contacted at all. These "peer to peer" connections are kept open so that a series of direct_connect requests to the same provider can be dispatched rapidly. When passing goals that contain large data, the bandwidth employed in contacting the facilitator can be minimized by specifying a "goal template", which contains variables in the positions that would normally contain data. ------------------ More efficient encoding of messages between agents ICL terms can now be encoded in a more compact form when transmitted between agents (across sockets), allowing for quick parsing by the message recipient. In 2.2.0, this form of encoding will only be used when "direct connect" is used between agents implemented using Java and/or C. In future releases, this encoding will be adopted for all communications, including those going through the facilitator. ------------------ Binary data now supported in ICL expressions In the past, ICL, like Prolog, has offered only a single primitive string type, called an "atom". This has been limiting in two respects. First, both Quintus and Sicstus Prolog implementations limit the length of an atom to 64K. Second, in translating to and from languages, such as lisp, which distinguish between symbols and strings, we have not been able to maintain this distinction in ICL expressions. To address these limitations, ICL now includes a double-quoted string type, which has no length limit. In addition to using double quotes, it is also necessary to enclose the string in an 'icldataq' functor, like this: icldataq(".....") (We'd have preferred not to require the functor, but it's unavoidable at present, given the way Prolog works, and the vendor libraries upon which the facilitator depends.) Within the double quotes, any sequence of bytes is allowed, including null characters. (Double quote characters are escaped by doubling them.) ------------------ Optimization of large data messages Additional support for exchange of large data sets is provided by allowing application agent code to write the data directly onto the stream, when a request or response message is transmitted. This is accomplished by using the parameter icl_goal_writer/2 with oaa_Solve (in the requester), and using icl_solution_writer/2 as the return value of the do_event callback procedure (in the provider). This can be used with or without the use of direct_connect. ------------------ New parameter for oaa_Solve: provider_limit(N). This instructs the facilitator to select at most N providers (solvers) to handle the given goal. This is especially useful with direct_connect. ------------------ New library procedures (in all libraries), further minimizing the amount of code needed in agent wrappers: oaa_SetupCommunication oaa_Connect ------------------ Documentation: The Developer's Guide now includes examples in Java and C (as well as Prolog) ------------------------------- IMPROVEMENTS TO THE FACILITATOR ------------------------------- Optimization of incoming message queue code minimizes time spent in maintaining the queue; allows for faster throughput of messages. New command line argument (-output_file filename) telling the facilitator to write all output and error messages to the given file. (Under Unix, this is no different than using ">& filename" on the command line.) New code makes it more meaningful and more robust to call oaa_Solve in the facilitator (for instance, as part of a trigger action, or as part of the body of a "rule"). Consequently, the use of "rules" with data solvables, declared on the facilitator, is now more fully supported. This results in a significant expansion of how the facilitator can be used by other agents, as described here: http://to_be_provided Com library: Several changes made to bulletproof against too many connections coming in. Facilitator now accepts parameter "max_connections". Refinement of on_port_exception options (specification of behavior desired when the facilitator is unable to access a particular port). -------------------------------- IMPROVEMENTS TO THE JAVA LIBRARY -------------------------------- New ICL parsing code, based on the public domain package "antlr". Considerably faster and more robust than earlier versions. Inclusion of 2 open source packages: antlr (See www.antlr.org/) log4j (See http://jakarta.apache.org/log4j/) More efficient management of incoming messages and outgoing messages, resulting in considerable improvements in speed and memory requirements. Bug fix. This bug caused deadlock when an agent waited on several synchronous responses, and the responses came back in the "wrong" order. A wide variety of minor bug fixes and optimizations. ----------------------------- IMPROVEMENTS TO THE C LIBRARY ----------------------------- New ICL parsing code, based on the public domain package "pccts". Considerably faster and more robust than earlier versions. Bug fix. Under Linux, a setup file line longer than 512 bytes could cause a segmentation fault. The possibility of seg fault has been eliminated. However, note that under this fix, setup file lines longer than 1024 will be ignored. Bug fix. This bug caused deadlock when an agent waited on several synchronous responses, and the responses came back in the "wrong" order. Various memory leaks and memory corruption bugs corrected. Improved portability. A wide variety of minor bug fixes and optimizations. Documentation: New source code documentation, generated by Doxygen. ---------------------------------- IMPROVEMENTS TO THE PROLOG LIBRARY ---------------------------------- New functionality in com module: on_connect_exception options. A variety of behaviors can now be specified for situations in which an agent attempts to connect to a facilitator, and the connection can't be opened. New library procedure (for convenience): 2 argument version of oaa_Declare Minor reorganization of library files. Various minor bug fixes.