2013-05-30 83 views
7

Tôi đang cố gắng sử dụng gói scipy.optimize để tối ưu hóa một vấn đề tối ưu hóa rời rạc (tối ưu hóa toàn cầu). Acc vào tài liệu, mô phỏng ủ được thực hiện trong scipy.optimize.anneal phải là một lựa chọn tốt cho cùng. Nhưng tôi không chắc chắn làm thế nào để buộc trình tối ưu hóa chỉ tìm kiếm các giá trị số nguyên của không gian tìm kiếm. Ai đó có thể giúp đỡ?Tối ưu hóa rời rạc trong python

Một ví dụ minh họa:

f(x1,x2) = (1-0.4*x1)^2 + 100*(0.6*x2 -0.4*x1^2)^2

where, $x1, x2 \in I$

Trả lời

4

Tôi đã kiểm tra scipy.optimize.anneal, và tôi không thể nhìn thấy một cách để sử dụng các giá trị rời rạc. Cách để thực hiện nó cho mình, là tạo ra một "di chuyển" chức năng tùy chỉnh, nhưng cách bạn phải xác định lịch trình (bằng một chuỗi) ngăn cản bạn làm như vậy.

Tôi nghĩ rằng đó là một sai lầm lớn, nếu bạn chỉ có thể vượt qua một lớp lịch tùy chỉnh làm tham số, bạn có thể tùy chỉnh nó để sử dụng các biến rời rạc và nhiều thứ khác.

Giải pháp tôi thấy là sử dụng thực hiện khác này để thay thế: https://github.com/perrygeo/python-simulated-annealing

Bởi vì bạn phải cung cấp các chức năng mà sẽ thay đổi trạng thái, bạn có quyền kiểm soát trên những giá trị nó có thể có, hoặc nếu họ rời rạc hoặc liên tiếp.

Hy vọng điều đó sẽ hữu ích.

+0

cảm ơn rất nhiều .. siêu: Tôi đang tìm kiếm nội dung như thế này. Trong khi đó, tôi đã tự mình thực hiện SA để có sự kiểm soát mà bạn đã nói – goofd