|
Subscribe to the Announcements mailing list and be the first
to hear of new products and beta versions:
|
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 the FLCL Version History and RCCL Version History for additional details. -------------------------------------------------------------------
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 ($100 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
|
Send mail to
webmasterNO@SPAMRiverSoftAVG.com with questions or comments about this web
site.
|