Tôi đã triển khai thuật toán di truyền để giải quyết Vấn đề bán hàng du lịch nâng cao (trọng lượng của các cạnh thay đổi theo thời gian trong ngày). Hiện nay tôi đang đánh giá các thông số khác nhau của mô phỏng của tôi và tôi stumbled khi một mối tương quan Tôi không thể giải thích cho bản thân mình:Thuật toán di truyền: Tỷ lệ đột biến cao dẫn đến thời gian chạy thấp hơn
Một tỷ lệ đột biến cao hơn dẫn đến một thời gian chạy thấp hơn. Cá nhân tôi sẽ giả định ngược lại, vì tỷ lệ đột biến cao hơn tạo ra nhiều hoạt động hơn. (Tỷ lệ đột biến 25% nhanh hơn 12% so với 5%)
Kết quả tốt nhất đạt được với tỷ lệ đột biến 8% (5% tốt hơn 10% và 25% thực hiện tồi tệ nhất (trừ 0%)) A giá trị thể dục thấp hơn ist tốt hơn.
Số đếm lặp được thiết lập bởi tham số hệ được thiết lập để 10.000 trong tất cả các trường hợp thử nghiệm.
Mỗi trường hợp thử nghiệm được thực thi 10 lần.
thực hiện của tôi (trong python) của đột biến trông như thế này:
def mutate(self,p):
for i in self.inhabitants:
r = random()
if r <= p:
i.mutate()
p
là tỷ lệ đột biến
Các đột biến trông như thế này
def mutate(self):
r1 = randint(0,self.locations.size()-1)
r2 = randint(0,self.locations.size()-1)
self.locations.swap(r1,r2)
Tại sao một đột biến cao hơn tỷ lệ dẫn đến thời gian thực hiện nhanh hơn?
Edit: Tôi thực sự chạy các bài kiểm tra tương tự trên Raspberry Pi của tôi (đó là chậm hơn 9 lần) và nó kết quả trong các kết quả tương tự:
Thời gian chạy ít hơn có nghĩa là ít hoạt động hơn được thực hiện (nói chung). "P" cao hơn sẽ dẫn đến "i.mutate()" được gọi thường xuyên hơn. "I.mutate()" có thay đổi biến "self.inhabitants" không? Bạn có thể hiển thị mã cho hàm đó không? (hoặc một ví dụ làm việc tối thiểu nếu có thể) – armatita
Ngoài ra bạn có thể thử tạo một bản sao cục bộ của self.inhabitants trong chức năng thay đổi, và lặp lại bản sao thay thế? – armatita
@armatita Tôi đã thêm mã cho đột biến. Tôi không hiểu ý bạn là sao chép vòng lặp. – Strernd