MỤC LỤC
Chương 1. CƠ SỞ LÝ THUYẾT VÀ PHƯƠNG PHÁP NGHIÊN CỨU 6
1. Phương pháp trực tiếp 6
2. Một số nguyên tắc sáng tạo. 6
3. Xây dựng yêu cầu cơ bản cho bài toán 9
Chương 2. ÁP DỤNG PHƯƠNG PHÁP ĐỆ QUY VÀ CÁC NGUYÊN TẮC SÁNG TẠO GIẢI QUYÊT BÀI TOÁN 10
1. Áp dụng 15 nguyên tắc sáng tạo vào bài toán 10
1.1 Áp dụng nguyên tắc 1- Nguyên tắc phân nhỏ 10
1.2 Áp dụng nguyên tắc 5- Nguyên tắc kết hợp 12
1.3 Áp dụng nguyên tắc 3- Nguyên tắc phẩm chất cục bộ 13
1.4 Áp dụng nguyên tắc 2- Nguyên tắc tách khỏi 13
1.5 Áp dụng nguyên tắc 6- Nguyên tắc vạn năng 14
1.6 Áp dụng nguyên tắc 7- Nguyên tắc chứa trong 15
1.7 Áp dụng nguyên tắc 10- Nguyên tắc thực hiện sơ bộ 16
1.8 Áp dụng nguyên tắc 11- Nguyên tắc dự phòng 17
1.9 Áp dụng nguyên tắc 15- Nguyên tắc linh động 18
1.10 Áp dụng nguyên tắc 17- Nguyên tắc chuyển sang chiều khác 19
1.11 Áp dụng nguyên tắc 19- Nguyên tắc hoạt động theo chu kỳ. 20
1.12 Nguyên tắc 26- Nguyên tắc sao chép 20
1.13 Áp dụng nguyên tắc 32- Nguyên tắc thay đổi màu sắc 21
1.14 Áp dụng nguyên tắc 33- Nguyên tắc đồng nhất 22
1.15 Áp dụng nguyên tắc 34- Nguyên tắc phân hủy hay tái sinh các phần 23
2. Áp dụng phương pháp đệ quy để giải quyết vấn đề tìm đường 24
Chương 3. NHỮNG VẤN ĐỀ HẠN CHẾ 26
1. Hạn chế chung khi sử dụng các thủ thuật 26
2. Hạn chế trong giải quyết vấn đề khi áp dụng các thủ thuật 26
30 trang |
Chia sẻ: maiphuongdc | Lượt xem: 1936 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Đề tài Áp dụng một số nguyên tắc và phương pháp trực tiếp trong bài toán Robot tìm đường, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ải có các chất năng khác nhau.
4. Nguyên tắc 5- Nguyên tắc kết hợp
Kết hợp các đối tượng đồng nhất hoặc các đối tượng dùng cho các hoạt động kế cận.
Kết hợp về mặt thời gian các hoạt động đồng nhất hoặc kế cận
5. Nguyên tắc 6- Nguyên tắc vạn năng
Đối tượng thực hiện một số chức năng khác nhau do đó không cần sự tham gia của đối tượng khác.
6. Nguyên tắc 7- Nguyên tắc chứa trong
Một đối tượng chứa bên trong nó đối tượng khác và đối tượng khác đó lại chứa đối tượng thứ 3,…
Một đối tượng chuyển động xuyên suốt bên trong đối tượng khác.
7. Nguyên tắc 10- Nguyên tắc thực hiện sơ bộ
Thực hiện trước sự thay đổi, tác động cần có, hoàn toàn hoặc từng phần, đối tượng với đối tượng.
Cần sắp xếp các đối tượng trước, sao cho chúng có thể hoạt động từ vị trí thuận lợi nhất và không mất thời gian dịch chuyển.
8. Nguyên tắc 11- Nguyên tắc dự phòng
Bù đắp độ tin cậy không lớn của đối tượng bằng cách chuẩn bị trước các phương tiện báo động, ứng cứu dự phòng.
9. Nguyên tắc 15- Nguyên tắc linh động
Cần thay đổi các đặc trưng của đối tượng hay môi trường bên ngoài sao cho chúng tối ưu trong từng giai đoạn làm việc.
Phân chia đối tượng thành từng phần có khả năng dịch chuyển đối với nhau
Nếu đối tượng nhìn chung bất động làm nó di động.
10. Nguyên tắc 17- Nguyên tắc chuyển sang chiều khác
Những khó khăn do chuyển động (hay sắp xếp) đối tượng theo đường (một chiều) sẽ được khắc phục nếu cho đối tượng khả năng di chuyển trên mặt phẳng( hai chiều), tương tự những bài toán liên quan đến chuyển động (hay sắp xếp) các đối tượng trên mặt phẳng sẽ được đơn giản hóa khi chuyển sang không gian (ba chiều).
Chuyển các đối tượng có kết cấu một tầng thành nhiều tầng.
Đặt đối tượng nằm nghiêng.
Sử dụng mặt sau của diện tích cho trước.
Sử dụng các luồng ánh sáng tới diện tích bên cạnh hoặc tới mặt sau của diện tích cho trước
11. Nguyên tắc 19- Nguyên tắc hoạt động theo chu kỳ
Chuyển các tác động liên tục thành tác động theo chu kỳ(xung)
Nếu đã có tác động theo chu kỳ hãy thay đổi chu kỳ
Sử dụng khoảng thời gian giữa các xung để thực hiện tác động khác nhau.
12. Nguyên tắc 26- Nguyên tắc sao chép
Thay vì sử dụng những cái không được phép, phức tạp, đắt tiền, không tiện lợi hoặc dễ vỡ, sử dụng bản sao.
Thay thế đối tượng hoặc hệ các đối tượng bằng bản sao quang học (ảnh, hình vẽ) với các tỷ lệ cần thiết.
Nếu không thể sử dụng bản sao quang học ở vùng biểu kiến (vùng ánh sáng nhìn thấy được bằng mắt thường), chuyển sang sử dụng bản sao hồng ngoại hoặc tử ngoại.
13. Nguyên tắc 32- Nguyên tắc thay đổi màu sắc
Thay đổi màu sắc của đối tượng hay môi trường bên ngoài.
Thay đổi độ trong suốt của đối tượng hay môi trường bên ngoài.
Để có thể quan sát được những đối tượng hoặc những quá trình, sử dụng các chất phụ gia màu, huỳnh quang.
Nếu các chất phụ gia đó đã được sử dụng, dùng các nguyên tử đánh dấu.
Sử dụng các hình vẽ, ký hiệu thích hợp
14. Nguyên tắc 33- Nguyên tắc đồng nhất
Những đối tượng, tương tác với đối tượng cho trước phải được làm từ cùng một vật liệu ( hoặc từ vật liệu gần với các tính chất) với vật liệu chế tạo đối tượng cho trước.
15. Nguyên tắc 34- Nguyên tắc phân hủy hay tái sinh các phần
Phần đối tượng đã hoàn thành nhiệm vụ hoặc trở nên không cần thiết phải tự phân hủy (hòa tan, bay hơi) hoặc phải biếng dạng.
Các phần mất mát của đối tượng phải được phục hồi trực tiếp trong quá trình làm việc.
Xây dựng yêu cầu cơ bản cho bài toán
Xây dựng Robot có các tính năng sau: Tiến 1 bước, lùi 1 bước, xoay trái một góc 45 độ, xoay phải một góc 45 độ. Khoảng đường di chuyển này có thể có một số chướng ngại đất đá mà robot phải vượt qua. Do đó, robot cũng được thiết kế thêm một tính năng để vượt qua các chướng ngại vật có chiều cao thấp hơn hoặc bằng 50 cm. Nếu chướng ngại vật cao hơn 50 cm, robot phải đi vòng. Robot cũng tránh không đi vào các vùng quá trũng. Robot được xây dựng sẵn các nguyên tắc cho việc di chuyển để phù hợp với địa hình trên. Robot được cung cấp một bản đồ địa hình về quãng đường mà nó sẽ phải di chuyển. Trong đó có: các vùng trũng nhiều, các chướng ngại vật đất đá lớn nhỏ khác nhau. Trên bản đồ cần xác định trước vị trí xuất phát của robot và vị trí đích mà robot phải di chuyển đến. Bản đồ có cấu trúc của một ma trận n x n, trên đó mỗi ô có một tọa độ và có thông tin về địa hình của vị trí đó.
ÁP DỤNG PHƯƠNG PHÁP ĐỆ QUY VÀ CÁC NGUYÊN TẮC SÁNG TẠO GIẢI QUYÊT BÀI TOÁN
Vận dụng nguyên lý 6 và một số nguyên tắc sáng tạo để giải quyết toàn bộ vấn đề của bài toán tìm đường đến đích cho Robot. Xây dựng nên cái nhìn tổng quan về toàn bộ quá trình.
Áp dụng 15 nguyên tắc sáng tạo vào bài toán
Thủ thuật sáng tạo là thao tác tư duy đơn lẻ kiểu: Hãy đặc biết hóa bài toán , hãy phân nhỏ đối tượng, hãy làm cho đối tượng linh động…
Khi giải quyết những vấn đề tìm đường, áp dụng cụ thể vào bài toán 15 nguyên tắc sau:
Áp dụng nguyên tắc 1- Nguyên tắc phân nhỏ
Khi xây dựng bản đồ để quản lý toàn bộ bề mặt địa hình của mặt trăng . Vì địa hình quá lớn và có nhiều loại nên cần chia nhỏ địa hình để dễ quản lý. Xây dựng bản đồ để quản lý địa hình và phân nhỏ bản đồ này thành 225 (n*n) vùng con, mỗi vùng là một đối tượng. Số lượng đối tượng có thể được thay đổi: tăng hoặc giàm tùy theo mô hình giải quyết bài toán. Bản đồ này sẽ được quản lý bởi ma trận 2 chiều n*n (15*15) nhằm xác định vị trí của từng vùng trên bản đồ dễ dàng hơn. Nhờ việc phân nhỏ thành các vùng mà ta có thể dễ dàng thay thế các đối tượng vùng, di chuyển đối tượng trên các vùng và nhờ đó mà bản đồ có thêm những tính chất mới: mỗi vùng có một giá trị khác nhau để xác định loại địa hình.
Ngoài ra khi xây dựng code cho chương trình, ta sẽ phân chương trình thành nhiều lớp. Mỗi lớp thực hiện các chức năng nhiệm vụ khác nhau. Ví dụ: xây dựng một lớp robot.cs, một lớp MoonMap.cs, một lớp MyPoint để thể hiện cho từng vùng và một lớp thực hiện các thao tác xử lý.
Các class này có thể được đặt chung trong một class lớn nhưng nên tách ra thành các class riêng biệt , độc lập để quản lý dễ dàng hơn. Muốn mở rộng hơn giả sử có 2,4,5.. con robot di chuyển trên bản đồ thì lúc này xây dựng chương trình đỡ phức tạp.
Hình 1.1 Giao diện của chương trinh Robot tìm đừờng về đích
Khi phân nhỏ đối tượng ta cũng nên kết hợp chúng lại thành thể thống nhất. Các đối tượng này có thể thực hiện nhiều chức năng, mỗi đối tượng thì có tính cục bộ và phải linh động…Vì vậy nguyên tắc phân nhỏ thường đi kèm theo một số nguyên tắc:ckết hợp, vạn năng, cục bộ.. Tiếp theo sau là nguyên tắc kết hợp.
Áp dụng nguyên tắc 5- Nguyên tắc kết hợp
Khi xây dựng nguyên tắc phân nhỏ thường lúc nào cũng có mặt của nguyên tắc kết hợp. Nếu các đối tượng này nằm rời rạc trên bản đồ thì robot không thể di chuyển từ vùng này sang vùng khác. Điều đặc biệt là các đối tượng này phải đồng loại.Trong chương trình xây dựng các đối tượng vùng này đều là đối tượng MyPoint( Đối tượng do ta tự định nghĩa). Các đối tượng này có vị trí trên bản đồ, có các hình ảnh để xác định địa hình là đồng bằng, đầm lầy hay đá cao, đá thấp. Khi nhìn trên giao diện thì ta thấy đó là một tấm ảnh địa hình mặt trăng. Nhưng trên thực tế nó là 225(15*15) phần tử kết hợp lại với nhau tạo thành.
Chương trình là một tổng thể kết hợp từ các class khác nhau. Hay khi sử dụng danh sách liên kết để lưu đường đi của robot thì ta đã sử dụng nguyên tắc kết hợp. Kết hợp nhiều phần tử lại với nhau, mỗi phần tử thể hiện một vùng mà ta đã đi qua.
List PathToTarget = new List()
Hình 1.2 Danh sách liên kết
Ngoài ra, nguyên tắc kết hợp cần hiểu theo nghĩa rộng là thiết lập mối liên kết chớ không đơn thuần là cộng thêm hay gắn thêm, nó kế hợp nhiều chức năng lại để thực hiện toàn bộ yêu cầu của bài toán đặt ra.
Cũng như, ta gán cho mỗi vùng một giá trị. Mỗi đối tượng vùng đó dựa vào giá trị được gán là 0, 1,2 ,3 mà xác định xem đó là loại địa hình gì để kết hợp với hình ảnh địa hình tương ứng đồng thời dựa vào những giá trị đó để xét xem robot có thể di chuyển vào vùng đó hay không.
Như vậy cũng có thể xem nguyên tắc kết hợp là nguyên tắc ngược của nguyên tắc phân nhỏ.
Áp dụng nguyên tắc 3- Nguyên tắc phẩm chất cục bộ
Các vùng đối tượng có thể được thay đổi mà không làm ảnh hưởng đến toàn bộ bản đồ. Ví dụ như trên bản đồ thể hiện khu vực đó là đồng bằng nhưng khi Robot ( ô vuông khac màu ) đi ngang thì vị trí đó được thay thế bởi robot, các vùng lân cận vẫn không thay đổi. Khi Robot đi qua khỏi vị trí đó thì nó được trả về trạng thái ban đầu.
Hình 1.3 Robot di chuyển qua các đối tượng vùng
Hay trong quá trình xây dựng code cho chương trình thường có nhiều thay đổi. Vì vậy người ta chia chương trình thành các class riêng. Trong mỗi class sẽ có các hàm thực hiện các chức năng riêng biệt. Như vậy khi cần thay đổi, sửa chữa ta chỉ cần thay đổi cục bộ mà không ảnh hưởng đến toàn bộ chương trình.
Các phẩm chất cục bộ phát triển từ đơn giản đến phức tạp để tạo ra những ưu điểm riêng biệt. Nguyên tắc phẩm chất cục bộ tạo ra những sản phẩm tối ưu, có thể mở rộng.
Các nguyên tắc kết hợp, phân nhỏ, phẩm chất cục bộ còn phản ảnh khuynh hướng phát triển biện chứng : Sự liên kết , hợp tác hóa đi kèm với sự phân công chức năng nhiệm vụ và chuyên sâu hơn.
Áp dụng nguyên tắc 2- Nguyên tắc tách khỏi
Thiết kế sao cho Robot là một đối tượng riêng biệt so với bản đồ. Robot di chuyển trên bản đồ qua từng vùng và tiến về đích. Bản đồ lúc này thể hiện là nền cho ta nhìn thấy sự di chuyển của Robot. Những thay đổi trên Robot không làm ảnh hưởng đến bản đồ. Như vậy Robot và bản đồ là hai đối tượng riêng biệt.
Hình 1.4 Ma trận bản đồ định vị robot khi di chuyển
Các chương trình có thể quá lớn nên khi xây dựng ta tách ra thành nhiều phần riêng biệt. Chương trình được tách thành các thư mục khác nhau. Như thư mục Resource để chứa các file hình ảnh đưa vào chương trình. Thư mục bin, obj, …
Trong class robot có rất nhiều phần nhưng ta tách phần quản lý tọa độ khi di chuyển thành một class con. Để dễ sử dụng lại nhiều lần mà không phải tốn thời gian và tài nguyên.
Tương tự, khi xây dựng bản đồ để tạo 255, mỗi vùng ta lại phải gán giá trị, gán hình ảnh. Để đơn giản hơn ta tách phần thể hiện các giá trị của mỗi vùng thành 1 file text map.txt sẵn bên ngoài. Viết đoạn chương trình đọc các giá trị trong file text để gán vào từng phần từ. Như vậy khi muốn thay đổi giá trị ta chỉ việc điền giá trị vào file text.
Vì các đối tượng thường có nhiều thành phần tính chất, khía cạnh khác nhau nên nhiều khi ta chỉ cần một trong những số đó. Tách khỏi không có nghĩa là bỏ, là vứt đi mà là cách để tận dụng những tính chất những khả năng đem lại những lợi ích cao nhất.
Nguyên tắc tách khỏi thường đi kèm với nguyên tắc phân nhỏ, kết hợp, cục bộ, nguyên tắc vạn năng ..
Áp dụng nguyên tắc 6- Nguyên tắc vạn năng
Đây là nguyên tắc làm cho đối tượng được cải tiến có nhiều chức năng mới. Tạo ma trận 2 chiều để quản lý bản đồ. Mỗi phần tử của mảng vừa chịu sự quản lý của mảng vừa được dùng cho nhiều nhiệm vụ khác nhau.Ví dụ như giá trị của mỗi phần tử vùng vửa để thể hiện hình ảnh loại địa hình: đá cao, đá thấp, vùng đàm lầy hay đồng bằng, vừa dùng thể hiện robot hay là đích. Nếu phần tử nào là robot hay là đích sẽ được gán hình ảnh khác để thay thế cho hình ảnh loại địa hình.
Ví dụ khác, khi ta đánh dầu vị trí đích mà Robot phải đi đến. Để cải tiến chương trình, sau khi robot di chuyển đến đích thì biến vị trí đích thành vị trí xuất phát mới của Robot. Như vậy Robot sẽ tiếp tục di chuyển đến đích mới. Một vị trí vừa là đích đến vừa là điểm xuất phát.
Hình 1.5 Đánh dấu vị trí vừa là đích vừa là điểm xuất phát
Xét theo một ý nghĩa nào đó thì nguyên tắc vạn năng là trường hợp riêng của nguyên tắc kết hợp. Kết hợp nhiều chức năng trên cùng một đối tượng. Nguyên tắc này làm cho các đối tượng trở nên linh động hơn và thực hiện nhièu chức năng khác nhau làm cho chương trình đơn giản hơn.
Áp dụng nguyên tắc 7- Nguyên tắc chứa trong
Đối tượng robot di chuyển xuyên suốt bên trong bản đồ. Bản đồ là một đối tượng lớn chứa đối tượng robot.Vi dụ khác, khi xây dựng chương trình, thường xuất hiện trường hợp class này lồng class khác vào bên trong của nó, và hàm này gọi hàm khác.Ví dụ trong class Robot thì sử dụng class vec.cs để xác định vị trí của robot trên bản đồ.
Trong class MoonMap.cs thì khai báo class Mypoint.cs. Hay trong hàm ClickMap() (đánh dấu vị trí đích mà robot cần di chuyển đến) ta phải gọi hàm SearchPath() kiểm tra xem vị trí đó robot có thể đi được hay không.
public void MapClick(object sender, EventArgs e)
{
// Reset MapFooted va bat dau goi de qui tim duong di
Map.ResetFooted();
// Xoa du lieu cu trong PathToTarget
robo.ClearPath();
if (SearchPath(robo.srcPoint, target) == true)
{
robo.ResetMove();
timer.Enabled = true;
Map.Reset(robo.targetPoint);
Map.SetTarget(target);
robo.targetPoint = target;
}
}
Trong hàm khởi tạo gọi hàm Tick() thời gian, sau 1 lần tick thì robot sẽ di chuyển thêm một bước.
Xét theo một góc độ nào đó thì chứa trong là một trường hợp riêng của nguyên tắc phẩm chất cục bộ. Phân biệt”trong” ,”ngoài”giúp vấn đề được giải quyết một cách đơn giản.
Nguyên tắc chứa trong thường dùng kết hợp với phân nhỏ, tách khỏi, vạn năng….
Áp dụng nguyên tắc 10- Nguyên tắc thực hiện sơ bộ
Trước khi Robot thực hiện di đến bước tiếp theo thì cần phải được kiểm tra xem vị trí đó có thể di chuyển được hay không để giảm thời gian di chuyển cũng như tiết kiệm đường đi.
Khi viết chương trình, để người khác nhìn vào có thể hiểu được để chạy cho đúng. Người ta thường tạo ra phần hướng dẫn để sử dụng chương trình.Ví dụ trong bài toán tìm đường này, khi chạy chương trình, đầu tiên sẽ hiện ra hướng dẫn:
Hình 1.6 Hướng dẫn sử dụng chương trình
Khi đọc hướng dẫn này thì người chạy chương trình dễ dàng sử dụng chương trình. Biét cách đánh dấu vị trí đích đến.
Nguyên tắc này đòi hỏi khả năng thực hiện trước một phần nào đó hoặc toàn bộ và đạt được rất nhiều lợi ích. Nguyên tắc thực hiện sơ bộ giúp đề ra cách giải quyết vấn đề. Có thể dựa vào tuần tự thời gian mà ta sắp xếp trước các sự việc. Từ thủ thuật này ta hiểu vấn đề muốn thực hiện tốt bất cứ việc gì cần có sự chuẩn bị một cách toàn diện chu đáo.
Chuẩn bị tốt là đã giành được một phần trong sự thành công.
Áp dụng nguyên tắc 11- Nguyên tắc dự phòng
Nguyên tắc này được xây dựng để kịp thời báo hiệu những vấn đề rắc rối. Ví dụ những vị trí không được phép đánh dấu như trên đá hay đầm lầy thì khi click chuột vào đó sẽ hiện ra thông báo khu vực này không được đánh dấu.
Hình 1.7 Cảnh báo lỗi không tìm thấy đường đi khi đánh dấu sai vị trí
Khi tập tin map.txt có lỗi: sửa giá trị không hợp lệ, thiếu phần tử, file hỏng do virut phá hoại,..thì chương trình không đọc được giá trị để gán vào các phần tử trong mảng hai chiều. Trong trường hợp này chương trình sẽ hiện ra thông báo lỗi:
Hình 1.8 Lỗi không load được bản đồ
Và để dự phòng cho trường hợp này, ta tạo một file bản đồ dự phòng. Trường hợp bản đồ đầu tiên không load được thì sẽ hiện ra thông báo và bước tiếp theo chương trình sẽ tự động load file bản đồ dự phòng.
Có thể nói nguyên tắc dự phòng là phần chi phi thêm làm tăng độ tin cậy cho đối tượng, chương trình. Nguyên tắc này nhằm chuẩn bị các biện pháp để đối phó với những rủi ro, những bất ngờ , những lỗi mắc phải. Nguyên tắc dự phòng giúp chương trình hoạt động với độ tin cậy cao nhất.
Áp dụng nguyên tắc 15- Nguyên tắc linh động
Vị trí bắt đầu xuất phát được khởi tạo trước đáng lẽ là bất động như vì linh động nên ta thiết kế chương trình sao cho khi Robot đã đi đến đích thì từ đích đó lại đi đến một đích khác.Như vậy vị trí xuất phát đã bị thay đổi.
Một trường hợp khác, ta có thể sửa giá trị của các phần tử của bản đồ mảng hai chiều. Như vậy giá trị được gán bằng tay, có thể thay đổi linh động để tối ưu chương trình.
Các hằng số được định nghĩa trong chương trình: độ lớn bản đồ, thời gian Tick() (Thời gian để Robot di chuyển một bước đi),…có thể thay đổi tùy ý. Các biến khởi tạo trong chương trình có thể thay đổi giá trị tùy theo từng trường hợp cụ thể .
Nguyên tắc này giúp đối tượng có những thay đồi phù hợp theo thời gian, theo từng trường hợp cụ thể, tạo ra sự thống nhất chặt chẽ cho chương trình. Giúp chương trình phát triển có định hướng. Sự thay đổi cần hiểu theo nghĩa rộng về mọi mặt: bản chất, chức năng, giá trị ,.. sao cho tạo mối liên kết giúp chương trình tối ưu trong từng giai đoạn. Tư duy sáng tạo không chỉ là áp dụng lý thuyết mà phải biết cách vận dụng linh động sao cho đạt hiệu quả cao nhất. Đây chính là đặc trưng của môn phương pháp luận sáng tạo khoa học.
Áp dụng nguyên tắc 17- Nguyên tắc chuyển sang chiều khác
Trên thực tế bản đồ địa hình cần phải lớn. Khi Robot di chuyển cần chọn bước tiếp theo sao cho có thể về đich nhanh nhất. Nhưng trong quá trình di chuyển do gặp phải chướng ngại vật: đá lớn, đầm lầy làm cho Robot không thể di chuyển được theo chiều ban đầu. Lúc này Robot cần thực hiện động tác xoay đổi chiều để tìm chiều thích hợp cho việc di chuyển.
Hình 1.9 Robot xoay đổi chiều tìm đường thích hơp đi về đích
Khi duyệt mảng các phần tử thường ta sẽ duyệt từ đầu mảng đến cuối mảng, nhưng có một vài trường hợp người ta cần duyệt tìm theo chiều ngược lại. Hệ trục tọa độ trong không gian này được xây dựng theo chiều âm và chiều dương. Có đôi khi ta không cho Robot đi theo chiều dương mà phải đi theo chiều âm về phía cuối bản đồ để về đích tùy thuộc vào vị trí của Robot và bản đồ lúc đó.
Nguyên tắc chuyển sang chiều khác cho ta cái nhìn tổng quan, nhìn từ nhiều khía cạnh khác nhau. Tránh tính ì tâm lý trong việc sử dụng một chiều nào đó vốn đã quen thuộc.
Chuyển đổi “chiều” giúp giải quyết vấn đề linh động hơn, trong nhiều trường hợp lại có thêm nhiều khả năng hay hơn, nhiều tính chất mới hơn giúp cho chương trình đạt hiệu quả cao hơn. Đây là cách giải quyết vấn đề đặc biệt, cần có cái nhìn linh động sáng tạo trong mọi trường hợp.
Áp dụng nguyên tắc 19- Nguyên tắc hoạt động theo chu kỳ.
Câu hỏi đặt ra:”Làm thế nào để Robot biết khi nào thì di chuyển sang vị trí tiếp theo?” Hàm tick() thời gian được Csharp hỗ trợ sẵn cho người dùng, sau một thời gian do ta qui định thì robot sẽ bước đi một bước. Và cứ theo chu kì như vậy , các bước di chuyển sẽ lặp đi lặp lại cho đến khi nào về đến đích.
void timerTick(object sender, EventArgs e)
{
// Ngung dong ho khi xong di chuyen den diem dich
if (robo.Move() == false)
timer.Enabled = false;
}
Thời gian này có thể được thay đổi tùy theo người lập trình sao cho phù hợp với chương trình. Chỉ cần đặt lại giá trị thời gian.
Ngoài ra, sau khi di chuyển một bước thì lúc nào robot cũng phải gọi hàm kiểm tra để xác định vị trí kế tiếp nào sẽ được lựa chọn. Hoạt động kiểm tra lặp lại trong suốt quá trình di chuyển.
Tác động theo chu kỳ tạo ra những tính chất mới khác biệt giúp cho những vấn đề không có hướng đi được giải quyết nhanh chóng. Đó là lý do vì sao nguyên lý hoạt động theo chu kì được áp dụng rất nhiều trong các ứng dụng, các chương trình khác nhau. Giúp giâỉ quyết vấn đề gọn nhẹ và thực hiện dễ dàng. Có thể cải tiến , thay đổi chu kỳ theo những tác động khác nhau. Có thể tác động thành chu kỳ liên tục có ích theo thời gian hay làm ngược lại để tạo ra hiệu quả tốt nhất.
Nguyên tắc 26- Nguyên tắc sao chép
Thay vì phải viết lại một đoạn chương trình nhièu lần, người ta nghĩ ra các lớp con kế thừa từ lớp cơ sở. Như vậy ta chỉ cần lấy các hàm, các biến trong lớp cơ sở ra sử dụng. Hay trường hợp ta khai báo đối tượng nào đó, khi khai báo nhiều đối tượng cùng loại thì các đối tượng có cùng bản chất giống nhau.
Cụ thể trong chương trình ta xây dựng lớp Mypoint được kế thừa từ lớp PictureBox để lấy đặc tính chèn hình ảnh của PictureBox khi ta load bản đồ lên. Nhờ PictureBox mà ta dễ dàng thay đổi hình ảnh( Khi phần tử mang giá trị 0 là đất liền, 1 là đá cao, 2 là đá thấp, 3 là đất trũng).
class MyPoint : PictureBox
{
public Vec2 Position;
public Image colour;
public int type;
public MyPoint(Vec2 pos)
{
Position = pos;
type = 0;
colour = global::Robotthamhiemmattrang.Properties.Resources.ground2;
}
Sử dụng nguyên tắc sao chép có thể tiết kiệm chi phí, thời gian. Ngoài ra, có những trường hợp không thể thay đổi trên bản gốc ta có thể thực hiện trên bản sao. Đặc biệt trên bản sao ta có thể thêm vào các tính năng mới. Như trong trường hợp kế thừa, ta có thể tạo thêm các biến, các hàm, các đặc tính tùy theo yêu cầu sao cho phù hợp với chương trình. Nguyên tắc này giúp ta mở rộng vấn đề và giải quyết gọn gàng, nhanh chóng.
Áp dụng nguyên tắc 32- Nguyên tắc thay đổi màu sắc
Địa hình của mặt trăng có nhiều loại khác nhau, làm sao để thể hiện trên bản đồ. Nhờ vào màu sắc khác nhau mà ta phân biệt.Ví dụ như đầm lầy có màu xám của đất sình, đá lớn có màu khác, đá nhỏ, đồng bằng có màu khác. Dựa vào những đặc trưng đó khi nhìn vào bản có thể phân biệt.
Hình 1.10 Hình ảnh các loại địa hình
Điểm đặt biệt là vị trí đích được đánh dấu chéo màu đỏ để nổi bật trên bản đồ và màu vàng thề hiện cho robot. Mỗi khi robot di chuyển sang vùng mới thì vùng đất tại đó biến thành màu vàng, thể hiện cho hình ảnh của Robot.
Trong Csharp có hỗ trợ tính năng trong suốt. Tùy vào vấn đề khác nhau mà ta thiết lập độ trong suốt khác nhau.Ví dụ trong bài toán này, ta có thể chỉnh độ trong suốt của thể hiện cho Robot theo tỷ lệ phần trăm phù hợp để robot khi di chuyển ngang qua các vùng ta vẫn nhận biết được loại địa hình của vùng đất đó. Lúc này Robot không che phủ mà hoàn toàn vùng đó.
Phát triển chương trình theo hướng đa dạng hóa thu hút sự ưa thích của người sử dụng. Nguyên tắc thay đổi màu sắc được sử dụng phổ biến vì thị giác của con người phát triển và đóng vai trò quan trọng: hơn 90 % thông tin bên ngoài được tiếp nhận bằng thị giác. Màu sắc kích thích trí tưởng tượng, thu hút thị giác và tạo nhiều cảm xúc, cảm giác khác nhau cho con người. Nguyên tắc này giúp quá trình truyền, phát, biến đổi, thu nhận, xử lý thông tin trở nên thông suốt hơn. Màu sắc có nhiều màu không nên sử dụng một màu nào đó theo thói quen. Phải tùy thuộc vào môi trường hoàn cảnh để sử dụng màu tương ứng. Tạo được cái nhìn bao quát và xứ lý thông tin nhanh.
Áp dụng nguyên tắc 33- Nguyên tắc đồng nhất
Các phần tử trong mảng hai chiều đều cùng là một loại đối tượng giống nhau. Các phần tử đều thuộc kiểu Pos để giúp robot dề dàng di chuyển từ vùng này sang vùng khác.
public MyPoint[,] Pos
Ngoài ra, khi tạo được sự đồng nhất giữa các đối tượng giúp cho chương trình được gắn kết một cách chặt chẽ. Khi đó, sự thay đổi trên các đối tượng được thực hiện dễ hơn, và tiết kiệm chi phí hơn.
Trong chương trình, khi thay đồi số phần tử của mảng hai chiều ta phải thay đổi luôn file Map.txt để đảm bảo tính đồng bộ chương trình. Số phần tử của mảng phải giống với số lượng giá trị được tạo trong file Map. Nếu không giống nhau chương trình không thể load được bản đồ. Và như vậy chương trình sẽ bị lỗi.
Một trường hợp khác, khi thay đổi tên hình ảnh trong resource, thì trong chương trình ta cũng phải sửa luôn code chèn hình ảnh cho trùng tên. Nếu không chương trình không thể tìm thấy được hình ảnh cần load.
Từ “đồng nhất” phải được hiểu theo nghĩa rộng , không đơn thuần là đồng nhất về vật liệu như nghĩa đen của thủ thuật. Ý nghĩa thật sự của nó là phải làm sao cho chương trình đạt đến sự đòng nhất, sự tương hợp giữa các đối tượng. Sự tương hợp phải được thể hiện ở nhiều mặt. Sử dụng nguyên tắc này giúp định hướng cho việc đánh giá tốt hơn, dự báo bước phát triển tiếp theo sau của đối tượng. Sự tương hợp cho phép chương trình hoạt động một cách hiệu quả hơn.
Thủ thuật này được sử dụng kết hợp với các nguyên tắc khác:Chứa trong, kết hợp….
Áp dụng nguyên tắc 34- Nguyên tắc phân hủy hay tái sinh các phần
Danh sách liên kết một chiều là một danh sách quản lý các phần tử, trong phần tử đầu có con trỏ chứa địa chỉ của phần kế tiếp. Như vậy thì phần tử kế cuối sẽ quản lý phần từ sau cùng. Nếu sử dụng danh sách hai chiều ta sẽ có thêm con trỏ để quản lý phần tử trước nó.
Hình 1.11 Trường hợp phải hủy bỏ một phần tử trong danh sách
Trong bài này, ta dùng danh sách liên kết để lưu đường đi của Robot. Mỗi khi robot đi qua vùng kế tiêp nó sẽ lưu thêm phần tử mới vào danh sách. Tuy nhiên có nhiều lúc đá được xếp theo hình chữ U nên khi Robot tiến đến đáy thì không thể đi tiếp. Lúc này, danh sách liên kết sẽ hủy bỏ phần tử cuối danh sách và quá trình này sẽ lặp lại cho đến vị trí mà Robot tại phần tử đó có thể đi đến đích theo hướng khác.
private List PathToTarget = new List();
Ngoài ra, cũng sử dụng nguyên lý này để mô tả cho quá trình di chuyển của robot. Vì trên bản đồ chỉ có một con robot duy nhất nên khi robot quavùng tiếp theo thì robot ở vùng cũ bị mất đi. Có cảm giác giống như lấy hủy robot ở phần tử này rồi cho nó hiện ra ở phần tử khác. Thời gian thực hiện quá trình này cũng thương đối nhanh. Nguyên tắc này tạo ra sự thống nhất giữa hai mặt đối lập: “có ” và “không”. Đối tượng tồn tại trong khoảng thời gian này và không tồn tại ở thời gian khác.
Nguyên tắc này có tính định hướng cao. Do đó nguyên tắc này rất có giá trị trong việc đánh giá, đặt vấn đề và giải quyết khuynh hướng phát triển của đối tượng,…
Ng
Các file đính kèm theo tài liệu này:
- M7908C L7908Cwww.doc