Tôi có một tập hợp lớn các đối số triết học, mỗi đối số kết nối với các đối số khác làm bằng chứng hoặc loại bỏ một tuyên bố đã cho. Một câu lệnh gốc có thể có nhiều bằng chứng và cách ly, mỗi cái cũng có thể có bằng chứng và cách ly. Các câu lệnh cũng có thể được sử dụng trong nhiều đồ thị và đồ thị có thể được phân tích theo "ngữ cảnh cụ thể" hoặc giả định.Sử dụng Goroutines của Google Go để tạo một mạng Bayes
Tôi cần xây dựng một mạng lưới các đối số liên quan đến Bayes để mỗi nút truyền tải ảnh hưởng khá chính xác đến các đối số được kết nối; Tôi cần để có thể tính toán xác suất của chuỗi các nút kết nối đồng thời, với mỗi nút yêu cầu tra cứu kho dữ liệu phải chặn để có được kết quả; quá trình này chủ yếu là I/O bị ràng buộc, và kết nối kho dữ liệu của tôi có thể chạy không đồng bộ trong java, go và python {google appengine}. Khi mỗi lần tra cứu hoàn thành, nó sẽ truyền các hiệu ứng cho tất cả các nút được kết nối khác cho đến khi delta xác suất giảm xuống dưới ngưỡng không liên quan {hiện tại là 0,1%}. Mỗi nút của quá trình phải tính chuỗi các kết nối, sau đó tổng hợp tất cả các kết quả trên tất cả các truy vấn để điều chỉnh kết quả hợp lệ, với kết quả bị xích ra ngoài với bất kỳ đối số được kết nối nào. Để tránh bị lặp lại vô hạn, tôi đã nghĩ đến việc sử dụng quy trình A * trong goroutines để truyền bá bản cập nhật cho các bản đồ đối số, với một heuristic dựa trên ảnh hưởng kép mà bỏ qua các nút khi xác suất ảnh hưởng giảm xuống dưới, 0,1%. Tôi đã cố gắng để thiết lập các tính toán với SQL gây nên, nhưng nó đã phức tạp và cách lộn xộn quá nhanh. Sau đó, tôi chuyển sang google appengine để tận dụng lợi thế của nosql không đồng bộ, và nó đã được tốt hơn, nhưng vẫn còn quá chậm. Tôi cần phải chạy các bản cập nhật đủ nhanh để có giao diện người dùng linh hoạt, vì vậy khi người dùng tạo hoặc bỏ phiếu hoặc chống lại bằng chứng hoặc không sử dụng, họ có thể thấy kết quả được phản ánh trong giao diện người dùng ngay lập tức.
Tôi nghĩ Go là ngôn ngữ được lựa chọn để hỗ trợ đồng thời mà tôi cần, nhưng tôi mở để đưa ra đề xuất. Ứng dụng khách là một ứng dụng javascript nguyên khối chỉ sử dụng XHR và websockets để đẩy và kéo các bản đồ đối số {và các bản cập nhật của chúng} trong thời gian thực. Tôi có một nguyên mẫu java có thể tính toán các chuỗi lớn trong 10 ~ 15 giây, nhưng theo dõi hiệu suất cho thấy rằng hầu hết thời gian chạy của tôi bị lãng phí trong đồng bộ hóa và chi phí từ ConcurrentHashMap.
Nếu có các ngôn ngữ khác cùng lúc đáng để thử, vui lòng cho tôi biết. Tôi biết java, python, go, ruby và scala, nhưng sẽ học bất kỳ ngôn ngữ nào nếu nó phù hợp với nhu cầu của tôi.
Tương tự, nếu có các triển khai nguồn mở của mạng Bayes lớn, vui lòng để lại gợi ý.
Một ứng dụng thú vị, nhưng câu hỏi của bạn chính xác là gì? – Sonia
Vâng, cụ thể, tôi muốn biết liệu có bất kỳ tiêu chuẩn tiền lệ/công nghiệp nào để tính toán các mạng Bayesian khổng lồ hay không và liệu các goroutine có được tối ưu hóa cho công việc này như chúng dường như không. – Ajax