Tôi đang có rất nhiều niềm vui học Python bằng cách viết một loại lập trình di truyền của ứng dụng.Tôi cần tăng tốc một chức năng. Tôi có nên sử dụng cython, ctypes hay cái gì khác không?
Tôi đã có một số lời khuyên tuyệt vời từ Torsten Marek, Paul Hankin và Alex Martelli trên trang web này.
Chương trình có 4 chức năng chính:
- tạo (ngẫu nhiên) một cây biểu thức.
- đánh giá sự phù hợp của cây
- lai
- đột biến
Như tất cả các tạo, lai và đột biến gọi 'đánh giá tập thể dục. nó là chức năng bận rộn nhất và là nút cổ chai chính theo chiều kim đồng hồ.
Như bản chất của thuật toán di truyền, nó phải tìm kiếm một không gian giải pháp bao la để nhanh hơn thì càng tốt. Tôi muốn tăng tốc từng chức năng này. Tôi sẽ bắt đầu với bộ đánh giá thể lực. Câu hỏi của tôi là cách tốt nhất để làm điều này là gì. Tôi đã nhìn vào cython, ctypes và 'liên kết và nhúng'. Họ là tất cả mới đối với tôi và khá xa hơn tôi vào lúc này nhưng tôi mong muốn học một và cuối cùng tất cả chúng.
'Chức năng thể dục' cần so sánh giá trị của cây biểu thức với giá trị của biểu thức mục tiêu. Vì vậy, nó sẽ bao gồm một bộ đánh giá postfix sẽ đọc cây theo thứ tự postfix. Tôi có tất cả các mã trong python.
Tôi cần lời khuyên mà tôi nên tìm hiểu và sử dụng ngay bây giờ: cython, ctypes hoặc liên kết và nhúng.
Cảm ơn bạn.
Khi bạn đang sử dụng hồ sơ của python hoặc cProfile, một điều tôi thấy thực sự thuận tiện và hữu ích là một công cụ visulising để cho tôi xem các con số được lập sơ đồ. Yêu thích của tôi là RunSnakeRun. Nó đòi hỏi wxPython và một vài phụ thuộc khác. Chạy nó trên đầu ra cProfile của bạn tạo ra một đồ thị GUI, nơi mỗi hàm được vẽ như một hình chữ nhật, có kích thước bằng thời gian (trung bình hoặc tích lũy) trong hàm đó, và bao quanh các rects cho các hàm mà nó gọi. Làm cho sự hiểu biết đầu ra profiler một cách dễ dàng. –