I was sitting at my desk today, and it hit me, why must our fuzzy sets be 2D?
Whilst it is less complex to rely on a 2D fuzzy set, the limitations of such sets are fairly big. For example, we could plot two fuzzy sets simultaneously to create a joint graph, but then the implication is that the two sets will be consistent across our 3D space. We could instead, have a series of fuzzy sets defined at intervals across our 3D domains… but that would require alot of extra work in order to create something of relative simplicity.
Let’s think of a simple case for the time being.
My domain is x, z, and [0,1] on the y axis.
I do not necessarily have a consistent x set, or a consistent z set so it would be counterproductive to map them against each other from 2D sets.
So instead, we’ve created a 3D space on which to work with. Let’s make the domain of x = [0, 1000], and the domain of z = [0, 2000]. Now, to add a point to this space we need to define a few things, as with a 2D fuzzy set, we must firstly set the default state, in which case, let’s declare the corners {0, 0}, {0, 2000}, {1000, 0}, {1000, 2000} to have the truth value of 0.
Now, let’s add a few points, the syntax I shall use is {(truth value – eg. y), x, z}, {(1), 0, 500}, {(1), 500, 650}, {(1), 300, 50}. As it stands, these points appear as anomalies. The reason being, we have yet to define exactly how these impact our space other than simply being a floating point. To refine our example a bit more, we define our margin of error. This is the level to which we want any intial point to have scope in the area. It defines the slope of our curve, which I think would be "somewhat" in thinking about 2D Fuzzy Hedges. Let’s set out margin of error at 5 (we could define them differently for different axis, but for the time being I think that would be unnecessary, and you could also include refinement in terms of sample rates to increase or decrease speed of calculations). With our margin of error, we draw a circle around our point with a radius of 5. Sampling at every 15 degrees for simplicity. From each sample point on that circle, we draw a line from the "0" default truth value, and up to the truth value of our point (in this case 1). Then for each of those lines we apply the hedge "somewhat" and we get a hill like shape on our set.
Some things to note at this stage, we have 3, seperate, independent fuzzy areas defined. You could use a different hedge for the slope depending on the various application you are using. In fact, you don’t need to use a hedge at all, but graphically the straight lines would look boring
Something to think about at this stage is what the "area of affinity" or "area of gravity" will be on our set. If the affinity of an object is high, then it will have a larger impact on surrounding sets, the larger the "area of affinity" is then the more sets will be included in its impact of such an affinity. This becomes important when we are teaching a system. If we were doing data analysis, and we were thinking about how probable a certain situation is, the more cases that have proven to be true in a specific area, then the probability that the result is accurate would go up.
Also, as we are constructing our set, it is important to note that a point, and its subsequent area are of two different materials. It might be helpful when constructing a system to actually have an originating set with just the points. This is because you may want to introduce counteractive points and other variances. You don’t want to lose data, and having counteractive points may mean that any level of affinity could be broken, and so a single point would no longer benefit from it.
In my thinking, I’m also beginning to handle points more as objects. This becomes particularly useful when you want to have different impacts, or logs for each point. Let’s say we add a counteractive point, we could remodel our entire domain in order to seperate affinities, but that may not be necessary, instead we could look at the area of our counteractive point and grab any point in its impact area. Looking at the point we can see the log of which affinities it has benefited from, and then we simply need to look at whether our counteractive point is situated in a way to detriment or nullify that affinity. By handling the points as objects, you would no longer need a secondary domain with just the points on it, because each object would include its original value, thus maintaining our data integrity.
Also, by handling points as object, we can have different descriptions and consequences for each point, rather than being limited to the generic description included as the definition of our fuzzy set.
What do I mean by "counteractive points"?
Well, there are several different types of impact, in my mind, that a point and subsequent area can have on other points.
There is a counteractive point: A counteractive point is one that counteracts an affinity of another object, or reduces the impact of another object (eg. may decrease its truth value)
There is a independent point: This point has no impact on surrounding points or their areas. It is taken at face value and not influenced by others.
There is a mutually beneficial point: This point benefits from other surrounding points and their affinities as well as granting benefit to them as well.
There is a leech point: This point takes any influences to benefit itself, but does not impact the surrounding points.
There is a assistant point: This point can not be improved but still improves others around it.
Having all of the points handled independently, it might even be useful to change how the results of a fuzzy rule are calculated. We can still use traditional accumulators, but we could also use descriptions within each object to present the result that is anticipated. This would be useful in broad domains, but highly inefficient where only a few outputs are expected… or it would be very useful where the domain is not particularly consisted, but there is still only a few outputs to be determined. In fact, we have unwittingly added a fourth dimension, that being what we use to discriminate between different points…
’tis a curious train of thoughts…