การโปรแกรมเชิงพันธุกรรม [ปิด]


13

ฉันเพิ่งจะเรียกดู Reddit และเจอโพสต์เชื่อมโยงกับตัวอย่าง "ขั้นตอนวิธีทางพันธุกรรม JavaScript" ฉันรู้สึกทึ่งกับแนวคิดของอัลกอริธึมทางพันธุกรรมและการเขียนโปรแกรมอย่างไรก็ตามถึงแม้หลังจาก Googling บางตัวฉันยังคงสับสนเล็กน้อย มันทำงานยังไง?

ฉันคิดว่าคำศัพท์ทำให้ฉันสับสนมากกว่าสิ่งอื่นใด ฉันขอขอบคุณตัวอย่างสั้น ๆ และบางทีคำอธิบาย แค่แนวคิดของการโปรแกรมเชิงพันธุกรรมและฉันจะนำไปใช้ในโครงการของฉันได้อย่างไรและเพราะเหตุใด


1
มีหนังสือที่ดีโดย Mat Buckland ที่เรียกว่า "เทคนิค AI สำหรับการเขียนโปรแกรมเกม" ( amazon.com/Techniques-Programming-Premier-Press-Development/dp/ … ) ซึ่งครึ่งหนึ่งของหนังสือครอบคลุมอัลกอริธึมทางพันธุกรรม ชื่อหนังสือเล่มนี้เป็นชื่อเรียกชื่อผิดของมันเป็นหนังสือเกี่ยวกับ GA และ Neural Nets มันเป็นการแนะนำที่ดีสำหรับหัวข้อ
Steven Evers

คำตอบ:


19

ดูเหมือนว่าคุณกำลังพูดถึงขั้นตอนวิธีทางพันธุกรรมมากกว่าการเขียนโปรแกรมทางพันธุกรรม แต่นี่คือความช่วยเหลือของฉันสำหรับความเข้าใจของคุณ


การคิดถึง GA ในแง่ของชิ้นส่วนที่พวกเขาประกอบนั้นเป็นประโยชน์

สมมุติว่าคุณมีปัญหาบางอย่าง สิ่งแรกที่คุณต้องการคือวิธีที่จะแสดงให้เห็นว่าทางแก้ปัญหาจะเป็นอย่างไร หากคุณมีปัญหาพนักงานขายเดินทางกับเมือง A, B, C, D, E คุณก็รู้อยู่แล้วว่าโซลูชันนั้นมีหน้าตาเป็นอย่างไรชื่อของเมืองต่างๆ [B, C, A, D, E]

นี้เป็นยีน

ที่รู้จักกันว่าเป็นวิธีการแก้ปัญหาที่อาจเกิดขึ้น เช่นเดียวกับ Steven A. Lowe ที่กล่าวถึงสตริงบิตเป็นวิธีทั่วไปในการเข้ารหัสยีน แต่ไม่จำเป็น มันทำให้บางสิ่งง่ายขึ้น ส่วนที่สำคัญคือคุณมีวิธีที่จะนำเสนอวิธีแก้ปัญหาในรูปแบบอาเรย์นี้

ตอนนี้ คุณจะรู้ได้อย่างไรว่าทางออกนั้นดีหรือไม่? คุณต้องการฟังก์ชั่นที่สามารถบอกคุณได้และให้คะแนนโซลูชัน ดังนั้นอีกครั้งที่ TSP คุณอาจมีฟังก์ชั่นที่วัดระยะทางที่เดินทางโดยใช้เส้นทาง [B, C, A, D, E] 'เกรด' ที่คุณกำหนดอาจเป็นระยะทางที่เดินทางได้ แต่ในปัญหาที่ซับซ้อนมากขึ้นคุณอาจรวมสิ่งต่าง ๆ เช่นค่าใช้จ่ายในการเดินทางและสิ่งอื่น ๆ

นี้เป็นฟังก์ชั่นการออกกำลังกาย

ดังนั้นตอนนี้คุณสามารถแก้ปัญหาที่อาจเกิดขึ้นและดูว่ามันดีหรือไม่ อะไรต่อไป?

ต่อไปเราต้องเริ่มรุ่นแรกของเรา ดังนั้นเราจึงสร้างวิธีการแก้ปัญหาแบบสุ่ม ไม่สำคัญว่าพวกเขาจะดีหรือไม่ นี่คือประชากรเริ่มต้นหรือเมล็ดพันธุ์ของคุณ คุณสามารถเรียกสิ่งนี้ว่ายีนของคุณ

ดังนั้นคุณนำยีนส์เริ่มต้นของคุณมาใช้กับฟังก์ชั่นการออกกำลังกายของคุณกับพวกเขาทั้งหมด ตอนนี้คุณต้องรับคนสองคนและสร้างประชากรใหม่จากพวกเขา - สำหรับคนรุ่นต่อไป คุณเลือกใคร คุณไม่ต้องการเลือกแบบที่เหมาะสมที่สุดซึ่งสามารถนำไปสู่ปัญหาบางอย่างได้ แต่คุณต้องมีฟังก์ชั่นการเลือก

วิธีหนึ่งในการเลือกที่มองเห็นได้ง่ายคือการใช้วงล้อ: ยีนแต่ละอันเป็นชิ้นบนล้อและคะแนนความฟิตของพวกเขาบ่งบอกว่าชิ้นส่วนของพวกเขาใหญ่แค่ไหน ใส่หมุดที่ชี้ไปที่ล้อเลื่อนแล้วหมุน (เช่นสร้างตัวเลขสุ่ม) หมุดชี้ไปที่พาเรนต์แรก ทำอีกครั้งสำหรับผู้ปกครองที่สอง

ตอนนี้คุณต้องสร้างลูกใหม่ คุณต้องการรวมผู้ปกครองเพื่อสร้างประชากรใหม่ มีหลายวิธีที่จะทำนี้ แต่พวกเขากำลังเรียกทุกฟังก์ชั่นครอสโอเวอร์ คุณสามารถแบ่งครึ่งและสลับครึ่งระหว่างพ่อแม่หรือทำ interleaving บางชนิด สิ่งนี้คล้ายคลึงกับผู้ปกครองของสัตว์เลี้ยงลูกด้วยนมที่ผลิตลูกใหม่ -> พวกเขาทั้งสองมีส่วนร่วมในยีนของพวกเขากับเด็กใหม่

เมื่อคุณมีคนรุ่นใหม่นี้คุณจะต้องสุ่มเปลี่ยนรูป แต่หายากและกลายพันธุ์ให้กับเด็กแต่ละคน ฉันมักจะเห็นอัตราการกลายพันธุ์เกิดขึ้นที่น้อยกว่า 1% ฟังก์ชั่นการกลายพันธุ์จะสุ่มเปลี่ยนสิ่งที่อยู่ในยีนที่เข้ารหัสของคุณ ถ้ายีนของคุณเป็นสตริงบิตมันอาจสลับบิตได้ถ้ามันเป็นเมืองหลาย ๆ แถวมันอาจสลับ 2 เมืองในรายการ ส่วนที่สำคัญคือมันเป็นเหตุการณ์ที่เกิดขึ้นได้ยากและผสมขึ้น

ทำซ้ำขั้นตอนนี้จนกว่าจำนวนรุ่นที่ต้องการหรือจนกว่าฟังก์ชันการออกกำลังกายของคุณจะสร้างผู้ปกครองที่มีคะแนนการออกกำลังกายที่สูงอย่างสม่ำเสมอและคุณมีวิธีแก้ปัญหาที่ดีที่สุด (หวังว่าถ้าคุณทำทุกอย่างถูกต้อง)


นั่นเป็นคำที่ค่อนข้างยุ่งดังนั้นขอสรุปด้วยคำอุปมา:

  1. ยีนคือคน: คนแก้ปัญหา
  2. ฟังก์ชั่นการออกกำลังกายเป็นเกรด: ผู้คนจะได้เกรดจากการที่พวกเขาแก้ปัญหาได้ดีเพียงใด
  3. คุณเลือก 2 คนในการผสมพันธุ์ประชากรใหม่: คุณให้คนที่มีเกรดที่ดีกว่ามีโอกาสที่ดีในการผสมพันธุ์
  4. เมื่อพ่อแม่ผสมพันธุ์พวกเขารวมกันเพื่อผลิตลูก
  5. คุณกลายพันธุ์ลูกน้อยของพวกเขาและสุ่ม
  6. คุณให้คะแนนเด็กของประชากรใหม่
  7. ล้างและทำซ้ำ

หวังว่านี่จะช่วยได้


นี่คือคำอธิบายที่ดี ฉันมักจะคิดว่าอัลกอริธึมทางพันธุกรรมอธิบายได้ดีกว่าเป็นอัลกอรึทึมของดาร์วินหรืออัลกอริธึมวิวัฒนาการ แต่แน่นอนว่า "พันธุกรรม" ไม่ได้อธิบายกลไกที่ดีกว่า ฉันจะเรียกพวกเขาว่าอัลกอริทึมทางพันธุกรรมของดาร์วิน
Steven Lu

เกมแห่งชีวิตของคอนเวย์เป็นอัลกอริธึมทางพันธุกรรมหรือไม่?
Florian Margaine

@ Florian Margaine: เกมแห่งชีวิตเป็นหุ่นยนต์เซลลูลาร์ซึ่งเป็นแนวคิดที่ไม่เกี่ยวข้องกัน (เริ่มต้นจากความจริงที่ว่าเกมแห่งชีวิตนั้นถูกกำหนดขึ้นอย่างสิ้นเชิงในขณะที่ GA กำลังสุ่ม)
scrwtp

1
นี่คือคำอธิบายเดียวที่ดีที่สุดของ GA ที่ฉันเคยได้ยิน ฉันเคยเห็นอัลกอริธึมทางพันธุกรรมที่กล่าวถึงในอดีตมาแล้วหลายครั้งโดยปกติแล้วจะมีคำอธิบายอย่างฉับพลัน แต่ไม่เคยเข้าใจเลยว่าสิ่งเหล่านั้นเป็นอะไรมาจนถึงปัจจุบัน ขอบคุณ!
ล็อค

ฉันหวังว่าฉันจะเห็นคำอธิบายนี้เมื่อฉันเริ่มเรียนรู้ GA ครั้งแรก!
Avrohom Yisroel

7

เข้ารหัสวิธีแก้ไขปัญหาเป็นบิตสตริง

เขียนฟังก์ชั่น (เรียกว่าฟังก์ชั่น "ความเหมาะสม") ซึ่งประเมินว่า 'ดี' ของโซลูชั่นที่เข้ารหัสได้รับบิต - สตริง - ผลมักจะเป็นตัวเลขระหว่าง 0 ถึง 1

สร้างกลุ่มของสตริงบิตแบบสุ่มและประเมินความเหมาะสม

เลือกพวงบางส่วน - โดยทั่วไปจะเหมาะกว่า - และตัดครึ่งและสลับครึ่งเพื่อสร้างบิตสตริงใหม่ (ครอสโอเวอร์)

จากนั้นบางครั้งก็สุ่มพลิกบิตสองสามบิตในบางส่วนของบิตสตริงใหม่ (การกลายพันธุ์)

ทำซ้ำจนกว่าวิธีแก้ปัญหาที่ดีจะค่อยๆ

เหตุใดจึงทำเช่นนี้: ปัญหาบางอย่างมีช่องว่างการแก้ปัญหาที่เป็นไปได้มหาศาลดังนั้นขนาดใหญ่ที่ประเมินความเป็นไปได้ทั้งหมดนั้นเป็นไปไม่ได้ (ปัญหาพนักงานขายที่เดินทาง)

ฉันขอแนะนำขั้นตอนวิธีพันธุกรรมหนังสือในการค้นหาการเพิ่มประสิทธิภาพและการเรียนรู้ของเครื่อง


การค้นหาของ Amazon เกี่ยวกับ "ขั้นตอนวิธีพันธุกรรม" ทำให้ฉันมีเนื้อหาสี่หน้า ฉันดูที่หน้าแรกเท่านั้น แต่ไม่มีหนังสือเล่มใดที่มีชื่อว่า "ขั้นตอนวิธีทางพันธุกรรม" คุณช่วยให้รายละเอียดเพิ่มเติมเกี่ยวกับหนังสือเช่นชื่อเต็มและผู้แต่งได้หรือไม่?
David Thornley

ถาม: ตอบคำตอบใหม่ในฐานะอัลกอริธึมทางพันธุกรรม [-:
ช่างโง่มาก

@David เพิ่มลิงก์แล้ว เผยแพร่ในปี 1989 ดังนั้นอาจมีสิ่งที่ดีกว่าตอนนี้ แต่อันนี้อธิบายสิ่งต่าง ๆ ได้ดี
Steven A. Lowe

1
@ veryfoolish: ก่อนอื่นถามคำถามใหม่เป็นวิธีแก้ปัญหาพื้นที่ไม่ต่อเนื่องที่ถูกผูกไว้
Steven A. Lowe

@David Algorithm Algorithm น่าจะเป็นหนึ่งหรือสองบทในหนังสือขนาดใหญ่เกี่ยวกับปัญญาประดิษฐ์
Barry Brown

6

การเขียนโปรแกรมทางพันธุกรรมเป็นวิธีที่มีโปรแกรมเขียนคอมพิวเตอร์สำหรับคุณ!

อย่าคิดว่า "โปรแกรม" เช่น MS Word ให้นึกถึง "โปรแกรม" ดังต่อไปนี้:

function(x){ return x*2; }

ฟังก์ชั่นนี้ (หรือโปรแกรม) โดยตัวมันเองไม่มีเหตุผลที่จะมีอยู่ เรากำลังมองหาวิธีการแก้ไขปัญหา หากคุณต้องการหาผลรวมของตัวเลขสองตัวคุณเพียงแค่เปิดเครื่องคิดเลขและทำคณิตศาสตร์ เกิดอะไรขึ้นถ้ามีคนให้ตารางต่อไปนี้แก่คุณและขอให้คุณหาความสัมพันธ์ระหว่างresultและxกับy:

x   y   result
99  1   (3.02)
79  88   2.01 
21  62   5.01 
84  52  (6.58)
12  70   5.54 
67  18   0.73 

ข้อมูลนี้เป็นข้อมูล "การฝึกอบรม" ของคุณ คอมพิวเตอร์ของคุณจะใช้ข้อมูลนี้เพื่อสร้างสมมติฐานบางอย่างจากนั้นคุณจะทดสอบกับข้อมูลจริง

สมมติว่าคุณไม่ทราบสถิติและตัดสินใจว่าปัญหานี้ยากเกินกว่าที่จะคาดเดาได้ด้วยตัวคุณเองดังนั้นคุณจะได้คอมพิวเตอร์ที่จะช่วยคุณค้นหา

ให้คอมพิวเตอร์สร้างการคาดเดาแบบสุ่ม

คุณมีคอมพิวเตอร์ที่สร้างคำตอบได้ล้านคำและดูว่ามีคำตอบใดติดไหม (เดาว่า ... ล้านครั้ง!) ต่อไปนี้เป็นตัวอย่างของการเดาสองสามข้อ:

function(x,y){ return x+y; } // wrong
function(x,y){ return x/1*1*1*1*1*1+y; } //wrong, silly

คุณอาจจะรู้หรือไม่ก็ได้ แต่ฟังก์ชั่นหรือโปรแกรมสามารถแสดงเป็นต้นไม้ได้ตัวอย่างเช่นฟังก์ชั่นที่สองจะเป็น:

(+ (/ x (* 1 (* 1 (* 1 (* 1 (* 1 1)))) y)

คุณสามารถทำให้มันดูเหมือนต้นไม้มากขึ้นโดยการเยื้องลงไปเช่นนั้น (btw, ค้นหาสัญกรณ์โปแลนด์ย้อนกลับและไวยากรณ์เสียงกระเพื่อม ... แต่คุณจะเข้าใจว่าทำไมเราจึงแสดงโปรแกรมเช่นนี้ในไม่ช้า):

(+ 
    (/ x 
        (* 1 
            (* 1 
                (* 1 
                    (* 1 
                        (* 1 1)))) 
    y)

( +อยู่ที่ด้านบนมีสอง "ใบ" ของ/และy. /ตัวเองมีเด็กหลายคนอื่น ๆ )

นี่คือเหตุผลที่คุณอ่านมากเกี่ยวกับ "ต้นไม้" ในการเขียนโปรแกรมทางพันธุกรรม ในกรณีใด ๆ เราเสียบค่าของxและyลงในฟังก์ชั่นนี้และมันให้คำตอบที่ผิด ไม่น่าแปลกใจเลยว่าเมื่อเราสร้างสิ่งนี้แบบสุ่ม

ตอนนี้คุณตัดสินใจที่จะสร้างโซลูชั่นดังกล่าวเป็นล้าน พวกเขาทั้งหมดผิด อย่างไรก็ตามคุณสังเกตเห็นว่าคำตอบบางคำตอบใกล้กว่าคำตอบที่ถูกกว่า กล่าวอีกนัยหนึ่งการแก้ปัญหาบางอย่างนั้น "พอดี" มากกว่าวิธีอื่น ๆ โปรดทราบว่าคอมพิวเตอร์ไม่ทราบว่า "ถูกต้อง" และ "ผิด" ดังนั้นคุณต้องจัดเตรียม "ฟังก์ชันการออกกำลังกาย" ของคุณเอง ฟังก์ชั่นนี้ได้รับการส่งมอบโซลูชั่นที่เป็นไปได้ข้อมูลการฝึกอบรมและมีหน้าที่รับผิดชอบในการบอกระบบ GP ว่า "เหมาะสม" กับโซลูชันนี้อย่างไร อย่างที่คุณสามารถจินตนาการได้ฟังก์ชั่นนี้มีการเรียกใช้หลายล้านครั้งในหลายล้านครั้ง

สิ่งที่ทำให้ GP แตกต่าง

นี่คือสิ่งที่ทำให้การเขียนโปรแกรมทางพันธุกรรมแตกต่างจากการคาดเดาป่า คุณตัดสินใจที่จะทำการเดาอีกรอบหนึ่งล้านครั้ง อย่างไรก็ตามคุณทำได้อย่างชาญฉลาดขึ้นเล็กน้อย คุณรับการคาดเดา 10% อันดับแรก (ค่าที่เดาได้ใกล้เคียงกับค่าจริง) และทำให้เป็นส่วนหนึ่งของรุ่นที่สอง คุณยังใช้วิธีแก้ปัญหาเหล่านี้จำนวนมาก (อาจเหมือนกัน 10% ... ฉันจำไม่ได้) และตัดสินใจที่จะ

คุณสุ่มเลือกสองวิธีสุ่มเลือก sub-trees และเริ่มทำการแลกเปลี่ยน ดังนั้นส่วนหนึ่งของการแก้ปัญหา A สิ้นสุดลงภายใต้โซลูชัน B และในทางกลับกันคุณแค่ "ข้าม" มัน นอกจากนี้คุณยังใช้วิธีแก้ปัญหาและเพียงแค่ "กลายพันธุ์" พวกเขา ... ใช้ทรีย่อยและ 'ไขมัน' เล็กน้อย (เฮ้ถ้าวิธีแก้ปัญหาแย่มาก

วิธีคิดที่ดีคือสิ่งต่อไปนี้แม่และพ่อของคุณมีคุณลักษณะบางอย่างเช่นสีผมความสูงความเป็นไปได้ของโรค ฯลฯ คุณในฐานะที่เป็นเด็กสืบทอดคุณสมบัติที่แตกต่างจากทั้งพ่อและแม่ของคุณ ถ้าพ่อแม่ของคุณทั้งคู่เป็นนักกีฬาโอลิมปิกคุณก็จะเป็นนักกีฬาที่ยอดเยี่ยมใช่มั้ย นักชีววิทยาสังคมวิทยาและนักประวัติศาสตร์อาจมีปัญหากับความคิดนี้ แต่นักวิทยาศาสตร์คอมพิวเตอร์ไม่ได้เกี่ยวข้องกับคุณธรรมของสุพันธุศาสตร์ที่นี่ พวกเขาเห็น "ระบบ" ทำงานได้ดีมากในการจัดหาโซลูชั่นดังนั้นพวกเขาจึงตัดสินใจสร้างแบบจำลองในซอฟต์แวร์

ถ้ามันไม่ตรงกับชีววิทยา แต่ก็ยังให้คำตอบที่ดี ... นักวิทยาศาสตร์คอมพิวเตอร์หลายคนรวมกันพูดว่า "อะไรก็ตามที่เพื่อนและขอบคุณสำหรับคำศัพท์" โปรดทราบว่าพี่น้องของคุณทุกคนและไม่เหมือนกันแน่นอน ... ถึงแม้พวกเขาจะมีพ่อแม่คนเดียวกัน แต่ละคนมียีนที่กลายพันธุ์ด้วยเหตุผลใดก็ตาม (โปรดอย่าแสดงสิ่งนี้กับนักชีววิทยาประเด็นคือเพื่อทำความเข้าใจแรงจูงใจเบื้องหลังคำศัพท์มากมาย)

ดังนั้นตอนนี้เรากำลังทำให้คอมพิวเตอร์สร้างโปรแกรมหลายล้านโปรแกรมและวัดความเหมาะสมของโปรแกรม ทางออกที่ดีที่สุดอยู่รอดในรุ่นต่อไป นอกจากนี้เรายัง "กลายพันธุ์" และข้ามไปที่ "ประชากร" (สังเกตว่าภาษาพันธุศาสตร์และชีววิทยากำลังใช้งานอยู่) เมื่อมีการสร้างรุ่นที่สองฟิตเนสจะถูกวัดอีกครั้ง เนื่องจากรุ่นนี้มีทางออกที่ดีที่สุดจากรุ่นก่อนหน้าและเราได้ข้ามและกลายพันธุ์โซลูชันที่ดีที่สุด (รวมถึงประชากรทั่วไป - เพื่อรักษาความหลากหลาย) คนรุ่นนี้ควรจะดีกว่ารุ่นก่อนอย่างน้อยเล็กน้อย

เราทำสิ่งนี้ต่อไปเป็นเวลาหลายชั่วอายุคน แต่ละรุ่น (หวังว่า) จะให้ทางออกที่ดีกว่าและดีกว่าจนกว่าเราจะได้คำตอบที่ถูกต้อง ตัวอย่างเช่น:

(+ (- 2.2 (/ x 11) (* 7 (cos y))))

ลองดูที่นี่ถูกต้อง!
(ฉันคัดลอกมาจากhttp://en.wikipedia.org/wiki/Genetic_programmingซึ่งมีการแสดงกราฟิกของต้นไม้ต้นนี้ด้วย)

อัตราต่อรองและสิ้นสุด

มีบางประเด็นที่สำคัญเช่นวิธีการทำคุณตัดสินใจที่ "ขั้ว" คือ ( +, -, *, /, cos, sin, tan) พร้อมใช้งานกับระบบ GP ของคุณว่าคุณจะเขียนฟังก์ชั่นการออกกำลังกายและวิธีการที่จะจัดการกับระบบโปรแกรมที่ไม่ใช่ sensical เช่น(1 + cos)หรือ(2 / "hello")(คนอื่น)

มันค่อนข้างน่าเบื่อที่จะพัฒนาสมการ มันน่าสนใจมากขึ้นถ้าชุดเทอร์มินัลของคุณมีลักษณะดังต่อไปนี้: (ไฟ, สัมผัสศัตรู, เคลื่อนไหว, ... ) และฟังก์ชั่นการออกกำลังกายของคุณจะวัดสุขภาพของคุณและจำนวนซากศพของสัตว์ประหลาดต่อสู้

ฉันเขียนสิ่งนี้จากความทรงจำส่วนใหญ่ แต่นี่เป็นแนวคิดพื้นฐาน ฉันทำ GP ในช่วงวิทยาลัยของฉัน คุณควรเล่นกับมันแน่นอน ไม่ต้องกังวลเกี่ยวกับการทำความเข้าใจคำศัพท์ทั้งหมดเพียงดาวน์โหลดระบบ GP ฟรีวิ่งผ่านตัวอย่างเล็ก ๆ น้อย ๆ เพื่อทำความเข้าใจและสร้างตัวอย่างที่น่าสนใจของคุณเอง (ค้นหาความสัมพันธ์ระหว่างชุดข้อมูลต่าง ๆ ลองเชื่อมโยงกับเกม API ฯลฯ )


1

การอยู่รอดของผู้ที่เหมาะสมที่สุด: การคัดเลือกโดยธรรมชาติด้วยแบบฟอร์ม Windowsเป็นวิธีที่ฉันได้รู้จักกับการเขียนโปรแกรมทางพันธุกรรม มันง่ายต่อการอ่านด้วยรหัสที่มีให้ดาวน์โหลด ข้อเสียคือ GP ต้องการเครื่องมือในการเรียกใช้งานโค้ดที่สร้างขึ้นขณะใช้งานจริงและในขณะที่เขียนบทความ C # ไม่เหมาะกับงานนี้ นั่นคือเหตุผลที่ตัวอย่างใช้ CodeDOM เพื่อสร้างคอมไพล์และรันโค้ดในเวลาทำงานซึ่งเพิ่มความซับซ้อนอีกชั้นหนึ่งด้วยตัวมันเอง

สิ่งต่าง ๆ ได้เปลี่ยนไปตั้งแต่นั้นมาด้วย. NET ขณะนี้มี ExpressionTree API ของตัวเองซึ่งอาจจะช่วยให้การใช้ GP ที่หรูหรายิ่งขึ้นใน C # มากกว่าที่อธิบายไว้ในบทความ แต่ก็ดีพอที่จะเข้าใจว่า GP ทำงานอย่างไร

ที่นี่คุณสามารถดาวน์โหลด ebook ฟรีบน GP ซึ่งรวมถึงตัวอย่างรหัส java สั้น ๆ ที่คุณอาจสนใจ


-1

ขั้นตอนวิธีเชิงพันธุกรรมและการโปรแกรมเชิงพันธุกรรมนั้นสัมพันธ์กัน แต่มีแนวคิดที่แตกต่างกัน

อัลกอริทึมทางพันธุกรรม (GAs) เป็นอัลกอริทึมการค้นหาสำหรับปัญหาการเพิ่มประสิทธิภาพที่ซับซ้อน ใน GA คุณเข้ารหัสพารามิเตอร์ของวิธีการแก้ปัญหาใน bitstring "DNA" จากนั้นสุ่ม "ผสมพันธุ์" bitstrings เหล่านี้: ให้พวกมันทำซ้ำโดยการรวมส่วนต่าง ๆ ของพวกมันและใช้ "การอยู่รอดของ fittest" โดยการลบ bitstrings ทั้งหมด คุณได้รับยกเว้นสิ่งที่ดีที่สุดในการแก้ปัญหาของคุณ

การเขียนโปรแกรมทางพันธุกรรม (GP) มีความซับซ้อนยิ่งขึ้น: ที่นี่คุณไม่ได้แสดงรายการด้วย DNA (bitstrings) ของพวกเขา แต่จากการแยกวิเคราะห์ต้นไม้ที่คุณเพาะพันธุ์และเลือก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.