ขอแนะนำอย่างยิ่งให้ตั้งค่าสภาพแวดล้อมเสมือนใหม่โดยการพิมพ์
virtualenv -p python3 feyn source feyn/bin/activate
ขั้นแรกให้ติดตั้ง numpy ด้วย pip install numpy
แพ็คเกจ 'aifeynman' มีอยู่ใน PyPI และสามารถติดตั้งด้วย pip install aifeynman
โปรดทราบว่าในตอนนี้ AI Feynman รองรับเฉพาะสภาพแวดล้อม Linux และ Mac เท่านั้น
ย้ายไปยังไดเร็กทอรีใหม่ทั้งหมดและรันคำสั่ง Python ต่อไปนี้:
import aifeynman aifeynman.get_demos("example_data") # Download examples from server aifeynman.run_aifeynman("./example_data/", "example1.txt", 60, "14ops.txt", polyfit_deg=3, NN_epochs=500)
ตัวอย่างนี้จะได้รับการแก้ไขภายในประมาณ 10-30 นาที ขึ้นอยู่กับคอมพิวเตอร์ที่คุณมีและคุณมี GPU หรือไม่
ในที่นี้ 'example.txt' มีตารางข้อมูลสำหรับดำเนินการถดถอยเชิงสัญลักษณ์ โดยมีคอลัมน์คั่นด้วยช่องว่าง เครื่องหมายจุลภาค หรือแท็บ พารามิเตอร์อื่นๆ ควบคุมการค้นหา: ที่นี่โมดูล brute-force พยายามผสมผสานการดำเนินการพื้นฐาน 14 รายการใน '14ops.txt' เป็นเวลาสูงสุด 60 วินาที การทดสอบพหุนามพอดีถึงระดับ 3 และโครงข่ายประสาทเทียมที่สอดแทรกได้รับการฝึกฝนให้สูงขึ้น ถึง 500 ยุค
รหัสนี้เป็นการใช้งานที่ได้รับการปรับปรุงของ AI Feynman: วิธีการที่ได้รับแรงบันดาลใจจากฟิสิกส์สำหรับการถดถอยเชิงสัญลักษณ์, Silviu-Marian Udrescu และ Max Tegmark (2019) [ความก้าวหน้าทางวิทยาศาสตร์] และ AI Feynman 2.0: การถดถอยเชิงสัญลักษณ์ที่เหมาะสมที่สุด Pareto โดยใช้ประโยชน์จากการแยกส่วนกราฟ, Udrescu SM et อัล (2020) [arXiv].
โปรดตรวจสอบบทความสื่อนี้เพื่อดูคำอธิบายโดยละเอียดเพิ่มเติมเกี่ยวกับวิธีการเรียกใช้โค้ด
ในการเริ่มต้น ให้รันคอมไพล์.sh เพื่อคอมไพล์ไฟล์ fortran ที่ใช้สำหรับโค้ดเดรัจฉานฟอร์ซ
ai_feynman_example.py มีตัวอย่างการรันโค้ดในตัวอย่างบางส่วน (พบได้ในไดเร็กทอรี example_data) ตัวอย่างต่างๆ สอดคล้องกับสมการ I.8.14, I.10.7 และ I.50.26 ในตารางที่ 4 ในรายงาน ไฟล์ข้อมูลเพิ่มเติมที่สามารถทดสอบโค้ดได้สามารถพบได้ในฐานข้อมูล Feynman Symbolic Regression
ฟังก์ชันหลักของโค้ดที่ผู้ใช้เรียกมีพารามิเตอร์ดังต่อไปนี้:
pathdir - เส้นทางไปยังไดเร็กทอรีที่มีไฟล์ข้อมูล
filename - ชื่อของไฟล์ที่มีข้อมูล
BF_try_time - กำหนดเวลาสำหรับการโทรแบบ bruteforce แต่ละครั้ง (กำหนดโดยค่าเริ่มต้นไว้ที่ 60 วินาที)
BF_ops_file_type - ไฟล์ที่มีสัญลักษณ์ที่จะใช้ในโค้ด bruteforce (ตั้งค่าเริ่มต้นเป็น "14ops.txt")
polyfit_deg - ระดับสูงสุดของพหุนามที่ลองโดยรูทีนพหุนามพอดี (ตั้งค่าเริ่มต้นเป็น 4)
NN_epochs - จำนวนยุคสำหรับการฝึกอบรม (กำหนดโดยค่าเริ่มต้นที่ 4000)
vars_name - ชื่อของตัวแปรที่ปรากฏในสมการ (รวมถึงชื่อของตัวแปรเอาท์พุตด้วย) ควรส่งผ่านเป็นรายการสตริง โดยชื่อของตัวแปรปรากฏในลำดับเดียวกับที่อยู่ในไฟล์ที่มีข้อมูล
test_percentage - เปอร์เซ็นต์ของข้อมูลอินพุตที่จะเก็บไว้และใช้เป็นชุดทดสอบ
ไฟล์ข้อมูลที่จะวิเคราะห์ควรเป็นไฟล์ข้อความโดยแต่ละคอลัมน์มีค่าตัวเลขของตัวแปรแต่ละตัว (ขึ้นอยู่กับและเป็นอิสระ) ไฟล์โซลูชันจะถูกบันทึกไว้ในไดเร็กทอรีชื่อ "ผลลัพธ์" ภายใต้ชื่อ solution_{filename} ไฟล์โซลูชันจะประกอบด้วยหลายแถว (ตรงกับแต่ละจุดบนขอบเขต Pareto) แต่ละแถวจะแสดง:
ลอการิทึมเฉลี่ยในฐาน 2 ของข้อผิดพลาดของสมการที่ค้นพบซึ่งนำไปใช้กับข้อมูลอินพุต (ซึ่งอาจเป็นข้อผิดพลาดโดยเฉลี่ยในหน่วยบิต)
ลอการิทึมสะสมในฐาน 2 ของข้อผิดพลาดของสมการที่ค้นพบซึ่งนำไปใช้กับข้อมูลอินพุต (ซึ่งอาจถือเป็นข้อผิดพลาดสะสมในหน่วยบิต)
ความซับซ้อนของสมการที่ค้นพบ (เป็นบิต)
ข้อผิดพลาดของสมการที่ค้นพบซึ่งนำไปใช้กับข้อมูลอินพุต
การแสดงออกเชิงสัญลักษณ์ของสมการที่ค้นพบ
ถ้า test_percentage แตกต่างจากศูนย์ จะมีการเพิ่มตัวเลขอีกหนึ่งตัวที่จุดเริ่มต้นของแต่ละแถว ซึ่งแสดงข้อผิดพลาดของสมการที่ค้นพบในชุดทดสอบ
ai_feynman_terminal_example.py อนุญาตให้เรียกใช้ฟังก์ชัน aiFeynman จากบรรทัดคำสั่ง (เช่น python ai_feynman_terminal_example.py --pathdir=../example_data/ --filename=example1.txt) ใช้ python ai_feynman_terminal_example.py --help เพื่อแสดงพารามิเตอร์ที่มีอยู่ทั้งหมดที่สามารถส่งผ่านไปยังฟังก์ชันได้
หากคุณเปรียบเทียบ สร้างต่อ หรือใช้แง่มุมต่างๆ ของงาน AI Feynman โปรดอ้างอิงสิ่งต่อไปนี้:
@article{udrescu2020ai, title={AI Feynman: A physics-inspired method for symbolic regression}, author={Udrescu, Silviu-Marian and Tegmark, Max}, journal={Science Advances}, volume={6}, number={16}, pages={eaay2631}, year={2020}, publisher={American Association for the Advancement of Science} }
@article{udrescu2020ai, title={AI Feynman 2.0: Pareto-optimal symbolic regression exploiting graph modularity}, author={Udrescu, Silviu-Marian and Tan, Andrew and Feng, Jiahai and Neto, Orisvaldo and Wu, Tailin and Tegmark, Max}, journal={arXiv preprint arXiv:2006.10782}, year={2020} }