Subject: RE: [xsl] xslt and fuzzy logic From: Jeff Beadle <Jbeadle@xxxxxxxx> Date: Thu, 24 Jan 2002 08:12:30 -0500 |
Hey Brian, I've written Fuzzy Logic Controllers / Fuzzy Logic Inference Systems during college and I'm curious: are you wanting to distribute your computation? For example, distribute pieces of the computation out to multiple nodes which are controlled by a master node. In this scenario, I guess I'd consider looking into to the possibility of using xslt as your computation engine, perhaps using web browsers as execution environment on the child nodes. Otherwise, I don't know if I'd use xslt to do intensive computation ... unless your dealing with small model or if your expectations on performance are low. My experience with Fuzzy Logic is that it tended to be bit cpu intensive, at least the models I was dealing with. Now, I'm sure there are numerous people on this list that can give you excellent references and insight on performance issues, but keep in mind (which I'm sure you are aware of, but just to point out) that transformation execution is not same as computation execution, which in this case you'll have to be considering both. So, to throw more work to transformation side of the fence, I'd highly suggest staying away from use of call-template otherwise your forced to have too much conditional logic and have the overhead of constructing your calls and dealing with the results. Now, having said all that, I have implemented in xslt something within the same genre as Fuzzy Logic ... a (simple) rules engine. So, if--at a high level--you'd like to see what I did, then please read on. Regards, Jeff I've written a xml based rules engine (I've labeled XRules) that consumes an xml based language that I wrote. The engine itself is written in xslt using nothing but pattern matching--no call-template(s). The approach I took could be used to accomplish what you desire here as well. My approach may not be the best, but it was relatively straight forward and the development group picked it up pretty quickly. And we've built other xml based languages that use (sub-class if you will) the engine. Here's how XRules is directly implemented, if not being used as internal engine by another engine: 1. Construct/design an XRule definition file (just an xml document using the XRule namespace). 2. Create an instance of the given document. 3. Load the source data (this data is what the XRule definition is bound to) into the appropriate member (element) of the XRule definition instance. 4. "Transform" the XRule definition instance using the XRules (engine) xslt document. 5. Interpret the result document. Basically, what I do is "serialize" the xml representation into a multi-valued conditional statement with the source data resolved as the values for the operands. Then I use the JScript/JavaScripts eval method to evaluate the conditional statement via a custom script extension within the xrule xslt document. Here's an example: the xrule definition (in brief): Note: this fragment was pulled from a DisplayRules definition file, this is one of the other languages that uses XRules for its rule evaluation engine. <xr:rule id="xrule-01" > <xr:context select="//z:row" schema="adoxml"/> <xr:param name="DaysBeforeDeliver" dt:type="number"/> <xr:variable name="DaysBeforeDeliverRef" select="@DeliverOn" dt:type="date"/> <!-- Parent display rule 1: If an order is less than x% allocated y days before the start ship date, then display the allocated quantity and percent in Color --> <xr:test> <xr:condition> <xr:operand> <xr:date-diff> <!-- If date1 refers to a later point in time than date2, the DateDiff function returns a negative number --> <xr:date1> <xr:date-add> <xr:interval>d</xr:interval> <xr:number> - <xr:value-of select="xr:param(DaysBeforeDeliver)"/> </xr:number> <xr:date> <xr:value-of select="xr:variable(DaysBeforeDeliverRef)"/> </xr:date> </xr:date-add> </xr:date1> <xr:date2> <xr:today/> </xr:date2> </xr:date-diff> </xr:operand> <xr:greater-than-or-equal-to/> <xr:operand>0</xr:operand> </xr:condition> </xr:test> <xr:actions/> </xr:rule> Then, as part of the process I mentioned above, the source data gets loaded into the document and then the transform is executed. Assuming that the DisplayRule definition passes in the value of 7 for the DaysBeforeDeliver xr:param and the value of @DeliverOn source data attribute ends up being "2002-30-01" and the current date is "2002-24-01", here's what the XRules engine does the given xrule definition: 1. It "serializes" the xr:condition element into this: ((1)>=(0)) 2. This statement is then evaluated via the JavaScript's eval method, which obviously returns true. The call from the client code, in this case the DisplayRules engine is via a xr:eval element, which would be return (in this case) a scalar value of 1. Anyhow, I don't if any of this helped and I've -----Original Message----- From: Bryan Rasmussen [mailto:bry@xxxxxxxxxx] Sent: Thursday, January 24, 2002 5:54 AM To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: [xsl] xslt and fuzzy logic Since I've noticed a lot of academics and people with more background than I in subjects such as this I thought I'd ask: Has anyone here ever implemented or seen implemented a fuzzy logic control in xslt? Does anyone have any ideas on building one in xslt 2.0? (the following example is halfway hypothetical) Let's consider that one has three parameters; Display, speed, Function. Each one is rated on a scale from 1-100 and is passed in from the calling application. Display details how important a clear display of a generated page is, with the understanding that this means uncluttered content, all pictures are high-res jpgs and stylistic elements are maintained(at a value of a 100) Speed is how important load time is, if for example load time is given 100 and other parameters are 1 we would assume that we basically want paragraphs, breaks, & links maintained in our html. Function presumes that we have a bunch of behaviors, scripts etc. that can be output to the page space, thereby decreasing display for the main content, and also decreasing speed. If you choose 100 for this and 1 for the other values then you want all 20 rss newsfeeds, the multiple soap services, the calendar, the jabber applet, and so forth :) I'm sure a lot of us here have made sites/applications where you can switch between the maximum of two or three wanted parameters by choosing a dependant branch i.e crisp logic. What I'm interested in is to evaluate these in a fuzzy way, determining what to do if display= 48, speed=37, and function=52. It seems to me that xslt 2.0 and xpath 2.0 would make handling these problems easier, to the point where it could be a user-define function. anyhow, any ideas or examples before I make a fundamental mis-step? XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] problem encounter whilst inte, 林 子芯 | Thread | RE: [xsl] xslt and fuzzy logic, Bryan Rasmussen |
Re: Re[2]: [xsl] appendig to multip, Trevor Nash | Date | Re: [xsl] appendig to multiple outp, Trevor Nash |
Month |