8

Như tôi đã đề cập trong các câu hỏi trước, tôi viết một ứng dụng giải quyết mê cung để giúp tôi tìm hiểu thêm về các môn học lý thuyết CS, sau một số rắc rối tôi có một thuật toán di truyền có thể phát triển một bộ quy tắc (được xử lý bởi các giá trị boolean) để tìm một giải pháp tốt thông qua một mê cung. Điều đó đang được nói, GA một mình là ổn, nhưng tôi muốn bò nó lên với một mạng lưới thần kinh, mặc dù tôi không có kiến ​​thức làm việc thực tế của mạng thần kinh (không có giáo dục CS lý thuyết chính thức). Sau khi đọc một chút về chủ đề này, tôi thấy rằng một mạng thần kinh có thể được sử dụng để đào tạo một bộ gen để cải thiện kết quả. Hãy nói rằng tôi có một bộ gen (nhóm gen), chẳng hạn nhưTăng cường GA của tôi với các mạng nơron và/hoặc tăng cường học tập

1 0 0 1 0 1 0 1 0 1 1 1 0 0... 

Làm thế nào tôi có thể sử dụng một mạng thần kinh (tôi giả sử MLP?) Để đào tạo và nâng cao bộ gen của tôi? Ngoài việc này vì tôi không biết gì về mạng nơron tôi đã xem xét triển khai một số dạng học tập tăng cường, sử dụng ma trận mê cung của tôi (mảng 2 chiều), mặc dù tôi có chút khó khăn về thuật toán sau đây muốn từ tôi:

(từ http://people.revoledu.com/kardi/tutorial/ReinforcementLearning/Q-Learning-Algorithm.htm)

1. Set parameter , and environment reward matrix R 
    2. Initialize matrix Q as zero matrix 
    3. For each episode: 
      * Select random initial state 
      * Do while not reach goal state 
       o Select one among all possible actions for the current state 
       o Using this possible action, consider to go to the next state 
       o Get maximum Q value of this next state based on all possible actions 
       o Compute 
       o Set the next state as the current state 

    End Do 

    End For 

các vấn đề lớn đối với tôi là thực hiện một ma trận thưởng R và những gì một ma trận Q chính xác là, và nhận được giá trị Q. Tôi sử dụng một mảng đa chiều cho mê cung và trạng thái enum của tôi cho mỗi cử động. Làm thế nào điều này sẽ được sử dụng trong một thuật toán Q-Learning?

Nếu ai đó có thể giúp bằng cách giải thích những gì tôi cần làm để thực hiện những điều sau, tốt nhất là trong Java mặc dù C# cũng sẽ tốt hơn, có thể với một số ví dụ mã nguồn.

+1

Đây là một chủ đề rất phức tạp. Những điều bạn đang nói đến thường được giải quyết trong một học kỳ đầy đủ của một khóa học đại học trong AI. Tôi không chắc chắn họ có thể được thực sự giải quyết đúng trong một câu hỏi Stackoverflow một câu trả lời, nhưng tôi chắc chắn sẽ được quan tâm thấy mọi người cố gắng. Tôi chưa bao giờ hoàn toàn quấn đầu xung quanh một số thuật toán này. –

+0

Trên một lưu ý phụ, nếu bạn sẵn sàng chi tiêu một số tiền mặt vào một cuốn sách văn bản thực sự tốt về chủ đề sau đó tôi có thể đề nghị: http://www.amazon.com/Artificial-Intelligence-Modern-Approach-3rd/dp/0136042597/ref = sr_1_1? Ie = UTF8 & s = books & qid = 1268837913 & sr = 1-1 –

+0

Tôi đã liếc nhìn cuốn sách đó một vài lần và mặc dù nó đưa ra một nền tảng lý thuyết phong phú về chủ đề hiểu cách nó có thể được thực hiện đang giết chết tôi . Nếu ai đó có thể viết ra một giải pháp cơ bản có thể làm việc với thông tin tôi đã cung cấp, ngay cả khi nó nằm trong mã giả, tôi sẽ đủ hạnh phúc để thử và thực hiện nó và đưa ra một câu trả lời được chấp nhận. – AlexT

Trả lời

3

Như đã lưu ý trong một số nhận xét, câu hỏi của bạn thực sự liên quan đến một tập hợp kiến ​​thức cơ bản và chủ đề khó có thể được đề cập rõ ràng trên stackoverflow. Tuy nhiên, những gì chúng tôi có thể thử ở đây là đề xuất các cách tiếp cận để giải quyết vấn đề của bạn.

Trước hết: GA của bạn làm gì? Tôi thấy một tập hợp các giá trị nhị phân; họ là ai? Tôi thấy họ là một trong hai:

  • xấu: một chuỗi các 'rẽ phải' và 'rẽ trái' hướng dẫn. Tại sao điều này xấu? Bởi vì về cơ bản bạn đang thực hiện một nỗ lực ngẫu nhiên, bạo lực để giải quyết vấn đề của mình.Bạn không phát triển kiểu gen: bạn đang tinh chỉnh các dự đoán ngẫu nhiên.
  • tốt hơn: mọi gen (vị trí trong bộ gen) thể hiện một tính năng sẽ được thể hiện trong kiểu hình. Không nên có bản đồ 1-1 giữa bộ gen và kiểu hình!

Hãy để tôi cung cấp cho bạn một ví dụ: trong bộ não của chúng tôi có 10^tế bào thần kinh 13. Nhưng chúng tôi chỉ có khoảng 10^9 gen (có, nó không phải là một giá trị chính xác, trần với tôi trong một giây). Điều này cho chúng ta biết điều gì? Kiểu gen của chúng tôi không mã hóa mọi nơron. Bộ gen của chúng tôi mã hóa các protein mà sau đó sẽ đi và tạo ra các thành phần của cơ thể chúng ta.

Do đó, quá trình tiến hóa hoạt động trực tiếp trên kiểu gen bằng cách chọn tính năng của kiểu hình. Nếu tôi có 6 ngón tay trên mỗi bàn tay và nếu điều đó làm cho tôi trở thành một lập trình viên tốt hơn, tôi sẽ có nhiều con hơn vì tôi thành công hơn trong cuộc sống, thì kiểu gen của tôi sẽ được chọn bởi sự tiến hóa vì nó chứa khả năng để cung cấp cho tôi một cơ thể phù hợp hơn (vâng, có một sự trừng phạt ở đó, với tỷ lệ trung bình-tái-tái sinh của hầu hết mọi người ở đây).

Bây giờ, hãy nghĩ về GA của bạn: bạn đang cố gắng đạt được điều gì? Bạn có chắc chắn rằng các quy tắc phát triển sẽ giúp ích? Nói cách khác - làm cách nào để bạn thực hiện trong mê cung? Điều gì thành công nhất có thể giúp bạn: có một cơ thể khác, hoặc có một ký ức về con đường đúng đắn để thoát ra? Có lẽ bạn có thể muốn xem xét lại kiểu gen của bạn và có mã hóa khả năng ghi nhớ. Có thể mã hóa trong kiểu gen có bao nhiêu dữ liệu có thể được lưu trữ, và các đại lý của bạn có thể truy cập nhanh đến mức nào - sau đó đo lường khả năng tập thể dục về tốc độ thoát ra khỏi mê cung. Cách tiếp cận khác (yếu hơn) có thể là mã hóa các quy tắc mà tác nhân của bạn sử dụng để quyết định nơi cần đi. Các tin nhắn mang về nhà là, mã hóa các tính năng mà, một khi thể hiện, có thể được lựa chọn bởi tập thể dục.


Bây giờ, đến vấn đề mạng thần kinh. Một điều cần nhớ là các NN là bộ lọc. Họ nhận được đầu vào. thực hiện các thao tác trên nó và trả về một đầu ra. Đầu ra này là gì? Có lẽ bạn chỉ cần phân biệt một điều kiện đúng/sai; ví dụ, khi bạn nạp một bản đồ mê cung vào một NN, nó có thể cho bạn biết nếu bạn có thể thoát khỏi mê cung hay không. Làm thế nào bạn sẽ làm một điều như vậy? Bạn cần phải mã hóa dữ liệu chính xác.

Đây là điểm mấu chốt về NN: dữ liệu đầu vào của bạn phải được mã hóa đúng cách. Thông thường mọi người bình thường hóa nó, có thể mở rộng nó, có lẽ bạn có thể áp dụng một hàm sigma cho nó để tránh các giá trị quá lớn hoặc quá nhỏ; đó là những chi tiết giải quyết các biện pháp và hiệu suất lỗi. Những gì bạn cần hiểu bây giờ là NN là gì, và những gì bạn không thể sử dụng nó cho.

Để khắc phục sự cố của bạn ngay bây giờ. Bạn nói bạn muốn sử dụng NNS cũng như: những gì về,

  • sử dụng một mạng lưới thần kinh để hướng dẫn các đại lý, và
  • sử dụng một thuật toán di truyền để phát triển các thông số mạng thần kinh?

rephrased như vậy:

  • chúng ta hãy giả sử bạn có một robot: NN của bạn đang kiểm soát trái và phải bánh xe, và như là đầu vào mà nó nhận được khoảng cách của bức tường tiếp theo và bao nhiêu nó đã đi du lịch cho đến nay (chỉ là một ví dụ)
  • bạn bắt đầu bằng cách tạo một kiểu gen ngẫu nhiên
  • biến kiểu gen thành kiểu hình: gen đầu tiên là độ nhạy mạng; gen thứ hai mã hóa tỷ lệ học tập; gen thứ ba .. vân vân và vân vân
  • bây giờ mà bạn có một mạng thần kinh, chạy mô phỏng
  • xem làm thế nào nó thực hiện
  • tạo ra một kiểu gen ngẫu nhiên thứ hai, phát triển thứ hai NN
  • xem có bao thứ hai này Thực hiện cá nhân
  • được cá nhân tốt nhất, sau đó, hoặc đột biến di truyền hoặc recombinate nó với những kẻ thua cuộc
  • lặp lại

có một xuất sắc đọc về vấn đề ở đây: Inman Harvey Microbial GA.

Tôi hy vọng tôi đã làm bạn một số thông tin chi tiết về các vấn đề đó. NN và GA không có viên đạn bạc để giải quyết mọi vấn đề. Trong một số họ có thể làm rất nhiều, ở những người khác họ chỉ là công cụ sai. Đó là (vẫn!) Cho chúng tôi để có được tốt nhất, và để làm như vậy chúng ta phải hiểu họ tốt.

Vui chơi trong đó! Thật tuyệt khi biết những điều như vậy, làm cho cuộc sống hàng ngày một chút thú vị hơn :)

+0

Chỉnh sửa nhẹ. Có khoảng 10^9 cặp base trong hệ gen của con người. Có khoảng 20.000 đến 25.000 gen.Cần bao nhiêu thứ để xây dựng bộ não mà tôi không thể nói, – Spike

1

Có lẽ không có 'gen mê cung' để tìm,

thuật toán di truyền đang cố gắng thiết lập một vector của các tài sản và một 'hệ thống lọc để quyết định bởi một số loại 'surival của fittest' thuật toán để tìm trong đó tập hợp các thuộc tính sẽ làm công việc tốt nhất.

Cách dễ nhất để tìm đường ra khỏi mê cung là di chuyển luôn luôn sang trái (hoặc phải) dọc theo tường.

Thuật toán Q dường như có vấn đề với local maxima điều này đã được giải quyết như tôi nhớ bằng cách đá (thêm giá trị ngẫu nhiên vào ma trận) nếu kết quả không được cải thiện.

EDIT: Như đã đề cập ở trên, thuật toán backtracking phù hợp với tác vụ này tốt hơn GA hoặc NN. Cách kết hợp cả hai thuật toán được mô tả hereNeuroGen mô tả cách GA được sử dụng để đào tạo NN.

0
  • Hãy thử sử dụng các nguồn NerounDotNet C# thư viện mở miễn phí cho các mạng thần kinh của bạn thay vì thực hiện nó.

  • Đối với thư viện Cốt Learning, Tôi hiện đang tìm kiếm cho một, đặc biệt đối với Dot NET framework ..

Các vấn đề liên quan