Table of Contents

מבוא ל Multi-תחומי אופטימיזציה ואתגרי Monorepo

אופטימיזציה רב תחומית (MDO) היא אבן הפינה של הנדסה מודרנית.בין אם עיצוב כנף מטוסים, טורבינות רוח, או מערכת תוכנה מורכבת עם חזית, אחורה, ורכיבי למידת מכונה, המשמעת דורשת שיקול סימולטי של מספר, לעתים קרובות קונפליקט, מטרות.ביצירה טיפוסית MDO, מומחים מאווירדינמיקה, מבנים, בקרה תרמיים, ותחומים אחרים חייבים לשתף נתונים, לעתים קרובות, זה על מנת להרחיב את הדיסציפלינות מספר בצורה אופטימלית, כמו פתרונות.

ניהול הקוד, המודלים והכלים לפרויקטים כאלה הוא קשה לשמצה.כל משמעת עשויה להשתמש בשפות שונות (Python forסימולציה, C++ עבור מתכנתים בעלי ביצועים גבוהים, JavaScript/TypeScript עבור ממשקי משתמשים), מערכות בנייה שונות ואסטרטגיות שונות של שליטה בגרסה.התוצאה היא לעתים קרובות נוף מפורק של רספוטים נפרדים, העברת נתונים ידניים, בזבזניות, ומאמץ מבוזבז על בסיס כוח- NPO הוא כלי רב עוצמה.

Nx, שנבנה במקור על גבי Angular CLI, התפתח לתוך ערכת כלים מונורופו מטרה כללית התומכת במגוון רחב של מסגרות ושפות.היכולת שלה לספק ניהול פרויקטים מרכזי, תזציית משימה אינטליגנטית, בנייה מצטברת, ו תלות חוצה משמעת הופכת אותו פלטפורמה אידיאלית עבור פרויקטים MDO. במאמר זה, אנו חוקרים כיצד Nx עבור מושגים רב תחומיים, אופטימיזציה, אופטימיזציה של פתרונות הליבה שלה, שימוש אמיתי, יישום, שימוש, שימוש, אסטרטגיות הליבה שלה, יישום.

מה זה Nx?

Nx הוא מערכת בנייה וכלי ניהול מונורופו המסייע לך לפתח, לבדוק ולבנות פרויקטים מרובים בתוך יחידה יחידה.זה מרחיב את היכולות של CLI אבל עכשיו עובד בצורה חלקה עם React, Node.js, הבאjs, NestJS, Vue, ומסגרות רבות אחרות וספריות.

  • (FLT:0)Project Graph:FLT:1 גרף תלוי מראה בדיוק כיצד הפרויקטים שלך מתייחסים אחד לשני. Nx מבין אילו פרויקטים תלויים בהם, והוא יכול לקבוע את המערך המינימלי של פרויקטים מושפעים לכל שינוי.
  • (FLT:0)Task Orchestrator: FLT:1 Run Task (בבבבבבנייה, מבחן, lint, לשרת) על פני הפרויקטים שלך במקביל, על מנת, או עם תזמון מותאם אישית של Nx באופן אוטומטי תוצאות משימה, כך שאם שום דבר לא השתנה, המשימה היא למעשה מיידית.
  • (ב) ⁇ חכמים וגילוי: ⁇ 1 (FLT:0) הפקודה מפעילה משימות רק על פרויקטים השתנו מאז בסיס נתון, להאיץ באופן דרמטי את צינורות CI.
  • (FLT:0) מארגן והוצאה להורג: FLT:1 , Scaffold פרויקטים חדשים, ספריות ורכיבים עם מבנה עקבי.עובדים מאפשרים לך להפעיל פקודות מותאמות אישית (למשל, סימולציה פייתון או מתווך בייעוד) כמשימות Nx של מחלקה ראשונה.
  • (FLT:0)Distributed Caching עם Nx Cloudcio:FLT 1 שתף משימות על פני הצוות שלך וסוכני CI, הימנעות עבודה מובנת.

עבור פרויקטים של MDO, תכונות המפתח הן גרף התלות, מנגנון הגילוח, ואת היכולת לערבב שפות מרובות ולבנות כלים בתוך סביבת עבודה יחידה. Nx מתייחס לכל משמעת כפרויקט או ספריה, מכבד את דרישותיו הייחודיות תוך מתן ממשק מאוחד לתזמורת.

היתרונות העיקריים של שימוש ב-Nx עבור פרויקטים של MDO

ניהול מרכזי ועקביות

במערך MDO המסורתי, כל משמעת עשויה לשמור על מאגר משלה, קובצי תסריט וקבצי נתונים.סינכרון שינויים הופכת תהליך ידני, שגיאה-prone. עם Nx, כל הדיסציפלינות לחיות במונופרופו אחד.הגרף הפרויקט נותן לך מפה חיה של תלות הדדית: ספריית ניתוח אווירודינמיקה עשויה להיות תלויה בספריה משותפת; כלי אופטימיזציה מבני עשוי להיות תלוי על שניהם כאשר הספרייה Nx, אשר מיד צריך לשנות את המודולים או לבחון מחדש.

שיתוף פעולה משופר בין קבוצות

מהנדסים מרקעים שונים יכולים לעבוד בסביבה משותפת מבלי לדרוך על אחד מהדרכים של השני.מגבלות מבוססות טאג מאפשרות לך להגדיר גבולות - למשל, "פרויקט מבנים אינו יכול להיות תלוי בספריית אווירודינמיקה ישירות אלא אם באמצעות ממשק ציבורי" הכללים של Nx לאכוף את הגבולות האלה, למנוע הפיכה מקרית.

סקלאלה עבור אופטימיזציה בקנה מידה גדול

פרויקטים MDO לעתים קרובות מעורבים מאות מודולים, אלפי קבצים, ורשתות סימולציה מורכבות. Nx בנוי לטפל מונורוpos עם עשרות אלפי פרויקטים.מנגנון הגילוח שלה פועל לכל-task ו- per-file, כך גם אם יש לך דיסציפלינות רבות, לעתים רחוקות להפעיל את אותו חישוב פעמיים. מקביל ביצוע ביצוע משימה ביצוע (שימוש FLT:2) באופן מלא שימוש מכונות מרובות-core ו-Samsc.

בניית כלי איכות ואוטומציה

ספינות Nx עם בדיקות משולבות (Jest, Cypress, Playwright), linting (ESLint), ופורמט (Prettier) עבור MDO, כלים אלה ניתן ליישם לא רק קוד אלא גם לקבצי תצורה, סימולציות ואפילו תסריטי אימות.You יכול, למשל, ליצור steretor Nx אשר מפעיל בדיקה רגרסנית על פתרון אווירודינמי זה מבטיח מוטציות.

ההרחבה Caching - A Game Changer for Iterative Optimization

MDO הוא אינפורמטיבי מטבעו.אלגוריתם אופטימיזציה עשוי לבקש עשרות או מאות הערכות עיצוב.עם הגילוח של Nx, אם קוד משמעת או קלט לא השתנה, התפוקה הקודמת שלו משוחזרת ללא reruning the Solr. זה חזק במיוחד כאשר מחזורי אופטימיזציה שונים חולקים תוצאות ביניים נפוצות.

Cross-Language and Cross-Toolאינטגרציה

Nx הוא שפה-אגנוסטית ברמת המשימה.You יכול להגדיר executor כי יוצר תסריט Python עבור דינמיקת נוזל חישובית, C++ executable עבור ניתוח אלמנטים סופי, ושירות Node.js עבור הטמעת נתונים.כל המשימות האלה מנוהלות על ידי המשימה של Nx, מכבדת את התלויות והקיגה.

יישום Nx ב- MDO שלך

מעבר לפרויקט רב תחומי למונופו Nx כרוך במספר שלבים.למטה הוא מדריך מעשי, מאויר עם דוגמה אווירוקל.

שלב 1: הגדר את החלל Nx

יצירת מרחב עבודה חדש של Nx באמצעות הפקודה:

npx create-nx-workspace@latest aerospace-mdo --preset=empty

מרחב העבודה של ה-FLT:4 יהיה הבית לכל התחומים.בחר מנהל החבילה של ההעדפה שלך (npm, yarn, pnpm) ובצע את המבנה שנוצר כדי לשלוט בגירסה.

שלב 2: מבנה משמעת כפרויקטים או ספריות

כל משמעת גדולה צריכה להיות "פרוטציה" Nx "לדוגמה, ליצור יישום עבור עטוף אופטימיזציה הכולל או צינורות, וספריות עבור מנתחים בודדים:

  • (FLT:5) - ספרייה המכילה את תצורת הדינמיקה הנוזלית ופסחת.
  • (FLT:6) - ספריית ניתוח מבני.
  • (FLT 7) - יישום אשר מארגן את הלולאה אופטימיזציה.
  • (ב) בספריה עם הגדרות גיאומטריה נפוצות ושימושי המרה.

(ב) (ב) ב[[1924]], [[1924]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]]]]]], [[1924]]]]]]]], [[1924]]]]]]]]]]]], [[1924]]]]]]]]]], [[1924]]]]]]

שלב 3: Define Project Boundaries and tags

(ב) עיין בחוקים (ב"א) ב[[1924]], ב[[1924]] וב[[1924]], [[1924]]]], [[1924]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]]]]]], [[1924]]]]]]]]]], [[1924]]]]]]]]]], [[1924]]]]]]]]]]]]

שלב 4: אופטימיזציה של כלי מזהמים כעובדים

Nx execuators מאפשר לך לעטוף כל פקודה כמשימה.עבור ה-eroדינמיקה, ליצור executor כי מפעיל תסריט Python. עבור המפת המבנית, אולי C++ executor תצורה ב-FLT:19 עבור ספריית האירודינמיקה:

{
 "targets": {
 "solve": {
 "executor": "nx:run-commands",
 "options": {
 "command": "python solvers/aero/main.py --input={projectRoot}/input.json --output={projectRoot}/output.json",
 "cwd": "{workspaceRoot}"
 }
 }
 }
}

כעת ניתן להפעיל את ה-Nx ו- Nx יישמר באופן אוטומטי ותלוי (שימוש ב- 24) כדי לציין אילו קבצים נצמדים (למשל, FLT:23).

שלב 5: אוטומטי אופטימיזציה של לולאת

יישום האופטימיזציה יכול להגדיר מטרה המפעילה את כל מחזור MDO.לדוגמה, יעד :24 אשר מבצע את התסריט אופטימיזציהr, אשר בתורו קורא משימות Nx עבור כל משמעת באמצעות תהליכי הילד של Node.js או באמצעות שימוש ב- Nxmatic API. כי כל מפתירת משמעת היא משימה Nx, האופטימיזציה יכולה למנף את ה-Nx'sLT:25 ותוצאות חפות כדי להאיץ את זה.

שלב 6: הגדר CI עם פיקודים משפיעים

בצנרת CI (GitHub Actions, GitLab CI וכו '), השתמש ב-FLT:26,FLT:27, ו-FLT:28 כדי להפעיל בדיקות רק על פרויקטים שונים.עבור MDO, ייתכן גם רוצה יעד פאן:29 אשר פועל רק את הפתנים עבור דיסציפלינות משתנות.

מקרה מחקר 1: Aeroדינמית ו- Structural Optimization of a מטוסים כנף

שקול צוות רב תחומי שעובד על כנף מטוס חדשה.הפרויקט כולל שלושה דיסציפלינות עיקריות: אווירודינמיקה (לנבא להרים וגרור), מבנים (כדי להבטיח את המגבלות כוח ומשקל יימסרו), ואלגוריתם אופטימיזציה שמתאים פרמטרים בצורת כנף.ללא Nx, מהנדסים ישמרו על שרידים נפרדים עבור כל פתרון, להעביר באופן ידני את הקבצים הגיאומטריה, ולהפעיל את האופטימיזציה עם תסריטי אד-קוד עם Nx עם Nx, ההתקנה מאוחדת.

מרחב העבודה מכיל:

  • (FLT:30) – ספרייה המגדירה את צורת הכנפיים (תאם אוויר-פואלי, התפלגות טוויסט וכו ') היא מייצרת קובץ JSON המשמש את שני פותרים.
  • (ב) (בשיתוף) ,[[1924]], [[1924]]]]]], [[1924]]]], [[1924]]]]]], [[1924]]]]
  • (ב) ,"ב[[1924]]" ([[1924]]]], [[1924]]]]]], [[1924]]]]]]]], [[1924]]]]]]]]]]]]]], [[1924]]]]]]]]]], [[1924]]]]]]]]]]]]]]
  • (FLT:35 - יישום אשר מפעיל את הלולאה אופטימיזציה (למשל, באמצעות מודל חלופי או חיפוש ישיר) זה תלוי שני פותרים.

כאשר מהנדס מעדכן את ספריית ה-geometry, Nx מסמן את שני פותרים כמו מושפע.האופטימיזציה הבאה (באמצעות FLT:36) באופן אוטומטי לבנות מחדש או למקם מחדש את המפתורים.האופטימיזציה ההרצאה הופכת מהירה כי Nx caches פותר פלטr פלטים עבור אופטימיזציה גיאומטריה נתונה.אם הגיאומטריה חוזרת לגרסה קודמת, cache הוא בשימוש מחדש ללא recomputation תוצאות זה 60- 70-זמן להפחתה של זמן.

מקרה מחקר 2: כלי רכב אדמירל ואופטימיזציה של סטריקט

בהנדסת רכב, ערכת סוללות EV יש להתאים ניהול תרמי והתמוטטות מבנית בו זמנית.הדיסציפלינות הן סימולציה תרמית (CFD / חום העברה) וסימולציה מבנית (FEA) הם חולקים מודל CAD משותף של חבילת הסוללה. Nx משמש ליצירת מונורופו הכולל:

  • (FLT:37) - ספרייה שמנהלת את מודל ה-Fmetric CAD (המוכרת כ- STEP או mesh).
  • (FLT:38) - ספרייה באמצעות executor עבור מפתר תרמי (למשל, Star-CCM + או תסריט Python מותאם אישית).
  • (ב) ,[[1924]] - ספריה עם executor for a Gospelactr (למשל, LS-DYNA).
  • (FLT:40) - יישום אשר מפעיל אלגוריתם גנטי רב-אובייקטיבי.

הגישה המונופרופו מאפשרת למהנדס ה-CAD לבצע שינוי ולראות מיד אילו פותרים מושפעים.עם ה-King המופץ של Nx, צינור CI פועל על 32 סוכנים מקבילים יכול להעריך עיצובים מרובים בו זמנית, שיתוף תוצאות תרמיות מעודפות על פני סוכנים.הגרף הפרויקט מגלה כי פותר ההתרסקות אינו תלוי בפלט פתרון תרמי ישירות (רק על ה- CAD המשותף), כך שינויים במודל תרמילא מתפוררים לא מתרסקים לסימולציה קריטית.

טכניקות מתקדמות עבור Nx-Powered MDO

הוצאות להורג עבור כלים שאינם זמינים

בעוד Nx בנוי על Node.js, מערכת ההפעלה שלה יכול להשתמש בכל פקודה.עבור פותרים כתובים ב Python, Fortran, או CUDA, ליצור exetor פשוט אשר פועל את בינארי חיצוני ולוכד עוקץ / סטודר. השתמש ב-FLT:41 exetor או ליצור מותאם אישית עם Nx Executor API מאפשר לך לאכוף את ה- cacrence ולא ליצור כלי מעקב אחר.

שימוש ב-Nx's Computation Caching עם סוכנים מרוחקים

Nx Cloud מאפשר לפצח מבוזר על הצוות שלך וסוכני CI. בהקשר MDO, זה אומר שאם נקודת עיצוב כבר סימולציה על ידי כל חבר צוות או כל עבודה CI, התוצאה היא מיד זמין.זה חשוב במיוחד בעת חקר החלל העיצוב עם אלגוריתמים אופטימיזציה כמו אלגוריתמים גנטיים או חלקיק - נקודות עיצוב רבות מוערכות במקביל, ו caching מונעים ריצות סלולר אדום.

הדור הקודי של MDO תבניות

גנרטורים Nx ניתן להשתמש כדי לפענח תבניות קוד ספציפיות משמעתיות.לדוגמה, ליצור גנרטור מותאם אישית המייצר פרויקט חדש של אווירודינמיקה עם המבנה הבימוי הנכון, executor תצורה, ו- טיח בדיקה.זה מבטיח עקביות ולהפחית את זמן ההתקנה כאשר מוסיפים משמעת חדשה לאופטימיזציה.

עקבו אחרי Data Management Tools

פרויקטים רבים של MDO מסתמכים על מחסן נתונים או על עיצוב (למשל, FLT:0)DirectusFLT:1) עם Nx, אתה יכול ליצור ספרייה שפועלת כלקוח ל- API הנתונים שלך.הספריה יכולה להיות משותפת בכל התחומים, ומבטיחה מקור יחיד של אמת עבור משתנים, מגבלות, ו metadata.

« « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « «

הימנעות מתלויים מונוליטיים

אחד הסיכון של מונורופוס הוא שדיסציפלינות הופכות מתוחות מדי.שימוש בתגי Nx והגבלות יבוא ESLint לאכוף ארכיטקטורה נקייה.לדוגמה, מאפשרות רק ספריות FLT:42 להיבא על ידי דיסציפלינות מרובות; כל משמעת צריכה להיות תלויה בסוגים משותפים וממשקים, לא על יישום משמעת אחרת.

קבצים בינאריים גדולים

לעתים קרובות מייצרים קבצים פלט גדול (צמחים, שדות פתרון וכו ') Nx כיבים המבוססים על קובץ hashes, כך אחסון פלטים גדולים יכול לנפח את cache.פתרון: לסמן את הפלט של ה-Nx כקובץ סיכום יחיד (למשל, FLT:43 עם אינדיקטורים מרכזיים) ו- cache כי במקום זאת, לשמור על תפוקה מלאה מחוץ ל- Nxache (למשל, ארכיון משותף או אחסון משותף).

הבטחת יעילות

יש לבצע את תוצאות MDO מחדש.עם Nx, כל סביבת העבודה הוא גרסה, ואת חיפוי המשימה כולל קלטות (קבצי קוד, תצורה, אפילו משתנים סביבתיים אם הוכרזו) זה מקל על רול בחזרה עיצוב ספציפי ושיקום אופטימיזציה זהה.