Một chương trình Fuzzy đơn giản


(0 comments)

Một chương trình Fuzzy đơn giản có thể như sau:

// a simple Fuzzy program 

term TEMPERATURE(5)
{
        fuzzy discrete low(1/100, 0.5/125, 0/150, 0/175, 0/200);
        fuzzy discrete medium(0/100, 0.5/125, 1/150, 0.5/175, 0/200);
        fuzzy discrete high(0/100, 0/125, 0/150, 0.5/175, 1/200);
};

term SPEED(5)
{
        fuzzy discrete low(1/20, 0.6/40, 0/60, 0/80, 0/100);
        fuzzy discrete medium(0/20, 0.6/40, 1/60, 0.6/80, 0/100);
        fuzzy discrete high(0/20, 0/40, 0/60, 0.6/80, 1/100);
};

struct MYFUZZY
{
        TEMPERATURE temperature;
        SPEED speed;

        bool Read(int iOrder, Number grade)
        {
                if (grade < 0 || grade > 1)
                        return false;

                switch (iOrder)
                {
                case 1:
                        put temperature := (grade/100, 0/125, 0/150, 0/175, 0/200);
                        break;
                case 2:
                        put temperature := (0/100, grade/125, 0/150, 0/175, 0/200);
                        break;
                case 3:
                        put temperature := (0/100, 0/125, grade/150, 0/175, 0/200);
                        break;
                case 4:
                        put temperature := (0/100, 0/125, 0/150, grade/175, 0/200);
                        break;
                case 5:
                        put temperature := (0/100, 0/125, 0/150, 0/175, grade/200);
                        break;
                default:
                        return false;
                }

                return true;
        }

        void SetRules()
        {
                ZeroFuzz(speed);
                rule temperature.low => speed.low;
                rule temperature.medium => speed.medium;
                rule temperature.high => speed.high;
                rule VERY VERY temperature.high => speed.medium;
        }

        void Process(int iOrder, Number grade)
        {
                if (Read(iOrder, grade))
                {
                        SetRules();
                        Display();
                }
                else
                        print "Invalid input!\n";
        } 

        void Display()
        {
                print speed;
                prints speed;
        } 
};

MYFUZZY MyFuzzy;

MyFuzzy.Process(1, 1.5);
MyFuzzy.Process(6, 0.5);

MyFuzzy.Process(1, 0.5);
MyFuzzy.Process(3, 0.5);
MyFuzzy.Process(5, 0.5);

Kết quả chạy chương trình:


Invalid input!

Invalid input!

35.5556
0.5/20, 0.5/40, 0/60, 0/80, 0/100
60
0/20, 0.5/40, 0.5/60, 0.5/80, 0/100
79.5238
0/20, 0.0625/40, 0.0625/60, 0.5/80, 0.5/100

Chương trình gọi hàm Process của đối tượng MyFuzzy năm lần. Hai lần đầu cho kết quả không hợp lệ: lần thứ nhất đọc dữ liệu grade vào là 1.5, là không hợp lệ vì giá trị grade phải trong khoảng [0,1]; lần thứ hai đưa vào phần tử thứ sáu, nhưng các tập mờ Nhiệt độ chỉ có năm phần tử. Các lần cuối hàm kết xuất giá trị giải mờ của Tốc độ và dạng tập mờ của nó.

Hàm SetRules áp dụng bốn qui tắc. Qui tắc cuối cùng hơi khác thường, giả định rằng nếu nhiệt độ quá nóng thì máy móc có vấn đề, kết quả là qui tắc này có ảnh hưởng làm cho giá trị kết xuất giải mờ giảm xuống thấy rõ. Dạng tập mờ cũng thay đổi theo hướng đó.

Lập luận mờ là một giải pháp hiệu quả để giải quyết vấn đề của ngôn ngữ tự nhiên. Trên đây chỉ là một ví dụ đơn giản để giới thiệu cách sử dụng ngôn ngữ FUZZY. Bạn có thể viết các chương trình đầy đủ hơn để áp dụng vào thực tế.

*Bạn sử dụng phiên bản mới Fuzzy 1.1

Currently unrated

Comments

There are currently no comments

New Comment

required

required (not published)

optional

required


What is 3 × 2?

required