7

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

mutation rate - runtime

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.

result - mutation rate

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ự:

time - mutation on pi

+0

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

+0

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

+0

@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

Trả lời

0

Mỗi chu kỳ i các đột biến có một xác suất p i cung cấp giải pháp có thể chấp nhận và thời gian cần để đánh giá chu kỳ là T i. Cả hai p iT i tăng với tỷ lệ đột biến. Do đó, thời gian chạy dự kiến ​​của thuật toán của bạn là tổng số Σ p i T i trong số chu kỳ mong muốn cần thiết để tìm câu trả lời. Tỷ lệ đột biến cao hơn làm tăng kích thước của mỗi cụm từ, nhưng giảm số lượng thuật ngữ để tổng hợp. Có một tỷ lệ đột biến tối ưu giúp giảm thiểu số tiền này.

+0

Có thể, rằng tôi không hiểu câu trả lời đầy đủ, nhưng số lượng chu kỳ dự kiến ​​không giảm vì nó được xác định bởi thông số thế hệ, cho biết số lần chéo và đột biến được thực hiện. – Strernd

+2

@chepner làm thế nào để bạn biết đột biến làm giảm số lượng các thuật ngữ để tổng hợp? Tôi không thấy bất cứ điều gì trỏ đến điều đó. – armatita

+0

Ah, tôi nhớ rằng số lượng thế hệ đã được sửa; Tôi đã giả sử có một ngưỡng để xác định khi một giải pháp là đủ tốt. – chepner

3

Nó là không thể biết mà không nhìn thấy mã đầy đủ của bạn, nhưng sau có vẻ hợp lý:

Khi tỷ lệ đột biến là thấp hơn sau đó, sau một vài thế hệ, người dân trở nên nhiều hơn nữa đồng nhất hơn là khi đột biến tỷ lệ cao hơn.Bên dưới giả định rằng bạn đang sử dụng một số biến thể lấy mẫu bánh xe roulette, một quần thể đồng nhất hơn có nghĩa là mỗi "spin" của bánh xe roulette mất trung bình dài hơn khi bạn có dân số đa dạng hơn (nơi tương đối ít thành viên sẽ thống trị phân phối tập thể dục và do đó có xu hướng được lựa chọn sau khi quét qua ít thành viên của dân số hơn).

Để chắc chắn hơn, bạn có thể sử dụng công cụ lược tả chẳng hạn như cProfile để xem chính xác nơi các chu kỳ CPU đó đang hoạt động.

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