Files
Atomizer/studies/simple_beam_optimization/substudies/validation_3trials/optuna_study.pkl

29 lines
5.4 KiB
Plaintext
Raw Normal View History

feat: Add robust NX expression import system for all expression types Major Enhancement: - Implemented .exp file-based expression updates via NX journal scripts - Fixes critical issue with feature-linked expressions (e.g., hole_count) - Supports ALL NX expression types including binary-stored ones - Full 4D design space validation completed successfully New Components: 1. import_expressions.py - NX journal for .exp file import - Uses NXOpen.ExpressionCollection.ImportFromFile() - Replace mode overwrites existing values - Automatic model update and save - Comprehensive error handling 2. export_expressions.py - NX journal for .exp file export - Exports all expressions to text format - Used for unit detection and verification 3. Enhanced nx_updater.py - New update_expressions_via_import() method - Automatic unit detection from .exp export - Creates study-variable-only .exp files - Replaces fragile binary .prt editing Technical Details: - .exp Format: [Units]name=value (e.g., [MilliMeter]beam_length=5000) - Unitless expressions: name=value (e.g., hole_count=10) - Robustness: Native NX functionality, no regex failures - Performance: < 1 second per update operation Validation: - Simple Beam Optimization study (4D design space) * beam_half_core_thickness: 10-40 mm * beam_face_thickness: 10-40 mm * holes_diameter: 150-450 mm * hole_count: 5-15 (integer) Results: ✅ 3-trial validation completed successfully ✅ All 4 variables update correctly in all trials ✅ Mesh adaptation verified (hole_count: 6, 15, 11 → different mesh sizes) ✅ Trial 0: 5373 CQUAD4 elements (6 holes) ✅ Trial 1: 5158 CQUAD4 + 1 CTRIA3 (15 holes) ✅ Trial 2: 5318 CQUAD4 (11 holes) Problem Solved: - hole_count expression was not updating with binary .prt editing - Expression stored in feature parameter, not accessible via text regex - Binary format prevented reliable text-based updates Solution: - Use NX native expression import/export - Works for ALL expressions (text and binary-stored) - Automatic unit handling - Model update integrated in journal Documentation: - New: docs/NX_EXPRESSION_IMPORT_SYSTEM.md (comprehensive guide) - Updated: CHANGELOG.md with Phase 3.2 progress - Study: studies/simple_beam_optimization/ (complete example) Files Added: - optimization_engine/import_expressions.py - optimization_engine/export_expressions.py - docs/NX_EXPRESSION_IMPORT_SYSTEM.md - studies/simple_beam_optimization/ (full study) Files Modified: - optimization_engine/nx_updater.py - CHANGELOG.md Compatibility: - NX 2412 tested and verified - Python 3.10+ - Works with all NX expression types 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 12:34:06 -05:00
<EFBFBD><04><><00>optuna.study.study<64><79>Study<64><79><EFBFBD>)<29><>}<7D>(<28>
study_name<EFBFBD><EFBFBD>,no-name-99212451-9a08-4e36-bb9c-7bc82dc5e22e<32><65> _study_id<69>K<00>_storage<67><65>optuna.storages._in_memory<72><79>InMemoryStorage<67><65><EFBFBD>)<29><>}<7D>(<28> _trial_id_to_study_id_and_number<65>}<7D>(KKK<00><>KKK<01><>KKK<02><>u<EFBFBD>_study_name_to_id<69>}<7D>hKs<>_studies<65>}<7D>Kh <09>
_StudyInfo<EFBFBD><EFBFBD><EFBFBD>)<29><>}<7D>(<28>trials<6C>]<5D>(<28>optuna.trial._frozen<65><6E> FrozenTrial<61><6C><EFBFBD>)<29><>}<7D>(<28>_number<65>K<00>state<74><65>optuna.trial._state<74><65>
TrialState<EFBFBD><EFBFBD><EFBFBD>K<01><>R<EFBFBD><52>_values<65>]<5D>G@<40><><EFBFBD>~<7E>"_a<5F>_datetime_start<72><74>datetime<6D><65>datetime<6D><65><EFBFBD>C
<07>  7L5<4C><35><EFBFBD>R<EFBFBD><52>datetime_complete<74>h.C
<07>  <0E>:<3A><><EFBFBD>R<EFBFBD><52>_params<6D>}<7D>(<28>beam_half_core_thickness<73>G@=V`g<>M]<5D>beam_face_thickness<73>G@>x }A<><41><EFBFBD>holes_diameter<65>G@v8<06><><EFBFBD><EFBFBD><EFBFBD>
hole_count<EFBFBD>K u<> _user_attrs<72>}<7D><> _system_attrs<72>}<7D><>intermediate_values<65>}<7D><>_distributions<6E>}<7D>(h8<68>optuna.distributions<6E><73>FloatDistribution<6F><6E><EFBFBD>)<29><>}<7D>(<28>step<65>N<EFBFBD>low<6F>G@$<00>high<67>G@D<00>log<6F><67>ubh9hF)<29><>}<7D>(hINhJG@$hKG@DhL<68>ubh:hF)<29><>}<7D>(hINhJG@b<>hKG@| hL<68>ubh;hD<68>IntDistribution<6F><6E><EFBFBD>)<29><>}<7D>(hL<68>hIKhJKhKKubu<62> _trial_id<69>Kubh)<29><>}<7D>(h"Kh#h(h)]<5D>GB<02>_ ah+h.C
<07>  <0E><1D><><EFBFBD>R<EFBFBD>h2h.C
<07>   9󔅔R<F3948594>h6}<7D>(h8G@B<><42>Cv<43>h9G@AբM<D5A2>C<EFBFBD>h:G@v}<7D><><EFBFBD><EFBFBD>h;Kuh<}<7D>h>}<7D>h@}<7D>hB}<7D>(h8hF)<29><>}<7D>(hINhJG@$hKG@DhL<68>ubh9hF)<29><>}<7D>(hINhJG@$hKG@DhL<68>ubh:hF)<29><>}<7D>(hINhJG@b<>hKG@| hL<68>ubh;hR)<29><>}<7D>(hL<68>hIKhJKhKKubuhUKubh)<29><>}<7D>(h"Kh#h(h)]<5D>GB<02>_ ah+h.C
<07>   9󔅔R<F3948594>h2h.C
<07>   <0B><11><><EFBFBD>R<EFBFBD>h6}<7D>(h8G@7<><14>,<2C><>h9G@CEb]<5D><><EFBFBD>h:G@kE<6B> i<><69>h;Kuh<}<7D>h>}<7D>h@}<7D>hB}<7D>(h8hF)<29><>}<7D>(hINhJG@$hKG@DhL<68>ubh9hF)<29><>}<7D>(hINhJG@$hKG@DhL<68>ubh:hF)<29><>}<7D>(hINhJG@b<>hKG@| hL<68>ubh;hR)<29><>}<7D>(hL<68>hIKhJKhKKubuhUKube<62>param_distribution<6F>}<7D>(h8hzh9h|h:h~h;h<>u<EFBFBD>
user_attrs<EFBFBD>}<7D><> system_attrs<72>}<7D><>name<6D>h<06>
directions<EFBFBD>]<5D><>optuna.study._study_direction<6F><6E>StudyDirection<6F><6E><EFBFBD>K<01><>R<EFBFBD>a<EFBFBD> best_trial_id<69>Kubs<62> _max_study_id<69>K<00> _max_trial_id<69>K<02>_prev_waiting_trial_number<65>}<7D>KKsub<75> _directions<6E>h<EFBFBD><68>sampler<65><72>optuna.samplers._tpe.sampler<65><72>
TPESampler<EFBFBD><EFBFBD><EFBFBD>)<29><>}<7D>(<28>_parzen_estimator_parameters<72><73>%optuna.samplers._tpe.parzen_estimator<6F><72>_ParzenEstimatorParameters<72><73><EFBFBD>(G?<3F><00><>h<EFBFBD><68>default_weights<74><73><EFBFBD><EFBFBD>}<7D>t<EFBFBD><74><EFBFBD><EFBFBD>_n_startup_trials<6C>K
<EFBFBD>_n_ei_candidates<65>K<18>_gamma<6D>h<EFBFBD><68> default_gamma<6D><61><EFBFBD><EFBFBD>_warn_independent_sampling<6E><67><EFBFBD>_rng<6E><67>"optuna.samplers._lazy_random_state<74><65>LazyRandomState<74><65><EFBFBD>)<29><>}<7D>h<EFBFBD>Nsb<73>_random_sampler<65><72>optuna.samplers._random<6F><6D> RandomSampler<65><72><EFBFBD>)<29><>}<7D>h<EFBFBD>h<EFBFBD>)<29><>}<7D>h<EFBFBD><68>numpy.random._pickle<6C><65>__randomstate_ctor<6F><72><EFBFBD><EFBFBD>MT19937<33>h<EFBFBD><68>__bit_generator_ctor<6F><72><EFBFBD><EFBFBD><EFBFBD>R<EFBFBD>}<7D>(<28> bit_generator<6F><72>MT19937<33>h#}<7D>(<28>key<65><79>numpy.core.multiarray<61><79> _reconstruct<63><74><EFBFBD><EFBFBD>numpy<70><79>ndarray<61><79><EFBFBD>K<00><>Cb<><62><EFBFBD>R<EFBFBD>(KMp<02><>dtype<70><65><EFBFBD><EFBFBD>u4<75><34><EFBFBD><EFBFBD><EFBFBD>R<EFBFBD>(K<03><<3C>NNNJ<4E><4A><EFBFBD><EFBFBD>J<EFBFBD><4A><EFBFBD><EFBFBD>Kt<>b<EFBFBD>B<EFBFBD> <00><>1<EFBFBD>F<1C>(<28>8Zj<5A>a<12><>4.<2E>C<EFBFBD><43><EFBFBD><EFBFBD>r<EFBFBD><72>:C<><43><01><>9<EFBFBD>.<2E><>5<EFBFBD><35>x ){<7B>T<EFBFBD><54><EFBFBD><EFBFBD><EFBFBD>hj\8<>6<EFBFBD>0<EFBFBD><30><EFBFBD>ifב<66>u<EFBFBD><75><EFBFBD>5Y<35>1<18>г<EFBFBD>Drd<02><><EFBFBD>Z۴u<DBB4><75><EFBFBD><EFBFBD><EFBFBD><EFBFBD> o]F<>q<EFBFBD>O<>3C7<43><37><EFBFBD>!k<><6B>|c<>G<EFBFBD>*Vo<56>+"<22><>?b<10>VQ<56><51>ލ<<3C><<3C>
t<07><><1C>m<08>B'%w<>G<EFBFBD><47>]<5D>
<EFBFBD><0F>t<EFBFBD><74><EFBFBD>:
u<><75>'<27>^Z<><5A><EFBFBD><05><><EFBFBD>r<EFBFBD><72><EFBFBD>Z? y 6<><36><EFBFBD><EFBFBD>D<44>|<7C>>7<06>oܠ<><DCA0>S<EFBFBD>W<19><>&<26>@)<29><<3C>6<EFBFBD><36><EFBFBD>8<>*<2A>h<EFBFBD><68><EFBFBD>I<EFBFBD><1D>ݕ<1A><19>k<14><>\H<>+ v")<29><>%<25><>|<7C> |xg<78>,<2C>v<><04><>[ <1F>DD<44>o<EFBFBD><6F>v&<26>tr58<35><15>ˮ<1D>^<5E>q5@ <0C><><EFBFBD><EFBFBD><EFBFBD>(<28><16><>ɋ!<21><02> <12>a<EFBFBD><61>z<EFBFBD>FD<0E><09>^uχ3<CF87>QD<51>V<EFBFBD><11>W0<><30><EFBFBD>9<00>;;y<><79>yP<79><06><><EFBFBD>p<EFBFBD>2p=n<><6E>G<EFBFBD>6<04>{<7B><>Vr<56><72><1C><>KH<4B><48><17>*<2A><>.<2E><14>ٸ;e:F<><46><<3C>U<EFBFBD><55><EFBFBD> <09><><EFBFBD>a<11>jn<6A>E0<45><EFBFBD><7F>-<2D>y<EFBFBD>fj6Y<36>4<EFBFBD>Ŀ<00><>CS<43><53><EFBFBD><EFBFBD><EFBFBD><03><><1B><>Ү<17>P<EFBFBD><50><1F><>x<EFBFBD>Js<>m<EFBFBD><6D>-<1F><> ;<3B>KBs<42><73>z<EFBFBD>(L<><4C><07>|A<>5<EFBFBD>hP<68>" <0A><>F<EFBFBD><46>đ*o=<01>g[<5B>^<5E>X<EFBFBD>;v<0F>ȄOcø<63>
<EFBFBD>@ -<2D>A<16>t<EFBFBD>{U<><55>Ù<EFBFBD>><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><1F><>*\1 W/e<><19>}<7D>}<7D>\6Nر<4E><D8B1><EFBFBD>ԧ<EFBFBD>`><3E><><EFBFBD><1A>h^Q<><51>Pz<50><7A>$zD<7A><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>H<EFBFBD>a
%+:<3A>
V<><56><EFBFBD>ͨ<<3C>-<2D>qQ<71><19><>U<EFBFBD><55>êŋc<15><>A<EFBFBD><41>v<EFBFBD>Iu$P<><01><EFBFBD>St ݼ<0E><>E<EFBFBD>t<EFBFBD>H<EFBFBD>,`CPd<50>_ <0B><03>&<26><><EFBFBD>2c0<63><30>K1<1E>ۅ/ʾ#@Üh<C39C><68>}p<>ª<EFBFBD><C2AA><EFBFBD><12><><EFBFBD>D<EFBFBD>$w<> d<08>6<EFBFBD><36><EFBFBD>O<EFBFBD>./\Z<><18>m<EFBFBD><6D><EFBFBD><1C><>fR<>C$<24>".<2E><>*!i<>T<EFBFBD> <0B>
LA<1A> <0C><35><CCA1>|<7C><><EFBFBD>bWS4i.<2E>J[<16>U<EFBFBD>u=h<><0E>(<28><03><0F><0F><><02>?<3F><><EFBFBD>qxlR<6C><52><EFBFBD>D<EFBFBD>t#6J<36><39><C38E><1A><51><D39E><EFBFBD><EFBFBD> <09><>]f<>=Q<>7K<37><4B><EFBFBD><1A>s<18><>x<EFBFBD>W`T<03>N<EFBFBD>z<EFBFBD> <0A><><EFBFBD><12>/<2F>L֩<>|5[<5B><>&<26>I5<49><35>DD><3E>S<EFBFBD><53>т}尧<><E5B0A7><EFBFBD><EFBFBD><EFBFBD>7c<37>K?<3F>|o<><6F><EFBFBD><EFBFBD>I<EFBFBD>S\<5C>0<EFBFBD>|<7C>ŗ<EFBFBD><14><>GR<47>j7<6A><04>\<0F>'<00>͌<EFBFBD><CD8C>k<04>f<11>N/!L<><4C>h<EFBFBD>(<28>?`<60>t輒_
<EFBFBD><EFBFBD>8,-<2D><>3<><03>7<1C> 3<>a<EFBFBD>,*`$AϘ<41><1C>hV<68><56><EFBFBD>q%<25><><EFBFBD>ƺ<EFBFBD>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <0B>Y<EFBFBD><59>u<EFBFBD><75>zn<7A>Ţԙ <0B>z]<5D>ѻ<EFBFBD><D1BB>E<EFBFBD><45><0E>)<29>J<>t]8<><38>~<03>#Kf3dɑ<64><C991><EFBFBD><EFBFBD>k$<24><>l5ւ<35>x<EFBFBD><78><EFBFBD>8<EFBFBD><38>+<2B>y<EFBFBD>$.<2E><><EFBFBD>F<EFBFBD>;<3B><00><>x$E.†X<C286><58>?X<><58>^
^<5E><><18>v]<5D>
<EFBFBD>C>O<>M<<3C><>a<EFBFBD>r+<2B>Q<EFBFBD>7.<2E>j<EFBFBD><6A>9M<39>e<><65><EFBFBD>jGgN컼u<ECBBBC><13>%<1C>a<EFBFBD>Fq{<7B>
µ<11><>N<EFBFBD><4E>$<24>Xo;t <09>Lj<EFBFBD><C788>D<EFBFBD>c8<63><38>z<EFBFBD>9`/09Jz<4A><16>+_<07> <0B><><EFBFBD><EFBFBD><EFBFBD>?4ey<65>c<EFBFBD><63><1D>(<28><><EFBFBD>_A<5F><41> \HA =<3D>]Z<><5A>Ri<52><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD>U<EFBFBD>!l8<6C><38><EFBFBD>1?<3F><>rѴ(H8ԭ<38>5<EFBFBD><35>b/u( [yJ?<3F><><EFBFBD><EFBFBD><EFBFBD>M<EFBFBD><4D>k <09><><11>n<EFBFBD><6E><EFBFBD> <0B><>(B<<3C>?<3F>W<EFBFBD>t<EFBFBD>-OW<4F><57>,<2C><><EFBFBD>c<EFBFBD><63><EFBFBD>q<EFBFBD>]<18>%UNԷ<13><17><><EFBFBD><EFBFBD><EFBFBD>T 2<>H%<25>}<7D><><EFBFBD>KzA<7A> 4n<34>PC<50>!c <><D3B0><EFBFBD>[<5B>D<EFBFBD><44><EFBFBD>/wc⨋<63>k<18>r{v<1E><><EFBFBD>o<EFBFBD>% <0C><>-<2D>)<29><>.yԟ)<29>R=_q<5F>V \<5C>y<EFBFBD>NX<4E><58><EFBFBD><EFBFBD><EFBFBD>-<2D><>y<EFBFBD><79><EFBFBD>6ه<36>U? bV<10>-<2D><01><>5<EFBFBD>q/<2F><><EFBFBD><EFBFBD>'<27>=<3D>Ws-)J+ҦcJ<63>9<EFBFBD><39><EFBFBD>Yl#4<>Nvj\"55<35><35><EFBFBD>A<EFBFBD>[<5B>e<EFBFBD><65>"@<40>\<5C>c( <09>&k]<5D><><1D><><EFBFBD>%<25>Dzp<C7B2>ez<65>4q?#<23><>޷<><DEB7>5<EFBFBD>ʍ <0B><>qS-<2D>Y<EFBFBD><1F><>|P<><1D>$<24>d<EFBFBD><64>j<EFBFBD>1<EFBFBD><31>:<3A>#H3O[<5B>wme<1C><><EFBFBD><15><>r<EFBFBD><72>&d6<64><36>L<EFBFBD>{<7B><>c<EFBFBD><63>FU<46>a}}ki{<01>{><3E><12>ӧ0<D3A7>Ɛ<EFBFBD>Qd<51><64>0h<30><19><><EFBFBD>g<07>#%o<><6F><EFBFBD>'Z?><3E>/0<>xA<78><41>P<e0<65><05><>nec<65>OY=S<>dJ<64>"T}<7D>y<EFBFBD>F8<46>|<7C><50>1z0<7A><1D>rN<72><4E><EFBFBD>3<EFBFBD>֊<EFBFBD><D68A><EFBFBD>c<EFBFBD>_<EFBFBD><5F><10><>7<EFBFBD>“j<18><><EFBFBD>e<EFBFBD><65><EFBFBD>ƛ<EFBFBD><C69B>
?L<><4C>M@%<25><>~<7E><><EFBFBD>g<>M<EFBFBD><4D>@<40>;KgǮD<C7AE>X<EFBFBD><58>F=[<5B><>%b<><62>e<>_z<5F>,<2C>;6<><36><EFBFBD>.)<29>p "<22><07>%<25><>KU<4B><55><EFBFBD><EFBFBD>%6<> '/!<21><51>:T}<7D>f <0A><><EFBFBD><EFBFBD>3V1<0F>:k<11>3XfzDJ"<22><><EFBFBD>/M<><4D>H<EFBFBD><1E>ó;a<><01><><1F>nUh<55><68>$<24> <0B><><EFBFBD>S8<53><38>=&<18><><13><><EFBFBD>
<EFBFBD><EFBFBD>;q+%K<13>ګ8<06>P<EFBFBD><50>r<EFBFBD>.l<>=\sO;j<>0 <0C>T+<2B><>fQ<1F><>`.<2E><>2<1E><>)ue+]5<><35>X<01><>^<5E><>1mۮ<6D>A<EFBFBD><41>v<EFBFBD><76><EFBFBD>p<EFBFBD><70><EFBFBD>)<29><>ɟ<EFBFBD>yHb<48>^h<><68><EFBFBD><01><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><1D><EFBFBD>bfrf`<60>L'$<24>z^<5E><><EFBFBD>T<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <<3C><><EFBFBD>r<EFBFBD><72><EFBFBD><EFBFBD>6<><36>‡Am<41><6D><EFBFBD><EFBFBD>s<EFBFBD><73>a<EFBFBD><61><EFBFBD><EFBFBD><EFBFBD>*><3E>Y<17>hC<68><43><EFBFBD><EFBFBD>:<3A><>܍o!<21><><EFBFBD><EFBFBD>s<EFBFBD>*o<><6F><0E><><EFBFBD><EFBFBD><1F><>d9T<39>Z<EFBFBD>p<EFBFBD>/<2F>0*<2A><>o<EFBFBD>qx7r<37><72><EFBFBD><EFBFBD>?<3F>8<EFBFBD><38><EFBFBD><12><>Jgsh<73>M<EFBFBD><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>v<EFBFBD><76>wO<77><04>2<<3C>I<10><>0axAɊ<41><C98A><EFBFBD>k<>L<><4C>6gwq<77><71><11>6<02><>$<24>߭6r<36><72><EFBFBD>[7X<37><58>3 p2<70>:=<3D> ~.<2E><><EFBFBD>K<EFBFBD><4B><EFBFBD><EFBFBD>eoT<6F><01><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><01>s,3<01>0<EFBFBD>d:<3A>0w<30><77><EFBFBD>GZ<u<><75>j<EFBFBD><6A><EFBFBD><EFBFBD><EFBFBD><12>J<EFBFBD><4A> `<15>o<EFBFBD>><3E><>Q5`ޠ3<17> <0B><><12><><EFBFBD><EFBFBD><EFBFBD>ˆKՔt<D594>b<EFBFBD>pos<6F>Ku<> has_gauss<73>K<00>gauss<73>Gubsbsb<73> _multivariate<74><65><EFBFBD>_group<75><70><EFBFBD>_group_decomposed_search_space<63>N<EFBFBD>_search_space_group<75>N<EFBFBD> _search_space<63><65> optuna.search_space.intersection<6F><6E>IntersectionSearchSpace<63><65><EFBFBD>)<29><>}<7D>(<28>_cached_trial_number<65>J<EFBFBD><4A><EFBFBD><EFBFBD>h<EFBFBD>NhN<>_include_pruned<65><64>ub<75>_constant_liar<61><72><EFBFBD>_constraints_func<6E>N<EFBFBD>_parzen_estimator_cls<6C>h<EFBFBD><68>_ParzenEstimator<6F><72><EFBFBD>ub<75>pruner<65><72>optuna.pruners._median<61><6E> MedianPruner<65><72><EFBFBD>)<29><>}<7D>(<28> _percentile<6C>G@Ih<>K<05>_n_warmup_steps<70>K<00>_interval_steps<70>K<01> _n_min_trials<6C>Kub<75>
_stop_flag<EFBFBD><EFBFBD>ub.