5/5 - (1 bình chọn)

Trong hướng dẫn AI Python, chúng tôi đã thảo luận về Lập trình logic AI Python . Hôm nay, chúng ta sẽ xem các Genetic Algorithm AI Python. Trong hướng dẫn về Genetic Algorithm trong Python này, chúng ta sẽ tìm hiểu ý nghĩa thực tế của Genetic Algorithm.

Ngoài ra, chúng ta sẽ xem xét các lợi ích, hạn chế và ứng dụng của Genetic Algorithm với Python. Cuối cùng, chúng ta sẽ thấy ví dụ về Genetic Algorithm Python.

Vì vậy, hãy bắt đầu hướng dẫn về Genetic Algorithm Python.

Genetic Algorithm với Python là gì?

Genetic Algorithm (GA) là một siêu mô phỏng lấy cảm hứng từ chọn lọc tự nhiên và là một phần của lớp Thuật toán tiến hóa (EA). Chúng tôi sử dụng các giải pháp này để tạo ra các giải pháp chất lượng cao cho các vấn đề tối ưu hóa và tìm kiếm, trong đó, các giải pháp này sử dụng các toán tử lấy cảm hứng từ sinh học như đột biến, giao nhau và lựa chọn.

Các bài viết liên quan:

Nói cách khác, sử dụng những điều này, chúng tôi hy vọng đạt được các giải pháp tối ưu hoặc gần tối ưu cho các vấn đề khó khăn. Các thuật toán như vậy mô phỏng sự chọn lọc tự nhiên.

Đối với bất kỳ vấn đề nào, chúng tôi có một loạt các giải pháp khả thi. Chúng trải qua các quá trình như tái tổ hợp và đột biến để sinh ra những đứa con mới qua nhiều thế hệ. Không gian tìm kiếm là tập hợp tất cả các giải pháp khả thi và các giá trị mà đầu vào có thể nhận.

Trong tối ưu hóa, chúng tôi cố gắng tìm trong không gian tìm kiếm này điểm hoặc tập hợp các điểm cung cấp cho chúng tôi giải pháp tối ưu. Mỗi cá nhân giống như một chuỗi ký tự / số nguyên / float và các chuỗi giống như nhiễm sắc thể.

Xem thêm Hướng dẫn python

Giá trị phù hợp (từ một chức năng thể dục ) cho một ứng viên cho chúng tôi biết mức độ gần của nó với giải pháp tối ưu.

Đây là lý thuyết của Darwin về ‘Sự sống còn của người phù hợp nhất’ và là cách chúng tôi tiếp tục tạo ra các cá thể / giải pháp tốt hơn (đang phát triển) qua nhiều thế hệ trước khi đạt được tiêu chí dừng lại ở đâu. Các thuật toán này hoạt động theo bốn bước:

  1. Các cá thể trong quần thể cạnh tranh nhau để giành tài nguyên, giao phối
  2. Những cá thể khỏe mạnh nhất giao phối để tạo ra nhiều con cái hơn những con khác
  3. Bố mẹ Fittest truyền gen qua các thế hệ; bố mẹ có thể sinh ra con cái tốt hơn bố mẹ
  4. Mỗi thế hệ kế tiếp nhau phát triển để phù hợp với môi trường xung quanh

Vì kích thước quần thể không đổi, một số cá thể phải chết để nhường chỗ cho những cá thể mới hơn.

Chúng ta đi đến một tình huống hội tụ khi sự khác biệt giữa con cái do quần thể hiện tại và tổ tiên sinh ra không còn đáng kể nữa. Sau đó, thuật toán hội tụ thành một tập hợp các giải pháp cho vấn đề.

Tại sao bạn nên học Python vào năm 2022?

Toán tử của Genetic Algorithm Python

Để phát triển qua nhiều thế hệ, một thuật toán có thể sử dụng một trong nhiều toán tử. Một số trong số đó là:

Nhà điều hành lựa chọn

Nó thích những cá nhân có điểm thể lực tốt hơn và cho phép họ truyền gen cho các thế hệ kế tiếp.

Toán tử Crossover

Điều này cho phép các cá nhân giao phối. Chúng tôi áp dụng toán tử lựa chọn để chọn hai cá nhân và chọn ngẫu nhiên các trang web chéo. Sau đó, chúng tôi trao đổi các gen tại những địa điểm này – điều này tạo ra một cá thể hoàn toàn mới.

Toán tử đột biến

Trong đột biến, chúng tôi chèn các gen ngẫu nhiên vào các thế hệ con để duy trì sự đa dạng và tránh sự hội tụ sớm.

Ví dụ về Genetic Algorithm Python

Hãy cố gắng xây dựng một Genetic Algorithm bằng Python có thể đóng vai trò như Đoán số tốt hơn con người chúng ta. Đây là trò chơi mà tôi chọn ngẫu nhiên một số từ 1 đến 10 (cả hai) và bạn đoán xem tôi đã chọn số nào.

Có phải là 7 không? Không

Có phải là 3 không? Không

Có phải là 6 không? Không

Là 2? Đúng

Có vẻ như không có gì to tát, nhưng khi chúng ta bắt đầu nói về 100 hoặc 1000 con số, nó nhanh chóng trở thành một vấn đề. Làm cách nào để chúng tôi cải thiện khả năng phỏng đoán của mình? Chúng ta có thể làm gì ngoài việc phụ thuộc vào sự may mắn tuyệt đối? Điều này cuối cùng biến thành một quá trình cơ học. Có lẽ chúng ta có thể quyết định xem một phỏng đoán nào đó có gần với giải pháp hơn theo một hướng nhất định không?

Có phải là 7 không? Thấp hơn có

phải là 1 không? Cao hơn có

phải là 5 không? Thấp hơn có

phải là 4 không? Thấp hơn có

phải là 3 không? Có

Sở hữu kiến ​​thức miền như vậy có nghĩa là chúng ta có thể đi đến giải pháp nhanh hơn. Để đưa ra các phỏng đoán được thông báo và cải thiện, các thuật toán sử dụng việc khám phá ngẫu nhiên không gian vấn đề.

Cùng với đó, chúng cũng sử dụng các quá trình tiến hóa như đột biến và trao đổi chéo (xem ở trên). Nếu không có kinh nghiệm trong lĩnh vực vấn đề, họ cũng thử những thứ mà con người không bao giờ dám thử.

Được rồi, bây giờ chúng ta hãy thử triển khai điều này bằng Python. Hãy nhớ rằng giá trị thể lực đối với ứng viên là giá trị gần với mức tối ưu nhất. Ở đây, nó có nghĩa là có bao nhiêu chữ cái phù hợp với những gì nó phải là- “Xin chào Thế giới!”. Hãy bắt đầu với việc xây dựng một bộ gen.

geneSet="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!."
target="Hello World!"

Bây giờ, hãy tạo một phỏng đoán.

import random
def gen_parent(length):
       genes=[]
       while len(genes)<length:
               sampleSize=min(length-len(genes),len(geneSet))
               genes.extend(random.sample(geneSet,sampleSize))
       return ''.join(genes)

Ở đây, random.sample () chọn các phần tử ngẫu nhiên sampleSize từ geneSet. Bây giờ, chúng ta hãy làm điều gì đó để tính toán giá trị thể dục.

def get_fitness(guess):
      return sum(1 for expected,actual in zip(target,guess) if expected==actual)

Với zip () , chúng ta có thể lặp lại hai danh sách cùng một lúc. Bây giờ, chúng ta hãy thực hiện đột biến.

def mutate(parent):
      index=random.randrange(0,len(parent))
      childGenes=list(parent)
      newGene,alternate=random.sample(geneSet,2)
      childGenes[index]=alternate if newGene==childGenes[index] else newGene
      return ''.join(childGenes)

Điều này là để chuyển đổi cha thành một mảng với danh sách (cha). Sau đó, chúng tôi thay thế 1 ký tự bằng một ký tự mà chúng tôi chọn ngẫu nhiên từ geneSet. Cuối cùng, chúng tôi kết hợp lại kết quả thành một chuỗi với .join ().

Để tránh những phỏng đoán lãng phí, điều này sử dụng một sự thay thế thay thế nếu newGene được chọn ngẫu nhiên bằng với cái mà chúng tôi mong đợi nó sẽ thay thế. Chức năng tiếp theo cho phép chúng tôi hiển thị những gì đang xảy ra.

def display(guess):
      timeDiff=datetime.datetime.now()-startTime
      fitness=get_fitness(guess)
      print("{}\t{}\t{}".format(guess,fitness,timeDiff))

Chúng tôi đã sẵn sàng. Bây giờ hãy bắt đầu với chương trình chính.

random.seed()
startTime=datetime.datetime.now()
bestParent=gen_parent(len(target))
bestFitness=get_fitness(bestParent)
display(bestParent)

Và bây giờ, một vòng lặp để tạo ra một dự đoán, yêu cầu tập thể dục của mình, so sánh với mà của dự đoán tốt nhất trước và giữ dự đoán với kết quả tốt hơn.

while True:
      child=mutate(bestParent)
      childFitness=get_fitness(child)
      if bestFitness>=childFitness:
               continue
      display(child)
      if childFitness>=len(bestParent):
               break
      bestFitness=childFitness
      bestParent=child

Lợi ích của Genetic Algorithm Python

Các Genetic Algorithm trong Python có những ưu điểm sau :

  • Không cần thông tin phái sinh
  • Nhanh hơn và hiệu quả hơn các phương pháp truyền thống
  • Khả năng song song tốt
  • Cung cấp một danh sách các giải pháp tốt thay vì chỉ một
  • Tối ưu hóa các chức năng liên tục cũng như rời rạc và các vấn đề đa mục tiêu
  • Luôn đưa ra giải pháp và cải thiện giải pháp đó theo thời gian
  • Hữu ích cho không gian tìm kiếm rất lớn với nhiều tham số liên quan

Hạn chế của Genetic Algorithm Python

Với tất cả những lợi ích đó, chúng tôi cũng có những hạn chế nhất định trong Genetic Algorithm với Python-

  • Không thích hợp cho các vấn đề đơn giản với thông tin phái sinh có sẵn
  • Ngẫu nhiên; không đảm bảo giải pháp kết quả là tối ưu
  • Việc tính toán thường xuyên giá trị thể chất rất tốn kém về mặt tính toán đối với một số vấn đề
  • Không đảm bảo hội tụ đến giải pháp tối ưu nếu không được thực hiện đúng cách

Các ứng dụng của Genetic Algorithm Python

Cuối cùng, hãy nói về nơi chúng tôi thường sử dụng các Genetic Algorithm như vậy với Python.

  • Mạng thần kinh tái diễn
  • Thử nghiệm đột biến
  • Phá mã
  • Lọc và xử lý tín hiệu
  • Học cơ sở quy tắc mờ

Vì vậy, tất cả đều nằm trong Genetic Algorithm Python. Hy vọng bạn thích giải thích của chúng tôi.

Sự kết luận 

Hôm nay, chúng ta đã học về Genetic Algorithm Python và các toán tử của chúng – lựa chọn, giao nhau và đột biến. Chúng tôi đã nói về chức năng thể dục và lấy một vấn đề ví dụ để chứng minh Python Genetic Algorithm như vậy  .

Cuối cùng, chúng tôi đã biết về lợi ích, hạn chế và ứng dụng của Genetic Algorithm Python. Tuy nhiên, nếu bạn có bất kỳ nghi ngờ nào, hãy hỏi trong tab bình luận.

Xem thêm Trình thông dịch Python là gì – Môi trường, Lời mời Làm việc

Leave a Reply

Call now
%d bloggers like this: