ตัวอย่างที่ดีของอัลกอริธึมทางพันธุกรรม / โซลูชั่นการเขียนโปรแกรมทางพันธุกรรมคืออะไร [ปิด]


227

อัลกอริทึมทางพันธุกรรม (GA) และการโปรแกรมเชิงพันธุกรรม (GP) เป็นพื้นที่ที่น่าสนใจของการวิจัย

ฉันต้องการทราบเกี่ยวกับปัญหาเฉพาะที่คุณแก้ไขโดยใช้ GA / GP และไลบรารี่ / กรอบงานที่คุณใช้ถ้าคุณไม่ได้ทำเอง

คำถาม:

  • คุณใช้ GA / GP เพื่อแก้ไขปัญหาอะไร
  • คุณใช้ไลบรารี / กรอบงานใดบ้าง

ฉันกำลังมองหาประสบการณ์โดยตรงดังนั้นโปรดอย่าตอบถ้าคุณไม่มี


28
@ Jason: ขอบคุณสำหรับการแนะนำสิ่งที่ Google ในขณะที่ดูเหมือนว่ามีประโยชน์บ้างฉันไม่เห็นว่าจะสามารถตอบคำถามนี้ได้อย่างไรเนื่องจากมีการกล่าวถึงผู้ใช้ SO / GA-GP โดยเฉพาะ
knorv


13
"เราคาดหวังคำตอบที่จะได้รับการสนับสนุนโดย ... ความเชี่ยวชาญเฉพาะด้าน .... " ตรวจสอบ! "[T] คำถามของเขามีแนวโน้มที่จะเรียกร้องการอภิปรายการโต้แย้งการหยั่งเสียงหรือการอภิปรายเพิ่มเติม" เท็จ มีคำตอบมากมาย แต่ไม่ใช่แบบสำรวจความคิดเห็นและไม่มีความคิดเห็นหรืออภิปรายในความคิดเห็น ทำไมสิ่งนี้จึงถูกปิด
Adrian McCarthy

โปรแกรม Eureqa นั้นดีมากสำหรับการโปรแกรมเชิงพันธุกรรม: nutonian.com/products/eureqa
Simon

คำตอบ:


146

ไม่ใช่การบ้าน

งานแรกของฉันในฐานะโปรแกรมเมอร์มืออาชีพ (1995) คือการเขียนระบบการซื้อขายอัตโนมัติตามขั้นตอนวิธีเชิงพันธุกรรมสำหรับ S & P500 ฟิวเจอร์ส แอปพลิเคชั่นเขียนขึ้นใน Visual Basic 3 [!] และฉันไม่รู้ว่าฉันทำอะไรตั้งแต่นั้นมาตั้งแต่ VB3 ไม่ได้มีคลาส

แอปพลิเคชันเริ่มต้นด้วยประชากรของสตริงที่มีความยาวคงที่ที่สร้างแบบสุ่ม (ส่วน "ยีน") ซึ่งแต่ละอันสอดคล้องกับรูปร่างที่เฉพาะเจาะจงในข้อมูลราคานาทีต่อนาทีของฟิวเจอร์ S & P500 เช่นเดียวกับคำสั่งเฉพาะ (ซื้อหรือขาย) และจำนวน Stop-Loss และ Stop-Profit แต่ละสตริง (หรือ "ยีน") มีการประเมินผลกำไรโดยใช้ข้อมูลย้อนหลัง 3 ปี เมื่อใดก็ตามที่ "รูปร่าง" ที่ระบุตรงกับข้อมูลในอดีตฉันถือว่าคำสั่งซื้อหรือขายที่สอดคล้องกันและประเมินผลของการค้า ฉันเพิ่มข้อแม้ที่แต่ละยีนเริ่มต้นด้วยจำนวนเงินที่แน่นอนและอาจทำให้เกิดการแตกหักและถูกลบออกจากกลุ่มยีนทั้งหมด

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

น่าเสียดายที่ฉันไม่เคยมีโอกาสใช้ระบบนี้อยู่เพราะเจ้านายของฉันเสียเงินเกือบ $ 100,000 ในเวลาน้อยกว่า 3 เดือนในการซื้อขายแบบดั้งเดิมและเขาก็หมดความตั้งใจที่จะทำโครงการต่อไป เมื่อมองย้อนกลับไปฉันคิดว่าระบบจะสร้างผลกำไรมหาศาล - ไม่ใช่เพราะฉันจำเป็นต้องทำทุกอย่างให้ถูกต้อง แต่เนื่องจากประชากรของยีนที่ฉันสร้างขึ้นนั้นเกิดความลำเอียงต่อคำสั่งซื้อ (เทียบกับคำสั่งขาย) ประมาณ 5: 1 อัตราส่วน และอย่างที่เรารู้ด้วยการเข้าใจถึงปัญหาหลังฉาก 20/20 ตลาดเพิ่มขึ้นเล็กน้อยหลังจากปี 1995


9
"ฉันคิดว่าระบบจะสร้างผลกำไรมหาศาล" - ใช่ฉันคิดว่ามันทำงานได้อย่างสมบูรณ์แบบในสภาพแวดล้อม backtesting ;-)
Joel

30
@ Joel: แน่นอนมันทำ แต่นั่นไม่ใช่เหตุผลที่ฉันคิดว่ามันจะได้ผลกำไร มันจะทำเงินได้เพราะความลำเอียงหนักต่อการซื้อแทนที่จะขาย ระบบที่เพิ่งซื้อ S & P500 ฟิวเจอร์สในช่วงเวลาสุ่มระหว่างปี 1995 และ 1999 (โดยไม่มีเรื่องไร้สาระ GA เกิดขึ้น) จะทำเงินได้มากมาย แต่เรารู้เรื่องนี้ในการหวนกลับ
MusiGenesis

10
Joel อาจหมายถึง "overfitting"
Eric Normand

10
คุณต้องจองข้อมูลประวัติของคุณสักเล็กน้อยเพื่อทำการทดสอบ ที่ดีที่สุดที่จะทำการตรวจสอบข้ามพับ
Eric Normand

คุณหมายถึงอะไรโดย "รูปร่าง" ในeach of which corresponded to a specific shape in the minute-by-minute price data?
CodyBugstein

89

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

โปรแกรมเริ่มต้นด้วยประชากรสุ่มของ critters กับสมองสุ่ม เซลล์ประสาทขาเข้าและขาออกเป็นแบบคงที่ แต่สิ่งที่อยู่ระหว่างนั้นไม่ได้

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

ในที่สุดสิ่งมีชีวิตวิวัฒนาการไปทั่วโลกและหาอาหารและหลีกเลี่ยงอันตราย

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

จากนั้นฉันลองทำสิ่งที่น่าสนใจ ฉันตายสิ่งมีชีวิตจะกลายเป็นอาหาร พยายามเดาว่าเกิดอะไรขึ้น! วิวัฒนาการของสิ่งมีชีวิตสองประเภทคือประเภทที่โจมตีเหมือนฝูงและอีกกลุ่มที่หลีกเลี่ยงได้สูง

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

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

แก้ไข:

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

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

นี่คือตัวอย่างรหัสสำหรับตัวอย่างการเอาตัวรอด: http://www.mempko.com/darcs/neural/demos/eaters/ คำแนะนำในการสร้าง:

  • ติดตั้ง darcs, libboost, liballegro, gcc, cmake, make
  • darcs clone --lazy http://www.mempko.com/darcs/neural/
  • cd neural
  • cmake .
  • make
  • cd demos/eaters
  • ./eaters

ภาพหน้าจอของผู้เสพ


10
และรางวัลทัวริงของคุณจะไปกับเรื่องนี้ที่ไหน? คุณต้องมีความก้าวหน้าทางวิทยาศาสตร์อย่างบ้าคลั่งเพื่อที่จะได้มีการทดลองแบบนี้แม้กระทั่งวิ่งบนถนนอะไรก็ตามยกเว้น RoadRunner
San Jacinto

1
เห็นด้วยกับ Eric คุณสามารถเขียน NN ง่าย ๆ ได้ภายในหนึ่งชั่วโมง (และอันที่จริงฉันทำเสร็จแล้วในการสอบ) และ GA พื้นฐานไม่จำเป็นต้องทำงานมากกว่าหนึ่งวันหรือสองวัน นี่เป็นอัลกอริทึม A-Life มากกว่าอัลกอริทึมทางพันธุกรรม แต่เรายังคงพูดถึงสิ่งที่ง่ายและเป็นไปได้ที่นี่
Kylotan

2
นี่ไม่ใช่ของปลอมในช่วงเวลาสั้น ๆ ... ฤดูร้อนหลังจากปีแรกของฉันฉันทำโปรเจ็กต์คล้ายกับละครเรื่องนี้โดยใช้ XNA ใน C # ลบด้วยโครงข่ายประสาทเทียมใช้ GAs และประชากรของสิ่งมีชีวิตมากมาย . ยกตัวอย่างเช่นยีนหนึ่งควบคุมการมองเห็นของพวกเขา - หมายถึงการมองเห็นที่ไกลขึ้น อุปสรรคและอาหารจะถูกวางแบบสุ่มและสิ่งมีชีวิตจะเติมพลังงานของพวกเขาโดยการกินอาหาร ลักษณะจะกลายพันธุ์โดยการเพิ่มหมายเลข Gaussian ที่สร้างแบบสุ่มให้กับพวกเขาส่งผลให้ยีนที่กระจายตามปกติเช่นเดียวกับในการวิวัฒนาการที่เกิดขึ้นจริง
Philip Guin

2
ฉันทำงานในกลุ่มวิจัยที่สิ่งนี้ (ALife) เป็นสิ่งที่คนทำทุกวัน เรื่องราวของคุณมีความน่าเชื่อถืออย่างแท้จริงและพูดตามตรงฉันรู้สึกตกใจเล็กน้อยที่เห็นว่าทุกคนจะคิดว่ามันเป็นของปลอม จากนั้นอีกครั้งโดยปกติจุดของการทำคือการชี้ให้เห็นว่าพฤติกรรมที่ซับซ้อนสามารถเกิดขึ้นได้จากระบบที่ง่ายมาก - ฉันเดาว่าจุดนั้นไม่ได้ทำดีพอ
Lucas

1
ฉันพบหลักฐานบางอย่างในเว็บไซต์ของเขา: www.mempko.com/darcs/neural เขากล่าวว่า "ฉันเป็นตัวอย่างที่ดีของชายร่างเล็กในโลกเล็ก ๆ น้อย ๆ เพื่อการอยู่รอด" นี่คือตัวอย่างรหัส: mempko.com/darcs/neural/demos/eaters
guerda

51

ในเดือนมกราคมปี 2004 ฉันได้รับการติดต่อจาก Philips New Display Technologies ผู้สร้างอุปกรณ์อิเล็กทรอนิกส์สำหรับ e-ink เชิงพาณิชย์รุ่นแรกคือ Sony Librie ซึ่งเพิ่งวางจำหน่ายในญี่ปุ่นเมื่อหลายปีก่อนที่ Amazon Kindle และอีกหลาย บริษัท จะบุกตลาดในสหรัฐอเมริกา ยุโรป

วิศวกรของฟิลิปส์มีปัญหาสำคัญ สองสามเดือนก่อนที่ผลิตภัณฑ์จะตีตลาดพวกเขายังคงได้รับ ghosting บนหน้าจอเมื่อเปลี่ยนหน้า ปัญหาคือไดรเวอร์ 200 ตัวที่สร้างสนามไฟฟ้าสถิต ไดรเวอร์แต่ละตัวเหล่านี้มีแรงดันไฟฟ้าบางตัวที่ต้องตั้งค่าไว้ระหว่าง 0 ถึง 1,000 mV หรืออะไรทำนองนี้ แต่ถ้าคุณเปลี่ยนหนึ่งในนั้นมันจะเปลี่ยนทุกอย่าง

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

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

วันจันทร์ถัดมาฉันได้รับอีเมลที่แจ่มใสจากเขาและนักออกแบบฮาร์ดแวร์เกี่ยวกับวิธีที่ไม่มีใครเชื่อได้ว่าผลลัพธ์ที่น่าอัศจรรย์ที่ GA ค้นพบ นี่มัน ต่อมาในปีนั้นผลิตภัณฑ์ออกสู่ตลาด

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


23
สิ่งที่ "เกินงบประมาณ" ไม่มีค่าใช้จ่าย แน่นอนพวกเขามีเงินจ่ายให้คุณ แต่พวกเขาเลือกที่จะไม่ ที่ดูดจริงๆและแสดงให้เห็นว่าธุรกิจขนาดใหญ่สามารถใช้ประโยชน์จากโปรแกรมเมอร์ที่ดี
Martin Capodici

50

ฉันใช้ GA เพื่อปรับการจัดที่นั่งให้เหมาะสมที่สุดที่การรับงานแต่งงานของฉัน แขก 80 คนขึ้นไป 10 โต๊ะ ฟังก์ชั่นการประเมินนั้นมีพื้นฐานมาจากการรักษาคนที่มีวันที่ของพวกเขาทำให้คนที่มีบางสิ่งที่เหมือนกันร่วมกันและทำให้คนที่มีมุมมองตรงข้ามมากที่ตารางที่แยกต่างหาก

ฉันวิ่งไปหลายครั้ง แต่ละครั้งฉันได้เก้าโต๊ะที่ดีและอีกหนึ่งลูกที่มีลูกบอลคี่ ในที่สุดภรรยาของฉันก็ทำหน้าที่จัดที่นั่ง

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

อัปเดต : เนื่องจากมีคนถามว่า ...

เริ่มต้นด้วยอาร์เรย์ของแขก (หรือเมือง) ในการสั่งซื้อตามอำเภอใจ แต่สอดคล้องกันเช่นเรียงตามตัวอักษร เรียกสิ่งนี้ว่าโซลูชันอ้างอิง คิดว่าดัชนีของแขกเป็นหมายเลขที่นั่งของเขา / เธอ

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

ดังนั้นโครโมโซมสามารถสร้างสุ่มกลายพันธุ์และข้ามกับผู้อื่นและมักจะผลิตโซลูชั่นที่ถูกต้อง


แล้วการทำแผนที่นวนิยายเล่มนั้นคืออะไร?
Manuel Aráoz

4
@Manuel: แทนที่จะเข้ารหัสทัวร์โดยตรงใน "โครโมโซม" ฉันเข้ารหัสการแปลงที่เปลี่ยนทัวร์อ้างอิงเป็นวิธีแก้ปัญหา การแปลงเป็นเพียงการแลกเปลี่ยนระหว่างเมืองในดัชนี ดังนั้นพวกเขาจึงสามารถรวมตัวกันใหม่ในแบบเก่า ๆ และยังคงสร้างทัวร์ที่เยี่ยมชมทุกเมืองทันที
Adrian McCarthy

ขอบคุณ! ฉันสับสนเล็กน้อยกับการเปลี่ยนมุมมอง โครโมโซมแต่ละรายการเข้ารหัสรายการดัชนีเพื่อสลับ - นั่นไม่ได้หมายความว่าดัชนีสามารถปรากฏได้มากกว่าหนึ่งครั้งในโครโมโซมใช่หรือไม่
3019612

1
Chomosome มีดัชนี c1, c2, c3, ... , cn "Solution" คืออาร์เรย์ เริ่มต้นด้วยรายการอ้างอิงของคุณ จากนั้นสำหรับดัชนีแต่ละคู่ในโครโมโซมให้สลับสององค์ประกอบในการแก้ปัญหา ( temp = a[c1]; a[c1] = a[c2]; a[c2] = temp) ไม่สำคัญว่าดัชนีสองดัชนีจะเหมือนกันหรือไม่เพราะจะยังคงมีผู้เข้าพักทุกคน (หรือเมือง) ทุกครั้ง
Adrian McCarthy

33

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

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

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

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

ฉันทำทั้งหมดนี้โดยใช้ Perl การรันซอฟต์แวร์หนึ่งครั้งบนกล่อง linux ที่ค่อนข้างเก่าจะใช้เวลา 1-2 ชั่วโมงในการรัน (20 นาทีในการโหลดข้อมูลผ่านลิงค์ WAN ส่วนที่เหลือของเวลาที่ใช้ในการทำ crunching) ขนาดของรุ่นใด ๆ ที่ถูก จำกัด ด้วย RAM ที่มีอยู่ ฉันจะเรียกใช้ซ้ำแล้วซ้ำอีกเมื่อมีการเปลี่ยนแปลงพารามิเตอร์เล็กน้อยโดยมองหาชุดผลลัพธ์ที่ดีเป็นพิเศษ

สรุปแล้วมันหลีกเลี่ยง gaffes บางอย่างที่มาพร้อมกับการพยายามปรับแต่งค่าสัมพัทธ์ของตัวชี้วัดการฉ้อโกงนับสิบแบบด้วยตนเองและหาวิธีแก้ปัญหาที่ดีกว่าอย่างสม่ำเสมอ AFAIK ยังคงใช้งานอยู่ (ประมาณ 3 ปีหลังจากที่ฉันเขียน)


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

21

การให้ทิปฟุตบอล ฉันสร้างระบบ GA เพื่อทำนายผลลัพธ์สัปดาห์ต่อสัปดาห์ของเกมใน AFL (Aussie Rules Football)

ไม่กี่ปีที่ผ่านมาฉันเบื่องานฟุตบอลมาตรฐานทุกคนกำลังออนไลน์และหยิบของจากบัณฑิตในสื่อ ดังนั้นฉันคิดว่ามันไม่ยากเกินไปที่จะเอาชนะวิชาเอกวารสารศาสตร์ออกอากาศใช่ไหม? ความคิดแรกของฉันคือการรับผลลัพธ์จากการจัดอันดับของ Masseyจากนั้นเปิดเผยเมื่อสิ้นสุดฤดูกาลกลยุทธ์ของฉันหลังจากชนะชื่อเสียงและศักดิ์ศรี อย่างไรก็ตามด้วยเหตุผลที่ฉันไม่เคยค้นพบ Massey ไม่ได้ติดตาม AFL ความเห็นถากถางดูถูกในตัวฉันเชื่อว่าเป็นเพราะผลลัพธ์ของเกม AFL แต่ละเกมนั้นเป็นโอกาสแบบสุ่ม แต่การร้องเรียนของฉันเกี่ยวกับการเปลี่ยนแปลงกฎล่าสุดอยู่ในฟอรัมอื่น

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

ในทางปฏิบัติระบบจะค้นหาวิธีแก้ไขปัญหาที่คาดการณ์ได้อย่างแม่นยำมากกว่า 90% ของผลลัพธ์ในเกมที่ผ่านมา จากนั้นจะสามารถเลือกเกมได้ประมาณ 60-80% สำหรับสัปดาห์ต่อไป (นั่นคือสัปดาห์ที่ไม่ได้อยู่ในชุดฝึกซ้อม)

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

ฉันสร้างทุกอย่างตั้งแต่เริ่มต้นไม่มีกรอบใช้


21

เช่นเดียวกับปัญหาทั่วไปบางอย่างเช่นพนักงานขายนักท่องเที่ยวและความหลากหลายของโปรแกรม Mona Lisa ของ Roger Alsingฉันยังได้เขียนแก้ปัญหา Sudoku ที่เป็นวิวัฒนาการ (ซึ่งต้องใช้ความคิดดั้งเดิมเล็กน้อยมากกว่าในส่วนของฉันแทนที่จะนำไปใช้ใหม่อีกครั้ง) ความคิดของคนอื่น) มีอัลกอริธึมที่น่าเชื่อถือมากกว่าสำหรับการแก้ Sudokus แต่วิธีวิวัฒนาการใช้ได้ผลดีพอสมควร

ในไม่กี่วันที่ผ่านมาฉันได้เล่นกับโปรแกรมวิวัฒนาการเพื่อค้นหา "ห้องเย็น" สำหรับโป๊กเกอร์หลังจากได้เห็นบทความนี้ใน Reddit ตอนนี้ยังไม่เป็นที่น่าพอใจ แต่ฉันคิดว่าฉันสามารถปรับปรุงได้

ฉันมีกรอบของตัวเองที่ฉันใช้สำหรับอัลกอริทึมวิวัฒนาการ


17

ฉันพัฒนา home brew GA สำหรับระบบโปรไฟล์เลเซอร์พื้นผิว 3 มิติที่ บริษัท ของฉันพัฒนาขึ้นมาสำหรับอุตสาหกรรมการขนส่งสินค้าในปี 1992 ระบบนี้ใช้ระบบสามมิติแบบสามมิติและใช้เครื่องสแกนเส้นเลเซอร์แบบกำหนดเองกล้อง 512x512 ระยะห่างระหว่างกล้องกับเลเซอร์จะไม่แม่นยำและจุดโฟกัสของกล้องจะไม่พบในตำแหน่ง 256,256 ที่คุณคาดว่าจะเป็น!

มันเป็นฝันร้ายที่จะลองและหาพารามิเตอร์การสอบเทียบโดยใช้รูปทรงเรขาคณิตมาตรฐานและการแก้สมการการหลอมแบบจำลอง

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

เคล็ดลับทำงานรักษา ฉันรู้สึกงุนงงที่จะพูดน้อย! ภายในเวลาประมาณ 10 ชั่วอายุคนคิวบ์ 'เสมือน' ของฉัน (สร้างขึ้นจากการสแกนแบบดิบและสร้างขึ้นใหม่จากพารามิเตอร์การสอบเทียบ) ดูเหมือนลูกบาศก์จริงๆ! หลังจากผ่านไป 50 ชั่วอายุคนฉันมีการสอบเทียบที่ฉันต้องการ


11

มันมักจะยากที่จะได้รับการผสมสีที่แน่นอนเมื่อคุณวางแผนที่จะทาสีบ้านของคุณ บ่อยครั้งที่คุณมีสีอยู่ในใจ แต่ไม่ใช่สีใดสีหนึ่งที่ผู้ขายแสดงให้คุณเห็น

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

ผู้ชายสีที่ใช้ในการดำเนินการกับเขาโปรแกรมซอฟต์แวร์ที่ใช้ GA เขาใช้ในการเริ่มต้นด้วย 4 สีที่แตกต่าง - แต่ละรหัสเป็น Chromosome ที่เข้ารหัส (ซึ่งค่าถอดรหัสจะเป็นค่า RGB) ผู้บริโภคเลือก 1 ใน 4 สี (ซึ่งใกล้เคียงกับที่เขา / เธอมีอยู่ในใจ) โปรแกรมก็จะกำหนดสูงสุดที่ออกกำลังกายที่แต่ละคนและย้ายไปยังถัดไปรุ่นที่ใช้การกลายพันธุ์ / ครอสโอเวอร์ ขั้นตอนข้างต้นจะทำซ้ำจนกว่าผู้บริโภคจะพบสีที่แน่นอนจากนั้นคนที่แต่งตัวประหลาดสีเคยบอกให้เขารู้ว่าชุดค่าผสม RGB!

ด้วยการกำหนดความเหมาะสมของสีให้ใกล้เคียงกับสิ่งที่ผู้บริโภคมีอยู่ในใจโปรแกรมของคนสีกำลังเพิ่มโอกาสที่จะมาบรรจบกันกับสี ฉันพบว่ามันสนุกมาก!

ตอนนี้ฉันได้ -1 แล้วถ้าคุณวางแผนเพิ่มอีก -1 ได้แล้ว อธิบายเหตุผลในการทำเช่นนั้น!


6
ฉันจะไม่ลงคะแนนคุณ แต่ฉันเดาว่าเป็นเพราะคุณไม่ได้ทำเอง OP ขอเฉพาะสิ่งที่คุณทำเอง
jprete

นี่เป็น biomorphs ของ Richard Dawkins ที่เรียบง่ายกว่า
Nick Johnson

1
สิ่งที่ตลกเกี่ยวกับสีคือคุณไม่สามารถพิจารณาได้ด้วยตนเอง ผู้ให้คำปรึกษาด้านสีไม่ได้หันมามีเพียงสีเดียว - พวกเขามาในจานสีและแผนการ ไม่มีจุดใดที่เพียงแค่เลือกสีเดียวด้วยตัวเอง ฉันไม่ได้ลงคะแนน แต่คำตอบของคุณยืดนิยามของ GA คุณจะกลายพันธุ์ / ครอสโอเวอร์หนึ่งสีได้อย่างไร นี่เป็นการสาธิตที่ย้ำชุดข้อมูลที่ จำกัด ซ้ำ ๆ
Kirk Broadhurst

2
นี่อาจอธิบาย downvotes: ดูเหมือนว่าเป็นเนินเขามากกว่า GA ไม่ใช่
Eric Normand

8

สองสามสัปดาห์ที่ผ่านมาฉันแนะนำวิธีแก้ไขปัญหาโดยใช้ขั้นตอนวิธีเชิงพันธุกรรมในการแก้ปัญหาการจัดเรียงกราฟ มันเป็นตัวอย่างของปัญหาการปรับให้เหมาะสมแบบ จำกัด

นอกจากนี้ในส่วนของการเรียนรู้ของเครื่องฉันใช้กรอบการจำแนกประเภทตาม GA ใน c / c ++ ตั้งแต่เริ่มต้น
ผมยังใช้ GA ในโครงการตัวอย่างสำหรับการฝึกอบรมเครือข่ายประสาทเทียม (ANN) เมื่อเทียบกับการใช้ที่มีชื่อเสียงขั้นตอนวิธีการแพร่กระจายย้อนกลับ

นอกจากนี้และเป็นส่วนหนึ่งของการวิจัยระดับบัณฑิตศึกษาของฉันฉันใช้ GA ในการฝึกอบรมHidden Markov Modelsเป็นแนวทางเพิ่มเติมสำหรับอัลกอริทึมBaum-Welchจาก EM (ใน c / c ++ อีกครั้ง)


สวัสดีแอมโร คุณทำการเปรียบเทียบแบบเต็มระหว่างผลลัพธ์ที่ได้จาก backprop และ GA หรือไม่ ถ้าเป็นเช่นนั้นคุณสามารถแบ่งปันผลการเปรียบเทียบกับเราได้ไหม คุณใช้ขั้นตอนไขว้สำหรับสอง NN อย่างไร
lmsasu

@ lmsasu: ไม่มีอะไรแฟนซี: แต่ละสตริงหรือโครโมโซมในประชากรแสดงถึงน้ำหนักและค่าอคติของเครือข่ายและใช้ตัวดำเนินการครอสโอเวอร์แบบง่าย 1 หรือ 2 จุด จากสิ่งที่ฉันจำได้มันใช้เวลานานสำหรับเครือข่ายในการฝึกอบรมโดยใช้ GA การใช้งานของฉันเป็นหลักฐานของแนวคิดมากกว่าสิ่งอื่น (ดูที่นี่สำหรับตัวอย่างของเล่นของการควบคุมเรือกวาดทุ่นระเบิดเสมือน) ... อย่างไรก็ตามมีเอกสารจำนวนมากออกมีที่หารือเกี่ยวกับการใช้ GA ไม่เพียง แต่เรียนรู้น้ำหนัก แต่ยังพัฒนา โครงสร้างเครือข่าย
Amro

8

เป็นส่วนหนึ่งของการศึกษาระดับปริญญาตรี CompSci ของฉันเราได้รับมอบหมายปัญหาในการค้นหาธง jvm ที่ดีที่สุดสำหรับเครื่องเสมือนการวิจัย Jikes สิ่งนี้ได้รับการประเมินโดยใช้ชุดมาตรฐาน Dicappo ซึ่งจะส่งคืนเวลาไปยังคอนโซล ฉันเขียน alogirthm ที่เป็น gentic แบบกระจายซึ่งเปลี่ยนสถานะเหล่านี้เพื่อปรับปรุงรันไทม์ของชุดเบนช์มาร์กถึงแม้ว่ามันต้องใช้เวลาหลายวันกว่าจะทำงานเพื่อชดเชยความกระวนกระวายใจของฮาร์ดแวร์ที่มีผลต่อผลลัพธ์ ปัญหาเดียวคือฉันไม่ได้เรียนรู้อย่างถูกต้องเกี่ยวกับทฤษฎีคอมไพเลอร์ (ซึ่งเป็นเจตนาของการมอบหมาย)

ฉันสามารถสร้างประชากรเริ่มต้นด้วยค่าสถานะเริ่มต้นที่มีอยู่ได้ แต่สิ่งที่น่าสนใจคืออัลกอริทึมพบการกำหนดค่าที่คล้ายกันมากกับระดับการปรับให้เหมาะสมของ O3 (แต่จริง ๆ แล้วเร็วกว่าในการทดสอบจำนวนมาก)

แก้ไข: นอกจากนี้ฉันยังเขียนกรอบงานอัลกอริธึมทางพันธุกรรมของฉันเองใน Python สำหรับการมอบหมายและใช้คำสั่ง popen เพื่อรันเกณฑ์มาตรฐานต่างๆแม้ว่าจะไม่ใช่การกำหนดที่ได้รับการประเมินฉันก็จะดู pyEvolve


7

ก่อนอื่น "การเขียนโปรแกรมทางพันธุกรรม" โดย Jonathan Koza ( ที่ amazon ) เป็นหนังสือเกี่ยวกับอัลกอริทึมทางพันธุกรรมและวิวัฒนาการ / เทคนิคการเขียนโปรแกรมที่มีตัวอย่างมากมาย ฉันขอแนะนำให้ลองดู

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


ซีรี่ส์ของ Koza ใน GP นั้นมีความหนาแน่นสูงและอาจไม่เหมาะกับคนที่ยังใหม่กับ GP ฉันขอแนะนำคู่มือภาคสนามของ Riccardo Poli สำหรับการเขียนโปรแกรมเชิงพันธุกรรม (มีให้ในรูปแบบ html ฟรี) หรือ An Introduction to Algorithms ทางพันธุกรรมโดย Melanie Mitchell
ไม่มีใคร

7

ฉันเป็นส่วนหนึ่งของทีมตรวจสอบการใช้ Evolutionary Computation (EC) เพื่อแก้ไขข้อบกพร่องในโปรแกรมที่มีอยู่โดยอัตโนมัติ เราประสบความสำเร็จในการซ่อมแซมข้อบกพร่องจำนวนมากในโครงการซอฟต์แวร์ในโลกแห่งความเป็นจริง (ดูหน้าแรกของโครงการนี้ )

เรามีสองแอปพลิเคชันของเทคนิคการซ่อมแซม EC นี้

  • ข้อมูลรหัสและการทำสำเนาครั้งแรกที่มีให้ผ่านหน้าโครงการวิวัฒนาการวิวัฒนาการของโครงสร้างไวยากรณ์ที่แยกวิเคราะห์จากโปรแกรม C ที่มีอยู่และนำไปใช้ใน Ocaml โดยใช้โปรแกรม EC ของเราเอง

  • ประการที่สอง (ข้อมูลรหัสและการทำซ้ำที่มีอยู่ในหน้าโครงการ ) การมีส่วนร่วมของฉันในโครงการวิวัฒนาการประกอบ x86 หรือรหัส Java byte ที่รวบรวมจากโปรแกรมที่เขียนด้วยภาษาโปรแกรมจำนวนหนึ่ง แอปพลิเคชั่นนี้ใช้งานใน Clojure และยังใช้เอ็นจิน EC ที่สร้างขึ้นเอง

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


6

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


5

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

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


4

ฉันทำกรอบ GA สมบูรณ์ชื่อ "GALAB" เพื่อแก้ปัญหาต่าง ๆ :

  • ค้นหา GSM ANTs (BTS) เพื่อลดตำแหน่งที่ทับซ้อน & ว่าง
  • การกำหนดเวลาโครงการ จำกัด ทรัพยากร
  • การสร้างภาพวิวัฒนาการ ( Evopic )
  • ปัญหาการเดินทางของพนักงานขาย
  • ปัญหาของ N-Queen & N-Color
  • อัศวินทัวร์ & ปัญหาเครื่องหลัง
  • ปริศนาสี่เหลี่ยมจัตุรัสและปริศนา Sudoku
  • การบีบอัดสตริงขึ้นอยู่กับปัญหา Superstring
  • ปัญหาการบรรจุ 2D
  • แอปชีวิตประดิษฐ์ขนาดเล็ก
  • ปริศนารูบิค

ใช่แหล่งที่มาของการตีพิมพ์ภายใต้ของฉันหนังสือ GA
MShams

4

ฉันเคยใช้ GA เพื่อปรับฟังก์ชั่นแฮชให้เหมาะสมที่สุดสำหรับที่อยู่หน่วยความจำ ที่อยู่มีขนาดหน้า 4K หรือ 8K ดังนั้นพวกเขาจึงแสดงความสามารถในการคาดเดาได้ในรูปแบบบิตของที่อยู่ (บิตที่สำคัญน้อยที่สุดเป็นศูนย์ทั้งหมดบิตกลางเพิ่มขึ้นเป็นประจำ ฯลฯ ) ฟังก์ชันแฮชดั้งเดิมคือ "หนา" ในถังแฮชที่สามทุกครั้ง อัลกอริทึมที่ได้รับการปรับปรุงมีการกระจายตัวเกือบสมบูรณ์แบบ


3

ฉันไม่รู้ว่าการบ้านนับหรือไม่ ...

ในระหว่างการศึกษาของฉันเราได้เปิดโปรแกรมของเราเองเพื่อแก้ปัญหาพนักงานขายที่เดินทาง

คิดว่าจะทำให้การเปรียบเทียบเกณฑ์ที่หลายคน (ยากลำบากในการ map ปัญหาประสิทธิภาพการทำงาน ฯลฯ ) และเรายังใช้เทคนิคอื่น ๆ เช่นจำลองการอบ

มันใช้งานได้ค่อนข้างดี แต่เราต้องใช้เวลาสักครู่ในการทำความเข้าใจวิธีการ 'ทำซ้ำ' เฟสอย่างถูกต้อง: การสร้างปัญหาให้เป็นสิ่งที่เหมาะสำหรับการเขียนโปรแกรมทางพันธุกรรมทำให้ฉันเป็นส่วนที่ยากที่สุด ...

มันเป็นหลักสูตรที่น่าสนใจเพราะเราเล่นกับเครือข่ายประสาทเทียมและสิ่งที่คล้ายกัน

ฉันต้องการทราบว่าใครใช้โปรแกรมประเภทนี้ในรหัส 'การผลิต'


3

ฉันสร้าง GA ง่าย ๆ สำหรับการแยกรูปแบบที่มีประโยชน์ออกจากคลื่นความถี่ของเพลงในขณะที่กำลังเล่นอยู่ เอาท์พุทที่ใช้ในการไดรฟ์ผลกราฟิกในปลั๊กอิน Winamp

  • อินพุต: เฟรม FFT สองสามตัว (ลองนึกภาพอาร์เรย์สองมิติของโฟลต)
  • เอาท์พุท: ค่าลอยเดียว (ผลรวมถ่วงน้ำหนักของอินพุต), ขีด จำกัด ถึง 0.0 หรือ 1.0
  • ยีน: น้ำหนักการป้อนข้อมูล
  • ฟังก์ชั่นการออกกำลังกาย: การรวมกันของวัฏจักรหน้าที่ความกว้างของพัลส์และ BPM ภายในช่วงที่เหมาะสม

ฉันได้ปรับแต่ง GAs ไปยังส่วนต่าง ๆ ของสเปกตรัมรวมถึงขีด จำกัด ของ BPM ที่แตกต่างกันดังนั้นพวกเขาจึงไม่มีแนวโน้มที่จะมารวมกันในรูปแบบเดียวกัน เอาต์พุตจาก 4 อันดับแรกจากแต่ละประชากรถูกส่งไปยังเอ็นจิ้นการแสดงผล

ผลข้างเคียงที่น่าสนใจคือการออกกำลังกายโดยเฉลี่ยทั่วทั้งประชากรเป็นตัวบ่งชี้ที่ดีสำหรับการเปลี่ยนแปลงในเพลงแม้ว่าโดยทั่วไปจะใช้เวลา 4-5 วินาทีในการคิดออก


3

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

คุณสามารถค้นหารหัสที่นี่

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

คุณสามารถค้นหาได้ที่นี่

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

วิทยานิพนธ์ของฉันที่ใช้กรอบนี้กับปัญหาการเลือกโครงการ: http://www.ub.tuwien.ac.at/dipl/2008/AC05038968.pdf

หลังจากนั้นฉันทำงานในแผนกการจัดการพอร์ตโฟลิโอหนึ่งในฟอร์จูน 500 ซึ่งพวกเขาใช้ซอฟต์แวร์เชิงพาณิชย์ซึ่งใช้ GA กับปัญหาการเลือกโครงการ / การเพิ่มประสิทธิภาพพอร์ตโฟลิโอ

แหล่งข้อมูลเพิ่มเติม:

เอกสารของกรอบงาน: http://thomaskremmel.com/mpoems/mpoems_in_java_documentation.pdf

mPOEMS กระดาษนำเสนอ: http://portal.acm.org/citation.cfm?id=1792634.1792653

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


2

ที่ทำงานฉันมีปัญหาดังต่อไปนี้: กำหนดงาน M และ N DSPs วิธีที่ดีที่สุดในการมอบหมายงานให้ DSP คืออะไร "ดีที่สุด" ถูกกำหนดให้เป็น "การย่อขนาดโหลด DSP ที่โหลดมากที่สุด" ให้น้อยที่สุด มีประเภทของงานที่แตกต่างกันและประเภทของงานต่าง ๆ มีการเพิ่มประสิทธิภาพการทำงานที่หลากหลายขึ้นอยู่กับตำแหน่งที่ได้รับมอบหมายดังนั้นฉันจึงเข้ารหัสชุดงานที่ได้รับจาก DSP เป็น "DNA string" จากนั้นใช้อัลกอริทึมทางพันธุกรรม สตริงการมอบหมายที่ดีที่สุดที่ฉันสามารถทำได้

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


2

มีการแข่งขันบน codechef.com (เว็บไซต์ยอดเยี่ยมโดยวิธีการแข่งขันการเขียนโปรแกรมรายเดือน) ที่หนึ่งก็ควรที่จะแก้ปัญหาซูโดกุที่ไม่สามารถแก้ไขได้ (หนึ่งควรมาใกล้ที่สุดเท่าที่เป็นไปได้กับ collumns / แถว / etc น้อยที่สุดเท่าที่เป็นไปได้)

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

ฉันไม่สามารถนึกถึงแนวทางที่กำหนดได้ในกรณีนี้เพราะซูโดกุมีขนาด 300x300 และการค้นหาอาจใช้เวลานานเกินไป


2

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


2

ในการสัมมนาในโรงเรียนเราพัฒนาแอพพลิเคชั่นเพื่อสร้างเพลงในโหมดดนตรี โปรแกรมถูกสร้างใน Java และเอาท์พุทเป็นไฟล์ midi กับเพลง เราใช้ aproachs ที่แตกต่างกันของ GA เพื่อสร้างเพลง ฉันคิดว่าโปรแกรมนี้มีประโยชน์ในการสำรวจองค์ประกอบใหม่


เยี่ยมมากฉันได้ลองทำสิ่งที่คล้ายกัน: ลิงก์
Todor Balabanov

2

ในระดับปริญญาตรีเราใช้ NERO (การรวมกันของเครือข่ายประสาทและอัลกอริทึมทางพันธุกรรม) เพื่อสอนหุ่นยนต์ในเกมเพื่อการตัดสินใจที่ชาญฉลาด มันค่อนข้างเท่ห์


2

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

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

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

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

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


1

ฉันเคยพยายามสร้างเครื่องเล่นคอมพิวเตอร์สำหรับเกม Go โดยเฉพาะตามการเขียนโปรแกรมทางพันธุกรรม แต่ละโปรแกรมจะถือว่าเป็นฟังก์ชันการประเมินผลสำหรับลำดับการเคลื่อนที่ โปรแกรมที่ผลิตออกมานั้นไม่ค่อยดีนักแม้ว่าจะเป็นบอร์ด 3x4 ที่ค่อนข้างใช้งานง่าย

ฉันใช้ Perl แล้วเขียนทุกอย่างด้วยตัวเอง วันนี้ฉันจะทำสิ่งต่าง ๆ


1

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

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


1

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

บุคคลที่อยู่ในรูปแบบของต้นไม้ที่เอาพื้นที่ 3x3 พิกเซลเป็นอินพุททำการคำนวณบางอย่างและตัดสินใจเกี่ยวกับวิธีการและการปรับเปลี่ยนพิกเซลกลาง การออกกำลังกายนั้นตัดสินจากการเปรียบเทียบผลลัพธ์กับภาพที่ได้รับการทำความสะอาดในแบบดั้งเดิม (เช่นการเปิดรับแสงซ้อน)

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

ห้องสมุดที่ใช้: หากฉันจำได้ถูกต้อง IRAF และ cfitsio สำหรับการประมวลผลข้อมูลภาพทางดาราศาสตร์และ I / O


1

ฉันทดลอง GA กับเด็ก ๆ ฉันเขียนโปรแกรมจำลองใน Python ที่ทำงานดังนี้

ยีนเข้ารหัสน้ำหนักของเครือข่ายประสาท

อินพุตของเครือข่ายประสาทเทียมคือ "เสาอากาศ" ที่ตรวจพบการสัมผัส ค่าที่สูงกว่าหมายถึงใกล้มากและ 0 หมายถึงไม่ได้สัมผัส

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

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

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

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

ฉันคิดว่าพวกเขาจะพัฒนาพฤติกรรม "ซ้ายกำแพง" แต่พวกเขาดูเหมือนจะทำตามสิ่งที่ดีที่สุดน้อยกว่า ในการทดลองทุกครั้งข้อผิดพลาดมารวมกันเป็นรูปแบบเกลียว พวกเขาจะเกลียวออกไปด้านนอกจนกว่าพวกเขาจะสัมผัสกำแพงทางด้านขวา พวกเขาทำตามนั้นจากนั้นเมื่อพวกเขาถึงช่องว่างพวกเขาก็จะม้วนตัวลง (ห่างจากช่องว่าง) และรอบ ๆ พวกเขาจะเลี้ยวไปทางซ้าย 270 องศาจากนั้นก็มักจะเข้าช่องว่าง สิ่งนี้จะพาพวกเขาผ่านกำแพงส่วนใหญ่และมักจะไปถึงเป้าหมาย

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

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

ฉันลองสิ่งต่าง ๆ เช่นมีการแยกยีนที่รวมตัวกันใหม่หลังจาก 100 รุ่นเท่านั้น แต่ไม่มีอะไรจะผลักพวกเขาไปสู่กลยุทธ์ที่ดีกว่า บางทีมันเป็นไปไม่ได้

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

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