Fuzzy 1.0 là một chương trình dịch và triển khai ngôn ngữ lập trình FUZZY, được thiết kế để xử lý các biến ngôn ngữ và tập mờ với các khái niệm mơ hồ như cao, thấp, trung bình, rất cao, không thấp lắm.
Chương trình Hello World
Các chương trình Fuzzy không có chương trình chính. Mã nguồn của một chương trình đơn giản nhất có thể chỉ như thế này
print “Hello World”;
Các kiểu dữ liệu cơ bản
Các kiểu dữ liệu cơ bản là int, Number, String, bool và fuzzy. Các kiểu này hầu như đều có thể gán sang nhau, ví dụ
int i = 100;
i += 50;
String text = i;
speed.high = i + 50; // speed.high is a fuzzy set
Các lệnh điều khiển
Các lệnh điều khiển while, for, if, else, break, continue, return tương tự như trong C/C++. Tuy nhiên, lệnh switch có thể sử dụng cho cả kiểu xâu kí tự (String)
switch(text) // text is a String variable
{
case "abc":
// do something
break;
case "def":
// do something
break;
}
Chồng hàm và toán tử
Tương tự như C++, các hàm và toán tử trong Fuzzy có thể được viết chồng. Ngoài ra, toán tử gán của Fuzzy có thể chỉ cần khai báo có kiểu trả về là void, kể cả khi phép gán có vai trò như một biểu thức. Các biến thành phần của cấu trúc có thể được khởi tạo khi khai báo
struct OBJECT
{
int m_i = 50;
String m_string = "abc";
Number m_array[10]; //an array of Number
void operator = (OBJECT t)
{
m_i = t.m_i;
m_string = t.m_string;
for(int i = 0; i < 10; i++)
m_array[i] = t.m_array[i];
}
OBJECT operator - ()
{
OBJECT obj;
obj.m_i = -m_i;
return obj;
}
};
Tập mờ và term mờ
Các tập mờ rời rạc cần được khai báo bên trong term mờ rời rạc. Ví dụ dưới đây chỉ ra một term mờ có ba tập mờ, mỗi tập có năm phần tử, mỗi phần tử là một cặp grade/value
term TEMPERATURE(5)
{
fuzzy discrete low(1/100, 0.5/125, 0.25/150, 0.1/175, 0/200);
fuzzy discrete medium(0.25/100, 0.5/125, 1/150, 0.5/175, 0.25/200);
fuzzy discrete high(0/100, 0/125, 0.25/150, 0.75/175, 1/200);
};
Đặt dữ liệu vào term mờ
Từ khóa put được sử dụng để đặt các giá trị và giá trị thành viên cho term mờ
TEMPERATURE temperature;
put temperature := (0/100, 0/125, 0.5/150, 0.25/175, 0/200);
Áp dụng các luật mờ
Các toán tử AND, OR, NOT, VERY, LITTLE, REALLY có thể được sử dụng đệ quy
rule temperature.medium AND pressure.medium OR weather.bad OR traffic.bad => speed.low;
rule VERY temperature.high AND pressure.low OR NOT VERY temperature.high AND
pressure.medium AND NOT VERY traffic.bad => speed.high;
rule temperature.low AND pressure.high AND REALLY weather.normal OR
traffic.normal => speed.medium;
rule (temperature.medium OR pressure.low) AND weather.good OR pressure.low AND
traffic.good => speed.high;
rule REALLY temperature.medium AND LITTLE pressure.high AND VERY VERY
weather.good => speed.high;
In ra các tập mờ và term mờ
Lệnh dưới đây in ra giá trị đã giải mờ của một term mờ
print speed;
Nếu muốn in dữ liệu mờ, bạn sử dụng lệnh prints
prints speed;
Làm rõ, giải mờ
Phương pháp giải mờ sử dụng trong fuzzy 1.0 là phương pháp trọng tâm (centroid)
Defuzz(pressure);
Đặt lại các tập mờ và term mờ
Để đặt lại dữ liệu của tập mờ về 0 cho mỗi lần áp dụng các quy tắc mới hay dữ liệu đọc vào thay đổi, bạn sử dụng hàm ZeroFuzz như sau
ZeroFuzz(temperature);
Chuyển dữ liệu của tập mờ ra mảng
Khi cần xử lý kết quả, bạn có thể chuyển dữ liệu của tập mờ ra một mảng. Trong fuzzy có một cấu trúc xây dựng sẵn là FuzzyPair. Cấu trúc này có hai thành phần kiểu Number là m_grade và m_value. Để chuyển dữ liệu, bạn khai báo một mảng các cấu trúc FuzzyPair có cỡ mảng đủ để chứa dữ liệu, rồi sử dụng hàm FuzzyToArray như sau
FuzzyPair array[8];
FuzzyToArray(speed, array);
Mã dưới đây để xem kết quả
for(int i = 0; i < 8; i++)
print array[i].m_grade, " ", array[i].m_value;
Tập mờ liên tục
Có trường hợp các tập mờ được cho một miền xác định và một giá trị trung tâm. Khi đó bạn sử dụng khai báo term mờ kiểu miền xác định, như sau
term TEMPERATURE(100, 200)
{
fuzzy low = 100;
fuzzy medium = 150;
fuzzy high = 200;
};
In ra file
Các lệnh in print và prints có thể được chuyển hướng dữ liệu ra file. Token > ghi dữ liệu vào file, còn token >> thêm dữ liệu vào file
print speed > "filename.txt";
prints speed >> "filename.txt";
Thực hiện lệnh shell
Fuzzy có từ khóa system để chạy lệnh shell, chẳng hạn gọi một chương trình trong hệ thống
String command_text = "sudo makeca -f";
system command_text;
Các hàm toán học
Các hàm toán học có sẵn là sin, cos, tan, atan, ln, log10, exp, pow, sqrt, floor, round, abs, min, và max
File bao hàm
Các tệp mã nguồn bên ngoài có thể được bao hàm vào trong tệp chính, sử dụng tương tự như C/C++
#include "filename.h"
Comment
Quy định comment trong fuzzy giống như trong C/C++, sử dụng // hoặc cặp /* và */
Sử dụng
Bạn tải về tệp fuzzy-1.0.tar.xz rồi giải nén như sau
tar xf fuzzy-1.0.tar.xz
Kết quả được tệp chương trình fuzzy và tệp hướng dẫn fuzzy.1.gz
Giả sử bạn viết một chương trình với file mã nguồn là program.fuz. Để dịch và chạy chương trình, bạn thực hiện lệnh sau
./fuzzy program.fuz
Share on Twitter
Share on Facebook
Share on Linked In
Contact: tuyen@omarine.org
Comments
There are currently no comments
New Comment