Re: Fuzzy Union in C++
- From: Seweryn Habdank-Wojewódzki <habdank@xxxxxxxxx>
- Date: Fri, 19 Jan 2007 01:05:27 +0100
Hi again
Dmitry A. Kazakov wrote:
Well, that would be a generic (template) based design. I considered a
similar design and finally rejected it. It looks very attractive at first
glance, but unfortunately no-runner. The problem is that many things based
on fuzzy sets, like fuzzy decision trees or fuzzy inference, would be
practically impossible to do if generics were used. In OO-ish terminology
element_type must be dynamically, but statically polymorphic.
You right, but in some parts, you can use statical polimorphism e.g. when
you describe your original data. Next step you can describe a kind of
fuzziness, e.g. discrete vs. continuous (this can be a policy, for fuzzy
sets). In continuous policy you can store a pointer to any base class that
you are using other dynamicaly set types.
I do not know your design, but there is small rule, that can speed up your
code, more templates than dynamic polymorphism -> faster code. So dynamical
polymorphism have to be set at the end of polymorphism tree. The best is to
use templates as much as possible.
Ah, yes, I know Maciej. He did a good work to mimic ranged numeric Ada
types in C++.
Great.
In my implementation it is an ordered set of "points." A point is a bit
more complex than just a pair, because I support different left and right
limits plus different min and max values.
So? What is your type of fuzziness for certain point - if you of course
could tell us? In my opinion there are some opportunities:
1. full discrete - point and membership value;
2. partially discrete - interval and linear function;
3. full continuous - function that fix membership for values - similar to
any functional language;
All together it is up to four
values of the membership function in one point.
I undestand. But what you are doing if you have std::string or std::complex
types, as data types?
So, in fact, it is an IFS
rather than pure fuzzy set. Though it is a fuzzy set almost everywhere.
I understand, it is really interesting.
Because of the problematic described above these sets are not used
directly. Instead they are treated as linguistic variables. Fuzzy subsets
of the sets of such linguistic variables [plain fuzzy sets overs a
discrete domain] are used. I.e. it boils down to two different
implementations of fuzzy sets. This works well, but again has problems.
For example, if you wanted to do fuzzy clustering over the original
continuous domain. Alas, it seems that there is no single solution for all
cases.
Philosophically - I suppose you know Delta Dirac function. This function can
tell you all about the live. If something is for all cases it is useless,
if it is dedicated is the best. In the middle is life. I can imagine that
there is a possibility to design a system for Fuzzy Sets, that can handle
some not only basic functionality. But I suppose, that there will be not
one solution for it - I mean there will be a need to have a bunch of
classes, maybe derived from one basic class, but only to give opportunity
to change system on the fly. However not all changes are reasonably, so
there is no reason to do all implementation of Fuzzy Sets based on one
class and design huge tree. Probably better is to design more smaller trees
of classes and functional adapters for them.
Best regards.
--
|\/\/| Seweryn Habdank-Wojewódzki
`\/\/'
.
- Follow-Ups:
- Re: Fuzzy Union in C++
- From: Dmitry A. Kazakov
- Re: Fuzzy Union in C++
- References:
- Fuzzy Union in C++
- From: Evyn
- Re: Fuzzy Union in C++
- From: Dmitry A. Kazakov
- Re: Fuzzy Union in C++
- From: Evyn
- Re: Fuzzy Union in C++
- From: Dmitry A. Kazakov
- Re: Fuzzy Union in C++
- From: Seweryn Habdank-Wojewódzki
- Re: Fuzzy Union in C++
- From: Dmitry A. Kazakov
- Fuzzy Union in C++
- Prev by Date: Re: Fuzzy Union in C++
- Next by Date: Re: Fuzzy Union in C++
- Previous by thread: Re: Fuzzy Union in C++
- Next by thread: Re: Fuzzy Union in C++
- Index(es):