Tải bản đầy đủ (.doc) (31 trang)

ỨNG DỤNG MÔ HÌNH MẠNG TÍNH TOÁN ĐỂ GIẢI BÀI TOÁN TAM GIÁ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 (525.6 KB, 31 trang )

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA KHOA HỌC MÁY TÍNH
**********    **********
TIỂU LUẬN CHUYÊN ĐỀ
BIỂU DIỄN TRI THỨC & ỨNG DỤNG
ĐỀ TÀI:
ỨNG DỤNG MÔ HÌNH MẠNG TÍNH
TOÁN ĐỂ GIẢI BÀI TOÁN TAM GIÁC

GIẢNG VIÊN HƯỚNG DẪN:
PGS.TS ĐỖ VĂN NHƠN
HỌC VIÊN THỰC HIỆN:
LÊ MINH TRÍ
MSHV: CH1101148
Thành phố Hồ Chí Minh
Ứng dụng mô hình mạng tính toán để giải bài toán tam giác
01/2013
MỤC LỤC
Nội dung Trang
DANH MỤC CÁC HÌNH 3
LỜI NÓI ĐẦU 4
Chương I>Giới thiệu: 5
Chương II>Tri thức và biểu diễn tri thức: 6
1/Tri thức : 6
2/Biểu diễn tri thức : 6
Chương III>Cấu trúc của hệ giải toán dựa trên tri thức: 8
1/Cấu trúc hệ thống : 8
2/Vấn đề biểu diễn tri thức : 9
3/Vấn đề suy diễn tự động : 9
4/Các ví dụ: 10


Chương IV>Mô hình mạng tính toán: 11
1/Định nghĩa: 11
2/Bài toán trên mạng tính toán: 13
3/ Giải quyết vấn đề: 13
4/Ưu và nhược điểm của mạng tính toán: 18
5/Mở rộng mạng tính toán: 18
Chương V>Cài đặt chương trình giải bài toán tam giác: 19
1/Giới thiệu chương trình: 19
2/Một số đoạn mã chính để xây dựng chương trình: 19
3/Hướng dẫn sử dụng chương trình: 27
Chương VI>Kết luận & Hướng phát triển đề tài: 29
1/Kết luận : 29
2/Hướng phát triển đề tài: 30
TÀI LIỆU THAM KHẢO 31
HVTH: Lê Minh Trí (CH1101148) Trang 2
Ứng dụng mô hình mạng tính toán để giải bài toán tam giác
DANH MỤC CÁC HÌNH
Hình 1: Cấu trúc của một hệ giải toán thông minh 8
Hình 2: Giao diện chính của chương trình 19
Hình 3: Nhập dữ liệu từ file 27
Hình 4: Nhập dữ liệu trực tiếp từ giao diện chương trình 28
Hình 5: Kết quả thực hiện 28
HVTH: Lê Minh Trí (CH1101148) Trang 3
Ứng dụng mô hình mạng tính toán để giải bài toán tam giác
LỜI NÓI ĐẦU
Ngày nay, với sự bùng nổ và phát triển nhanh chóng, vượt bậc của ngành công
nghiệp máy tính, nhu cầu sử dụng máy tính của con người ngày một cao hơn, không
chỉ cần đề giải quyết những công việc lưu trữ, tính toán thông thường mà còn mong
đợi ở máy tính có khả năng thông minh hơn, có thể suy luận và giải quyết các vấn
đề như con người. Đây chính là lý do ra đời của Trí tuệ nhân tạo, một lĩnh vực của

khoa học máy tính nhằm nghiên cứu và phát triển các hệ thống ngày càng thông
minh hơn, hỗ trợ tốt cho hoạt động xử lý thông tin, xử lý tri thức, tính toán và điều
khiển,… Một thành phần không thể thiếu của Trí tuệ nhân tạo là việc dùng các máy
tính số như một phương tiện để tạo ra và thử nghiệm các lý thuyết về trí tuệ. Hiện
nay, một trong những vấn đề cơ bản của Trí tuệ nhân tạo đang được quan tâm nhất
là nghiên cứu các phương pháp, kỹ thuật biểu diễn và xử lý tri thức.
Biểu diễn tri thức đóng vai trò hết sức quan trọng trong việc khẳng định khả
năng giải quyết vấn đề của một hệ cơ sở tri thức. Có rất nhiều phương pháp và kỹ
thuật để biểu diễn tri thức như: Logic vị từ, hệ luật dẫn, mạng ngữ nghĩa, frames,
classes, scripts, mạng tính toán, mạng các đối tượng tính toán, COKB,…Trong
phạm vi bài tiểu luận này, người nghiên cứu xin trình bày phương pháp biểu diễn tri
thức bằng mô hình Mạng tính toán và đồng thời cài đặt thử nghiệm chương trình
Ứng dụng mô hình mạng tính toán để giải bài toán tam giác, nhằm tìm ra các lời
giải cụ thể về những bài toán có liên quan đến tính toán các yếu tố của một tam
giác.
Qua bài tiểu luận, em xin gửi lời cảm ơn chân thành, sâu sắc đến thầy PGS.TS
Đỗ Văn Nhơn, người đã tận tình truyền đạt cho em những kiến thức sâu rộng, bổ
ích về môn Biểu diễn tri thức và ứng dụng. Từ đó giúp em nắm vững hơn về cơ sở
lý thuyết, và có được một nền tảng kiến thức cơ bản tạo điều kiện thuận lợi để em
hoàn thành tốt bài tiểu luận này. Bên cạnh đó em cũng xin gửi lời cảm ơn đến các
anh/chị trong cùng khóa học đã nhiệt tình chia sẽ tài liệu và những thông tin cần
thiết trong suốt quá trình học.
Thân mến,
Người nghiên cứu
HVTH: Lê Minh Trí (CH1101148) Trang 4
Ứng dụng mô hình mạng tính toán để giải bài toán tam giác
Chương I> Giới thiệu:
Trí tuệ nhân tạo (AI: Artificial Intelligence) có thể được định nghĩa như một
ngành của khoa học máy tính liên quan đến việc tự động hóa các hành vi thông
minh. AI là một bộ phận của khoa học máy tính và do đó nó phải được đặt trên

những nguyên lý lý thuyết vững chắc, có khả năng ứng dụng được của lĩnh vực này.
Những nguyên lý này bao gồm các cấu trúc dữ liệu dùng cho biểu diễn tri thức, các
thuật toán cần thiết để áp dụng những tri thức đó, cùng các ngôn ngữ và kỹ thuật lập
trình dùng cho việc cài đặt chúng.
Tuy nhiên định nghĩa trên phải chấp nhận một thực tế - trí tuệ tự nó là một khái
niệm không được định nghĩa một cách rõ ràng. Mặc dù hầu hết chúng ta đều có thể
nhận ra các hành vi thông minh khi nhìn thấy chúng nhưng rất khó có thể đưa ra
một định nghĩa về trí tuệ.
Cho đến nay, Trí tuệ nhân tạo vẫn còn là một ngành khoa học trẻ, những mối
quan tâm và những phương pháp của nó chưa được rõ ràng so với tất cả các ngành
khoa học đã trưởng thành trước đó. Song, một trong những mục tiêu trọng tâm của
nó là quan tâm đến việc mở rộng khả năng của khoa học máy tính hơn là tìm cách
định nghĩa những giới hạn của nó.
Nếu như trước đây, năm 1950, một nhà toán học người Anh là Alan Turing đã
cho ra đời tác phẩm “Máy tính và trí tuệ” nhằm mục đích đánh giá những tranh luận
về khả năng tạo ra một máy tính thông minh thì ngày nay người ta càng tìm cách
hiện thực hóa khả năng thông minh của máy tính bằng cách tạo ra những sản phẩm
phần mềm xử lý thông minh. Các hệ chuyên gia và các hệ giải toán dựa trên tri thức
từ đó cũng được ra đời. Một hệ giải bài toán dựa trên tri thức phải là một hệ giải
toán thông minh có thể giải được các dạng bài toán tổng quát trong một miền tri
thức nào đó, trong đó có một cơ sở tri thức và một bộ phận thực hiện suy luận giải
bài toán trong phạm vi tri thức của hệ thống.
Trong khoa học về trí tuệ nhân tạo có nhiều phương pháp để biểu diễn tri thức,
mỗi phương pháp đều có ưu và nhược điểm riêng. Trong phạm vi bài tiểu luận này
người nghiên cứu xin đề xuất phương pháp biểu diễn tri thức bằng mạng tính toán
kết hợp với một số thuật toán được ứng dụng trong việc giải bài toán về tam giác.
HVTH: Lê Minh Trí (CH1101148) Trang 5
Ứng dụng mô hình mạng tính toán để giải bài toán tam giác
Chương II> Tri thức và biểu diễn tri thức:
1/ Tri thức :

1.1/ Khái niệm:
Là sự hiểu biết thông qua các quá trình nhận thức phức tạp như: quá trình tri
giác, quá trình học tập, tiếp thu, quá trình giao tiếp, quá trình tranh luận, quá trình lý
luận, hay kết hợp các quá trình này.
1.2/ Phân loại:
Tri thức có 2 dạng tồn tại chính là tri thức hiện và tri thức ẩn:
a. Tri thức hiện: là những tri thức được giải thích và mã hóa dưới dạng văn
bản, tài liệu, âm thanh, phim, ảnh,… thông qua ngôn ngữ có lời hoặc
không lời, nguyên tắc hệ thống, chương trình máy tính, chuẩn mực hay
các phương tiện khác. Đây là những tri thức đã được thể hiện ra ngoài và
dễ dàng chuyển giao, thường được tiếp nhận qua hệ thống giáo dục và
đào tạo chính quy.
b. Tri thức ẩn: là những tri thức thu được từ sự trải nghiệm thực tế, dạng tri
thức này thường ẩn trong mỗi cá nhân và rất khó “mã hóa” và chuyển
giao, thường bao gồm: niềm tin, giá trị, kinh nghiệm, bí quyết, kỹ năng
Ví dụ: Trong bóng đá, các cầu thủ chuyên nghiệp có khả năng cảm nhận
bóng rất tốt; trong một siêu thị điện máy bằng việc phân tích các giao dịch
người ta thấy rằng, có tới 60% độ tin cậy cho việc khách hàng khi mua máy
tính thì cũng mua phần mềm diệt virus. Đây là một dạng tri thức ẩn, nó nằm
trong mỗi cầu thủ Nó không thể “mã hóa” thành văn bản, không thể chuyển
giao, mà người ta chỉ có thể có bằng cách tự mình luyện tập.
2/ Biểu diễn tri thức :
2.1/ Khái niệm :
Là sự diễn đạt và thể hiện của tri thức dưới những dạng thích hợp để có thể tổ
chức một cơ sở tri thức của hệ thống.
Biểu diễn tri thức giúp ta có thể tổ chức và cài đặt một cơ sở tri thức cho các hệ
chuyên gia, các hệ cơ sở tri thức và các hệ giải bài toán dựa trên tri thức.
2.2/ Các tiêu chuẩn đánh giá một phương pháp biểu diễn tri thức:
HVTH: Lê Minh Trí (CH1101148) Trang 6
Ứng dụng mô hình mạng tính toán để giải bài toán tam giác

Cũng như dữ liệu, có nhiều cách khác nhau để biểu diễn tri thức trong máy tính.
Tuy nhiên, một phương pháp để biểu diễn tri thức phải thõa một số tiêu chuẩn nào
đó. Dưới đây là một số tiêu chuẩn gợi ý:
a. Trong suốt : hệ thống có thể giải thích những quyết định và những lời giải
của nó. Ví dụ như hệ luật dẫn.
b. Trực tiếp : hệ thống không phải sử dụng các ký hiệu trung gian.
c. Tự nhiên : phương pháp biểu diễn gần với thực tế.
d. Hiệu quả : biểu diễn đơn giãn theo nghĩa nói ít hiểu nhiều.
e. Thích hợp : biểu diễn được mọi tri thức có liên quan hoặc các tri thức
tương tự.
f. Đơn thể : các thành phần biểu diễn có tính độc lập và có thể được kết hợp
lại để đạt được mức cao hơn.
2.3/ Công cụ cho việc biểu diễn tri thức:
• Cấu trúc dữ liệu cơ bản: dãy, danh sách, tập hợp , mẫu,…
• Cấu trúc dữ liệu trừu tượng: ngăn xếp, hàng đợi.
• Các mô hình toán học: đồ thị, cây.
• Các mô hình đối tượng.
• Các ngôn ngữ đặc tả tri thức.
Ví dụ: Kiến thức về một tam giác cần thiết cho việc giải bài toán tam giác có
thể được biểu diễn gồm:
 Một tập hợp các biến thực, mỗi biến đại diện cho một yếu tố của tam
giác:
o a,b,c: 3 cạnh của tam giác.
o A,B,C: 3 góc đối diện với 3 cạnh tương ứng trong tam giác.
o h
a
, h
b
, h
c

: 3 đường cao tương ứng.
o S: diện tích tam giác.
o p: nửa chu vi của tam giác.
o R: bán kính đường tròn ngoại tiếp tam giác.
o r: bán kính đường tròn ngoại tiếp nội giác.
o .v.v.
 Một tập hợp các công thức liên hệ tính toán trên các yếu tố của tam
giác:
o f
1
: A + B + C = π (radian)
o f
2
: a
2
= b
2
+ c
2
- 2.b.c.cosα
HVTH: Lê Minh Trí (CH1101148) Trang 7
Ứng dụng mô hình mạng tính toán để giải bài toán tam giác
o f
3
: b
2
= a
2
+ c
2

- 2.a.c.cosβ
o f
4
: c
2
= a
2
+ b
2
- 2.a.b.cosγ
o f
5
: 2.p = a + b + c
o f
6
: S = a.h
a
/2; S = b.h
b
/2; S = c.h
c
/2
o f
7
: S = p.r
o .v.v.
2.4/ Các dạng biểu diễn tri thức thường gặp:
Là đưa ra những giải pháp mới để hoàn thành công việc hoặc làm cho công việc
đó trở nên dễ thực hiện hơn.
a. Tri thức thủ tục: mô tả cách thức giải quyết một vấn đề. Loại tri thức này

đưa ra giải pháp để thực hiện một công việc nào đó.
b. Tri thức khai báo (tri thức mô tả): cho biết một vấn đề được thấy như thế
nào. Loại tri thức này bao gồm các phát biểu đơn giản, dưới dạng các
khẳng định logic đúng hoặc sai.
c. Siêu tri thức: mô tả tri thức về tri thức. Loại tri thức này giúp lựa chọn tri
thức thích hợp nhất trong số các tri thức khi giải quyết một vấn đề.
d. Tri thức heuristic (Tri thức nông cạn): mô tả các “mẹo” để dẫn dắt tiến
trình lập luận. Nó không bảm đảm hoàn toàn chính xác về kết quả giải
quyết vấn đề.
e. Tri thức có cấu trúc: mô tả tri thức theo cấu trúc. Loại tri thức này mô tả
mô hình tổng quan hệ thống theo quan điểm của chuyên gia, bao gồm khái
niệm, khái niệm con, và các đối tượng; diễn tả chức năng và mối liên hệ
giữa các tri thức dựa theo cấu trúc xác định.
Chương III> Cấu trúc của hệ giải toán dựa trên tri thức:
1/ Cấu trúc hệ thống :
Hình 1: Cấu trúc của một hệ giải toán thông minh.
HVTH: Lê Minh Trí (CH1101148) Trang 8
Ứng dụng mô hình mạng tính toán để giải bài toán tam giác
Các thành phần chính của hệ thống trong việc giải toán: hệ giải toán thông
minh có thể giải được các dạng bài toán tổng quát trong một miền tri thức.
 Cơ sở tri thức (Knowledge Base): đây là trái tim của hệ thống, trong đó chứa
các kiến thức cần thiết cho việc giải các bài toán.
 Bộ suy diễn (mô tơ suy diễn): bộ suy diễn sẽ áp dụng kiến thức được lưu trữ
trong cơ sở tri thức để giải quyết hay tìm lời giải cho các bài toán đặt ra.
Sự tách biệt của bộ suy diễn và cơ sở tri thức nó mang tính độc lập tương đối và
là một tiêu chuẩn quan trọng. Ta cần phải có sự tách biệt này vì:
 Việc biểu diễn tri thức sẽ được thực hiện một cách tự nhiên hơn, gần gũi hơn
với quan niệm của con người.
 Các nhà thiết kế hệ thống sẽ tập trung vào việc nắm bắt và tổ chức cơ sở tri
thức hơn là phải đi vào những chi tiết cho việc cài đặt trên máy tính.

 Giúp tăng cường tính mô-đun hóa của phần cơ sở tri thức, bộ suy diễn và bộ
phận cập nhật, hiệu chỉnh kiến thức. Sự bổ sung hay loại bỏ bớt một phần
biến thức sẽ không gây ra những hiệu ứng lề cho các thành phần khác trong
hệ thống.
 Cho phép cùng một chiến lược điều khiển và giao tiếp có thể được sử dụng
cho nhiều hệ thống khác nhau.
 Sự tách biệt của kiến thức giải bài toán và bộ suy diễn còn giúp ta có thể thử
nghiệm nhiều chiến lược điều khiển khác nhau trên cùng một cơ sở tri thức.
2/ Vấn đề biểu diễn tri thức :
Biểu diễn tri thức đóng vai trò rất quan trọng trong thiết kế và xây dựng một hệ
giải toán thông minh và các hệ chuyên gia.
Phương pháp biểu diễn tri thức thích hợp sẽ tạo nên một hệ thống có trái tim
khỏe mạnh.
Xây dựng và phát triển các phương pháp biểu diễn tri thức là một hướng nghiên
cứu quan trọng cho các nhà nghiên cứu về trí tuệ nhân tạo.
3/ Vấn đề suy diễn tự động :
Suy diễn tự động để giải quyết các bài toán dựa trên tri thức cũng là một vấn đề
quan trọng.
HVTH: Lê Minh Trí (CH1101148) Trang 9
Ứng dụng mô hình mạng tính toán để giải bài toán tam giác
Các phương pháp suy diễn tự động nhằm vận dụng kiến thức đã biết trong quá
trình lập luận giải quyết vấn đề trong đó quan trọng nhất là các chiến lược điều
khiển giúp phát sinh những sự kiện mới từ các sự kiện đã có.
4/ Các ví dụ:
Trong nhiều chủ để giải toán chúng ta thường gặp những vấn đề như sau:
 Cần phải thực hiện những tính toán hay suy diễn ra những yếu tố cần thiết
nào đó từ một số yếu tố đã được biết trước.
 Để giải quyết vấn đề người ta phải vận dụng một số hiểu biết (tri thức) nào
đó về những liên hệ giữa các yếu tố đang được xem xét. Những liên hệ cho
phép ta có thể suy ra được một số yếu tố từ giả thiết đã biết một số yếu tố

khác.
Ví dụ 1: Giả sử chúng ta đang quan tâm đến một số yếu tố trong một tam giác,
chẳng hạn : 3 cạnh a, b, c; 3 góc tương ứng với 3 cạnh : A, B, C; 3 đường cao tương
ứng : h
a
, h
b
, h
c
; diện tích S của tam giác; nửa chu vi p của tam giác; bán kính đường
tròn nội tiếp r của tam giác. Giữa 12 yếu tố trên có các công thức thể hiện những
mối quan hệ giúp ta có thể giải quyết được một số vấn đề tính toán đặt ra như: Tính
một yếu tố từ một số yếu tố được cho trước. Chẳng hạn, tính S khi biết a, b và p.
Trong tam giác chúng ta có thể kể ra một số quan hệ dưới dạng công thức sau đây:
o Liên hệ giữa 3 góc : A + B + C = π
o Định lý cosin :
a
2
= b
2
+ c
2
- 2.b.c.cosα
b
2
= a
2
+ c
2
- 2.a.c.cosβ

c
2
= a
2
+ b
2
- 2.a.b.cosγ
o Định lý Sin:
γβα
sin
c

sin
b
sin
a
==
o Liên hệ giữa nửa chu vi và 3 cạnh:
2.p = a + b + c
o Một số công thức tính diện tích:
S = a.h
a
/2; S = b.h
b
/2; S = c.h
c
/2;
S = p.r
o Công thức tính diện tích theo 3 cạnh (công thức Heron):
HVTH: Lê Minh Trí (CH1101148) Trang 10

Ứng dụng mô hình mạng tính toán để giải bài toán tam giác
c)b)(pa)(pp(p −−−=S
Ví dụ 2: Một vật thể có khối lượng m chuyển động thẳng với gia tốc không thay đổi
là a trong một khoảng thời gian tính từ thời điểm t
1
đến thời điểm t
2
. Vận tốc ban
đầu của vật thể là v
1
, vận tốc ở thời điểm cuối là v
2
, và vận tốc trung bình là v.
Khoảng cách giữa điểm đầu và điểm cuối là ∆s. Lực tác động của chuyển động là f.
Độ biến thiên vận tốc giữa 2 thời điểm là ∆v, và độ biến thiên thời gian là ∆t. Ngoài
ra còn có một số yếu tố khác nữa của chuyển động vật thể có thể được quan tâm.
Để giải những bài toán về chuyển động nầy chúng ta phải sử dụng một số công thức
liên hệ giữa các yếu tố của chuyển động, chẳng hạn như:
o f = m * a;
o ∆v = a*∆t;
o ∆s = v*∆t;
o 2*v = v
1
+ v
2
;
o ∆v = v
2
- v
1

;
o ∆t = t
2
- t
1
;
Ví dụ 3: Trong hóa học chúng ta thường phải sử dụng các phản ứng hóa học để điều
chế các chất nầy từ các chất khác. Loại vấn đề nầy cũng cho ta một dạng tương tự
như trong 2 ví dụ trên : Cho trước một số chất hóa học, hãy tìm cách điều chế ra
một hay một số chất nào đó.
Chương IV> Mô hình mạng tính toán:
Có rất nhiều vấn đề trong các lĩnh vực khác nhau đặt ra dưới dạng một mạng các
yếu tố, trong đó giữa các yếu tố có những mối liên hệ (hay quan hệ) cho phép ta có
thể thực hiện những tính toán hay suy diễn ra những yếu tố cần thiết nào đó từ một
số các yếu tố đã được biết trước.
Mô hình 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 một
số dạng bài toán. 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 mạng
tính toán là một sự tổng quát hóa 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.
1/ Định nghĩa:
Mạng tính toán là một cấu trúc (M,F), trong đó:
HVTH: Lê Minh Trí (CH1101148) Trang 11
Ứng dụng mô hình mạng tính toán để giải bài toán tam giác
• M = {x
1
, x
2
,…,x

m
} tập hợp các biến đơn trong miền xác định tương ứng
D
1
, D
2
,…,D
m
• F = {f
1
, f
2
,…,f
m
} tập các quan hệ tính toán trên các biến trong tập M. Mỗi
quan hệ tính toán f ∈ F có các dạng sau:
o Một phương trình trên một số biến trong M hoặc
o Luật f : u(f) → v(f) trong đó u(f), v(f) là các tập con khác rỗng của
M hay M(f) ⊆ M thỏa : M(f) = u(f) ∪ v(f)
Ví dụ 1: Để tính các yếu tố của một tam giác ABC ta có thể đưa bài toán về dạng
mô hình mạng tính toán (M, F) với:
• M = {A, B, C, a, b, c, S, p, R, r, h
a
, h
b
, h
c
,…} là tập tất cả các thuộc tính
của tam giác ABC
• F = {f

1
, f
2
, f
3
, f
4
, f
5
, f
6
, f
7
, f
8
, f
9
} là tập các quan hệ.
o f
1
: A + B + C = π
o f
2
:
BA sin
b
sin
a
=
o f

3
:
BC sin
b
sin
c
=
o f
4
:
CA sin
c
sin
a
=
o f
5
: p = (a+b+c) /2
o f
6
: S = a.h
a
/ 2
o f
7
: S = b.h
b
/ 2
o f
8

: S = c.h
c
/ 2
o f
9
: S = a.b.sinC / 2
o .v.v.
Với một mạng tính toán (M, F), vấn đề phát sinh phổ biến từ các ứng dụng thực
tế là việc tìm một giải pháp để xác định một tập H ⊆ M từ một mục tiêu.
Vấn đề này được ký hiệu là biểu tượng (H, Goal), với H là giả thuyết và Goal là
mục tiêu của vấn đề.
HVTH: Lê Minh Trí (CH1101148) Trang 12
Ứng dụng mô hình mạng tính toán để giải bài toán tam giác
2/ Bài toán trên mạng tính toán:
Cho một mạng tính toán K = (M, F) , M là tập các biến và F là tập các quan hệ.
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 giá trị), và B là một tập biến bất kỳ trong M.
Định nghĩa 2.1:
Bài toán A → B được gọi là giải được khi có thể tính toán được giá trị các biến
thuộc B xuất phát từ giả thiết A. Ta nói rằng một dãy các quan hệ {f
1
, f
2
, , f
k
} ⊆ F
là một lời giải của bài toán A → B nếu như ta 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ẽ tính được các biến thuộc B. 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.
Việc tìm lời giải cho bài toán là việc tìm ra một dãy quan hệ để có thể áp dụng
suy ra được B từ A. Điều nầy cũng có nghĩa là tìm ra được một quá trình tính toán
để giải bài toán.
Định nghĩa 2.2 :
Cho D = {f
1
, f
2
, , f
k
} 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ệ f
1
, f
2
, , f
k
xuất phát từ giả thiết A.
Nhận xét : Trong định nghĩa trên, nếu đặ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), thì ta có D là một lời giải của bài toán A →
D(A). Trong trường hợp D là một dãy quan hệ bất kỳ (không nhất thiết là áp dụng
được trên A), ta vẫn ký hiệu D(A) là tập biến đạt được khi lần lượt áp dụng các
quan hệ trong dãy D (nếu được). Chúng ta 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.
3/ Giải quyết vấn đề:
3.1/ Tính giải được của bài toán:
Trong mục nầy chúng ta nêu lên một khái niệm có liên quan đến tính giải được
của vấn đề trên một mạng tính toán : bao đóng của một tập hợp biến trên một mạng
tính toán.
Định nghĩa 3.1: 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ô hình (M,F). Một
HVTH: Lê Minh Trí (CH1101148) Trang 13
Ứng dụng mô hình mạng tính toán để giải bài toán tam giác
cách trực quan, có thể nói bao đóng của A là sự mở rộng tối đa của A trên mô hình
(M,F). Ký hiệu bao đóng của A là

A
, chúng ta có định lý sau đây:
Định lý 3.1: 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 ⊆
A
Từ định lý nầy, ta có thể kiểm tra tính giải được của bài toán A → B bằng cách
tính bao đóng của tập A rồi xét xem B có bao hàm trong
A
hay không.
Định lý 3.2: Cho một mạng tính toán (M,F), A, B là hai tập con của M. Ta có
các điều sau đây là tương đương:
(1) B ⊆
A
.
(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.
Chứng minh : Giả sử có (1), tức là B ⊆
A
. Khi đó bài toán A → B là giải được.
Do đó có một dãy quan hệ {f
1
, f
2

, , f
k
} ⊆ F sao cho khi ta 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ẽ tính được các biến thuộc B. Dễ
dàng thấy rằng dãy {f
1
, f
2
, , f
k
} nầy thỏa các điều kiện (2).
Đảo lại, giả sử có (2). Với các điều kiện có được bởi (2) ta thấy {f
i
} là lời giải
của vấn đề A
i-1
→ A
i
, với mọi i = 1,2, , k. Từ mệnh đề 3.2 suy ra bài toán A
0
→ A
k
là giải được. Do đó bài toán A → B cũng giải được, suy ra B ⊆
A
theo định lý 3.1.
Qua các định lý trên, ta thấy rằng việc xác định bao đóng của một tập biến trên
mô hình tính toán là cần thiết. Dưới đây là thuật toán cho phép xác định bao đóng
của tập hợp A ⊆ M. Trong thuật toán nầy chúng ta thử áp dụng các quan hệ f ∈ F để

tìm dần những biến thuộc M có thể tính được từ A; cuối cùng sẽ được bao đóng của
A.
Thuật toán 3.1: tìm bao đóng của tập A ⊆ M :
Nhập :Mạng tính toán (M,F),
A ⊆ M.
Xuất :
A
Thuật toán :
1. B ← A;
2. Repeat
B1 ← B;
for f ∈ F do
HVTH: Lê Minh Trí (CH1101148) Trang 14
Ứng dụng mô hình mạng tính toán để giải bài toán tam giác
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.
A
← B;
3.2/ Lời giải của bài toán:
Ở trên ta đã nêu lên cách xác định tính giải được của bài toán. Tiếp theo, ta sẽ
trình bày cách tìm ra lời giải cho bài toán A → B trên mạng tính toán (M,F).
Mệnh đề : dãy quan hệ 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.
Do mệnh đề trên, để 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ó giá trị được xác định;
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. Dưới đây là thuật toán tìm một lời giải cho bài toán A → B trên
mạng tính toán (M,F).
Thuật toán 3.2: tìm một lời giải cho bài toán A → B :
Nhập : Mạng tính toán (M,F), tập giả thiết A ⊆ M, tập biến cần tính B ⊆ M.
Xuất : lời giải cho bài toán A → B
Thuật toán :
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 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
HVTH: Lê Minh Trí (CH1101148) Trang 15
Ứng dụng mô hình mạng tính toán để giải bài toán tam giác
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 lý 3.3: Cho D={f
1
, f
2
, , f
m
} là một lời giải của bài toán A → B. Ứng với
mỗi i=1, ,m đặt D
i
= {f
1
, f
2
, , f
i
}, D
0
= ∅. Ta xây dựng một họ các dãy con S
m
, S
m-

1
, , S
2
, S
1
của dãy D như sau :
S
m
= ∅ nếu D
m-1
là một lời giải,
S
m
= {f
m
} nếu D
m-1
không là một lời giải,
S
i
= S
i+1
nếu D
i-1
∪ S
i+1
là một lời giải,
S
i
= {f

i
} ∪ S
i+1
nếu D
i-1
∪ S
i+1
không là một lời giải,
với mọi i = m-1, m-2, , 2, 1.
Khi đó ta có :
(1) S
m
⊆ S
m-1
⊆ ⊆ S
2
⊆ S
1
.
(2) D
i-1
∪ S
i
là một lời giải của bài toán A → B với mọi i=m, , 2, 1.
(3) Nếu S’
i
là một dãy con thật sự của S
i
thì D
i-1

∪ S’
i
không phải là một lời
giải của bài toán A → B với mọi i.
(4) S
1
là một lời giải tốt của bài toán A → B.
Thuật toán 3.3: tìm một lời giải tốt từ một lời giải đã biết.
Nhập : Mạng tính toán (M,F),
lời giải {f
1
, f
2
, , f
m
} của bài toán A→ B.
Xuất : lời giải tốt cho bài toán A → B
Thuật toán :
1. D ← {f
1
, f
2
, , f
m
};
HVTH: Lê Minh Trí (CH1101148) Trang 16
Ứng dụng mô hình mạng tính toán để giải bài toán tam giác
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.
Trong thuật toán 3.3 có sử dụng việc kiểm tra một dãy quan hệ có phải là lời giải
hay không. Việc kiểm tra nầy có thể được thực hiện nhờ thuật toán sau đây:
Thuật toán kiểm tra lời giải cho bài toán :
Nhập : Mạng tính toán (M,F), bài toán A→ B, dãy các quan hệ {f
1
, f
2
, , f
m
}.
Xuất : thông tin cho biết {f
1
, f
2
, , f
m
} có phải là lời giải
của bài toán A→ B hay không.
Thuật toán :
1. for i=1 to m do
if ( f
i
đối xứng and Card (M(f
i
) \ A) ≤ r(f

i
) ) or
( f
i
không đối xứng and M(f
i
) \ A ⊆ v(f
i
) ) then
A ← A ∪ M(f
i
);
2. if A ⊇ B then {f
1
, f
2
, , f
m
} là lời giải
else {f
1
, f
2
, , f
m
} không là lời giải;
3.3/ Định lý về sự phân tích quá trình giải:
Xét bài toán A → B trên mạng tính toán (M,F). Trong mục nầy ta nêu lên một
cách xây dựng quá trình giải từ một lời giải đã biết. Đố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 tính toán
các biến để giải quyết bài toán.
Định lý 3.4: 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 toán B
i-1
→ B
i
nhưng không
phải là lời giải của bài toán G → B
i
, trong đó G là một tập con thật sự tùy ý của B
i-
1
.
HVTH: Lê Minh Trí (CH1101148) Trang 17
Ứng dụng mô hình mạng tính toán để giải bài toán tam giác
4/ Ưu và nhược điểm của mạng tính toán:
4.1/ Ưu điểm:
 Giải được hầu hết các bài toán GT → KL nếu như đáp ứng đầy đủ các giả
thuyết cần thiết.

 Thuật toán đơn giản dễ cài đặt cho nên việc bảo trì hệ thống tương đối
đơn giản.
 Có thể xây dựng hệ thống suy luận và giải thích một cách rõ ràng và dễ
hiểu.
4.2/ Nhược điểm:
 Không giải được các tri thức phức tạp, lưu trữ khó khăn và nhập nhằng
khi quản lý.
 Xây dựng lại thuật toán là một việc tương đối khó khăn dẫn đến việc phải
bảo trì lại toàn bộ hệ thống.
5/ Mở rộng mạng tính toán:
Mạng tính toán với các biến có giá trị đơn và mạng các đối tượng tính toán có
thể được sử dụng để biểu diễn tri thức trong nhiều miền tri thức. Các thành phần tri
thức cơ bản bao gồm một tập hợp các biến có giá trị đơn và một tập các quan hệ
tính toán thông qua các biến đó. Tuy nhiên, có những miền tri thức dựa trên một tập
hợp các yếu tố, trong đó mỗi phần tử có thể là một biến giá trị đơn hoặc một hàm.
Ví dụ, trong các tri thức về dòng điện xoay chiều cường độ dòng điện xoay chiều
i(t) và hiệu điện thế u(t) là các hàm. Nó đòi hỏi phải xem xét một số phần mở rộng
như mở rộng mạng tính toán và mở rộng mạng các đối tượng tính toán.
Định nghĩa: Một mở rộng của mạng tính toán là cấu trúc (M,R) bao gồm 2 tập
sau:
 M = M
v
∪ M
f
là một tập hợp các thuộc tính hoặc các yếu tố với giá trị đơn
hoặc giá trị hàm. Trong đó M
v
= {x
v1
, x

v2
,…,x
vk
} là tập các biến giá trị đơn.
M
f
= {x
f1
, x
f2
,…,x
fm
} là tập các yếu tố giá trị hàm.
 R = R
vv
∪ R
fv
∪ R
vf
∪ R
fvf
là tập các luật và R chính là sự kết hợp của 4 tập
luật con R
vv
, R
fv
, R
vf
, R
fvf

. Mỗi luật r có dạng r: u(r) → v(r), với u(r) là giả
thuyết của r và v(r) là kết luận của r. Một luật cũng là một trong bốn trường
hợp dưới đây:
o Trường hợp 1: r ∈ R
vv
. Trong đó u(r) ⊆ M
v
và v(r) ⊆ M
v
.
o Trường hợp 2: r ∈ R
fv
. Trong đó u(r) ⊆ M
f
và v(r) ⊆ M
v
.
HVTH: Lê Minh Trí (CH1101148) Trang 18
Ứng dụng mô hình mạng tính toán để giải bài toán tam giác
o Trường hợp 3: r ∈ R
vf
. Trong đó u(r) ⊆ M
v
và v(r) ⊆ M
f
.
o Trường hợp 4: r ∈ R
fvf
. Trong đó u(r) ⊆ M, u(r)∩ M
f

≠ ∅, u(r)∩
M
v
≠ ∅, and v(r) ⊆ M
f
.
Mỗi luật trong R có mối quan hệ tính toán tương ứng trong tập F = F
vv
∪ F
fv

F
vf
∪ F
fvf
.
Chương V> Cài đặt chương trình giải bài toán tam giác:
1/ Giới thiệu chương trình:
Giao diện chương trình Ứng dụng mô hình mạng tính toán để giải tam giác
được viết bằng ngôn ngữ C# của bộ Visual Studio 2010 (download) trên nền
tảng .NET Framework 3.5 SP1 (download), phần thủ tục chính để giải quyết bài
toán được viết bằng ngôn ngữ của Maple 14 và được lưu thành file text. Chương
trình là sự kết hợp của C# và Maple nhằm giúp cho việc tìm ra lời giải các bài toán
có liên quan về tam giác thông qua các tập luật được khai báo sẵn.
Dữ liệu đầu vào gồm có giả thuyết các giá trị của các yếu tố tam giác cho
trước, đồng thời cũng nhập vào các yếu tố của tam giác cần tính trong phần kết
luận. Nhằm giúp cho dữ liệu đầu vào được linh động hơn, ngoài việc nhập trực tiếp
chúng ta có thể chọn nhập dữ liệu bằng cách mở đề bài từ một số file do người
nghiên cứu đã tạo sẵn. Sau khi mở đề bài chúng ta có thể chỉnh sửa lại đề bài trên
giao diện chương trình.

Hình 2: Giao diện chính của chương trình.
2/ Một số đoạn mã chính để xây dựng chương trình:
2.1/ Mở đề bài: Mở file text để nhập thông số đầu vào.
HVTH: Lê Minh Trí (CH1101148) Trang 19
Ứng dụng mô hình mạng tính toán để giải bài toán tam giác

// Mở đề bài
private void MoDeBai()
{
openFileDialog.Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*";
openFileDialog.Title = "Mở đề bài";
openFileDialog.FileName = "";
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
DocDeBai(openFileDialog.FileName);
}
}
// Đọc đề bài
private void DocDeBai(string fileName)
{
string[] temp;
string[] debai = File.ReadAllText(fileName).Split('\n');
temp = debai[0].Split(':');
txtGiaThuyet.Text = temp[1];
temp = debai[1].Split(':');
txtKetLuan.Text = temp[1];
}
2.2/ Lưu đề bài: Lưu các thông số đầu vào thành file text

//Lưu đề bài

private void LuuDeBai()
{
if (!txtGiaThuyet.Text.Equals("") && !txtKetLuan.Text.Equals(""))
{
saveFileDialog.Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*";
saveFileDialog.Title = "Lưu đề bài";
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
GhiDeBai(saveFileDialog.FileName);
MessageBox.Show("Bạn đã lưu đề bài thành công.", "Thông báo",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
else
MessageBox.Show("Chưa có thông tin đề bài.", "Lỗi lưu đề bài",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
HVTH: Lê Minh Trí (CH1101148) Trang 20
Ứng dụng mô hình mạng tính toán để giải bài toán tam giác
//Ghi đề bài
private void GhiDeBai(string fileName)
{
FileStream fileStream = new FileStream(fileName, FileMode.Create,
FileAccess.Write);
StreamWriter streamWriter = new StreamWriter(fileStream);
streamWriter.WriteLine("GT:" + txtGiaThuyet.Text);
streamWriter.WriteLine("KL:" + txtKetLuan.Text);
streamWriter.Close();
fileStream.Close();
}

2.3/ Xuất kết quả: Xuất kết quả thành file text sau khi tìm luật
//Xuất kết quả thành file text
private void LuuKetQua()
{
if (!rtxOutput.Text.Equals(""))
{
saveFileDialog.Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*";
saveFileDialog.Title = "Lưu kết quả";
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
rtxOutput.SaveFile(saveFileDialog.FileName,
RichTextBoxStreamType.UnicodePlainText);
MessageBox.Show("Bạn đã lưu kết quả thành công.", "Thông báo",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
else
MessageBox.Show("Chưa có kết quả cần lưu.", "Lỗi lưu kết quả",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
2.4/ Kết nối C# với Maple:
//Mở Maple
public void Open()
{
argv[0] = "maple";
argv[1] = "-A2";
cb.textCallBack = cbText;
cb.errorCallBack = cbError;
cb.statusCallBack = cbStatus;
HVTH: Lê Minh Trí (CH1101148) Trang 21

Ứng dụng mô hình mạng tính toán để giải bài toán tam giác
cb.readlineCallBack = null;
cb.redirectCallBack = null;
cb.streamCallBack = null;
cb.queryInterrupt = null;
cb.callbackCallBack = null;
try
{
kv = MapleEngine.StartMaple(2, argv, ref cb, IntPtr.Zero, IntPtr.Zero,
err);
}
catch (DllNotFoundException e)
{
MessageBox.Show(e.ToString());
return;
}
catch (EntryPointNotFoundException e)
{
MessageBox.Show(e.ToString());
return;
}
if (kv.ToInt64() == 0)
{
MessageBox.Show("Lỗi không thể mở Maple: "
+ System.Text.Encoding.ASCII.GetString(err, 0, Array.IndexOf(err,
(byte)0)));
return;
}
}
2.5/ Lấy kết quả trả về: lấy kết quả do maple trả về

// Giải quyết bài toán và trả về kết kết quả
public void Calculate(string query)
{
myResult = "";
try
{
MapleEngine.EvalMapleStatement(kv,
Encoding.ASCII.GetBytes("plotsetup(maplet):"));
}
catch
{
HVTH: Lê Minh Trí (CH1101148) Trang 22
Ứng dụng mô hình mạng tính toán để giải bài toán tam giác
MessageBox.Show("Maple chưa được mở");
return;
}
try
{
if (query.Substring(0, 1) == "?")
query = "help(" + query.Substring(1, 0) + ");";
}
catch
{
MessageBox.Show("Lỗi do user input không hợp lệ");
return;
}
try
{
IntPtr val = MapleEngine.EvalMapleStatement(kv,
Encoding.ASCII.GetBytes(query));

// Kiểm tra nếu user gõ vào quit/done/stop
if (MapleEngine.IsMapleStop(kv, val).ToInt32() != 0)
MapleEngine.StopMaple(kv);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
2.6/ Thuật toán mạng tính toán để giải tam giác:
restart;interface(imaginaryunit=JZ):
Mset := {A, B, C, P, R, S, a, b, c, ha, hb, hc}:
Fset := {
[{A, B}, C, A = 180-B-C],
[{A, C}, B, A = 180-B-C],
[{A, R}, a, R = a/(2*sin(A))],
[{A, a}, R, R = a/(2*sin(A))],
[{B, C}, A, A = 180-B-C],
[{B, R}, b, R = b/(2*sin(B))],
[{B, b}, R, R = b/(2*sin(B))],
[{C, R}, c, R = c/(2*sin(C))],
[{C, c}, R, R = c/(2*sin(C))],
[{R, a}, A, R = a/(2*sin(A))],
[{R, b}, B, R = b/(2*sin(B))],
HVTH: Lê Minh Trí (CH1101148) Trang 23
Ứng dụng mô hình mạng tính toán để giải bài toán tam giác
[{R, c}, C, R = c/(2*sin(C))],
[{S, a}, ha, S = (1/2)*a*ha],
[{S, b}, hb, S = (1/2)*b*hb],
[{S, c}, hc, S = (1/2)*c*hc],

[{S, ha}, a, S = (1/2)*a*ha],
[{S, hb}, b, S = (1/2)*b*hb],
[{S, hc}, c, S = (1/2)*c*hc],
[{a, ha}, S, S = (1/2)*a*ha],
[{b, hb}, S, S = (1/2)*b*hb],
[{c, hc}, S, S = (1/2)*c*hc],
[{A, B, a}, b, b = a*sin(B)/sin(A)],
[{A, B, b}, a, b = a*sin(B)/sin(A)],
[{A, C, a}, c, c = a*sin(C)/sin(A)],
[{A, C, c}, a, c = a*sin(C)/sin(A)],
[{A, a, b}, B, b = a*sin(B)/sin(A)],
[{A, a, c}, C, c = a*sin(C)/sin(A)],
[{B, C, b}, c, b = c*sin(B)/sin(C)],
[{B, C, c}, b, b = c*sin(B)/sin(C)],
[{B, a, b}, A, b = a*sin(B)/sin(A)],
[{B, b, c}, C, b = c*sin(B)/sin(C)],
[{C, S, a}, b, S = (1/2)*a*b*sin(C)],
[{C, S, b}, a, S = (1/2)*a*b*sin(C)],
[{C, a, b}, S, S = (1/2)*a*b*sin(C)],
[{C, a, c}, A, c = a*sin(C)/sin(A)],
[{C, b, c}, B, b = c*sin(B)/sin(C)],
[{P, a, b}, c, P = (a+b+c)*(1/2)],
[{P, a, c}, b, P = (a+b+c)*(1/2)],
[{P, b, c}, a, P = (a+b+c)*(1/2)],
[{S, a, b}, C, S = (1/2)*a*b*sin(C)],
[{a, b, c}, P, P = (a+b+c)*(1/2)],
[{P, S, a, b}, c, S = sqrt(P*(P-a)*(P-b)*(P-c))],
[{P, S, a, c}, b, S = sqrt(P*(P-a)*(P-b)*(P-c))],
[{P, S, b, c}, a, S = sqrt(P*(P-a)*(P-b)*(P-c))],
[{P, a, b, c}, S, S = sqrt(P*(P-a)*(P-b)*(P-c))],

[{S, a, b, c}, P, S = sqrt(P*(P-a)*(P-b)*(P-c))]}:
FindSolution := proc (GT, goal)
local Findr, Findhas, r, LoaiThua, SimplifyValues, SimplifySolution;
global Solution, Vknown, Values;
Values := GT;
Vknown := indets(GT);
Solution := [];
Findhas := [];
Findr := proc ()
HVTH: Lê Minh Trí (CH1101148) Trang 24
Ứng dụng mô hình mạng tính toán để giải bài toán tam giác
local r;
for r in Fset do
if nops(`minus`(indets(r[1]), Vknown)) = 0 and
nops(`minus`(indets(r[2]), Vknown)) = 1 then
return r ;
end if;
end do;
return false;
end proc;
while not `subset`(goal, Vknown) do
r := Findr();
if r = false then
return 0;
end if;
Values := `union`(Values, solve(subs(Values, r[3]), {r[2]}));
Vknown := `union`(Vknown, {r[2]}); Findhas := [op(Findhas),
r];
Solution := [op(Solution), solve(r[3], {r[2]})]
end do;

LoaiThua := proc (newVknown)
local i, Vknowntemp;
Vknowntemp := newVknown;
for i to nops(Findhas) do
if not Findhas[i] = null then
if `in`(Findhas[i][2], Vknowntemp) then
Vknowntemp := `union`(Vknowntemp,
Findhas[i][1]);
Findhas[i] := null;
Vknowntemp := LoaiThua(Vknowntemp);
end if;
end if;
end do;
return Vknowntemp;
end proc;
SimplifyValues := proc ()
local tamValues, k;
tamValues := {};
for k in Values do
if `subset`(indets(k), Vknown) then
tamValues := [op(tamValues), k]
end if;
end do;
HVTH: Lê Minh Trí (CH1101148) Trang 25

×