Tải bản đầy đủ (.docx) (13 trang)

ỨNG DỤNG MẠNG TÍNH TOÁN TRONG BÀI TOÁN HÓA HỌC

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (654.47 KB, 13 trang )

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
ỨNG DỤNG MẠNG TÍNH TOÁN
TRONG BÀI TOÁN HÓA HỌC
BÀI THU HOẠCH BIỂU DIỄN TRI THỨC VÀ ỨNG
DỤNG
Giảng viên : TS. Đỗ Văn Nhơn

Học viên : Trịnh Hoàng Việt Quốc
MSSV : CH1101127
Lớp : Cao Học K6
Mục lục
1. Gới thiệu mạng tính toán:
Mạng tính toán là một dạng biểu diễn tri thức có thể dùng biểu diễn các tri thức về các vấn đề
tính toán và được áp dụng một cách có hiệu quả để giải quyết các vấn đề nầy. Mỗi mạng tính toán là một
mạng ngữ nghĩa chứa các biến và những quan hệ có thể cài đặt và sử dụng được cho việc tính toán. Có
thể nói rằng mạng tính toán là một sự tổng quát hoá của kiểu dữ liệu trừu tượng có khả năng tự xây dựng
các hàm dùng cho việc tổng hợp thành các chương trình.
2. Định nghĩa:
a) Các quan hệ:
Cho M = {x
1
,x
2
, ,x
m
} là một tập hợp các biến có thể lấy giá trị trong các miền xác định D
1,
D
2
, ,D


m
. Mỗi quan hệ R trên M được xác định bởi một (hay một số) ánh xạ có dạng:
f
R,u,v
: D
u
→ D
v
trong đó u,v là các bộ biến được phân chia từ bộ biến x = <x
1
,x
2
, ,x
m
>; D
u
và D
v
là tích của các
miền xác định tương ứng của các biến trong u và trong v.
Quan hệ R(x) có thể được biểu diễn bởi một (hay một số) ánh xạ f
R,u,v
và ta viết vắn tắt là:
f : u ⇒ v.
Cách ký hiệu trên bao hàm ý nghĩa như một luật suy diễn: ta có thể xác định hay suy ra được các
biến thuộc v khi biết các biến thuộc u.
Quan hệ là đối xứng và có hạng k khi ta có thể tính được k biến bất kỳ từ m-k biến kia.
Ví dụ: quan hệ f giữa p là chu vi và a, b là các cạnh của hình chữ nhật.
p = 2*a + 2*b
là một quan hệ đối xứng có hạng là 1 trên các biến p, a, b.

b) Mạng tính toán: là một cấu trúc (M, F) gồm 2 tập hợp:
- M = {x
1
,x
2
, ,x
n
}, là tập hợp các thuộc tính hay các biến lấy giá trị trong các miền xác định
nào đó.
- F = {f
1
,f
2
, ,f
m
}, là tập hợp các luật suy diễn (các quan hệ) có dạng:
f : u(f) → v(f)
trong đó u(f) và v(f) là các tập hợp con khác rỗng của M sao cho u(f) ∩ v(f) = ∅.
Ký hiệu: M(f) = u(f) ∪ v(f).
Ví dụ: mạng tính toán cho một hình vuông (ABCD)
f
1
: c = a
f
2
: b = a
f
3
: d = a
f

4
: AC = a
f
5
: BD = a
f
6
: S=a
2
f
7 :
p= 4*a
3. Các vấn đề cơ bản:
Cho mạng tính toán (M,F), Giả sử có một tập biến A ⊆ M đã được xác định (tức là tập gồm các biến
đã biết trước), và B là một tập biến bất kỳ trong M. Các vấn đề được đặt ra là:
- Có thể xác định được B từ tập A nhờ các quan hệ trong F hay không.
- Nếu có thể tìm được B thì quá trình tính toán như thế nào?
- Trong trường hợp không thể xác định B, thì cần thêm điều kiện gì để có thể tìm được B.
• Các định nghĩa và ký hiệu:
- Bài toán xác định B từ A trên mạng tính toán (M, F) được viết dưới dạng
AB
- Cho D = {f1, f2, , fk} là một dãy quan hệ của mạng tính toán (M,F), A là một tập con của
M. Ta nói dãy quan hệ D là áp dụng được trên tập A khi và chỉ khi ta có thể lần lượt áp dụng
được các quan hệ f1, f2, , fk xuất phát từ giả thiết A.
- Với D = {f
1
, f
2
, , f
k

}, đặt:
A
0
= A, A
1
= A
0
∪ M(f
1
), . . . , A
k
= A
k-1
∪ M(f
k
),
và ký hiệu A
k
là D(A). Có thể nói rằng D(A) là sự mở rộng của tập A nhờ áp dụng dãy quan
hệ D.
Ví dụ:
Trong mạng suy diễn cho một hình chữ nhật, với
A = { b
1
, b
2
}và D = { f
1
: S = b
1

* b
2
; f
2
:p = 2*(b
1
+b
2
)}
ta có D(A) = { b
1
, b
2
, S, p}.
- Định nghĩa lời giải:
+ D = {f
1
, f
2
, , f
k
} là một lời giải của bài toán A → B khi lần lượt áp dụng các quan hệ f
i
(i=1, ,k) xuất phát từ giả thiết A thì sẽ suy ra được các biến thuộc B. Nói cách khác D là một
lời giải của bài toán khi D(A) ⊃ B.
+ Bài toán A → B là giải được khi nó có một lời giải.
+ Lời giải {f
1
, f
2

, , f
k
} được gọi là lời giải tốt nếu không thể bỏ bớt một số bước tính toán
trong quá trình giải, tức là không thể bỏ bớt một số quan hệ trong lời giải.
+ Lời giải ngắn nhất: có số bước suy diễn thấp nhất.
4. Tìm lời giải:
a) Tính giải được:
• Định nghĩa “Bao đóng”: Cho mạng tính toán (M,F), và A là một tập con của M. Ta có thể thấy
rằng có duy nhất một tập hợp B lớn nhất ⊆ M sao cho bài toán A → B là giải được, và tập hợp B
nầy được gọi là bao đóng của A trên mạng (M,F).
• Định lý: Trên một mạng tính toán (M,F), bài toán A → B là giải được khi và chỉ khi B ⊆ (bao
đóng của A).
• Mệnh đề: Trên một mạng tinh toán (M,F), giả sử A, B là hai tập con của M. Ta có các điều sau
đây là tương đương:
(1) B ⊆ .
(2) Có một dãy quan hệ D = {f
1
, f
2
, , f
k
} ⊆ F thỏa các điều kiện :
(a) D áp được trên A.
(b) D(A) ⊇ B.
* Thuật toán tìm bao đóng của A trên mạng (M,F).
1. B ← A;
2. Repeat
B1 ← B;
for f ∈ F do //Card (X) là số phần tử của tập X
if ( f đối xứng and Card (M(f) \ B) ≤ r(f) ) or

(f không đối xứng and M(f) \ B ⊆ v(f) ) then
begin
B ← B ∪ M(f);
F ← F \ {f}; // loại f khỏi lần xem xét sau
end;
Until B = B1;
3. Closure(A) ← B;
b) Tìm lời giải:
• Mệnh đề: Dãy quan hệ suy diễn D là một lời giải của bài toán A → B khi và chỉ khi D áp dụng
được trên A và D(A) ⊇ B.
⇒ Để tìm một lời giải ta có thể làm như sau: Xuất phát từ giả thiết A, ta thử áp dụng các quan
hệ để mở rộng dần tập các biến được xác định (được biết); và quá trình nầy tạo ra một sự lan
truyền tính xác định trên tập các biến cho đến khi đạt đến tập biến B.
Thuật toán tìm một lời giải của bài toán AB
1. Solution ← empty;
// Solution là dãy các quan hệ sẽ áp dụng
2. if B ⊆ A then
begin
Solution_found ← true;
// biến Solution_found = true khi
// bài toán là giải được
goto bước 4;
end
else
Solution_found ← false;
3. Repeat
Aold ← A; Chọn ra một f ∈ F chưa xem xét;
while not Solution_found and (chọn được f) do
begin
if ( f đối xứng and 0 < Card (M(f) \ A) ≤ r(f) ) or

(f không đối xứng and ∅ ≠ M(f) \ A ⊆ v(f)) then
begin
A ← A ∪ M(f);
Solution ← Solution ∪ {f};
end;
if B ⊆ A then
Solution_found ← true;
Chọn ra một f ∈ F chưa xem xét;
end; { while }
Until Solution_found or (A = Aold);
4. if not Solution_found then
Bài toán không có lời giải;
else
Solution là một lời giải;
• Nhận xét:
Khi cần trình bày quá trình giải (hay bài giải) ta có thể xuất phát từ lời giải tìm được dưới
dạng một dãy các quan hệ để xây dựng bài giải.
Lời giải (nếu có) tìm được trong thuật toán trên chưa chắc là một lời giải tốt. Ta có thể bổ
sung thêm cho thuật toán ở trên một thuật toán để tìm một lời giải tốt từ một lời giải đã biết
nhưng chưa chắc là tốt.
c) Tìm một lời giải tốt của bài toán:
Lưu ý: ta có thể tìm một lời giải tốt từ một lời giải biết trước bằng cách lần lượt xem xét
các quan hệ trong tập lời giải đã biết và chọn ra các quan hệ để đưa vào một lời giải mới sao cho
trong lời giải mới nầy không thể bớt ra bất kỳ một quan hệ nào.
Giả sử {f
1
, f
2
, , f
m

} là một lời giải của bài toán A→ B. Tìm một lời giải
tốt cho bài toán.
1. D ← {f
1
, f
2
, , f
m
};
2. for i=m downto 1 do
if D \ {f
i
} là một lời giải then
D ← D \ {f
i
};
3. D là một lời giải tốt.
Thuật toán kiểm tra lời giải của bài toán:
1. for i=1 to m do
if ( fi đối xứng and Card (M(fi) \ A) ≤ r(fi) ) or
( fi không đối xứng and M(fi) \ A ⊆ v(fi) ) then
A ← A ∪ M(fi);
2. if A ⊇ B then
{f1, f2, , fm} là lời giải
else
{f1, f2, , fm} không là lời giải;
d) Phân tích quá trình giải:
Đối với một lời giải, rất có khả năng một quan hệ nào đó dẫn tới việc tính toán một số
biến thừa, tức là các biến tính ra mà không có sử dụng cho các bước tính phía sau. Do đó, chúng
ta cần xem xét quá trình áp dụng các quan hệ trong lời giải và chỉ tính toán các biến thật sự cần

thiết cho quá trình giải theo lời giải.
Định lý sau đây cho ta một sự phân tích tập các biến được xác định theo lời giải và trên
cơ sở đó có thể xây dựng quá trình suy diễn để giải quyết bài toán.
• Định lý: Cho {f
1
, f
2
, , f
m
} là một lời giải tốt cho bài toán A → B trên một mạng tính toán (M,F).
Đặt : A
0
= A, A
i
= {f
1
, f
2
, , f
i
}(A), với mọi i=1, ,m.
Khi đó có một dãy {B
0
, B
1
, , B
m-1
, B
m
}, thỏa các điều kiện sau đây:

(1) B
m
= B.
(2) B
i
⊆ A
i
, với mọi i=0,1, ,m.
(3) Với mọi i=1, ,m, {f
i
} là lời giải của B
i-1
→ B
i

nhưng không là lời giải của G → B
i
, trong đó
G là một tập con thật sự tùy ý của B
i-1
.
5. Lời giải tối ưu của bài toán:
a) Mạng tính toán có trọng số:
- Với mỗi quan hệ để đại diện cho độ phức tạp của việc suy diễn ta có một tham số gọi là
trọng số của quan hệ, tham số này đóng vai trò quan trọng trong tính hiệu quả của bài toán.
Ký hiệu: w(f) là trọng số của quan hệ f.
- Mạng tính toán có trọng số là mô hình: (A, D, w) gồm:
+ A: tập các thuộc tính.
+ D: tập các quan hệ (luật suy diễn)
+ w: hàm trọng số dương w:DR

+
.
Với mỗi quan hệ r thuộc D có dạng r:uv thì u là phần giả thiết, ký hiệu
hypothesis(r) và v là phần kết luận goal(r).
b) Định nghĩa lời giải tối ưu:
- Đặt: w(S) = w(f
1
) + w(f
2
) + + w(f
k
).
- Ta gọi w(S) là trọng số của S.
- Cho một bài toán A → B. dãy các luật suy diễn S được gọi là một lời giải tối ưu của bài toán
khi nó thỏa mãn các điều kiện sau đây:
(1) S là một lời giải của bài toán A → B.
(2) Trọng số của S nhỏ hơn hoặc bằng trọng số của bất kỳ một lời giải nào khác của bài
toán. Nói một cách khác là
w(S) = min { w(S’) | S’ là một lời giải của bài toán A → B }
c) Tìm lời giải tối ưu:
Mệnh đề: Nếu bài toán HG là giải được thì sẽ tồn tại một lời giải tối ưu cho bài toán.
Áp dụng thuật giải A* để tìm lời giải tối ưu: cần có một biểu diễn thích hợp cho không gian
trạng thái của bài toán.
• Không gian trạng thái:
Với mỗi luật r mà ta có thể áp dụng trên H để suy ra những thuộc tính mới sẽ dẫn tới một
tập thuộc tính mới H’ = H ∪ goal(r).Ta nói rằng r là một cạnh nối từ đỉnh H đến đỉnh H’.
Như thế, tập hợp gồm tất cả các tập con (hay đỉnh) H’ của A sao cho có một dãy S gồm
các luật (hay cạnh) thỏa mãn điều kiện H’ = S(H), cùng với các cạnh trong các dãy S sẽ cho ta
một không gian trạng thái của bài toán có dạng đồ thị. Hơn nữa đồ thị nầy có trọng số được định
nghĩa bởi: trọng số của cạnh r (tức là một luật suy diễn) là w(r). Đồ thị có trọng số nầy sẽ được

ký hiệu là Graph(H→G).
• Việc tìm lời giải tối ưu cho bài toán H→G tương đương với việc tìm một đường đi ngắn nhất
trên đồ thị Graph(H→G) từ H đến một đỉnh mục tiêu H’ thỏa điều kiện H’ chứa G.
Đối với mỗi đỉnh N trên đồ thị, đặt
h(N) = min {w(r) | hypothesis(r) ⊂ N}
Giá trị h(N) nầy có thể xem là một ước lượng cho lộ trình từ N đến một đỉnh mục tiêu.
• Thuật toán tìm lời giải tối ưu:
Bước 1: Khởi tạo trạng thái xuất phát.
Open ← {H}; // danh sách đỉnh mở ban đầu
//chỉ có đỉnh xuất phát
Close ← {}; // danh sách đỉnh đóng
g(H) ← 0; // độ dài lộ trình đến H là 0
f(H) ← h(H); // độ dài lộ trình ước tính từ H
//đến mục tiêu là h(H)
found ← false; // biến kiểm tra quá trình tìm lời giải
Bước 2:Thực hiện quá trình lặp để tìm lời giải tối ưu
While (Open ≠ {}) do
begin
Bước 2.1: Chọn một đỉnh N trong Open với ước tính
đường đi f nhỏ nhất.
Bước 2.2: Chuyển N từ danh sách Open sang
danh sách Close.
Bước 2.3: if (N là một mục tiêu) then
begin
Found ← true;
Break; // Kết thúc quá trình lặp
end
Bước 2.4: else // N không là một mục tiêu
Begin
Duyệt qua các đỉnh kế S của N (tức là có cung r nối

N và S) mà S ∉ Close, và xét các trường hợp sau:
1. S ∉ Open: Tính
g(S) = g(N) + w(r); f(S) = g(S) + h(S);
Bổ sung S vao Open;
2. S ∈ Open:
If g(N) + w(r) < g(S) then begin
g(S) ← g(N) + w(r); f(S) ← g(S) + h(S);
Cập nhật về đỉnh kế trước của S trên lộ trình;
end
End
End // // Kết thúc vòng lặp while
Bước 3: Kiểm tra kết quả việc tìm kiếm.
If Found then
Kết quả là tìm được lời giải tối ưu và thiết lập lời giải
Else
Kết quả là bài toán không có lời giải.
6. Ứng dụng mạng tính toán trong việc giải bài toán chuỗi phản ứng và điều chế trong
hóa học:
a) Giới thiệu:
- Áp dụng mô hình mạng tính toán của thầy TS. Đỗ Văn Nhơn để giải các bài
toán hóa học.
- Ngôn ngữ sử dụng: Maple (sử dùng maple 12)
- Ngôn ngữ lập trình sử dụng viết giao diện chương trình: java
- Có thể giải quyết hai loại bài tập trong hóa học phổ thông là:
• Bài tập loại điều chế chất hóa học: Cho một số chất hóa học, và điều chế một
số chất hóa học khác từ các chất cho trước đấy.
- Ví dụ: Cho Na, Cl2, và H2O làm thế nào để điều chế nước javel (NaClO,
NaCl,H2O).
Bài làm:
2Na + Cl2 = 2NaCl

NaCl + H2O = Cl2 + H2 + NaOH
Cl2 + 2NaOH = NaClO + NaCl + H2O
• Bài tập tìm chuỗi phản ứng
Ví dụ: thực hiện chuỗi phản ứng sau: Na->NaCl->NaOH->Na2SO4
Bài làm:
Ta có 3 phản ứng trong chuỗi trên là:
2Na + Cl2 = 2NaCl //Na->NaCl
NaCl + H2O = Cl2 + H2 + NaOH //NaCl->NaOH
CuSO4 + 2NaOH = CuOH2 + Na2SO4 //NaOH->Na2SO4
b) Cơ sở tri thức:
- Gồm một tập biến và tập quan hệ.
• Tập biến: tập các chất và hợp chất hóa học
Mỗi biến bao gồm:
Ví dụ:
variables
Na = "Natri"
Cl2 = "Clo"
NaCl = "Natri Clorua"
NaHCO3 = "- NaHCO3 la muoi cua axit yeu, khong ben (axit
cacbonic)."
Fe = "Sat"
FeCl3 = "Sat III Clorua"
Cu = "Dong"
CuCl2 = "Dong Clorua"
H2O = "Nuoc"
HCl = "Axit Clohidric"
Zn = "Kem"
H2 = "Hidro"
O2 = "Oxy"
NH4HCO3 = "Muoi amoni hidro cacbonat"

CO2 = "khi cacbonic"
NH4Cl = "muoi amoni"
NH3 = "amoniac"
- Ta thấy mỗi phản ứng hóa học đều không đối xứng nên mối quan hệ trong
mạng tính toán hóa học thì chỉ gồm: Mf, tập các chất trong phản ứng; vf, tập
các chất tạo thành và expf một phản ứng.
Ví dụ:
relation 0
Mf = `{Na,Cl2,NaCl}`
vf = `{NaCl}`
expf = `2Na + Cl2 = 2NaCl`
relation 4
Mf = {NaCl, H2O, Cl2,H2,NaOH}
vf = {Cl2,H2,NaOH}
expf = ` NaCl + H2O = Cl2 + H2 + NaOH`
Công thức hóa học = “Định nghĩa”
c) Thuật toán:
• Thuật toán cho bài toán điều chế:
Để giải quyết vần đề điều chế chất hóa học ta dùng thuật toán tìm lời giải
trong mạng tính toán. Từ một số chất cho trước đi tìm các “bước giải” (tức các
phương trình phản ứng) để có được chất điều chế. Tuy nhiên có một điểm khác
là chỉ xét các quan hệ không đối xứng (theo quan hệ trong cơ sở tri thức).
Hàm tìm chuỗi phản ứng trong maple:
• Thuật toán cho bài toán Tìm chuỗi phản ứng (phần này khác với mạng
tính toán):
- Phát biểu: chất thứ i(trong dãy đưa vào) là các chất tham gia và chất thứ i + 1
thuộc các chất tạo thành trong cùng một phản ứng thì phản ứng đó hợp lệ.
- Mã giả:
tìm chuỗi phản ứng (F:list,chuoipu:list)
//F: danh sách các phản ứng có trong quan hệ

//chuoipu: danh sách các chất trong chuỗi phản ứng
for i=1 to chuoipu.length-1 do
foreach pu in F do
if (chuoi[i] thuộc pu[chất tham gia, Mf] và chuoi[i+1]
thuộc pu[chất tạo thành, vf]) then
result +=pu;
break;

//Trả về kết quả nếu số phản ứng bằng tổng các chất -1 thì
tìm được
if (result.length = chuoipu.length - 1)
thực hiện được chuỗi phản ứng
return result;
else
không thực hiện được chuỗi phản ứng
Hình 2: Thuật toán tìm chuỗi phản ứng trong maple
• Lưu ý: Khi lập trình trong Maple thì chuỗi đưa vào phải là danh sách vì nếu
là Set(tập hợp) thuật toán sẽ sai vì các thành phần trong tập hợp sẽ sắp xếp
lại theo thứ tự a,b,c.
Tài liệu tham khảo:
[1] Giáo trình các hệ cơ sở tri thức – trường ĐH công nghệ thông tin, biên soạn: GS
TSKH. Hoàng Kiếm, TS Đỗ Phúc, TS Đỗ Văn Nhơn.
[2] Presentation – Mạng suy diễn tính toán, TS Đỗ Văn Nhơn.
[3] Maple Help: />

×