เป็นวิธีที่ดีในการเรียกใช้การศึกษาพารามิเตอร์ใน C ++ คืออะไร


29

ปัญหา

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

  • มีไลบรารี / กรอบงาน C ++ / Python ที่มีประโยชน์ที่สามารถช่วยแก้ไขสิ่งนี้ได้ไหม? ตัวอย่างเช่นการค้นพบboost.Program_optionsเป็นความช่วยเหลือที่ยิ่งใหญ่เนื่องจากเป็นไปได้ที่จะโอเวอร์โหลดตัวเลือกไฟล์อินพุตด้วยอาร์กิวเมนต์บรรทัดคำสั่ง ฉันเคยเห็นบางคนใช้ไฟล์งานที่อธิบายแต่ละกรณีค่อนข้างมีประสิทธิภาพและเพื่อนร่วมงานแนะนำว่าการเขียนพารามิเตอร์ลงในไฟล์ vtu เนื่องจากบล็อกข้อคิดเห็นสามารถใช้งานได้เช่นกัน
  • บางทีมันอาจไม่คุ้มค่ากับการลงทุนเวลานี้ มันเป็นเพียงสิ่งที่ทำให้ไขว้เขวและเสียเวลาและเป็นวิธีที่ดีที่สุดเพียงแค่กล้ามเนื้อผ่านกระบวนการทดสอบกำลังดุร้ายและเฉพาะกิจ

ความคิดบางอย่าง

ขณะนี้ฉันกำลังทำสิ่งต่าง ๆ ด้วยมือเป็นส่วนใหญ่และฉันพบปัญหาต่อไปนี้:

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

ขึ้นอยู่กับสิ่งที่คุณหมายถึงโดย '' สำรวจ '' โปรดระบุเป้าหมายของคุณให้แม่นยำยิ่งขึ้น
Arnold Neumaier

คำตอบ:


10

เพียงแค่ความคิดเห็นเกี่ยวกับสองประเด็นของคุณ:

  • ข้อมูลการบันทึกการทำงาน : ทางออกที่ดีที่สุดของคุณน่าจะเป็นไปป์ไลน์ผ่านคำสั่งteeซึ่งควรจะมีอยู่ในเชลล์ส่วนใหญ่

  • การพล็อตข้อมูลตามพารามิเตอร์ : ฉันเดาว่ามันเป็นเรื่องของรสนิยม แต่เมื่อฉันต้องทำการรวมข้อมูลที่ซับซ้อนฉันเก็บผลลัพธ์เป็นข้อความธรรมดาอ่านมันใน Matlab เป็นเมทริกซ์และทำการคำนวณทั้งหมดวางแผนและแม้แต่เอาท์พุท LaTeX จากที่นั่น. แน่นอนว่าการเขียนโปรแกรม / ภาษาสคริปต์ที่คุณคุ้นเคยที่สุดจะให้ผลลัพธ์ที่ดีที่สุด


ขอบคุณteeคำสั่งมีประโยชน์มาก
Matija Kecman

11

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

ในทางกลับกันหากคุณเพียงแค่ทำการประมาณค่าพารามิเตอร์ฉันขอแนะนำให้ใช้ซอฟต์แวร์ที่เหมาะสมกับเรื่องนี้โดยเฉพาะ นักวิจัยหลายคนในมหาวิทยาลัยของฉันโชคดีกับDAKOTAกล่องเครื่องมือวัดปริมาณที่ไม่แน่นอนออกจาก Sandia National Laboratories ( มีให้บริการภายใต้ใบอนุญาตสาธารณะทั่วไปของ Lesser GNU )

นี่คือข้อความที่ตัดตอนมาจากหน้า Sandia ที่อธิบาย DAKOTA:

เรามีวิธีการที่หลากหลายเพื่อให้ผู้ใช้สามารถเรียกใช้คอลเลกชันของแบบจำลองคอมพิวเตอร์เพื่อประเมินความไวของเอาต์พุตโมเดลที่เกี่ยวกับอินพุตโมเดล หมวดหมู่ทั่วไป ได้แก่ การศึกษาพารามิเตอร์วิธีการสุ่มตัวอย่างและการออกแบบการทดลอง ในการศึกษาพารามิเตอร์หนึ่งขั้นตอนพารามิเตอร์อินพุตบางอย่างผ่านช่วงขณะที่รักษาพารามิเตอร์อินพุตอื่นไว้คงที่และประเมินว่าเอาต์พุตแตกต่างกันอย่างไร ในวิธีการสุ่มตัวอย่างหนึ่งจะสร้างตัวอย่างจากการกระจายพื้นที่อินพุตและคำนวณการตอบสนองเอาต์พุตที่ค่าอินพุต วิธีการสุ่มตัวอย่างที่เฉพาะเจาะจงที่มีอยู่ภายใน DAKOTA ได้แก่ Monte Carlo, Latin Hypercube และ (ในอนาคต) quasi-Monte Carlo ในการออกแบบการทดลองผลลัพธ์จะถูกประเมินที่ชุดของ "การออกแบบ" จุดที่เลือกเพื่อสุ่มตัวอย่างพื้นที่ในลักษณะที่เป็นตัวแทน การออกแบบที่เฉพาะเจาะจงของวิธีการทดสอบที่มีอยู่ใน DAKOTA รวมถึงการออกแบบ Box-Behnken, Central Composite และ Factorial การวัดความไวเป็นวิธีทางคณิตศาสตร์ในการแสดงการพึ่งพาของเอาต์พุตในอินพุต ความไวของตัวชี้วัดความหลากหลายนั้นมีอยู่ในดาโกต้าเช่นค่าสัมประสิทธิ์สหสัมพันธ์แบบง่ายและบางส่วนและค่าสหสัมพันธ์อันดับ งานวิจัยปัจจุบันของเรามุ่งเน้นไปที่วิธีการในการสร้างตัวชี้วัดความอ่อนไหวด้วยจำนวนรอบการทำงานที่น้อยที่สุดและการประมาณค่าที่เหมาะสมของพารามิเตอร์ในแบบจำลองคอมพิวเตอร์โดยใช้เทคนิคการวิเคราะห์แบบเบย์


เครื่องมืออื่นเช่นนี้คือ SUSA พัฒนาโดย GRS ในเยอรมนี แต่อันนี้ไม่ฟรี
GertVdE

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

1
@fcruz ใช่หรือbzip2และ7zipที่มีอัตราส่วนการอัดที่ดียิ่งขึ้นสำหรับข้อความ
Ajasja

8

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

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

boost::program_options1iniboost::program_optionsboost::property_tree

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

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

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

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


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

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

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

@ mk527 ฉันไม่รู้ว่าต้องboost::program_optionsบังคับให้ทำอะไรในห้องสมุด อย่างไรก็ตามคุณได้ดูที่ยูทิลิตี้ bcpเพื่อแยกชุดย่อยของการเพิ่มหรือไม่?
rcollyer

3

ฉันรู้จัก PyTables เมื่อติดตั้ง PETSC และฉันเดาว่าตาราง (หรือฐานข้อมูล) วิธีนี้เหมาะสำหรับการสำรวจพื้นที่พารามิเตอร์แม้ว่าฉันยังไม่ได้ลอง เราสามารถบันทึกทุกการรันด้วยพารามิเตอร์เฉพาะและจากนั้นเราสามารถศึกษาการรวมตัวใด ๆ ที่เป็นไปตามเงื่อนไขบางประการกล่าวว่าเราสามารถแก้ไข dt, BDF1 และค้นหาระเบียนที่เกี่ยวข้องทั้งหมดเพื่อศึกษาการเปลี่ยนแปลงเนื่องจากพารามิเตอร์อื่น ๆ

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


3

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

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


2

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

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

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

ไม่ว่าคุณจะเลือกทำอะไรฉันขอแนะนำให้คุณใช้ python เพื่อจัดการกับงานประเภทนี้เนื่องจากคุณสามารถจัดการเวิร์กโฟลว์ทั้งหมดด้วย python อย่างน้อยเรื่องฉันดูเพื่อนร่วมงานของฉันทำงานกับ DAKOTA, ทุบตี, GNUplot, อนุสัญญาการตั้งชื่อไฟล์, sed / awk ระดับแปดเสียง ... ฯลฯ ทำงานด้านการคำนวณของพวกเขา เครื่องมือเหล่านี้แต่ละชิ้นนั้นใช้ได้เอง แต่พลังของงูใหญ่ในฐานะภาษากาวที่ผสานกันนั้นจะส่องแสงเมื่อคุณใช้งูหลามในการจัดการงานของคุณพร้อมกับกองวิทยาศาสตร์ทางหลาม แท้จริงฉันไม่มีปัญหาในการจัดการงานคำนวณหลังจากที่ฉันพัฒนากรอบงาน

/ คำตอบเริ่มต้นของฉันดังนี้ /

ฉันเชื่อว่าฉันได้แก้ปัญหานี้โดยใช้ python ฉันคิดถึงปัญหาเหล่านี้ทั้งหมดแล้ว

ลองดู repo ของฉันที่http://msdresearch.blogspot.com/2012/01/parameter-study-management-with-python.html

ถึงตอนนี้ฉันกำลังทำงานเกี่ยวกับการจัดทำเอกสารที่ดีขึ้น (มันเกี่ยวข้องมากกว่าการกรอกข้อมูลใน readme!)

-Majid alDosari


1
สวัสดี Majid ขอขอบคุณสำหรับการบริจาคและยินดีต้อนรับสู่ SciComp โดยทั่วไปไซต์ StackExchange ไม่สนับสนุนการลิงก์ไปยังหน้าภายนอกและสนับสนุนคำตอบโดยละเอียดเกี่ยวกับเว็บไซต์ "โฆษณา" ลิงก์เดียวมีการสนับสนุนอย่างยิ่ง ฉันขอแนะนำให้แก้ไขหรือลบคำตอบนี้เนื่องจากมันอาจจะไม่ได้รับการตอบรับที่ดีในรูปแบบปัจจุบัน
Aron Ahmadia

เข้าใจ ฉันแค่ไม่เชื่อว่าวิธีแก้ปัญหาสามารถให้ในรูปแบบของโพสต์ ปัญหานั้นค่อนข้างทั่วไป
majidaldosari

1
อย่างน้อยคุณสามารถสรุปแนวทางของคุณเกี่ยวกับปัญหาเหล่านี้ที่คุณคิด?
Christian Clason

1

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

เพื่อส่งผ่านตัวแปรไปยังโปรแกรมและสามารถเปลี่ยนแปลงได้ฉันใช้กระบวนทัศน์ของการใช้ bash script ที่ฉันกำหนด

export aValue=10
export bValue=2
export idName=test

จากนั้นใช้ใน C / C ++

char *env_aValue = getenv("aValue");
char *env_bValue = getenv("bValue");
char *env_idName = getenv("idName");

aValue = atoi(env_aValue)
...

ข้อได้เปรียบที่สำคัญของเรื่องนี้คือ:

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

นอกจากนี้ฉันมักจะผ่าน idName ซึ่งไฟล์ทุกไฟล์ที่เขียนโดยไฟล์เอ็กซีคิวต์นั้นจะมีรหัสเริ่มต้น (สามารถตามด้วยพารามิเตอร์อื่น ๆ หากคุณต้องการ) และพวกเขายังได้รับไดเรกทอรีส่งออก = idName ซึ่งสร้างขึ้นบน bash script และไฟล์ทั้งหมดของไฟล์สั่งการนั้นจะถูกบันทึกไว้ วิธีนี้ผลลัพธ์ถูกจัดระเบียบโดยไดเรกทอรี (ตัวเลือก)


0

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


1
ฉันไม่รู้สึกว่าคำตอบนี้ตอบคำถาม โปสเตอร์มีการจำลอง ฉันได้รับความประทับใจว่าเขาต้องการล้อมกรอบรอบการจำลองที่มีอยู่ของเขาแทนที่จะทำซ้ำการจำลองของเขาในซอฟต์แวร์ที่แตกต่างกันโดยสิ้นเชิง
Geoff Oxberry

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

0

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

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