ภาษาใดที่ใช้สำหรับการโปรแกรมเชิงพันธุกรรม


15

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

ความชัดเจน:ฉันไม่ได้ถามว่าภาษาใดที่ฉันจะเขียนอัลกอริธึมทางพันธุกรรมเอง (เนื่องจากฉันจะสามารถตัดสินใจเองได้) ฉันจะถามในภาษาโปรแกรมที่โปรแกรมที่พัฒนาขึ้นควรถูกสร้างขึ้น

อาจารย์ผู้สอนของฉันแนะนำ Lisp แต่ฉันไม่ชอบความคิดนี้ --- ก่อนอื่นฉันต้องทำงานกับต้นไม้บทคัดย่อบางชนิดที่สองอย่างน่าเชื่อถือที่ทำไขว้บนโครงสร้างต้นไม้อาจเป็นเรื่องยุ่งเหยิง

ฉันอยากจะใช้สิ่งที่มีความมุ่งมั่นในการเขียนโปรแกรมทางพันธุกรรมเช่นเฉือน / A SlashA ไม่ต้องการทำงานกับ AST --- โปรแกรมใน bytecode เป็นเพียงอาร์เรย์ของ ints ที่สามารถเปลี่ยนแปลงได้ใน fasion ใด ๆ ที่จำเป็นเนื่องจากทุก int array แทน slash / A บางโปรแกรม

ข้อสังเกตเพิ่มเติม:

  • ฉันต้องการหลีกเลี่ยงการจัดการ AST!
  • ปัญหานี้เป็นเรื่องยาก (อาจไม่ยากเท่ากับการคาดการณ์มูลค่าหุ้น) นี่เป็นเพราะความจริงที่ว่า (ส่วนใหญ่) เราไม่มีข้อมูลอินพุตที่เพียงพอ (มีพารามิเตอร์ที่ซ่อนอยู่บางส่วน) การสร้างแบบจำลองที่มีประสิทธิภาพที่ดีกว่าแบบจำลองที่ให้ผลตอบแทนนั้นค่อนข้างท้าทาย (โมเดลเฉลี่ย 35% MAPE) แบบจำลองส่วนใหญ่มี MAPE ประมาณ 25% ส่วนที่ดีที่สุดคือ 20%
  • ฉันต้องการมีภาษาที่จัดการชุดข้อมูลที่มีคุณสมบัติมากมายโดยมีข้อสันนิษฐานว่าฉันไม่แน่ใจว่าเป็นสิ่งที่สำคัญ (Slash / A มีข้อเสียที่นี่ --- ในคุณสมบัติการป้อนข้อมูลภาษานี้จะอ่านตามลำดับ --- ดังนั้นคุณลักษณะบางอย่างจะถูกใช้กับความน่าจะเป็นที่มากขึ้น)
  • ฉันต้องการที่จะสามารถเขียนโปรแกรมนี้ใน Python ดังนั้น libs หลามจะดีมาก --- แต่ฉันสามารถผูกสำหรับ C / C ++ (ไม่มี Java, ไม่มี Matlab, ฯลฯ )

ฉันรู้ว่านี่เป็นคำถามสำรวจดังนั้นถ้าเป็นไปได้สำหรับคำถามดังกล่าวก่อนโปรดปิด แต่ฉันรู้สึกว่ามันมีความเฉพาะเจาะจงพอ

คำตอบ:


14

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

คุณจะต้องเลือกระหว่าง tree และ linear GP ก่อน Lisp เป็นต้นไม้ Slash / A เป็นเส้นตรง อ่านทั้งคู่เพื่อทำความเข้าใจข้อดีข้อเสีย แต่จากสิ่งที่คุณเขียนฉันขอแนะนำระบบต้นไม้ GP อย่างง่าย การเขียนของคุณเองไม่ยากเกินไป แต่มีการติดตั้ง Python อยู่ สิ่งเหล่านี้ด้านล่างใช้สำหรับอัลกอริธึมวิวัฒนาการใน Python โดยทั่วไป แต่ไม่ใช่ GP ทั้งหมดและบางอันไม่ทำงาน:

  1. PyGressionGP (GP สำหรับการถดถอยเชิงสัญลักษณ์ใน Python) - http://code.google.com/p/pygressiongp/
  2. PyGene - https://github.com/blaa/PyGene
  3. การเขียนโปรแกรมทางพันธุกรรมอย่างง่ายใน Python - http://zhanggw.wordpress.com/2009/11/08/a-simple-genetic-programming-in-python-4/
  4. Pyevolve - https://github.com/perone/Pyevolve - โปรดดูบล็อก - http://blog.christianperone.com - และโพสต์นี้ - http://blog.christianperone.com/?p= 549
  5. esec (การคำนวณเชิงวิวัฒนาการใน Python) - http://code.google.com/p/esec/
  6. พีช - http://code.google.com/p/peach/
  7. PyBrain (ทำเยอะมากไม่ใช่แค่ NN) - http://pybrain.org/
  8. dione - http://dione.sourceforge.net/
  9. PyGEP (การเขียนโปรแกรมการแสดงออกทางพันธุกรรม) - http://code.google.com/p/pygep/
  10. deap (อัลกอริทึมวิวัฒนาการแบบกระจาย) - http://code.google.com/p/deap/

นอกจากนี้โปรดดูหนังสือแนะนำเบื้องต้นเกี่ยวกับ GP โดยผู้แต่ง GP ที่มีชื่อเสียง Poli, Langdon และ McPhee:

คู่มือภาคสนามเกี่ยวกับการโปรแกรมเชิงพันธุกรรม - http://www.gp-field-guide.org.uk/


คุณมีการอ้างอิงถึงข้อดีข้อเสียของ linar และ tree GP หรือไม่?
jb

ฉันเห็นการเปรียบเทียบเล็กน้อย แต่ยังไม่มีการอ้างอิงที่เป็นรูปธรรม คุณสามารถดูสิ่งที่ Banzhaf และ Brameier ตีพิมพ์ในยุค 2000 - พวกเขาทำงาน GP เชิงเส้นและเผยแพร่หนังสือ LGP ในปี 2550 ฉันคิดว่า
เกรแฮมโจนส์

หืม ... ทำไมคนเหล่านี้ถึงไม่รวมกัน
vonPetrushev

ฉันไม่แน่ใจว่าคุณหมายถึงอะไร - ทำไมคน Tree และ Linear GP ถึงไม่รวมกัน ไม่มีการแบ่งแยกทางศาสนาพวกเขาเป็นเพียงรสชาติที่แตกต่างจากแนวคิดเดียวกัน (และมีคนอื่นด้วยเช่น Gene Expression Progamming (GEP) - gene-expression-programming.com )
เกรแฮมโจนส์

1
ฉันไม่ได้บอกว่าต้นไม้ GP นั้นชั่วร้ายหรือไม่ดี ฉันแค่อยากจะม้วน implementatiom ของตัวเองและเชิงเส้นเป็นเรื่องง่ายมาก ฉันใช้งาน Python prototype ในเวลาประมาณ 4 ชั่วโมง
jb

4

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

มีสองสิ่งที่คุณต้องคำนึงถึงเมื่อเลือกภาษา

  1. หลีกเลี่ยงการสร้างระดับต่ำที่อาจทำให้โปรแกรมที่พัฒนาแล้วล้มเหลวในข้อมูลบางอย่าง ตัวอย่างเช่นตัวชี้ทางคณิตศาสตร์ หากคุณกำลังจะใช้ C หรือ C ++ เป็นภาษาสำหรับโปรแกรมที่พัฒนาแล้วของคุณคุณอาจต้องการ จำกัด ให้เป็นรุ่นที่ไม่มีตัวชี้ทางคณิตศาสตร์
    ฉันจะลงคะแนนเทียบกับภาษาแอสเซมบลีด้วยเหตุผลที่คล้ายกันแม้ว่าเครื่องเสมือนเช่น JVM และ CLR ควรให้คุณมีสิ่งที่ปลอดภัย
  2. เหมาะสำหรับชุดข้อมูลขนาดใหญ่ ถ้าฉันเข้าใจการมอบหมายของคุณอย่างถูกต้องโปรแกรมส่งออกจะต้องจัดการกับชุดข้อมูลขนาดใหญ่

คุณอาจต้องการใช้ภาษาเป้าหมายที่คุณคุ้นเคยอยู่แล้ว ฉันไม่คุ้นเคยกับ Python แต่ AFAIK เป็นไปตามเกณฑ์ด้านบนดังนั้นจึงควรเป็นตัวเลือกที่ดีสำหรับภาษาเป้าหมายของคุณ


1
ดูgithub.com/arturadib/slash-a --- ในภาษานี้คุณไม่มีการจัดการ AST! โปรแกรมถูกพิมพ์ซ้ำเป็นอาร์เรย์ของ bytecode และเนื่องจากทุกอาร์เรย์เป็นโปรแกรมที่ถูกต้องคุณสามารถใช้การดำเนินการทางพันธุกรรมใด ๆ ที่คุณต้องการ
jb
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.