|







|
|
This page contains the version history for the Inference Engine Component
Suite. The latest patches and updates are available on our Support
Page.
Note: THE IECS uses the Fuzzy Logic Component Library and
the RiverSoftAVG Common Classes Library. Please see theFLCL Version History andRCCL Version History for additional
details.
------------------------------------------------------------------- December 11, 2011 Version 3.0 - Added support for Rad Studio XE2, Win32 and Win64 - Fixed Pointer to Integer Casts to use TRSNativeInt - Changed TIEValueRec.VInteger to be a TRSNativeInt instead of integer
------------------------------------------------------------------- September 29, 2010 Version 2.9 - Added support for Rad Studio XE - Includes updates to the RiverSoftAVG Charting Component Suite
-------------------------------------------------------------------
Nov 8, 2009 Version 2.8.1.1 - Fixed issue with Console editor (TInferenceEngine->Edit...) where it wouldn't work in Delphi 6 and 7 because of properties inserted by later versions of Delphi
-------------------------------------------------------------------
Sept 7, 2009 Version 2.8.1 - Added support for Delphi 2010 - Changed help file(s) from WinHelp to HTML Help. Note that there is a known issue with the display to Delphi links (available with WinHelp but not HTML Help)
-------------------------------------------------------------------
Jan 31, 2009 Version 2.8 - Added support for Delphi 2009 (Final) - Includes new RiverSoftAVG Charting Component Suite 2.0 - Added TIFSValues.ToString method and TIFuzzySets.ToString methods, which just call their owners' ToString methods, to work around a D2009 "implements" problem
-------------------------------------------------------------------
Dec 21, 2008 Version 2.8B1 - Changed Install Directory to C:\Comps\RiverSoftAVG to reduce chances of too long path names (on new installs to a machine) - Added optional TEncoding parameter to TInferenceEngine Batch, StartCapture, LoadXXX/SaveXXX (Facts, Rules, etc), LoadFromXXX/SaveToXXX, and ParseXXX methods for D2009 - Added optional Encoding parameter to TInferenceEngine.NewTokenizer method - Changed SaveToXXX methods to write TEncoding.Preamble - Added optional Encoding parameter to TIEClipsStream constructors - Changed AnsiUpper/LowerCase to use inline RSUpper/LowerCase which uses the correct call to avoid warnings in .NET, but still uses AnsiXXX for Win32 - Added optional Encoding parameter to ISingletonsParser.ParseSingletons method - Modified TIEStreamToken.Value method to detect all question mark variable names as encoding errors - Added SEncodingProblem resource string - Fixed button images for FactEditorForm - Fixed button images for RuleEditorForm - Fixed Save As dialog for RuleEditorForm to state "Save Rules to File..." - Inference Engine Dialogs now inherit their parent form's Font by default - Added TIECommonDialog component, which adds Font and ParentFont properties - Changed TConsoleDialog to descend from TIECommonDialog - Changed TDefinedTypesDialog to descend from TIECommonDialog - Changed TRulesDialog to descend from TIECommonDialog - Changed TFactsDialog to descend from TIECommonDialog - Changed TFactTemplatesDialog to descend from TIECommonDialog - Changed TFactSetDialog to descend from TIECommonDialog - Changed TGlobalVariablesDialog to descend from TIECommonDialog - Changed TFunctionsDialog to descend from TIECommonDialog - Added Title Captions for all dialogs
-------------------------------------------------------------------
Nov 23, 2008 Version 2.8B0 - Added support for Delphi 2009 - Changed set expressions in TIEClipsStream.FinishToken to use IsNumberChar and IsNumberSymbol from HelperFunctions.pas - Modified classes to avoid warnings about collisions with new methods added to TObject (D2009/.NET) - Changed AnsiChar back to Char, to align with D2009 fixes in TGTextStream, - Changed TIEClipsStream.SkipInLineSpaces to use new GetChar method to avoid any assumptions about 1-byte characters - Changed TFactsHashTable.ToString from property to method - Modified TRSRecordBuffer in IEDataSet.pas to match new Delphi 2009 TDataSet method signatures - Added TRSRecordBufferCast in IEDataSet.pas for internal use of methods to keep using PChar, even in Delphi 2009 - Changed Writer.Write in UserFunctionWizard.StringToEditor to use PAnsiChar instead of PChar - Changed AnsiPos calls to Pos calls - Changed set expressions to use CharInSet - Changed Upper/LowerCase to AnsiUpper/LowerCase, because the Ansi version handles Unicode (go figure) - Modified code to use new common library IsUpper, IsLower, etc functions
-------------------------------------------------------------------
Feb 09, 2008 Version 2.7.1 - Recompiled to be compatible with RiverSoftAVG Common Classes Library 3.6.2
-------------------------------------------------------------------
Nov 03, 2007 Version 2.7 - Includes the new Fuzzy Logic Component Library v2.7
-------------------------------------------------------------------
Oct 06, 2007 Version 2.6.1 - Added RAD Studio 2007 .NET Support - Added RAD Studio 2007 support to installer - Fixed bug in TFactTemplate constructors where, if the new fact template was created from another fact template, the new fact template would inherit the old fact template's hash code (caused backward chaining and other more obscure inferencing errors) (Thanks P.T.) - Fixed bug in TInferenceEngine.AddActivation method where an activation watch would not print out the activation that had been activated - Fixed bug in FactTemplateEditorForm where the actNewSlot Execute method to select the new slot (was causing an access violation if the user edited it immediately) - Fixed visual error in FactTemplateEditorForm where the where slot types were not visible properly (check list box was cut off) - Fixed access violations (TIEDataSet) after calling GetNullFlags in GetFieldData method by including null flags in size of record in InternalInitFieldDefs method (Thanks P.T.) - Fixed TInterpretedFunction.Call method to resolve the result BEFORE freeing the local context, which avoids an access violation on (return) functions (Thanks D.T.) - Added Expert System Explorer Demo, which displays rete network for visualizing the structure of your expert system
-------------------------------------------------------------------
Jun 23, 2007 Version 2.6 - Added Delphi 2007 support to installer - Fixed resizing columns when TValueEditDlg form is resized - Fixed TValueEditDlg to parse variables when user clicks OK as well as when another cell gets selected - Fixed TValueEditDlg so that the global variables are validated BEFORE the form exits - Added support for the for-in language construct in TValueHashTable - Added support for the for-in language construct in TValueVector - Removed Published keyword from various non-TPersistent classes to get rid of D2007 warnings - Added support for the for-in language construct in TIEDefinedTypes - Added support for the for-in language construct in TFacts - Added support for the for-in language construct in TFactTemplates - Added support for the for-in language construct in TIOStreams - Added support for the for-in language construct in TFactSets - Added support for the for-in language construct in TRules - Added support for the for-in language construct in TUserFunctions - Added support for the for-in language construct in TFactTemplate (FactSlots) - Added support for the for-in language construct in TRulePatternList - Added support for the for-in language construct in TRuleActionList - Added support for the for-in language construct in TFactTemplate (FactSlots) - Added support for the for-in language construct in TFactSet (Facts) - Added support for the for-in language construct in TBaseReasonerList - Added support for the for-in language construct in TUserFunctionList - Added support for the for-in language construct in TDataSetList - Added support for the for-in language construct in TDBIEDataConnections - Improved installer
-------------------------------------------------------------------
Aug 25, 2006 Version 2.5.1 RELEASE - Fixed TFuzzySet.IsUndecidable method to return correct answer - Added GetStatValues and GetAvgValue to TFuzzySetValues class - Added TFuzzySet.GetCompatibilityIndex method, which fixes CompatibilityIndex property
-------------------------------------------------------------------
Feb 8, 2006 Version 2.5 RELEASE - Official Release
-------------------------------------------------------------------
Dec 22, 2005 Version 2.5b10 - Rerelease for Delphi 2006 with new version of the RiverSoftAVG Common Classes Library that works around strange, unique, Delphi 2006 bug in streams (which affected parsing operations in the IECS) Thanks PG - Includes new RiverSoftAVG Charting Component Suite with new Graph Chart
-------------------------------------------------------------------
Dec 11, 2005 Version 2.5b9 - Official release for Delphi 2006
-------------------------------------------------------------------
November 22, 2005 Version 2.5 Beta 8 - Added Library Suffix of D90 (Delphi 2005) or D100 (Delphi 2006) for .NET to package names - Fixed bugs for expert system wizard (.NET) - Fixed casting error in IEExpertSystemWizardForm (.NET) for tags (happened on construction of form) - Fixed null string error in IEExpertSystemWizardForm (.NET) - Added Paint Demo for .NET Known Issues/Bugs - Because the editors were not changed from .dfm to .nfm, when you load these forms it always uses the Win32 versions of the components. If you only install the IECS.NET, you will get "Component not found" errors.
-------------------------------------------------------------------
November 8, 2005 Version 2.5 Beta 7 - Optimized IEValue for .NET (gives an almost 10% speed increase) - Installers have had a massive overhaul - Compiled files are now installed to <INSTALLDIR>\Bin\W32\Dxx or <INSTALLDIR>\Bin\NET\Dxx and path is updated WARNING: BE SURE TO UNINSTALL PREVIOUS FILES WHICH MAY BE IN $(DELPHI)\Projects\Bpl DIRECTORY - Attempts to detect if evaluation or full versions are being installed and warns about incompatibilities - Smarter updates of registry - Added missing registry updates (Package Search Path, Namespace Search Path, etc) - Fixed Missing Component Icons (.NET) Known Issues/Bugs - Need to update Help files to reflect any changes - Because the editors were not changed from .dfm to .nfm, when you load these forms it always uses the Win32 versions of the components. If you only install the IECS.NET, you will get "Component not found" errors.
------------------------------------------------------------------- October 18, 2005 Version 2.5 Beta 6 - Updated Dcl and IEWizards packages to NOT include library version, should make updating versions within Delphi easier in the future
**** You MUST uninstall old versions before installing new IECS ****
- Fixed IE User Function Wizard to output the corrected code - Fixed the XXXType property to properly change the comment and arguments when the first item in the enumeration was selected. For example, the TFuzzyAssertFunction.FuzzyAssertFunctionType would not set comment and arguments property for the fafAssert enumerated value in the construction of the object.
------------------------------------------------------------------- October 5, 2005 Version 2.5 Beta 5 - Fixed some installer issues with missing files Known Issues/Bugs - Need to update Help files to reflect any changes - Because the editors were not changed from .dfm to .nfm, when you load these forms it always uses the Win32 versions of the components. If you only install the IECS.NET, you will get "Component not found" errors.
-------------------------------------------------------------------
September 26, 2005 Version 2.5 Beta 4 - Vastly reduced number of hints and warnings for .NET - Changed Win32 VCL package numbers to 2.5 - Updated properties and accessor methods for interfaces and their implementing objects to add underscore for .NET - Moved interface methods for classes (such as TIEUserFunction) from protected to public visibility (which they already were, but this makes it explicit) - Updated help files (unfinished) Known Issues/Bugs - Need to update Help files to reflect any changes - Because the editors were not changed from .dfm to .nfm, when you load these forms it always uses the Win32 versions of the components. If you only install the IECS.NET, you will get "Component not found" errors.
-------------------------------------------------------------------
August 29, 2005 Version 2.5 Beta 3 - Uses new RiverSoftAVG Charts beta 2 - Updated help files (unfinished) Known Issues/Bugs - Need to update Help files to reflect any changes - Because the editors were not changed from .dfm to .nfm, when you load these forms it always uses the Win32 versions of the components. If you only install the IECS.NET, you will get "Component not found" errors. - TRSChartPanel component still has some visual errors with the axes - TRSChartPanel component does not support all gradient directions it indicates it should
-------------------------------------------------------------------
July 31, 2005 Version 2.5 Beta 2 - Attempted Optimization of IEClipsParser.pas PrettyPrint functions for .NET (However, in our test cases, the StringBuilder functions ran 20% slower). - Fixed all peverify errors to make .NET version 100% managed code - Changed TFuzzyAssertFunction, TRWFuzzyCorrelationFunction, and TRWFuzzyInferenceFunction Call methods to use, for exceptions, FuzzyCorrelationSuffixNameList and FuzzyInferenceSuffixNameList constants instead of trying to build complete set on the fly (which was difficult in .NET) - Added FuzzyCorrelationNameList and FuzzyCorrelationSuffixNameList constants to FuzzyConsts.pas - Added FuzzyInferenceNameList and FuzzyInferenceSuffixNameList constants to FuzzyConsts.pas - Fixed install script to properly copy RiverSoftAVG.VCL.Controls.dll to the bin/NET directory Known Issues/Bugs - Code is not optimized at this point. For .NET, this is especially noticeable because the IECS builds strings the inefficient way, e.g., without using StringBuilder class - Need to update Help files to reflect any changes - Because the editors were not changed from .dfm to .nfm, when you load these forms it always uses the Win32 versions of the components. If you only install the IECS.NET, you will get "Component not found" errors. - TRSChartPanel component still has some visual errors with the axes - TRSChartPanel component does not support all gradient directions it indicates it should
-------------------------------------------------------------------
June 27 2005 Version 2.5 Beta 1 - Fixed index caching bugs with hash table, would cause access violations in certain situations - Fixed bug in TypeEditorFrame.pas where access violation (or Object reference not set) would occur when switching between 2 fuzzy types
Known Issues/Bugs - Code is not optimized at this point. For .NET, this is especially noticeable because the IECS builds strings the inefficient way, e.g., without using StringBuilder class - Installer needs to be improved for Delphi.NET - Need to update Help files to reflect any changes - FuzzyLogicPackage includes some unsafe code which needs to be fixed to make the IECS 100% safe, managed code - Because the editors were not changed from .dfm to .nfm, when you load these forms it always uses the Win32 versions of the components. If you only install the IECS.NET, you will get "Component not found" errors. - TRSChartPanel component still has some visual errors with the axes - TRSChartPanel component does not support all gradient directions it indicates it should
-------------------------------------------------------------------
June 2005 Version 2.5 Beta 0 MAJOR CHANGES ------------- - Added Vcl.NET support. Win32 and .NET versions are identical except that .NET does not have DB support, the User Function Wizard, and some minor miscellaneous functions - Replaced TeeChart with RiverSoftAVG Charting Components - Created RiverSoftAVG Charting Components, free for non-commercial use *with* source code, for VCL.NET and Win32. Charting components include line chart, area chart, arrow chart, bar chart, pie chart, point chart, and shape chart - For Win32 and .NET - Free with source. Royalty free for use in your non-commercial applications (Commercial use license is included free with all IECS v2.5 users (00 value)) - Design-time definition of chart values - Less confusing and error prone - Point Chart can display images in the point - Shape Chart can display multiple shapes, with images - Created the following assemblies/packages for .NET RiverSoftAVG.Common Common Classes RiverSoftAVG.VCL.Controls VCL Classes Library (Extends VCL and Fixes errors) RiverSoftAVG.Charts Charting Components RiverSoftAVG.Charts.Design Charting Components (Design-Time) RiverSoftAVG.AI.Flocking Flocking Component Library (not included with IECS) RiverSoftAVG.AI.FuzzyLogic Fuzzy Logic Component Libary RiverSoftAVG.AI.FuzzyLogic.Design Fuzzy Logic Component Libary (Design-Time) RiverSoftAVG.AI.Genetic Genetic Algorithms Component Library (not included with IECS) RiverSoftAVG.AI.Inference Inference Engine Component Suite RiverSoftAVG.AI.Inference.Design IECS (Design-Time) RiverSoftAVG.AI.Inference.Editors IECS Editors RiverSoftAVG.AI.Inference.Editors IECS Wizards RiverSoftAVG.AI.Path Path Planning Component Library (not included with IECS)
DETAILS ------- - Created RSConstants.pas file, which includes basic types and constants. Some of these constants and types were moved from IEConsts.pas and FuzzyConsts.pas Among the most important new types: - TRSPointerType, which equals Pointer in Win32 and TObject in .NET - TRSStringPointerType, which equals PChar in Win32 and String in .NET - Modified most files to: - Include RSDefines.inc - Include RSConstants.pas - Changed all methods and properties that use IUnknown interface to use IInterface interface. Added IInterface interface for Delphi 5 support - Changed all QueryInterface calls to use Supports functions. - Removed reference counting code for .NET (not needed) - Changed ToString properties to AsString and GetToString methods to ToString to sync better with .NET (in which all objects have ToString method) - Changed Tag properties to be of TRSTag type (Win32=Integer;.NET=Variant) - Introduced TxxxPersistent class to get around a delphi compiler bug with class helpers (QC report #11019) - Added inherited Creates calls to constructors for compatibility with .NET - Deleted AfterConstruction and BeforeDestruction methods (for .NET) - Extracted icons from DCR files to create assembly bitmap files for design-time icons in .NET - Conditional compiled IUnknown methods (_addref, _release...) because they are not needed with .NET RiverSoftAVG Common Classes Library (GCollections package in Delphi 5, 6, and 7; RSCommon package in Delphi 2005 (Win32) and RiverSoftAVG.Common assembly in VCL.NET) - Created TRSEncodedBits class (in RSEncodedBits.pas), a TBits descendant with methods to encode/decode simple types into the TBits - Modified InterfaceCollections.pas - Modified TGInterfaceList to descend from TPersistent - Modified descendants of TGInterfaceList to correctly override methods - Modified list classes to use a dynamic arrays instead of a pointer to such an array (as used for Win32). The pointer implementation was left for Win32 since it is faster than the dynamic array implementation - Changed DEMO out of memory errors to use standard Exception, instead of EOutOfMemory exception, which (contrary to help file) seems to have disappeared from the SysUtils unit - Modified HelperFunctions.pas - Added WriteStringToStream function - Added SameValue and Supports functions for Delphi 5 - Added CreateObjectClass and ClonePersistentClass methods - Modified GStreams.pas - Added Close method to TGBufferStream (useful for .NET) - TGSpecialFiler is not available for .NET (because can't crack protected methods of TReader/TWriter) - Modified GRegularExpression.pas - Modified String references to AnsiString references (for .NET compatibility). The Regular Expression object must use AnsiString (one byte characters) because it uses set operations which do not work with wide chars. - Modified GParser.pas - Changed StrScan calls to Pos, even though StrScan is faster it is not .NET compatible - Modified GLists.pas - Added TQOrderedList class, which is base class for the TQxxx stacks and queues, and TQOrderedListClass type. These classes are useful because they have a virtual constructor, unlike Borland's classes - Modified GHashtable.pas - Modified TGCustomHashTable to use a dynamic array of hash table entries (THashtableEntries) instead of a pointer to such an array (as used for Win32). The pointer implementation was left for Win32 since it is faster than the dynamic array implementation - Modified GGraph.pas - Changed TGCustomGraph.AddNode method visibility from protected to public (.NET does not like changing visiblity with methods) - Modified DataStructures.pas - Added TFloatHeapElement, TFloatHeap, and TFloatPriorityQueue classes - Changed TPriorityList.OrderedListClass to use GLists.TQOrderedList instead of Borland's classes because we can't get to the items of the list quickly - Modified Structures.pas - Added overloaded AddObject method to TGStringList - Added RSGraphics.pas, moved from internal development package to common classes library. Modified RSGraphics.pas as well: - Added RSCenterPoint functions - Added DrawPieSlice procedure - Added DrawArrow procedure and TArrowOption types - Changed Gradient functions to accept an open array of TColor, instead of TColors - Moved TObjectSize from Game.pas to RSGraphics.pas - Created hierarchy of TRSCustomRect, TRSObjectRect, and TObjectSize - Added TRSRect, TRSPoint and functions to manipulate them - Added overloaded DrawShape procedures and TRSShapeStyle type - Fixed LineGradient to handle "reversed" TRects (left > Right, etc) - Fixed RotateFont to change font name if font is not a true type (and wouldn't thus rotate) - Added GetRotatedTextExtent function (Delphi's Canvas.TextExtent does not work for rotated fonts) RiverSoftAVG Fuzzy Logic Component Library - Modified IFuzzyLogic.pas - Added LOTS of methods to TIFuzzySet because .NET does not support "implements" keyword - Added LOTS of methods to TIFuzzyVariable because .NET does not support "implements" keyword - Changed hash table pointer references to use TRSPointerType - Had to resurface TFuzzyStreamTokenList methods because of Delphi.NET compiler bug (QC report #) - Modified FuzzyLogic.pas - Changed VerifyAll protected method to use TFuzzyStreamTokenTypes instead of TIntegerSet (needed for .NET) and changed all calls to VerifyAll - Changed overloaded constructors to NOT call other constructor (not supported well in Delphi.NET) - Moved EFzyException to FuzzyConsts - Modified FuzzyConsts.pas - Moved some constants to RSConstants.pas - Moved EFzyException to FuzzyConsts and inherit from ERSException RiverSoftAVG Inference Engine Component Suite - Modified BusinessPackage.pas - Changed AfterConstruction methods to InitMetaData method - Modified IEClipsParser.pas - Changed Char types to AnsiChar - Modified IEConsts.pas - Added SNotDOTNETFunction resource string - Moved some constants to RSConstants.pas - Changed EIEException to inherit from ERSException - Modified FuzzyLogicPackage.pas - Changed AfterConstruction methods to InitMetaData method - Modified IEFacts.pas - Moved TIEPattern.SetOwner method visibility from protected to public (for .NET) - Moved TFactSet.SetEngineNoParse method visibility from protected to public (for .NET) - Fixed declaration of Notify for .NET - Added TFactValues.FindEntry protected method to get around .NET assembly restrictions - Modified IEHelperFunctions.pas - Changed StrScan calls to Pos, even though StrScan is faster it is not .NET compatible - ReadPersistent function does not work in .NET - Changed SetToString to call GetSetNames in .NET - Changed CalculateHashCode to use String.GetHashCode in .NET - Modified IEInterfaces.pas - Changed ToString property for all interfaces to AsString and GetToString method to ToString method (for .NET) - Modified IEPackages.pas - Added TIEUserFunction InitMetaData method for initializing the function name, comment, and argumentstring (replaces what the AfterConstruction method was used for in descendant classes, makes .NET port easier) - Modified IEParser.pas - Moved TIEParser.OnXXX events from protected to public (for .NET) - Modified IEPropertyEditors.pas - Added TIEClassProperty class, a TClassProperty editor that provides safer access to the class. - Modified the class property editor classes (TDefinedTypesProperty, TFactsProperty, etc) to descend from TIEClassProperty editor class - Modified IERule.pas - Moved TRule.AddBinding method visibility from protected to public (for .NET) - Moved TRule.Change method visibility from protected to public (for .NET) - Fixed declaration of Notify for .NET - Modified IEValue.pas - Removed TIEValue.Create(Pointer) constructor and changed TIEValue.Create(TObject; Boolean) constructor to not use default parameters. The Delphi.NET compiler gets confused with TObject and the constructors with interfaces - Added TIEValueType (.NET=Variant, Win32=TIEValueRec) and TRSPointerType (.NET=TObject, Win32=Pointer) to make writing .NET and Win32 compliant code easier - TIEValue cannot Assign AsOwningObject that is a TPersistent in .NET because .NET won't create objects without a virtual constructor - Modified IEWizPropertyEditors.pas - Modified TSlotItemProperty and TStructureItemProperty for .NET - Modified InferenceEngine.pas - Moved TInferenceEngine.ChangeFactTemplateName method from protected visibility to public (needed for .NET) - Moved TInferenceEngine.RuleChange method from protected visibility to public (needed for .NET) - Moved TInferenceEngine.NewTokenizer method from protected visibility to public (needed for .NET) - Moved TInferenceEngine.RetractFact method from protected visibility to public (needed for .NET) - Moved TInferenceEngine.AddActivation method from protected visibility to public (needed for .NET) - Moved TInferenceEngine.RemoveActivation method from protected visibility to public (needed for .NET) - Moved TInferenceEngine.RuleFired method from protected visibility to public (needed for .NET) - Changed TCustomTreeView calls to TTreeView for .NET - Modified MathPackage.pas - Changed AfterConstruction methods to InitMetaData method - Modified MiscPackage.pas - Changed AfterConstruction methods to InitMetaData method - Modified ObjectPackage.pas - Changed AfterConstruction methods to InitMetaData method - Modified TGet/SetPropertyFunction classes to not use PropInfo so that there are no .NET changes - Modified TGetPropertiesFunction for .NET - Modified PredicatePackage.pas - Changed AfterConstruction methods to InitMetaData method - Modified ReteNetwork.pas - Moved Activations Standdown call from TPatternMatchTerminalNode BeforeDestruction method (doesn't exist in .NET) to Destroy method - Modified RuleEditorForm.pas - Added conditional compilation for TreeView.OnCompare event (which changed in .NET) - Modified StandardPackage.pas - Changed AfterConstruction methods to InitMetaData method - Modified StringPackage.pas - Changed AfterConstruction methods to InitMetaData method - Modified TrigonometryPackage.pas - Changed AfterConstruction methods to InitMetaData method - Modified TypeEditorFrame.pas - Replaced TeeChart with RSCharts - Modified TypeEditorForm.pas - Added conditional compilation for TreeView.OnCompare event (which changed in .NET)
Known Issues/Bugs - Code is not optimized at this point. For .NET, this is especially noticeable because the IECS builds strings the inefficient way, e.g., without using StringBuilder class - Installer needs to be improved for Delphi.NET - Need to update Help files to reflect any changes - FuzzyLogicPackage includes some unsafe code which needs to be fixed to make the IECS 100% safe, managed code - Because the editors were not changed from .dfm to .nfm, when you load these forms it always uses the Win32 versions of the components. If you only install the IECS.NET, you will get "Component not found" errors. - TRSChartPanel component still has some visual errors with the axes - TRSChartPanel component does not support all gradient directions it indicates it should
-------------------------------------------------------------------
January 2005 Version 2.13 - Modified to work with Delphi 5, 6, 7, and 2005 (Win32) - Added RSDefines.inc to simplify updates for new versions of Delphi - Modified source files to use RSDefines.inc - Renamed GCollections package to RSCommon package for Delphi 2005 ONLY - Fixed EListError exceptions in dialogs because of Delphi bug 5936, first reported by Leonel Togniolli, "Changing Visibility of a TabSheet causes Error" by introducing TRSPageControl into EditBoxesDxx package - Includes update in Common library and Fuzzy Logic Library (see their respective history files for more information) - Started Modifying source files to work with .NET (Incomplete)
-------------------------------------------------------------------
April 2004 Version 2.12 - Fixed some range check errors in IEFacts, and IEValue.pas - Includes update in Common library and Fuzzy Logic Library (see their respective history files for more information)
-------------------------------------------------------------------
March 2004 Version 2.11 - Installation script is much smarter about managing the different Delphi versions - Updated Common Help File - Updated Fuzzy Logic Help File - Added 9 new deffunctions (implemented by TIsIEStructFunction and TListVariablesFunction in miscpackage.pas) - Added TIsIEStructFunction (implements is-binding, is-deffacts, is-deffunction, is-defglobal, is-defrule, is-deftemplate, and is-deftype) - Added TListVariablesFunction (implements list-bindings and list-defglobals) - Added ValueEditorForm for editing TValueHashTables, such as TInferenceEngine.GlobalVariables property - Added TGlobalVariablesDialog component - Added TGlobalVariablesDialog to AI palette - Reintroduced FuzzyOperatorMinThreshold into TIFuzzySet (caused access violation in inference engine when fuzzy logic was used) - Moved TFuzzySet.Defined property to published visibility - Set Defined to True if design time - Fixed TCustomFuzzyLogic.Strings property to properly update itself when the underlying fuzzy variables have changed - Added ToString and ValuesToString properties and GetToString and GetValuesToString methods to TFuzzySet - Added ToString property and GetToString method to TFuzzyVariable - Moved TFuzzySet.Defined property to published visibility - Set Defined to True if design time - Added UpdateStrings method to TCustomFuzzyLogic - Overrode UpdateStrings method in TFuzzyLogic - Fixed Parse method in TFuzzyLogic (actually the code for UpdateStrings) - Added Parse and ParseFuzzyLogic methods to TCustomFuzzyLogicParser - Fixed Parsing error for s and z functions in CalcFuzzyFunction method of TCustomFuzzyLogicParser - Added DefuzzifyValue property and CreateCrispValue to IFuzzySet interface - Added ParseFuzzyLogic protected methods - Fixed Bug in PrettyPrint of fuzzy variables - Renamed form for Advanced Console Example Form, was causing conflicts with the Console Dialog (in Delphi 5 at least) - Fixed HSM Demo to be Delphi 5 compatible
-------------------------------------------------------------------
January 2004 Version 2.1B - Added str-format user function (StringPackage.TStrFormatFunction) - Created a helper function in IEHelperFunctions to format a string according to the CLIPS formatting rules, used by format and str-format functions (CLIPSFormat) - Modified TFormatFunction to use IEHelperFunctions.CLIPSFormat function - Modified FuzzyLogic library extensively (see Fuzzy Logic History.txt) - Added two more overloaded TInferenceEngine.EvalFuzzyExpression methods to satisfy the new methods in IFuzzyParser - Added EvalFuzzyExpression methods to IFuzzyParser - Changed TIEDefinedTypes.Put method to use Low/Medium/HighFuzzyTerms resource strings for adding FuzzyAutoTerms in InferenceEngine.pas - Added Edit Defined Types button and menu item to Advanced Console Demo - Added View Expert System Action and Menu Item to Advanced Console Demo and console editor - Added vaFileView to TValidAction, which controls View Expert System
-------------------------------------------------------------------
May 2003 Version 2.02 - Modified TUserFunctionWizard to use the OpenTools API instead of old Delphi 2/3 interfaces - Fixed bug in the open function for the append mode. It was overwriting previous files instead of appending to the end of them (Thanks E.P.) - Fixed bug in TUserFunctionWizard.Execute where if the form file was being displayed, the unit would be unchanged (Thanks Marc S.)
-------------------------------------------------------------------
August 2002 Version 2.01 - Added SFuzzyEmpty variable to FuzzyConsts.pas - Changed FuzzyFormatStr, LeftFuzzyParentheses, and RightFuzzyParentheses to variables to FuzzyConsts.pas - Moved SFuzzyEmpty constant from IEConsts to FuzzyConsts.pas - Fixed TIEDefinedType.CreateValidDefault method to create a valid empty fuzzy set, fixed bug in Wizard with the Hometown Advisor Expert System - Modified TIEClipsParser.ParseSlotTypes to use STypeXXXXKeyword variables - Added STypeXXXKeyword variables to IEConsts - Optimized TIEClipsStream - Uses a TStringStream instead of a String for the already parsed ToString (MUCH better for long streams, 15x Faster) - Sets TFactSet.Engine without reparsing already parsed facts in ParseExpression - Added TFactSet.SetEngineNoParse protected method which sets the Engine property without reparsing all the facts (useful when you know all facts have already been parsed with the new Engine value) - Fixed bug in TIEESDomain.Destroy method causing access violation because it freed the fact template items before rule items - Fixed bug in TInferenceEngine.Assign when copying an interpreted function which refers to a fact template (before the fact template is copied) - Added overloaded TUserFunctions.Assign method and TUserFunctions.AssignInterpretedFunctions - Modified Object & Interface method calls in many classes/units to pass *strings* by const, which avoids a hidden try-finally block to speed up execution - Modified TFactTemplate.GetSlotNames to return the slot names *sorted* - Fixed bug in TFact.GetHashCode which would return different hash codes for the same fact if the slot values came in a different order - Modified TIEValue to use a special record instead of a variant and pointer to store the values, reduces memory consumption and is faster - Modified units to make them compatible with Delphi 7 - Fixed limitation in GHashTable.pas which wouldn't allow you to shrink the hash table if there were items in it
-------------------------------------------------------------------
July 2002 Version 2 Final Release
- Added Enabled Property to TReteNetwork. If the TReteNetwork is disabled, inferencing is disabled. However, for editor dialogs (rules and facts), disabling the TReteNetwork will speed up the loading significantly - Optimized TFactsDialog, TFactSetDialog, and TRulesDialog by turning off the Rete Network during loading - Fixed TInferenceEngine.ReplaceTemplate method which would NOT detect dependency on a fact template when the rule had an action that asserted a fact based on that fact template - Added TInferenceEngine.IsDependent methods - Fixed really stupid and annoying bug in TIFuzzyVariable.Destroy where I would refer to a field AFTER the Destroy call (sometimes causing an access violation) - Fixed TFactSlot.Assign method to correctly copy the type if the other fact slot is from another inference engine - Fixed bug in TIFuzzyVariable.Destroy method, now sets events and parser to nil - Fixed TFactSlot.Destroy to nil out SlotDefault (and its OnChange event) - Fixed TInferenceEngine.ReplaceDefinedType to also reparse slot default if type changes. This was a problem when fuzzy types would change but the value was still based on old fuzzy type - Fixed TUnDefTemplateFunction and TUnDefRuleFunction in MiscPackage.pas to return FCFalse instead of raising an exception when the construct does not exist - Added TUnDefTypeFunction to MiscPackage.pas - Fixed Edit Fact Templates dialog in Rule Editor Form to update fact templates tree view after returning - Fixed TInferenceEngine.LoadFactTemplates method to only clear fact templates (and their associated facts and rules), instead of everything - Fixed TIEDefinedTypes class to set Reasoner property of IIEDefinedType to nil when type is being deleted or cleared - Changed the DB alias used for the demos from "Applicants" to "IECS" - Added Hometown Advisor Domain to Expert System Wizard - Fixed IEExpertSystemWizard.TIEESFactItem.Assign method to not add new slots when assign IFact values - Fixed TIEESFactTemplateItem.Assign method to update facts and rules after it has changed - Updated Demo to limit number of defined types, fact templates and rules to ~30 - Fixed TFactSlot.IsValid to accept FCNil and FCNilList - Added IDBIEBookmark interface and TDBIEBookmark class - Added ReplaceFact method to TDBIEDataConnection - Added UpdateDependencies and UpdateDependentFact methods to TInferenceEngine - Moved BeginTemplateChange and EndTemplateChange methods from TDBIEDataConnections class to TDBIEDataConnection class - Fixed bugs with changing defined types not being reflected in the TDBIESlot class - Added GetUniqueName and IsUniqueName methods to TDBIEDataConnections class to ensure each data connection gets a unique fact template name - Added overloaded ParseValue methods to TInferenceEngine - Added overloaded ParseValue methods to TIEClipsParser - Changed TIEClipsParser.ParseFactTemplateSlot to use new ParseValue method - Added overloaded ParseValue methods to TIEParser - Added TDBIESlotDefinedTypeProperty editor, provides drop down list for TDBIESlot.SlotType property - Fixed TIEClipsParser.ParseFactTemplateSlot to correctly parse fuzzy default values which start with brackets ([) - Added SEmptyFuzzy constant - Fixed TInferenceEngine.EvalFuzzyExpression to detect '' or SEmptyFuzzy as an empty fuzzy set - Fixed PrettyPrint(IFuzzySet) to print out SEmptyFuzzy as blank string - Fixed behavior of TDBInferenceEngine.Reset method to reassert current record from DataSources - Fixed bug in TFuzzySet.Iterate, should return True if both are empty - Fixed bug in TIFuzzySet.Iterate, should return True if both are empty - Improved TDBInferenceEngine.Notification method to see if TField's DataSets are being destroyed to just nil the DataSources
Known Issues: None
-------------------------------------------------------------------
May 2002 Version 2 EEP - Update 05
- Finished FuzzyLogic.hlp (over 450 KB of help) - Updated IE.hlp (Incomplete) - Updated Common.hlp (Incomplete) - Fixed TIEClipsParser.ParseFunCall to correctly parse nested funcalls OR singletons - Fixed TReteNetwork.Evaluate method to not resolve global variables - Added TDBDataSetPropertiesFunction and TDBNavigatorFunction, which add 18 more expert system functions: get-dataset-empty, get-dataset-read-only, get-dataset-active set-dataset-read-only, set-dataset-active, dataset-first dataset-prior, dataset-next, dataset-last dataset-insert, dataset-delete, dataset-edit dataset-post, dataset-cancel, dataset-refresh dataset-at-first, dataset-at-last, dataset-move-by Known Issues: - TDBInferenceEngine has bugs when using defined types
-------------------------------------------------------------------
April 2002 Version 2 EEP - Update 04
- Added SlotTypes, SlotType, and DefinedType properties to TDBIESlot to allow a database field to map to any type, including fuzzy (DBInferenceEngine.pas) - Added GetFieldSlotValue, GetFieldSlotTypes, SetFieldSlotValue methods to TDBIESlot (DBInferenceEngine.pas) - Fixed Issues with CreateFieldSlot, GetFieldSlotTypes for TDBInferenceEngine (DBInferenceEngine.pas) - Fixed TJoinNode.RunTestVaryRight method to reinitialize the Token.NegatedCount before exiting (caused pattern match errors in some special cases such as having a min and max rule together) - Added ToString method to TBindingInfo and TBinding - Optimized TIEValue.Equals method to check if parameter equals self (good optimization for checking against FCFalse and FCTrue - Modified TIEValue.GetAsInteger and TIEValue.GetAsNumeric methods to return the defuzzified value (or closest to it) if the type is fuzzy - Modified TIEValue.GetAsString to return the fuzzy expression if the type is fuzzy - Added IFuzzySet.Defuzzify method to FuzzyInterfaces.pas - Added TIFuzzySet.Defuzzify method to IFuzzyLogic.pas - Added Default keyword to TInferenceEngine.FuzzyXXXMethod properties so that the property doesn't get streamed unnecessarily - Published TInferenceEngine.GlobalVariables so that it may be streamed out - Modified the TInferenceEngine streaming mechanism to stream fact sets - Fixed IEClipsParser.PrettyPrint( Name, Value ) method to add the variable character ('?') if it is not present - Changed TPatternMatchNode.CallNode method to test slot values to see if they equal FCFalse instead of FCTrue. This has the effect of making tests that return an index or FCFalse (such as member function) working as you would expect - Fixed TIEClipsStream.ReadString method to raise an exception if the string is not terminated - Updated IEEditors.hlp to match the updated editors - Fixed LineNumber reporting error. The parser was stating the wrong line number when an exception occured - Created a TActivationAgenda and TIEAgenda class for tracking the rule activations in the TInferenceEngine. - Optimizations - Changed TGCustomGraph.RemovePredecessors to pass in ANode by const and to use TGGraphNode.RemovePredecessors method - Added TGGraphNode.RemovePredecessors method - Optimized TReteNetwork.TPatternMatchNode.Equals method - Changed TReteNetwork.TReteNode base class to TGLinkedGraphNode
Known Issues: - TDBInferenceEngine has bugs when using defined types
-------------------------------------------------------------------
March 2002 Version 2 EEP - Update 03
- Created FuzzyLogic.hlp - INCOMPLETE - Updated IEEditors.hlp - Updated all modules with ObjExportAll using conditional compilation to avoid possible bug in Delphi 5. From Delphi Bug List: Compiler - Linker The compiler directive {$objexportall on} in a unit (e.g. suspectunit.pas) causes the DCC32 link stage to fail, producing only a .dcu, but no .exe output and no error messages - Fixed Bug in TypeEditorFrame.pas, TIETypeEditorFrame.Change method where it would execute even when the frame was being destroyed (causing access violations) - Added ability of Expert System Wizard to use the current expert system in the IDE (modified IEPropertyEditors.TInferenceEngineEditor component) - Fixed Expert System Wizard bug in Load Expert System button, it now properly shows the loaded expert system as a domain option - Modified the Expert System wizard to show the expert system loaded when you load an expert system from disk - Fixed bug in IEValue.pas TIEValue.Resolve for dtSingletons where the fuzzy name was inproperly set to the unresolved singletons string - Modified ReteNetwork.pas TJoinNode.DoRunTestsVaryLeft and DoRunTestsVaryRight methods to pass the minimum token strength onto new tokens, fixes activation strength bug for fuzzy rules - Fixed bug in TInterpretedFunction.Call method where multivariables were not getting properly bound - Fixed TInferenceEngine.Assign method, which was raising an exception because of typechecking being performed in the Assign - Fixed Memory Leak where Fuzzy Variables would not be freed because their fuzzy sets had a reference to them. Changed the __Release method to free the fuzzy variable when its reference count equals the number of fuzzy sets in the variable - Fixed TIEDefinedTypes.Assign method, which was not properly replacing the types (causing facts based on old fuzzy variables to stay around and cause problems later) - Fixed TInferenceEngine ReplaceTemplate and RemoveDependency methods to clear out facts in a fact set when the fact template changes - Fixed TInferenceEngine.ReplaceDefinedType to properly create new fact templates containing the new types instead of the old types - Fixed TFactSet.Reset method to capture reparsing/cloning errors, which may occur because of defined type or fact template changes The fact string is left in the factset since this object is outside the engine - Fixed TIFuzzySet.FuzzyMinOperatorThreshold method in IFuzzyLogic.pas to see if value is greater than and EQUAL to the threshold, instead of just greater than - Initialized FuzzyEqualsThreshold in TInferenceEngine to above zero (0.01) - Added Automatic Rule Binding in TRule.Prepare method. Now, actions can get the executing Rule Name by accessing the ?__RULE variable - Modified MiscPackage.TPrettyPrintFunction to return the pretty print string instead of sending to PrintOut - Fixed MiscPackage.TPrettyPrintFunction to resolve the argument - Modified the TModifyFunction in StandardPackage.pas to resolve all the fact before re-asserting... this fixes an error where modifying a multislot would not resolve functions in the new value
Known Issues: - TDBInferenceEngine does not work with Fuzzy slots - Problem of retaining interpreted functions & fact sets that could be loaded by the 'Edit Expert System...' Editor
-------------------------------------------------------------------
February 2002 Version 2 EEP - Update 02
- Added IEStringToString function (removes outer double-quotes) to IEHelperFunctions - Added datetime-str-format to the TDateTimeStringFunction in MiscPackage, suggested by E.P. (Thanks) - Fixed bug in TIEValue.GetToString where double-quotes inside a string are not prefaced with the escape character (\) (parse "(defrule myrule \"comment\" (phase) => (printout t phase))") - Added SEscapeChar constant to IEConsts.pas - Added TIEParseFunction in MiscPackage, which parses and executes its string argument
-------------------------------------------------------------------
January 2002 Version 2 EEP - Update 01
- Fixed TUniverseOfDiscourseFunction in FuzzyLogicPackage.pas, default FunctionName was not getting set properly, resulting in get-u-from function to not display its comment - Fixed TIEDefinedType.SetBaseTypes to create TIEFuzzyVariable class... not TIFuzzyVariable class. It was causing errors in the pattern matching because the TIEFuzzySet.Equals method differs from TIFuzzySet.Equals method - Fixed IEHelperFunctions.GetFuzzySlot function for slot values which are float or integer - Fixed IEExpertSystemWizard.GetValueFromString function to correctly create a dtString value without the double-quotes
-------------------------------------------------------------------
January 2002 Version 2 EEP
Summary of Version 2 Major Features - New! Database Support! IECS is now database-aware through the TDBInferenceEngine component and TIEDataSet component - New! Fuzzy Logic! IECS now supports fuzzy expert systems and fuzzy inferencing - New! Expert System Wizard! Step-by-step guide to creating expert systems, with examples. Available by right-clicking on TInferenceEngine - New! Type Definitions! IECS adds a new construct, the deftype, which allows you to define types that allow type inheritance, enumerations, range checking, and fuzzy sets. At design-time, the TInferenceEngine.DefinedTypes property allows access to the new types - New! User Function Wizard! Wizard helps you quickly and easily create the code for defining a user function in the IECS - New! Console Dialog! IECS adds a new console dialog, similar to the Advanced Console Editor Demo - New! Type Definition Editor! Design-time and Run-time editor for the new deftype construct - New! Over 60 New Functions, bringing the total to over 250 functions! New functions for dates and times, database, fuzzy logic, and more - Improved Expert System Execution! IECS executes expert systems up to 2.5x faster! - Improved Fact Template Redefinition! IECS now works to keep facts and rules even when the fact templates they depend on have changed - Improved, Bigger, Faster Dialogs! Dialogs have been made bigger (800x600) and in many cases been substantially improved, with additional sorting features, printer support, and type checking - Improved Parser Support! IECS has improved support for defining and designing your own parser classes. Dialogs now support new parsers!
********************************************************************** NOTE TO VERSION 1.0 USERS: Version 2.0 has been optimized. Most changes are transparent. However, because of those optimizations, many event signatures have been changed to pass interface references by the const keyword (thus avoiding Add and Release function calls). If you have used events in the IECS and get a compilation error, check your events! **********************************************************************
Details - Created New Expert System Wizard - step-by-step guide to creating expert systems, with examples - Created New TInferenceEngine Component Editor, uses the console editor to allow the user to modify the component in the most flexible way possible - Created User Function Wizard - Created TDBInferenceEngine class - a data-aware version of TInferenceEngine with the ability to be connected to multiple TDataSources, where every TDataSource supplies one generated Fact Template and facts - Created Icon for TDBInferenceEngine - Created TIEDataLink class to manage data link between TDataSource and the engine - Created TDBIESlot class to encapsulate one TField/Fact Template Slot mapping - Created TDBIESlots class to manage a collection of TDBIESlot - Created TDBIEDataConnection class to manage all details for ONE TDataSource connection to the engine, including data link and slots - Created TDBIEDataConnections class to manage a collection of TDBIEDataConnection - Created IEDBDx package to contain all the new database code - Added IEDBDx to the IEDclDx package - Created IEDBPropertyEditors.pas file for DB property editors and created TSlotDataFieldProperty editor for TDBIESlot.FieldName property - Added Fuzzy Logic (FuzzyConsts.pas, FuzzyLogic.pas, FuzzyInterfaces.pas, IFuzzyLogic.pas, and IEFuzzyLogic.pas) - Created FuzzyLogicPackage, containing 37 new functions: create-fuzzy-value, fuzzy-assert, fuzzy-assert-unconditional, fuzzy-union, fuzzy-union-x, fuzzy-intersection, fuzzy-intersection-x, get-fuzzy-correlation, get-fuzzy-inference, get-fs, get-fs-length, get-fs-x, get-fs-y, get-fs-variable, get-fs-value, get-u, get-u-from, get-u-to, get-u-units, get-fuzzy-auto-terms, set-fuzzy-auto-terms, get-fuzzy-threshold, set-fuzzy-threshold, get-activation-threshold, set-activation-threshold, moment-defuzzify, maximum-defuzzify, is-undecidable, get-compatibility-index, plot-fuzzy-value, set-fuzzy-correlation, set-fuzzy-inference, s, z, pi, tri, and beta - Created Database Package (TDBPackage), containing 7 new functions: duplicate-record, is-dataset-fact, modify-record, assert-record, assert-record-string, retract-record, and retract-record-string - Improved and new collection classes: - Created TIHashTable class, a hash table of interfaces, in InterfaceCollections - Created TFactsHashTable class to manage a hash table of IFact items - Added Indexing methods and properties to hash table classes in GHashtable and InterfaceCollections units: TGCustomHashtable, TGHashTable, TGStringHashTable, TIHashTable, and TIStringHashTable. The last access is cached so that if you are accessing the next or previous index (as in for-to and for-downto loops), these properties are fast. MUCH more intuitive way to loop over entire hash table than iterators. Also, you can loop backwards through the table and delete as you go without worry or slowdown. - Added overloaded ContainsKey methods to hash table classes: TGHashtable, TGStringHashtable, TIStringHashtable, TValueHashtable, TFactTemplates, and TRules. Overloaded method contains a VAR parameter so that it returns the item at the same time as querying the hash table. - Added overloaded HasKey protected method in TGCustomHashtable, which contains a VAR parameter so that it returns the entry at the same time as querying the hash table. - Changed TIList.Add and TIList.Insert to pass interface as const to avoid extraneous AddRef and Release calls - Added TGCollectionItem to Structures.pas, works like TComponent in that you can have notifications between TGCollectionItem classes - Added overloaded TIList.AssignTo(TPersistent) method to implement ICloneable interface change - Added TGInterfaceList class to make a more efficient TInterfaceList - Changed TIList to descend from TGInterfaceList - modified all Clone methods in InterfaceCollections.pas to use Assign(TPersistent) - Created TGListBox class, descendant of TListBox, which displays a horizontal scroll bar when items are too long for control - Improved Fact Template replacement by reparsing as many facts and rules as possible with the new fact template - Added Replace method to TFactTemplates - Added ReplaceTemplate protected method to TInferenceEngine - Modified PutValue and Assign in TFactTemplates to use Replace instead of Remove method if possible - Improved TFactTemplatesEditDlg (FactTemplateEditorForm.pas) - Modified fact templates do not now automatically delete facts and rules by using the improved fact template replacement code - Added Type Editor, with button on toolbar - Made Dialog Larger (800x600) - Added Extended Type Info controls (TypeEditorFrame) - Added Print capability and PrintMargin Property - Modified SNotCorrectType exception to print the value that wasn't of the correct type - Fixed bug with default-dynamic attributes - Added UserFunctions property to allow dialog to properly set the local user functions to be the same as the calling engine's. - Improved TFactsEditDlg (FactEditorForm.pas) - Added type checking. Fixed bug where user could enter invalidly typed data into a fact's slots. Changed IE's TypeCheck property to perform static and dynamic checks - Added Sort By Index option to TFactsEditDlg - Added ID Row to Slot View of TFactsEditDlg - Modified TFactsEditDlg to attempt to preserve fact IDs by setting TFacts.PreserveIDs property. This is useful so that the TDBInferenceEngine can detect when a fact is edited by the TFactsEditDlg - Fixed Sort By ID Bug in TFactsEditDlg (actually, it was sorting by Index) - Added Type Editor and Fact Template Editor, with buttons on toolbar - Added Button Toolbar and Options property to control it - Added Print capability and PrintMargin Property - Made Dialog Larger (800x600) - Sped up the initial assignment of facts - Changed lbFacts to a TGListBox so that a horizontal scrollbar can appear when facts are too big - Fixed bug where default-dynamic fact slots were not being resolved when adding facts - Improved TRulesEditDlg (RuleEditorForm.pas) - Added Type Editor and Fact Template Editor, with buttons on toolbar - Fixed PopupMenu bug in RuleEditorForm where the Fact Templates PopUp would show Delete Rule item - Added Button Toolbar and Options property to control it to RuleEditorForm - Added Print capability and PrintMargin Property to RuleEditorForm - Fixed DragDrop events in RuleEditorForm to properly insert a string based on the parser instead of hard-coded - Fixed UpdateCurrentRule in RuleEditorForm to use ParseRulePatterns and ParseRuleActions methods in order to be parser independent - Added OneShot Checkbox to RuleEditorForm - Made Dialog Larger (800x600) - Added Delete Menu Item to pop up menu in RuleEditorForm - Fixed Rules, which were not being sorted in tree, in RuleEditorForm - Fixed Fact Templates, which were not being sorted in tree, in RuleEditorForm - Fixed bug in RuleEditorForm where user functions added at design-time did not show up - Fixed "Invisible window cannot receive focus" bug in RuleEditorForm - Replaced lbIF and lbTHEN TListBox components with TGListBox in order to fix too long items being truncated in the listbox - Fixed "disappearing" empty line (new line) in IF and THEN listboxes - Added SNotCorrectSlotType error string to IEConsts. Modified TFact.SetValue procedure to raise this error instead of SNotCorrectType. Modified TIEClipsParser.ParseSlot and ParseFact to use this value as well - Changed the names of the packages, removing version numbers, uses the Delphi 6 version numbering instead - Added default keyword to many properties so that Delphi won't store default property values in the DFM - Fixed backward chaining pattern bugs. When a backward-chaining pattern is added to a rule, a "not" for the pattern is added automatically to ensure the rule won't fire if the non-backward-chaining pattern exists. This worked correctly. However, PrettyPrint(TRule) printed the "not" pattern and the TRule.SetPatterns and RuleEditorForm.UpdateRuleEditor did not ignore it causing lots of "not" patterns to build up in the rule - Fixed access violation for components on different forms or modules. Created/Modified SetEngine methods to add and remove free notifications for the components so that they can be notified when engines are freed - Fixed design flaw where TInferenceEngine events were being called from outside the TInferenceEngine (except for OnParse... events). Added numerous protected methods inside TInferenceEngine for firing the events. The previous design made it difficult for a component writer to override TInferenceEngine if they wanted to do some action on that event. For example, TFactTemplates.Clear was firing the OnClearFactTemplates event directly. Now, it calls the protected TInferenceEngine.ClearFactTemplates method, which fires the event. Added protected methods: AddRule, BeginInference, ClearFactTemplates, ClearRules, EndInference, NewFactTemplate, and RemoveFactTemplate - Created InferenceEngineDBReg.pas file to register database classes - Created Defined Types Editor Dialog (TIETypesEditDlg) - Created Defined Types Editor Frame (for use by TIETypesEditDlg and - Added functions to IEHelperFunctions: CreateArgumentExpressions function overloaded CalculateHash Function GetFuzzySlot function GetFuzzySetFromValue function GetIETypeName function FloatEquals Functions IsSubmenuVisible Function SwapEvents procedure StringFilter function - Added TDefinedTypesProperty Editor to IEPropertyEditors - Improved Parsing and Printing Code - Changed TIEParser and TIEClipsParser's Parse and ParseExpression methods to have Execute parameter (default = True) controlling if parsed funcalls should be executed. - Added Enabled Property to TIEClipsParser.ParseRule and TIEClipsParser.PrettyPrint rule - IFunCalls may now be commented... all commented whitespace BEFORE the function call is used - Patterns may now be commented... all commented whitespace BEFORE the pattern is used - Modified TIEClipsStream to set IStreamToken.WhiteSpace property - Modified TIEClipsParser.ParseFunCall to set Comment property from whitespace of first token (comments BEFORE the function call) - Modified TIEClipsParser.ParsePattern to set Comment property from whitespace of first token (comments BEFORE the function call) - Modified PrettyPrint(IFunCall) to print out function call comment - Modified PrettyPrint(TIEPattern) to print out pattern comment - Fixed PrettyPrint(Rule, Construct) to indent multi-line function calls properly - Added TIEClipsParser.GenerateVariable and GenerateVarName methods - Added TIEClipsParser.ParseRulePatterns and ParseRuleActions methods - Added TIEClipsParser.PrettyPrint(TRule;TRuleConstruct) method and PrettyPrint(TRule;TRuleConstruct) function - Fixed bug in automatic pattern match generation for multislots, (phase (create$ 1 2 3)) would incorrectly create a VARIABLE instead of a MULTIVARIABLE test - Added TIEClipsParser.GetSyntaxStatement method - Modified PrettyPrint(IUserFunction) function to accept SyntaxString as well - Modified functions to create TIEValues by passing into constructor the value (faster creates) - Improved parsing speed of ParseFactSet and ParseRule by replacing try-except blocks with smart try-finally blocks - Modified PrettyPrint(IFactTemplate) function to print is-a string, and to not print default slot - Modified PrettyPrint(TFactSet), PrettyPrint(IFactTemplate), and PrettyPrint(TRule) functions to not print empty comments - Modified TIEClipsParser.ParseError method to truncate source text when it is greater than 255 characters. It creates a string containing the first 128 characters and then the last 128 characters - Added ParseSingletons & PrettyPrint(ISingletonsVector) methods to TIEClipsParser & unit - Added brackets [] as delimiters in TIEClipsStream - Modified ParseValue to correctly parse fuzzy singletons, "((1 2) (3 4))", instead of bad funcall - Added SlotFunctions property (tells parser which function calls need fact slots parsed (like assert and modify) SlotFunctionStart = 0 means that ParseFact - Modified ParseFunCall to look at SlotFunctions - Fixed Multislots in fact templates to use type information - Fixed TIEClipsStream.MoveToNextConstruct method to properly find the last construct when near end of file - Added PrettyPrint(Fact,SlotName) and PrettyPrint(Fact,SlotName,Value) methods to TIEClipsParser and unit - Fixed bug in PrettyPrint(IFactSlot) so that it correctly outputs default-dynamic attributes - Added PrettyPrint(DefinedType) and ParseDefinedType methods - Modified ParseRule to parse the new OneShot property - Modified PrettyPrint(TRule) to print the new OneShot property Also doesn't print rule properties (declare...) if properties are the default - Added ParseDefinedType, ParseFuzzySet, and ParseFuzzyVariable methods to TIEClipsParser - Added OnParseDefinedType, OnParseFuzzySet, and OnParseFuzzyVariable events to TIEClipsParser - Added PrettyPrint(IIEDefinedType), PrettyPrint(IFuzzySet) and PrettyPrint(IFuzzyVariable) methods to TIEClipsParser - Added PrettyPrint(IIEDefinedType), PrettyPrint(IFuzzySet) and PrettyPrint(IFuzzyVariable) functions - Fixed PrettyPrint(IFactSlot) to use new default-dynamic property, multislots were not getting printed properly - Added Whitespace property and accessor methods to TIEStreamToken - Added TIEParser.GenerateVariable method - Added TIEParserClass type - Added TIEParser.ParseRulePatterns and ParseRuleActions methods - Added TIEParser.PrettyPrint(TRule;TRuleConstruct) method - Added TIEParser.GetSyntaxStatement method - Added ParseSingletons & PrettyPrint(ISingletonsVector) methods to TIEParser - Added OnParseSingletons event to TIEParser - Added ParseDefinedType, ParseFuzzySet, and ParseFuzzyVariable methods to TIEParser - Added PrettyPrint(Fact,SlotName) and PrettyPrint(Fact,SlotName,Value) methods to TIEParser - Modified TIEStreamToken.Clone method to unambiguously call the new Assign Method - Added PrettyPrint(IIEDefinedType), PrettyPrint(IFuzzySet) and PrettyPrint(IFuzzyVariable) methods to TIEParser - Added OnParseDefinedType, OnParseFuzzySet, and OnParseFuzzyVariable events to TIEParser - Modified TParseFactEvent, TParseFactTemplateEvent, TParseFunCallEvent, TParseFunctionEvent and TParseVariableEvent to pass interfaces by const - Added ParseFactSlot method to TIEParser and TIEClipsParser - Fixed bug in TIEClipsParser ParseFact and ParseFactSlot methods where an integer value could not be assigned to a float slot when dynamic type checking was on - Fixed bug in TFact.SetValue where an integer value could not be assigned to a float slot when dynamic type checking was on - Improved and New Dialog Components - Added TConsoleDialog component - Added EnableXXXXEditor properties to TFactTemplatesDialog, TFactsDialog, and TFactSetDialog - Added TDefinedTypesDialog component - Created/Modified SetEngine method to add and remove free notifications for TFactsDialog, TFactSetDialog, TFactTemplatesDialog, TFunctionsDialog, TRulesDialog so that it can be notified when engines NOT on current form/module are freed - Correctly set UserFunctions property in TFactTemplatesDialog - Changed TRulesDialog to assign entire IE to the form's IE. This prevents an error where the TRulesEditDlg could parse a rule (because it had no facts to match patterns and fire a "test" predicate) but the copy back to the engine would fail. - Fixed bug in TFactsDialog where dialog would throw away duplicate facts even if user wanted them - Improved TInferenceEngine component and collections - Changed TInferenceEngine.Parse method to have Execute parameter (default = True) controlling if parsed funcalls should be executed. - Fixed TFactSets bug where adding or removing would set TFactSet.Engine property properly - Fixed TFactSets.Add method bug where factset of same name didn't replace old factset - Fixed Salience bug in TInferenceEngine.SearchSalience method - Added TInferenceEngine.TokenizerType property - TInferenceEngine.Parser property is now writable - Added TInferenceEngine.ParseRulePatterns and ParseRuleActions methods - Added TInferenceEngine.PrettyPrint(TRule;TRuleConstruct) method - Added Load/SaveDefinedTypes methods to TInferenceEngine class - Added MinActivationStrength property to TInferenceEngine class - Added FuzzyEqualsThreshold property to TInferenceEngine class - Modified Assert(Fact) to include a default parameter for unconditional fuzzy asserts - Added Assert( Fact, FuzzyInferenceMethod ) method - Added FuzzyUnion and FuzzyIntersection methods - Surfaced Parser Property in TInferenceEngine - Modified TIOStreams to descend from TGStringHashTable - Added TInferenceEngine.Assert(Fact, FuzzyInference) method - Added FuzzyInference and FuzzyCorrelation methods to TInferenceEngine - Added FuzzyInferenceMethod and FuzzyCorrelationMethod properties to TInferenceEngine - Added OnFuzzyInference and OnFuzzyCorrelation Events to TInferenceEngine - Added TFuzzyCorrelationEvent type - Added ParseFactSlot method to TInferenceEngine - Optimized TFacts.IndexOf and FindFact(ID) to take advantage of facts being sorted by ID - Modified TFacts.FindFact method to pass fact by const - Modified TInferenceEngine.Assert and retract methods to pass fact by const - Modified TRules to be able to assign to TTreeNodes - Modified TFactTemplates to be able to assign to TTreeNodes - Added TIEDefinedTypes class to hold hash table of defined types for TInferenceEngine - Added DefinedTypes property to TInferenceEngine - Added OnClearDefinedTypes, OnRemoveDefinedType, OnAddDefinedType events to TInferenceEngine - Fixed TFactTemplates.GetToString method to properly order fact templates to avoid child fact templates being printed before parent fact templates - Modified TUserFunctions.PutValue, Clear and Remove methods to set the number of interpreted functions in the hash table as well as set the Add order of the interpreted function - Added PrettyPrint(Fact,SlotName) and PrettyPrint(Fact,SlotName,Value) methods to TInferenceEngine - Fixed TUserFunctions.Assign to correctly copy interpreted functions - Fixed bug with TFactSets.Assign to clone the TFactSet instead of just adding it - Added PrettyPrint(IIEDefinedType), PrettyPrint(IFuzzySet) and PrettyPrint(IFuzzyVariable) methods to TInferenceEngine - Added OnParseDefinedType, OnParseFuzzySet, and OnParseFuzzyVariable events to TInferenceEngine - Added ParseDefinedType, ParseFuzzySet, and ParseFuzzyVariable methods to TInferenceEngine - Fixed bug in TInferenceEngine.PrintOut, where printing out to other streams than default would produce gibberish - Modified TIOStreams to be a TGStringHashtable instead of a TGStringList, deleted IOStream property from TInferenceEngine - Modified TFactTemplates.FillNodeSlot method to have default parameter specifying if the node passed in is a parent node (Default) in which case create the child node, or not, in which case replace the node. - Added PreserveIDs property to TFacts (Default=False). If this property is True, the TFacts object attempts to use the same Fact ID of the fact when it is added. This property is used by the TFactsEditDlg at the cost of speed. - Improved Packages and New Functions PredicatePackage - Added FuzzyP to TVerifyTypePFunction - Added TGetValueTypeFunction - Modified TIEUserFunction Descendant Classes to set the ArgumentString property StringPackage - Modified TIEUserFunction Descendant Classes to set the ArgumentString property - Fixed Uppercase and lowercase functions to return string as correct type (e.g., when input is an atom, should return an atom) TrigonometryPackage - Modified TIEUserFunction Descendant Classes to set the ArgumentString property MathPackage - Added Randomize Function - Modified Random Function to accept from and to parameters - Modified PI Functionname to be "PI", instead of "pi" - Modified TIEUserFunction Descendant Classes to set the ArgumentString property ObjectPackage - Modified TIEUserFunction Descendant Classes to set the ArgumentString property BusinessPackage - Modified TIEUserFunction Descendant Classes to set the ArgumentString property - Modified functions to create TIEValues by passing into constructor the value (faster creates) MiscPackage - Added TGuardFunction - Added TListDefTypesFunction - Added TDateTimeStringFunction, TSystemDateTimeFunction, DecodeDateTimeFunction, and EncodeDateTimeFunction - Modified TIEUserFunction Descendant Classes to set the ArgumentString property - Modified functions to create TIEValues by passing into constructor the value (faster creates) - Modified TPrettyPrintFunction to print deftypes as well - Added PrettyPrint property and logic to TPrettyPrintFunction - Modified TIEUserFunction Descendant Classes to set the ArgumentString property StandardPackage - Added TGetSlotValueFunction - Added TMemberFunction - Fixed Member function, which had always returned 0. Also corrected its help comment - Fixed Fetch Function for when the variable is not there (supposed to return FCNil instead of erroring) - Added Argument String property (and accessor methods) to TIEUserFunction and TCustomUserFunction - Modified TGtFunction, TGtOrEqFunction, TLtFunction, and TLtOrEqFunction Call methods to more efficiently compare more than 2 items - Fixed TFormatFunction to correctly accept floating point numbers - Fixed bug in TSetFactDuplicationFunction, where it did not resolve the argument before checking for equals to FALSE - Modified Comments for TGetFactDuplicationFunction and TSetFactDuplicationFunction, they incorrectly specified the exact OPPOSITE behavior - Improved function calls - Added Comment property and accessor methods to TFunctionCall - Added TFunctionCall.Assign(TPersistent) overloaded method - Modified SNotCorrectType exception to print the value that wasn't of the correct type - Added DeleteArgument and ClearArguments to TFunctionCall class - Added Argument String property (and accessor methods) to TIEUserFunction and TCustomUserFunction - Modified TInterpretedFunction to comply with interface changes - Added Equals method to TBindingInfo and TBinding - Modified TIEContext.Resolve method to properly resolve Fuzzy expressions - Created TBindingInfo class to hold binding information. This class replaces the variant array we used to put in IIEValue - Modified TBinding class to descend from TBindingInfo class - Added TIEContext.Resolve(IFact) method - Changed TBinding constructor to accept const Value instead of just value - Modified TIEContext.AddGlobalBinding, AddLocalBinding, AddBinding, ExpandList, and FlattenList methods to pass IIEValue by const - New Constants (IEConsts.pas) - Added DefaultPrintMargin for dialogs - Added TIEDialogOptions for dialogs - Modified SNotCorrectType exception to print the value that wasn't of the correct type - Changed some constants to vars (e.g., SDefaultSlotName). Users should be able to change what is used to what matches best for their needs. - Modified CommentFormat string to take out syntax statement - Added SyntaxFormat and CLIPSSyntaxFormat resource strings - Added Resource String constants and TIETypes constants (such as IEAlwaysValidTypes) - Added FloatFormatStr - Added TValueConstraint and TValueConstraints types - Added Constraint resource strings - Added SExpectedRuleProperty resource string message - Added TValidAction, TValidActions, TValidView, and TValidViews types - Improved Rete Pattern Matching class (TReteNetwork) and support classes - Fixed bug with TReteNetwork.UpdateNodes method where adding rules after facts would sometimes not activate the rules properly - Modified TPatternMatchTerminalNode.AddActivation method to supress activations of disabled rules - Modified TPatternMatchNode.CallNode method to catch exceptions and append node information on them so that the user may know the exception happened in a rule pattern match - Added NodeMatchClass, NodeTestClass, NodeJoinClass, and NodeTerminalClass properties to TReteNetwork class. The TReteNetwork class uses those properties to control what nodes it makes when it is compiling a rule - Added Salience to the TActivation.GetToString method (complies with CLIPS better). - Reordered TPatternMatchTest enumeration to group tests better, rewrote case statement in TPatternMatchNode.CallNode method for optimization - Added Strength property (strength of rule activation, applies to fuzzy rules) to TActivation class - Modified TActivation constructor to accept Strength parameter which defaults to 1.0 - Fixed TJoinNode.CallNode method to correctly call TIETokenTree.Add method - Modified the ToString returned from a TJoinNode - Fixed TReteNetwork.AddRule to remove the rule if there is an exception - Modified TPatternMatchTerminalNode.AddActivation to not add activation if rule's HasFired and OneShot properties are true - Fixed TJoinNode.CallNode method to correctly call TIETokenTree.Add method - Optimizations - Changed TReteNetwork CallChildren and Evaluate methods to pass Token by const - Changed Nodes' CallNode methods to pass Token by const - Changed TPatternMatchTerminalNode AddActivation and StandDown methods to pass Token by const - Changed TJoinNode AskForBackChain, RunTestsVaryLeft, and RunTestsVaryRight methods to use const - Changed TTestNode AddTest methods to pass Value by const - Got rid of "AS" casting where it wasn't necessary - Modified TJoinNode.RunTestsVaryLeft and RunTestsVaryRight methods to check if token tree is empty before executing - Modified TJoinNode.DoRunTestsVaryLeft and DoRunTestsVaryRight methods to use TIETokenTree's LowIndex and HighIndex properties - Added Strength property to TIEToken - Added ToString and ToFactsString properties to TIETokenTree - Optimizations to TIEToken/TIETokenTree - Added LowIndex and HighIndex properties to TIETokenTree, indicates the parts of the table that contains data - Changed TIETokenTree's Add and Remove methods to pass Token by const - Modified TIEToken Constructors, Assign, and Equals methods to pass interfaces by const - Improved and New Interfaces (Note that changes to interfaces may require changes for v1.0 users) - Optimization! Modified method signatures so that interfaces are passed using the const keyword CommonInterfaces - Added overloaded AssignTo(TPersistent) method to ICloneable interface - Added Assign( TPersistent ) method to ICloneable - Modified ICloneable to pass interfaces by const - Added TINotifyEvent signature IEInterfaces - Added Comment property and accessor methods to IFunCall - Added Whitespace property and accessor methods to IStreamToken - Added DeleteArgument and ClearArguments to IFunCall Interface - Added Argument String property (and accessor methods) to IUserFunction - Added HashCode property and read accessor method to IFactTemplate - Added Overloaded ContainsUserFunction method to IReasoner interface - Added ISingletonsParser and ISingletons interfaces - Added Strength property to IReteToken - Modified most interfaces to pass around parameters by const (IUserFunction, IInterpretedFunction, IReasoner, IValueVector, IFactSlot, IFactTemplate, IFact, IFunCall, IIEValue, IReteToken) - Added Fuzzy property to IFactTemplate - Added ContainsType method to IFactTemplate - Added OnChange Event to IIEValue interface - Added IIEDefinedType interface - Added Fuzzy and NumFuzzySlots property and accessor methods to IFactTemplate - Added DefaultDynamic property (and accessor methods) to IFactSlot - Improved Facts, Fact Templates and Patterns classes (IEFacts.pas) - Added Comment property to TIEPattern - Modified TFactTemplate Assign statements to NOT copy the tag property - Added protected TIEPattern.AddTest method, which is called by the public AddTest and SetTests - Added protected TIEPattern.CreatePatternMatchTest methods, which are called by the AddTest and SetTests methods - Added Two overloaded TIEPatternMatchTest.Equals methods - Added HashCode property and read accessor method to TFactTemplate - Modified functions to create TIEValues by passing into constructor the value (faster creates) - Added TFactCombineEvent type - Fixed TFactSet.Reset method to properly resolve the facts before asserting them - Added Fuzzy property to TFactTemplate - Added ContainsType method to TFactTemplate - Added DefaultDynamic property (and accessor methods) to TFactSlot - Modified TFactTemplate.Clone method to unambiguously call the new Assign Method - Fixed TFactTemplate's AssignSlots method which would get into trouble if the fact slot being cloned had a funcall from another engine Optimizations - Modified TIEPattern internal tests structure to sort by slot name - Modified TFact constructors to pass interfaces by const - Modified TFactTemplate constructors to pass interfaces by const - Modified TIEPattern constructors to pass interfaces by const - Modified TIEPatternMatchTest constructors to pass interfaces by const - Modified TFactSet.Add, IndexOf, and Remove methods to pass interfaces by const - Created TFactValues hash table (and associated TFactValueHashtableEntry and TFactValueHashtableEnumerator) to hold the values for a TFact AND the slot (gets rid of of slot check overhead) - Improved IEValue.pas - Fixed bug in TIEValue.GetAsInteger where it would not convert a string float to an integer - Added IsValueConstant function to determine if a IIEValue IS (not EQUALS) a value constant, e.g., FCTrue, FCFalse, etc. - Modified SNotCorrectType exception to print the value that wasn't of the correct type - Modified functions to create TIEValues by passing into constructor the value (faster creates) - Added overload constructors to TIEValue - Added OnChange Event to TIEValue - Added TSingletonsVector class - Fixed bug in TIEValue.Resolve method for pattern bindings - Removed AsIntArray, AsStringArray and AsVariantArray properties and accessor methods from IIEValue interface to make it compatible with C++Builder - Added AsOwnedObject array to IIEValue interface - Added TValueVector.Assign(TPersistent) method to fulfill the ICloneable interface changes... just raise exception since TValueVector is not a TPersistent descendant - Added Changed method to TIEValue - Added AsFuzzy property (and accessor methods) to TIEValue - Improved TRule class - Added Enabled property to TRule - Fixed TRule.AddPattern to correctly insert the index of the pattern into bindings (if the Pattern was insert instead of added to the pattern list trouble could happen) - Fixed TRule.AddBinding to not add a binding already in the bindings - Added overloaded TRulePatternList.IndexOf(IFactTemplate) method - Modified TRule Prepare, Fire and SetSalience methods to pass interfaces by const - Modified TRuleActionList Add, Remove, IndexOf and Insert methods to pass interfaces by const - Added HasFired and OneShot Properties to TRule. OneShot property controls whether the Rule will stop activating after the first rule fire
-------------------------------------------------------------------
February, 2001 Version 1.11
- Modified TIEInnerFunction to be more generic. Now, you can use TIEInnerFunction to connect to ANY TObject. Also, one component can now act as multiple IUserFunctions using one TIEInnerFunction object per IUserFunction connection - Changed Constructor to accept TComponent instead of TCustomUserFunction - Changed Owner property to TComponent from TCustomUserFunction\ - Added OnCall event for non-TCustomUserFunction components - Changed Call method to call TCustomUserFunction.Call method directly if Owner is TCustomUserFunction. Otherwise, the new OnCall event is triggered - Fixed TIEInnerFunction Notification method to check properly for removal of owner (Someone could have overridden TIEInnerFunction and connected to the TIEFunctionNexus causing this method to erroneously nil the Owner) - Fixed bug in RuleEditorForm.pas where could not add or replace facts because of embedded spaces in meSalience. This bug was introduced in in v1.1 when salience became a TMaskEdit instead of TSpinEdit
-------------------------------------------------------------------
December 9th, 2000 Version 1.1
- Improved CLIPS support with the addition of 36 functions (see below) - Modified code to improve future C++Builder support - All TIEUserFunction descendants override AfterConstruction instead of the constructor now (except for multi-function objects like TPrettyPrintFunction) because FunctionName and SetMin/MaxArgumentCount are virtual - Made TFactTemplate Assign( IUnknown ) and AssignSlots non-virtual. There was no reason to have them virtual and could cause problems with C++Builder users - Moved call of TUserPackage.CreateFunctions from its constructor to AfterConstruction method - Moved TInferenceEngine.AddDefaultPackages and Assert calls from constructor to AfterConstruction - Moved Event clearing and Clear call code in TInferenceEngine.Destroy to BeforeDestruction - Moved Reset call in TIEValue.Destroy to BeforeDestruction - Moved StandDown call in TPatternMatchTerminalNode.Destroy to BeforeDestruction - Changed seSalience (TSpinEdit) to meSalience (TMaskEdit) in RuleEditorForm since C++Builder does not have a TSpinEdit - New! Created a TTrigonometryPackage containing 37 new user functions. The new functions are: acos, acosh, acot, acoth, acsc, acsch, asec, asech, asin, asinh, atan, atan2, atanh, cos, cosh, cot, coth, csc, csch, cycle-rad, deg-grad, deg-rad, distance, distance-sqr, distance-manhattan, grad-deg, grad-rad, hypotenuse, rad-cycle, rad-deg, rad-grad, sec, sech, sin, sinh, tan, and tanh - New! Created a TBusinessPackage containing 12 new user functions. The new functions are: double-declining-balance, future-value, interest-payment, interest-rate, internal-rate-of-return, net-present-value, number-of-periods, payment, period-payment, present-value, sln-depreciation, and syd-depreciation - New! Added 6 new user functions (Batch, Dribble-On, Dribble-Off, Duplicate, Rename and Remove) to TStandardPackage - Added Batch (2), StartCapture(2), and StopCapture methods to TInferenceEngine - Added InputStream and OutputStream read-only properties to TInferenceEngine - Modified TIEClipsParser to accomodate "duplicate" command syntax (similar to "modify" command syntax) - Added printout statements to TIEClipsParser.ParseExpression for dribble/captures, deleted them from OnParse events in Console apps - Updated Help File for all the changes
-------------------------------------------------------------------
October 5, 2000 Version 1.01
- Set OnEndInference and OnStartInference events to nil in TInferenceEngine destructor (Could lead to bugs) - Fixed bug where TInferenceEngine would free rules that it didn't own (such as a design-time TRule) when the rule was removed - Fixed bug in Advanced Console and Basic Console demos where inference engine events could try to access non-existent controls if the controls were freed before the engine
-------------------------------------------------------------------
August 31, 2000 Version 1
- Renamed Delphi 5 packages to include a D5 on end (like the Delphi 4 packages) - Unified Graph classes - TGCustomGraph unified - New classes: TGGraph (Tlist based Graph) and TGLabelGraph (TGStringHashTable based Graph) - Changed TGGraphNode ancestor from a TComponent to a TPersistent (faster and smaller memory footprint) - Modified TReteNetwork to descend from new TGGraph instead of TGCustomGraph - Fixed "Losing rules" Rule editor bug - Fixed Freeform rule editor bug where changes would not be saved unless the view was changed back to the listbox - Added OnStartInference and OnEndInference events to TInferenceEngine - Finished Help File
-------------------------------------------------------------------
June 21, 2000 Version 1 - Beta 02
- Fixed many memory leaks (parsing error leak, activation leak, pattern slot test leak, and fact template/fact template slot leak) - Deleted IFactSlotOwner interface as it was no longer used (using the interface caused a circular interface reference where the slots would reference the template and the template the slots, and neither would be freed. sigh. :) ) Added GetTemplateName to IFactSlot which was what the IFactSlotOwner was used for mostly anyway. - Added show-message, input-box, input-query, and message-dlg functions to miscellaneous package - Added AddLocalBinding to TIEContext - fixes bug where rules and interpreted functions could stomp on other bindings - Added TBindings class to track TBinding objects, added it to TIEContext. - Defined Comment property for all user functions in the inference engine - Added a MoveToNextConstruct method to TIETokenizerStream and TIEClipsStream - Added ability of parsers to stop on first error on continue until finished. Required adding properties ErrorHandling and MaxErrors to TIEParser & TIEClipsParser and properties ParserErrorHandling and ParserMaxErrors to TInferenceEngine - Added DuplicateConstructs property to TInferenceEngine. It controls what happens when attempting to add duplicately named constructs. Allows easy importing of duplicate expert systems where only the data has changed or a few rules added. - Changed behavior of TInferenceEngine.Clear method to NOT clear out the user functions. Makes more sense and clear method is much faster since it doesn't free and reallocate all the functions. Clear method still deletes IInterpretedFunctions though. - Changed behavior of TInferenceEngine.LoadFromStream to not call clear before parsing - Added class TUserFunctions, a hash table of user functions for the TInferenceEngine component - Changed TInferenceEngine.UserFunctions from a TIStringHashTable to TUserFunctions - Added SlotCount read-only property (with method) to IFactTemplate and TFactTemplate - Added write accessor methods for Max/MinArgumentCount and FunctionName to IUserFunction - Added IStreamable and IDTStreamable interfaces to CommonInterfaces unit - Updated Inference Engine Help File - Updated Common Help File - Decided ES will NOT output TInferenceEngine properties by default... so it's no longer a bug :) - MAJOR revisions to user functions in inference engine architecture: - Changed TUserFunctionList from a TComponentList descendant to TIList. Means that TUserPackage only holds interfaces for functions and will only stream functions that also implement new IDTStreamable interface - Changed TCustomUserFunction. It no longer implements IUserFunction and descends from TComponent instead of TCustomReasonerOwner. However, it still provides design-time implementation of user functions. - Added new class TIEUserFunction which implements IUserFunction and IDTStreamable. Makes user functions lighter weight since they descend from TPersistent instead of TComponent/TCustomReasonerOwner - Added new class TIEInnerFunction (descends from TIEUserFunction) which implements the IUserFunction interface for TCustomUserFunction. This fixes a MAJOR bug where TCustomUserFunction could be freed but interface references would still be around. - Changed TInterpretedFunction to descend from TIEUserFunction instead of TCustomUserFunction - Changed name of TReasonerList to TBaseReasonerList and changed Owner of the list to type TIEUserFunction. Added new TReasonerList which descends from TBaseReasonerList to change the Owner to a TUserPackage. - Fixed TInferenceEngine.Assign method bug - Fixed bug where functions could be freed but the architecture would still contain references to them (access violation) - Fixed bug with multiple NOT rule patterns (not (not ...)) - Fixed bug with EXISTS keyword in rule patterns - Fixed bug where design-time rules and fact templates would not trigger initial events for TInferenceEngine (Just reordered properties for proper loading) - Fixed misreported line number with parsing errors - Fixed bug with UNIQUE keyword in rule patterns - Fixed bug so that fact templates have one default slot if none is specified when the fact template is added to TInferenceEngine
Known Bugs - Still Need to update help files
-------------------------------------------------------------------
May 18, 2000 Version 1 - Beta 01
- Added Expected to EIEParseException, moved to IEParser - Added ExplicitCreateTemplate and TypeCheck to TIEParser - Added TypeChecks to IE, get/set-dynamic/static-constraint-checking functions to Misc Package - Added Max/MinArgumentCount, GetToString to IUserFunction and TCustomUserFunction - Added IInterpretedFunction - Modified TInterpretedFunction - ActionValue and ActionValueCount are now Statement and StatementCount - AddAction and AddValue are now AddStatement - Argument now returns IIEValue - Binding and BindingCount are gone - Added PrettyPrint methods for IUserFunction and IInterpretedFunction to - TInferenceEngine - TIEParser and TIEClipsParser and IEClipsParser Unit - Added ppdeffunction to MiscPackage - Modified SaveFacts to save only some fact templates - Added SaveFacts and SaveStream for fact templates to TInferenceEngine - Fixed Salience in TInferenceEngine - Fixed Rule Editor bug where Hitting Replace and rule is invalid loses old rule - Fixed bug for Dragging and dropping entire template onto edit box, too many parentheses - Added slot TYPE in building fact templates! - Fixed bug where outputing ES does not include deffunctions
Known Bugs - Still Need to update help files - NOT NOT patterns and Exists Are buggy - Unique Pattern bug, doesn't work - Outputing ES does not output properties like (get-reset-globals)
-------------------------------------------------------------------
May 1, 2000 Version 1 - Beta 00
Original Beta Version Known Bugs - Help Files Incomplete
|