From b827cffa2eb603bb8d849989c44f367138dc7e4b Mon Sep 17 00:00:00 2001 From: Hu Zhao <zhao@mbd.rwth-aachen.de> Date: Sat, 22 Apr 2023 10:33:24 +0200 Subject: [PATCH] docs: track built auto_examples --- .gitignore | 2 +- .../auto_examples/emulator/index.doctree | Bin 0 -> 9089 bytes .../emulator/plot_ppgasp.doctree | Bin 0 -> 31650 bytes .../emulator/plot_scalargasp.doctree | Bin 0 -> 29894 bytes .../emulator/sg_execution_times.doctree | Bin 0 -> 6536 bytes .../auto_examples/inference/index.doctree | Bin 0 -> 8809 bytes .../inference/plot_active_learning.doctree | Bin 0 -> 106807 bytes .../inference/plot_bayes_inference.doctree | Bin 0 -> 24905 bytes .../inference/sg_execution_times.doctree | Bin 0 -> 6651 bytes .../auto_examples/sampler/index.doctree | Bin 0 -> 10184 bytes .../auto_examples/sampler/plot_latin.doctree | Bin 0 -> 18996 bytes .../sampler/plot_metropolis_hastings.doctree | Bin 0 -> 22160 bytes .../sampler/plot_saltelli.doctree | Bin 0 -> 19180 bytes .../sampler/sg_execution_times.doctree | Bin 0 -> 7782 bytes .../auto_examples/sensitivity/index.doctree | Bin 0 -> 7391 bytes .../sensitivity/plot_sobol_analyze.doctree | Bin 0 -> 34899 bytes .../sensitivity/sg_execution_times.doctree | Bin 0 -> 5398 bytes .../auto_examples/simulator/index.doctree | Bin 0 -> 11909 bytes .../simulator/plot_mass_point_model.doctree | Bin 0 -> 24737 bytes .../simulator/plot_ravaflow24.doctree | Bin 0 -> 33188 bytes .../plot_run_mass_point_model.doctree | Bin 0 -> 40356 bytes .../simulator/plot_run_ravaflow24.doctree | Bin 0 -> 51659 bytes .../simulator/sg_execution_times.doctree | Bin 0 -> 9179 bytes .../auto_examples/emulator/index.rst.txt | 75 ++ .../emulator/plot_ppgasp.rst.txt | 280 ++++ .../emulator/plot_scalargasp.rst.txt | 289 ++++ .../emulator/sg_execution_times.rst.txt | 14 + .../auto_examples/inference/index.rst.txt | 75 ++ .../inference/plot_active_learning.rst.txt | 1155 ++++++++++++++++ .../inference/plot_bayes_inference.rst.txt | 231 ++++ .../inference/sg_execution_times.rst.txt | 14 + .../auto_examples/sampler/index.rst.txt | 93 ++ .../auto_examples/sampler/plot_latin.rst.txt | 209 +++ .../sampler/plot_metropolis_hastings.rst.txt | 248 ++++ .../sampler/plot_saltelli.rst.txt | 193 +++ .../sampler/sg_execution_times.rst.txt | 16 + .../auto_examples/sensitivity/index.rst.txt | 57 + .../sensitivity/plot_sobol_analyze.rst.txt | 358 +++++ .../sensitivity/sg_execution_times.rst.txt | 12 + .../auto_examples/simulator/index.rst.txt | 112 ++ .../simulator/plot_mass_point_model.rst.txt | 259 ++++ .../simulator/plot_ravaflow24.rst.txt | 304 +++++ .../plot_run_mass_point_model.rst.txt | 376 ++++++ .../simulator/plot_run_ravaflow24.rst.txt | 444 +++++++ .../simulator/sg_execution_times.rst.txt | 18 + .../html/auto_examples/emulator/index.html | 147 +++ .../auto_examples/emulator/plot_ppgasp.html | 259 ++++ .../emulator/plot_scalargasp.html | 267 ++++ .../emulator/sg_execution_times.html | 131 ++ .../html/auto_examples/inference/index.html | 147 +++ .../inference/plot_active_learning.html | 1174 +++++++++++++++++ .../inference/plot_bayes_inference.html | 244 ++++ .../inference/sg_execution_times.html | 131 ++ .../html/auto_examples/sampler/index.html | 151 +++ .../auto_examples/sampler/plot_latin.html | 217 +++ .../sampler/plot_metropolis_hastings.html | 239 ++++ .../auto_examples/sampler/plot_saltelli.html | 217 +++ .../sampler/sg_execution_times.html | 135 ++ .../html/auto_examples/sensitivity/index.html | 143 ++ .../sensitivity/plot_sobol_analyze.html | 363 +++++ .../sensitivity/sg_execution_times.html | 127 ++ .../html/auto_examples/simulator/index.html | 155 +++ .../simulator/plot_mass_point_model.html | 261 ++++ .../simulator/plot_ravaflow24.html | 280 ++++ .../simulator/plot_run_mass_point_model.html | 304 +++++ .../simulator/plot_run_ravaflow24.html | 333 +++++ .../simulator/sg_execution_times.html | 139 ++ 67 files changed, 10397 insertions(+), 1 deletion(-) create mode 100644 docs/source/_build/doctrees/auto_examples/emulator/index.doctree create mode 100644 docs/source/_build/doctrees/auto_examples/emulator/plot_ppgasp.doctree create mode 100644 docs/source/_build/doctrees/auto_examples/emulator/plot_scalargasp.doctree create mode 100644 docs/source/_build/doctrees/auto_examples/emulator/sg_execution_times.doctree create mode 100644 docs/source/_build/doctrees/auto_examples/inference/index.doctree create mode 100644 docs/source/_build/doctrees/auto_examples/inference/plot_active_learning.doctree create mode 100644 docs/source/_build/doctrees/auto_examples/inference/plot_bayes_inference.doctree create mode 100644 docs/source/_build/doctrees/auto_examples/inference/sg_execution_times.doctree create mode 100644 docs/source/_build/doctrees/auto_examples/sampler/index.doctree create mode 100644 docs/source/_build/doctrees/auto_examples/sampler/plot_latin.doctree create mode 100644 docs/source/_build/doctrees/auto_examples/sampler/plot_metropolis_hastings.doctree create mode 100644 docs/source/_build/doctrees/auto_examples/sampler/plot_saltelli.doctree create mode 100644 docs/source/_build/doctrees/auto_examples/sampler/sg_execution_times.doctree create mode 100644 docs/source/_build/doctrees/auto_examples/sensitivity/index.doctree create mode 100644 docs/source/_build/doctrees/auto_examples/sensitivity/plot_sobol_analyze.doctree create mode 100644 docs/source/_build/doctrees/auto_examples/sensitivity/sg_execution_times.doctree create mode 100644 docs/source/_build/doctrees/auto_examples/simulator/index.doctree create mode 100644 docs/source/_build/doctrees/auto_examples/simulator/plot_mass_point_model.doctree create mode 100644 docs/source/_build/doctrees/auto_examples/simulator/plot_ravaflow24.doctree create mode 100644 docs/source/_build/doctrees/auto_examples/simulator/plot_run_mass_point_model.doctree create mode 100644 docs/source/_build/doctrees/auto_examples/simulator/plot_run_ravaflow24.doctree create mode 100644 docs/source/_build/doctrees/auto_examples/simulator/sg_execution_times.doctree create mode 100644 docs/source/_build/html/_sources/auto_examples/emulator/index.rst.txt create mode 100644 docs/source/_build/html/_sources/auto_examples/emulator/plot_ppgasp.rst.txt create mode 100644 docs/source/_build/html/_sources/auto_examples/emulator/plot_scalargasp.rst.txt create mode 100644 docs/source/_build/html/_sources/auto_examples/emulator/sg_execution_times.rst.txt create mode 100644 docs/source/_build/html/_sources/auto_examples/inference/index.rst.txt create mode 100644 docs/source/_build/html/_sources/auto_examples/inference/plot_active_learning.rst.txt create mode 100644 docs/source/_build/html/_sources/auto_examples/inference/plot_bayes_inference.rst.txt create mode 100644 docs/source/_build/html/_sources/auto_examples/inference/sg_execution_times.rst.txt create mode 100644 docs/source/_build/html/_sources/auto_examples/sampler/index.rst.txt create mode 100644 docs/source/_build/html/_sources/auto_examples/sampler/plot_latin.rst.txt create mode 100644 docs/source/_build/html/_sources/auto_examples/sampler/plot_metropolis_hastings.rst.txt create mode 100644 docs/source/_build/html/_sources/auto_examples/sampler/plot_saltelli.rst.txt create mode 100644 docs/source/_build/html/_sources/auto_examples/sampler/sg_execution_times.rst.txt create mode 100644 docs/source/_build/html/_sources/auto_examples/sensitivity/index.rst.txt create mode 100644 docs/source/_build/html/_sources/auto_examples/sensitivity/plot_sobol_analyze.rst.txt create mode 100644 docs/source/_build/html/_sources/auto_examples/sensitivity/sg_execution_times.rst.txt create mode 100644 docs/source/_build/html/_sources/auto_examples/simulator/index.rst.txt create mode 100644 docs/source/_build/html/_sources/auto_examples/simulator/plot_mass_point_model.rst.txt create mode 100644 docs/source/_build/html/_sources/auto_examples/simulator/plot_ravaflow24.rst.txt create mode 100644 docs/source/_build/html/_sources/auto_examples/simulator/plot_run_mass_point_model.rst.txt create mode 100644 docs/source/_build/html/_sources/auto_examples/simulator/plot_run_ravaflow24.rst.txt create mode 100644 docs/source/_build/html/_sources/auto_examples/simulator/sg_execution_times.rst.txt create mode 100644 docs/source/_build/html/auto_examples/emulator/index.html create mode 100644 docs/source/_build/html/auto_examples/emulator/plot_ppgasp.html create mode 100644 docs/source/_build/html/auto_examples/emulator/plot_scalargasp.html create mode 100644 docs/source/_build/html/auto_examples/emulator/sg_execution_times.html create mode 100644 docs/source/_build/html/auto_examples/inference/index.html create mode 100644 docs/source/_build/html/auto_examples/inference/plot_active_learning.html create mode 100644 docs/source/_build/html/auto_examples/inference/plot_bayes_inference.html create mode 100644 docs/source/_build/html/auto_examples/inference/sg_execution_times.html create mode 100644 docs/source/_build/html/auto_examples/sampler/index.html create mode 100644 docs/source/_build/html/auto_examples/sampler/plot_latin.html create mode 100644 docs/source/_build/html/auto_examples/sampler/plot_metropolis_hastings.html create mode 100644 docs/source/_build/html/auto_examples/sampler/plot_saltelli.html create mode 100644 docs/source/_build/html/auto_examples/sampler/sg_execution_times.html create mode 100644 docs/source/_build/html/auto_examples/sensitivity/index.html create mode 100644 docs/source/_build/html/auto_examples/sensitivity/plot_sobol_analyze.html create mode 100644 docs/source/_build/html/auto_examples/sensitivity/sg_execution_times.html create mode 100644 docs/source/_build/html/auto_examples/simulator/index.html create mode 100644 docs/source/_build/html/auto_examples/simulator/plot_mass_point_model.html create mode 100644 docs/source/_build/html/auto_examples/simulator/plot_ravaflow24.html create mode 100644 docs/source/_build/html/auto_examples/simulator/plot_run_mass_point_model.html create mode 100644 docs/source/_build/html/auto_examples/simulator/plot_run_ravaflow24.html create mode 100644 docs/source/_build/html/auto_examples/simulator/sg_execution_times.html diff --git a/.gitignore b/.gitignore index b3693e1..bb6a509 100644 --- a/.gitignore +++ b/.gitignore @@ -125,4 +125,4 @@ cython_debug/ .vscode/ # auto_examples -auto_examples/ \ No newline at end of file +docs/source/auto_examples/ \ No newline at end of file diff --git a/docs/source/_build/doctrees/auto_examples/emulator/index.doctree b/docs/source/_build/doctrees/auto_examples/emulator/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..2c2fc594593ba5face932a4c26e0f4eb00c2ebfb GIT binary patch literal 9089 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 RR49T2Yl<JJt}ac|0|02xN?`y1 literal 0 HcmV?d00001 diff --git a/docs/source/_build/doctrees/auto_examples/emulator/plot_ppgasp.doctree b/docs/source/_build/doctrees/auto_examples/emulator/plot_ppgasp.doctree new file mode 100644 index 0000000000000000000000000000000000000000..22f752101dbcced07044e1d3ea49d20edadd7065 GIT binary patch literal 31650 zcmZo*ojSdm0StQhiwiO`^D6WbQ&RHsQ&Nkk^l+r)Czs}?=9NsDJVmo{O6?Sl9?qh~ z^5Xo`qU6*mJq%NNIFd6mb5e>@^QOd3(dgj=sV~XQDb|A;z@D6+i=sb+wTH*WU%}5m zM8Va?GemDn27Bz349*^wkkks0Eoic>Q^2-nux7CJuoWa0ft-@TQ<{|6!<AT4Qk0og zT9R4}b{BJIO7WD~DLw4TIf=!^sbDs1USckU#gS54fZ!x0CTAC=rh(OPR^;Yb6&ECe z{KHXDlv<oxRF*oWw1>SUF&(61N(NVkSO#+sXFSMnV83KA_prf&z)wFTKQ~oBqg3Cq zprBaaJ+mYyF-gCmI5W4PQa>d>xmX{fQa`b@BtJg2A~ClhC$(5VHMcY;u_V7pzaS^S zB)*^^J+Zhzuc)|WN)Jm;W?t$PZ>G|u3~oq}XR!8Igm`!cE4X?3xGID@1}iv*hWPtB zhIl$V`uIdDxV!qf204bfx+pkBDg+03c=|=?x;yTW+gIACO1CU}MLo7q9G$}Dd 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 literal 0 HcmV?d00001 diff --git a/docs/source/_build/doctrees/auto_examples/emulator/plot_scalargasp.doctree b/docs/source/_build/doctrees/auto_examples/emulator/plot_scalargasp.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e2279423a7653670b2741027739ef03390a095b8 GIT binary patch literal 29894 zcmZo*ow~b(0StQhiwiO`^D6WbQ&RHsQ&Nkk^l+r)Czs}?=9NsDJVmo{O6?Sl9?qh~ z^5Xo`qU6*mJq%NNIFd6mb5e>@^QOd3(dgj=sV~XQDb|A;z@D6+i=sb+wTH*WU%}5m zM8Va?GemDn27Bz349*^wkkks0Eoic>Q^2-nux7CJuoWa0ft-@TQ<{|6!<AT4Qk0og zT9R4}b{BJIO7WD~DLw4TIf=!^sbDs1USckU#gS54fZ!x0CTAC=rh(OPR^;Yb6&ECe z{KHXDlv<oxRF*oWw1>SUF&(61N(NVkSO#+sXFSMnV83KA_prf&AV@zWKQ~oBqg3Cq zprBaaJ+mYyF-gCmI5W4PQa>d>xmX{fQa`b@BtJg2A~ClhC$(5VHMcY;u_V7pzaS^S zB)&K~F(<JoJ+Zhzuc)|WN)Jm;W?t$PZ>G|u3~orUXR!8Igm`!cE4X?3xGID@1}iv* zhWPtBhIl$V`uIdDxV!qf204bfx+pkBDg+03c=|=?x;yTW+gIJIP1CU}NLo7q9 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 IEltt`0H^WMDF6Tf literal 0 HcmV?d00001 diff --git a/docs/source/_build/doctrees/auto_examples/emulator/sg_execution_times.doctree b/docs/source/_build/doctrees/auto_examples/emulator/sg_execution_times.doctree new file mode 100644 index 0000000000000000000000000000000000000000..88fa3d19c9167c9cd224c68661154c49cff1ca0c GIT binary patch literal 6536 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 F2LSR*jAH-* literal 0 HcmV?d00001 diff --git a/docs/source/_build/doctrees/auto_examples/inference/index.doctree b/docs/source/_build/doctrees/auto_examples/inference/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e7008d2548e49193904e452f2561bc991f040330 GIT binary patch literal 8809 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 UD_07rPy`3o6hBa1U7Dl^0B`l==>Px# literal 0 HcmV?d00001 diff --git a/docs/source/_build/doctrees/auto_examples/inference/plot_active_learning.doctree b/docs/source/_build/doctrees/auto_examples/inference/plot_active_learning.doctree new file mode 100644 index 0000000000000000000000000000000000000000..76d8617a8567e3d2774b70c5b3917f10784fa42a GIT binary patch literal 106807 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�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 F2LOUW7PkNZ literal 0 HcmV?d00001 diff --git a/docs/source/_build/doctrees/auto_examples/inference/plot_bayes_inference.doctree b/docs/source/_build/doctrees/auto_examples/inference/plot_bayes_inference.doctree new file mode 100644 index 0000000000000000000000000000000000000000..62ce80d9b0b2abec6d65fb3548bd102b9e810f99 GIT binary patch literal 24905 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 bsqs1a>7XRXl>(}g!8vV;A7~`IG)WHtgJf4l literal 0 HcmV?d00001 diff --git a/docs/source/_build/doctrees/auto_examples/inference/sg_execution_times.doctree b/docs/source/_build/doctrees/auto_examples/inference/sg_execution_times.doctree new file mode 100644 index 0000000000000000000000000000000000000000..00493b8f1a79b3f90f6f115969a34e1686195af8 GIT binary patch literal 6651 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 LxPn?jrAc}KfE2lt literal 0 HcmV?d00001 diff --git a/docs/source/_build/doctrees/auto_examples/sampler/index.doctree b/docs/source/_build/doctrees/auto_examples/sampler/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..7b280b11eba1df5e70d78d362d0a43ce95b0fa5e GIT binary patch literal 10184 zcmZo*ow`?@0StQhiwiO`^D6WbQ&RHsQ&Nkk^l+r)Czs}?=9NsDJVmo{O6?Sl9?qh~ z^5Xo`qU6*mJq%NNIFd6mb5e>@^QOd3>EQz@FUia))`RM2FHTJ^$;{7#YtLZKV9Q{S zouZM!*~40rS(1~AB-O(noS0jXlUg(dq$Gp0hb1Jn0%SEpqIC+`6&b7<!aZySiA5l% zWeE0g#)E7IJ2Zp2hYjjJzaEyH%)Hboex*r?JzR+;B}JJ@r6sAwV1F=YrWAwR%$}T+ zSX`V6X0zrc=0aE;DWwGnPEulWc2Q~?NKI)Edr4wCNNP$3e};4hPlikebB1h>yM9J~ zZmNDpslH=DL9xDjW=T$Bl72yPW^O^HeoB6Fu|C96`iZ3_`SGb0V2>8-7lY{{{mi_S z)C#?#;*u#Da^5VZNg13y%teXi$bqA1lag7c0CugdQgJ~>g>HIIk#0#wX>L+pVrEXU zk{u-2#CnKOi3mrw4CxI0(xk);`PwNO8H%w}GL&PdWT?hY$xx4-lA#$prH3sozbH4c zWJ(W9MoDhYlpfBC+#IXof<#aX;3z0cElw>eOPx}hp`D?dA)BF-A?M8w3z*WR3_VD? z$zbhq#O;CP{JfIH%)HbhC54jw{G5`^0$Ziv#GI1UoSaMra2RFgr6W8@1(Q$%z>$;y z$gt0FK=v&Ul5ZJ$Sn~67Dv{z1DZOXrCZ?mL_bfd<1+bu%l>)AW0n$^f4~}MiP^`zN z=M=>k<m8vc7efOm9xSO>keAM-pkS4lQ(~on5q4aVw1G2@nG<tLrt}D6=$q2RTw0Vl zrN<dZvL(fJQ+l|P6Z29sQxYM0u!m7=N=9liC@8}+q%(pcISG`2{J<H2vmmi3F}*0U zAOk5ld(5ngQq!yw;6Z`nuy}A<Nkt1Fy@JXFi2oUScnVVUQZn<><130%(~!)~$c2_U zY?*oBLIYOdWw1h}#Cj0nPn@MwP!m}h#Djhra-aeUCBJF(uz=mu!(3dFGNp&TxFkgv z<i1qoj0g&-k__pLLi~xfC^ao5KY2=zG>RipOPVP?oM2_SiJ5s*G8%i>i&E1{DhpDl z^e}_0?cpv;O-rpP$jMC3ESb^?mM%{$%A3*w)>o2Pl%85Lh4k<M`5+%!Mu=ueXJq5^ z2}p4!l45ZBC{0R52{`2N>0wE&C@7i&Ev7))10f*}N>bhepj?Vl9=Rzf;4YCsMXD~i zf>N@>$Q3sFDVb$<To4M9vc!6*WgKdvS&T1;(2M2_w3102<Y!PAp!nMZx3964!#;^6 znRyBsl?ACq$)!oDSc+rn8Hnol&6N0E7Rm2HusR4<7>C0Idh#eLf^$G&gQfh%6=uX0 z!xFf(!%AZZ99bK8X^iI3DH&<CQ!+9#F2hUT!=PjW$!(z0Hwzv>#>AJmU`r5%Z2`=T zjO*aCwG@pn)}upADGoCgtu(y@aWK}>G^2s2g7hZ-^aU;<lc!|#f(yNrd`MyW3|tx# zRaj<BCeeqWG7DBds%1!LT*c==kYZT*2vQ7=L44(7#zGuLqarA)pcE0l#1@UXQYxfq zL@ObwY${4&k;Tf$z<@8f2$hu@pg;hnDU^WlA+4<RO)V+PFUZfyELQMHEH25+OE1P! zUQ*Xk)L;;$Fc|cZf&ovl*+5aTnF|l5_zY+;VJSrM1txI?sSG|NV1=n4$%QFi=R=Fu zEK^1X23YBurOL>_07_ff3Rp+t3s@``V<~R4EJ3!h$4<$Bm$(Qau^ua83SI0rp%%ee zb|8De-Cqhy;Vf%{DHdx%oaMpDz(7)2Oo_)qg)OXPHqVgGGAH0@ka}3*3{nqE0A!WV zMxZ>2QY-}$TR!8<09eat8kme)K&2B1IYQ;MB`7dJc?l&z*dU&PwZ&mvRIAG=wAvoY zYR(>x<ow)%{L;J><X$9ra4UnMhrJ{}xuhr+xwj8#d*bZ9WJqW9_OPesl@w)yhoCh4 zdX%x3OemfIDQ#2ydKB;|1UH|+s`T)v!jj*ov`tCv;mOQP&M8evP0P%IxGHNVBLhR$ zY!ES*k%1w#ha)$!A|<t;Bx8!#|NsC0_pm1?7J!HR{CZf@bMlj>boQ`iWTvE~f_jg< zP~)Hiojn|RrMXF|MX4!Mycv49!2PXa@Bm6@4_8rQIU+bpGqkgMK;;c&gvljCI;#^) zboTH=175ehD6ya*wP;Erau*R~N;}9D_`n^gZwPAeqSbX7oIRZI&Ja=rN8~UvFzD$i zz~!v06hP%Ecq}d@zdSD|KQRSUM7N-_BqKkM3p79jQ)QLl0#l!ulcN9|5>&{{QwRX7 zR)CBcDkSHpq*_6m5ulL`u$*31W`TkYjxi(nAP8KkT>=*u8LrMMEvPI>Eh5(0UJ&I9 zdHE%&N%{HN#RykJO(M$KNNVjM<2D*uTNxP`VBLqFa;t#}LrCcY?;2(80i`5RJ<HG| z1anb5Xyl|QH7^-C>myWh_ORz<mZTOX<{%|1gtS<XJ%x#43Tlye0^~%zRWt|8<x|iH zo3f69G)re4#*)vFGgS{8)(Sd<4N*I1T>@3sD5FXpU|H~}QfJ2G9!;Xt@{}G9P-z4n zg6}alw@fj!NHRAvOENaMOfoV`H8M%HFic5FHa1I2GqEs$jeEsIav&%Hf`+QI4ubp! zDNBMfq_g%B@FQ}44pP4hi+YV7L5!kcN{<AF7_>0J4DT%<H%Vu01DlPS<SU3t@-)kT z8HhCh1>{Ed*eO|ukaA=eT=Y0L(F}aanm9+JCF?&RS5TO&e}aP<-@FImWX;CJz<@ef zik7Uk2qbHyvTjP&BTyzWu}n%eG)ObDNHjM{GBHj`OEEJ~wlFd_Nj5S}HZm|Zf~RO? zy`YK>DM^QANN0T`;6LOf4O0IJi+b!yS`sr!L)}6kO{0$8YJevkA=6lC`S~TOMN@jj z;YLG5bkh@aa#D*baT>f4Z%RNerf?2__<)*qrAZm+O#pbJ@9|7<hd4taJvA@2D6u3p zMIotDAs9Sestc2|$tWo)D7MlEO%r71RluCCm!4UYQJSQenQxa653WK$lb@jR_f(8} z!jg%B0X$YF)}stF7LS#PTtS@j4CyRekPSF<4sv+)ut17fq8tLQ1Hdyy3WP!dT>M&t zoFScM&IB5?$>8i^gU%@+W?g!e6$l3?I5^==>K<iiYSD#<nQl_0E@W0479CR(VH2Ei z<*2cWp&ULBT9ldw@?w@B$kiFzS^l8h&jqjWQ>J(`g1UwvS+r@29wB(TF3wEPODriZ zO2ufIX23d(u^G}?CZGV4$zaAeq=hp@M?z9GBD?jlL)(N%zDE**`VdqiaAinmFoU{R zkf93DTr|ES64FGSlA#0A%h<!0Tv}9=npYAJ75D4mfr)@8)%<!mic?F#<6={K1VMB5 z;MD?YMfrIpsd*_=df37eb4pW-5sf2$zaCC#Y~~kD@$2CP&mNW}<`zux>*0o26Q7fr zmp#R=hYQLrEy|hV*TY+qpBxXGxd+J>Pw8O=btWpO^az1U7EluvNz$9KhZnR|A+Izy zz5+DeJ;j@`hp)J#D6=3wIX@S)u%LK~Uyn3IBsC`$ED~RyS&|VCo{>)lN%KOa5du6# zsRj8(CGk0_WvMw+yqS8qG7@v(T-F}J)QZfK_~MeplG0+BBGw+(l+>is^eKKle4y45 zXs)ujq$o8p7v%erqQvA>kf)|}^zdco6_l35r{*Q+gJv|R^l+Azr0H7d7H6hU>5)N| zj882p$}ft~NX$zCt*_`|135LhWJ(WzerXA+DXd^qru4|7$)FjLH3O9T`5@*Z+yK)p zgDQchxkmuxhvJ;X;*6ryf*kNt0^Xd&y!6t<^wfAzhi6I;Q)=Fn9^s<Y<ou$P_>@%8 zylrY;GN^Ox*Ta^apO=;i3M0<Ul=y<8)U?csDH&`%eBdrFLa2u+Gi6E-Z%S!yK|DO+ z`StLD1v2wWQj78ub3jqY4;CpYO3W(;ML$BQpg6TOB|p9*7nGy~QY#Abi&Nu~b%Ik# za!GtyW^rZ-IEnJdr(_l<Cgp%U0(B)jEJI}I^zg)|q=JTq6QR9i-gt;-;z6xi&=Qj# zF%T<0Gp{(c2&5)HH4kK3%9M^C?xMtUIM<u8M-Y^&;&W2-(n~Vpb24)?OQ!e=sQ2&{ zq!u7LA|TK3fJBlKi&Nu4nWIMnR!A4578L72o5uM?>H1T8L_sRS4k#_ki7!dbEyzhM zNuAQeQIJ}ot7>49GNp&FC@mSyc#sIfcr}>uDTyVCpd_1}TBMhmT9T#*vLhuwSs%2L zM1M*TXGvmGe0gR{NyZd!jvm>PqRiZQc=m)BtnrY=CY?P3#g%y_i52k~nduohndupz zH7PmydFfMnc#3lqi%Q}POY=c%3p#p)!F&ieJ|{mp5i)$yBb%I&Sd^Gtl3E1GZ}E`X z{`lO)qU_RwDV^XYOyFS%XgSc?!<&+yoSB!F4;Aoc>=6PL6~(1VXzIW#IpRSB0GS{s zfz}>nPw5dz%}q*8i7zgx%t<ZINKFOJr;8@%<R@mwr{*SR=ENtaq!gusS0Hut2!c$` z%+HH2PR&V!6l<M5JP;GW#urcN>|svLD+8@*>fwMCFR7q%Q6MufC9^0sxg;J^lNN*4 zHVGD&CKZ=tmXv~%Q3_}UQ|*)<Arw(iB@bE=1u`uS&H;7lKntX5r}VIc1R-pVtRf}` zhOB%L5d|W`L3LdZCrAZoMhs*QM2%k-NWP;qL$P*>23SJ|PZmgZRv=glFLEq{wDs^N zXO@7o1Sn-eL_nDtrVipCWD$tE*eRe?k(-pC15Y?$r6R?ZD1va+oG2!8!fXX=5<)S* zxFoTt1XK}-qMHSkVd&w?Oo>m<F9j7OQ+l|Q^K)__>)nc{^sqZa#V1dxozglbXi5)X zL1IyHYJ6^LadBcgcr>j?2wvi#2y?@Q!EwtC9W{&3$xjDGD_07rPy`3o6hBa1U7Dl^ E0JXs4k^lez literal 0 HcmV?d00001 diff --git a/docs/source/_build/doctrees/auto_examples/sampler/plot_latin.doctree b/docs/source/_build/doctrees/auto_examples/sampler/plot_latin.doctree new file mode 100644 index 0000000000000000000000000000000000000000..0fa64e786f73c57466d9234cb4f825f36348a0df GIT binary patch literal 18996 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 V(&9=1RlVRGHN_7!0$iG;2LOAF`rZHl literal 0 HcmV?d00001 diff --git a/docs/source/_build/doctrees/auto_examples/sampler/plot_metropolis_hastings.doctree b/docs/source/_build/doctrees/auto_examples/sampler/plot_metropolis_hastings.doctree new file mode 100644 index 0000000000000000000000000000000000000000..ceff01bad24e680b9d12f37acc26adbbfa4317f9 GIT binary patch literal 22160 zcmZo*o!T1400uq$#RVCec@=tzDJgmRDXGO%dN@+@lS^|`^Gc>no}$?}rFM!&4`)$g zd2xPeQF7{(9)>AB9LX7(IVnY{c~fGiX!P)b)R$!D6zf3^U{B7^MbV$Z+QZ}Gui)n& zqTuS{8KO5OgFSXi24@dTNNNSh7Btz`DPUVOSTopq*a{MhKu*cvDNRc3;YutiDauSL zElDi~yNfw9rFcs0lpglvoW$bdR4|)0FEJOw;z%hiKyZ>0le3Fb)4*ytD{^zJiVG4! z{^2MnN-a(;DodSG+QVLwm=4l0C4(zNEQ7g+GalqOuwOEmd)Qz>5T&1ypPQ<mQL67) zP*AMzo>`KUn517&oS9otsh^UcT&xdKsh?O{k{_R1k(gVMlUl4_45o|p3v%*H;&W3= zit-Ecb25wLGZKqSGV{`l^@@s1ru4AnWagz#@n$Mb%HW0se+FxhMTm!Iu!5VXkE=qs zW3Yl_Xo$bBV~D4-qmNIdg1f7qYmj4ztBZnDq(X3jho@hJuDhd;k84mQG^hnBFaRkw zGQ={pN|O>Z#A~N$WJtzN$&iknk|7&AB||=TN`_+WlnmtzmC_7VNZ@6tWiV%`XJ}+- zdNZT=MK{D>!Pn8-Rl(WA(a+sASO=Ua6hb^)6@vXkgPdIz0wO~^{Qbb*wSuG-!5$KI zp}N|F99OfTxY}5W#K<hDRD!vkEWM~ca3jYDtSCN^_3`v`RqzY-b#e^~R&We*RdDwV zbM;eja`o{KhbI&Qs!&}OLXNB0OOrAfdRX%Faw_2^3@ER|3WdD<l2jy#o=WGO%;anZ ztD@92tAvcyqErQ&;)0Bd`1G8j_>}zeyqx^Rlz5cLiHGL2c$_({pwcdZt0Z3mreC2X zBUK@-G$%&^np+i;^HWkG@yFT2S&&$im|m1vkTHndrI8`n!v+bODezc<i)4sp<U?|x zUxub1IK+7hQu9(W^U~uhic-^%JrYRupoIk-TV@`(G=o(n8LSyK;Aj@?VFAS?!r>Wg z8Dbd?$Sy`LW;A+Oz|QVrE-p!#(!*X{lA;UpMk;do11fv!GQ={f@FmM0wxZOul>Fo= zJ$fjKhG6kLrH2!&GdD3aZ%RgY4|`E+T1jO=>XaU4kV|^Fi&E24D++QllQT=EbbzJH z6N~bubb$4hBo?KomQ3k!rb61C0`h1Dv~cAGMRjRXhG35p5h)sxQixFvG8#EfQgIgj zAQ$B#xhNAo3VNhL9@kCJDbj^yI^CSiylh=?c27i)#`Fxaj1-8~pen=<-8f|RJuIme z1w~VOSTag-bHHJfgwW~D0jkMMlQKAa*r0KMNR2)AdU^`+AcuiV6O{BoOd$fTop9BM zJ*-8kX_+ZgdaOWJfc*}#LKj-b6zf9EDP2%GrHg10=)zhAx&@VB|Ln}r^cDj71LiNV zf7pvtlS?x5^N{j#1{)}QX=HHru$E+&<e-$JGQRL8hk^&R$)NytL1tb$B*zN&;8z4s zJsB4=#4^r7Tmva!P_rv?^njAanGCUvlMv;g==2stshQLfEf}{Te_vSr4{Z&As;yuJ z3tb~4m?Mc+k8m%jc)5cw5h1r-kX<TSnv{_TZ-*6zWMme@>xklv{PJRjjQny1P*qZt zSPlu!)MACw;>^5s1$+Un#}$&1ssKrm3I#>^Nr_3BIhiGu3MrYzkTz~+ex5>RG0e{c zU^620-eibnyn;j@F|iFR2&7=KjuM9DR=J5K8CD4e8ZjV7Qd)IIt)^{(Mn$}#jzUGe zk)}dSK~a7|Nxni%YDIxUOipTAiH2@WT2W$hwP9_wp@BgyM64p-P}eY~C^J2yL^IAv z7cLlQq+1bh1ebs^5+EVT*~0>|6)Dg346K6$d-CZV5@@yVKjI_yPli~=4}7@@l-FUg zFN-zyEy_U^zXCK3RKy!9#AN0vMC+RBn8qe3B<7_cq>PZIAPrP-qX%LF!WTVkP>~F= zEFne)24w$a{DtRTG3<6il7(OoAF5jr#)FzBS<-0c;xF$0KwSc^mRZ5RLYUVB6@aQC z=vtIuKyodzIKp(WYxT%?Eu$X7tR6<aDOg-dTq{5xYxMv2EKw-V$S=)FQAkQv0M-2| z3MCndCEx})I4dh;fD%D*W=g6;ei~RfwXif1RL?177Aqv?DU{~r<rn29=44i-rf{K@ zoT+)mpb|8#G!I-aDimktC8sK6mJ};w=9Q$T7bWI^jL6F`Q2-g411hzlX~Hl8R32v* zD<mi8DP$xT6r|?qD5T{V!HRkvh4PHlJg{qEmP4GBoS#=*l9*QlGPpD^J1@UHPa(fZ zAtf^{Ei<_^rv%g_OU}<NC@o1vq~QKR76?c&KIoj5A(rKimYR|BG$%a%U>Sqa5aAne zUI;+bO*rR*>;vcAWO^hDcrDvQ7wfQuCvo{%5o>;S4^IW>nUvJD%)C@^1|is{$x{fZ zEXl~vQ%EdUNXyU3$uBR4Hlzi6sAe8KShKQ02|z3>6GVZ>q)2JPs3G|pF&w8sM1$4H zSl1ZdVkKS!+}+^BTh7S9fUmyA)oRrOcMy1UGD}j65_95{a`Kb2k()d_Gjj{_i%Jyo zN^=V;LGh4Rz{Qo4ng(r<#)BH68WoyWTnY*b3YlpN8Wqt7v39n)rr^2^#Idn8)dX`i zDxwXMr3_<1QV^XW-9@P-rA2uPc?Ei@6$Ki)26_gDT43XJ4K=m2j1+VshHGgV>4HoG ziD`nZP0cAz#W2PImd}T<4^X4HoroyzVNJ^i4Ze5waO5QBrI#kAr%vf%Pf1NnEX^sI z(!-aLnVyjYY6r(B7NvuR#!E9)vsyt39x?!{O?E0aHr6#ZfrU9SsTiUG)r+%;@FJ+? z2pV)p?t9sx^c(Cz9j3I*^wOeKg{0J+{Blr30@nXR^rb*a7d%G*>ObY==Vuoy<YZ<; zYu^mP9!iaYdo61fD1gPXR)8py3l@9wqr_C#44w^$iW0B}xVymx%QiBj#HlnXtBsL? z0oJOH2xnqofEFgXi6x+cjGW9Qy@E;*3skTa<dkqh<w1o}Nq&A#F&9^bVSHI)PHAef zf-R_I$jQtD&&Ftgx&eBII)(-Ynp_n|gw=3CDjO7qRjEb!#Tpuh1_n9`AcHiyKn=M} z9fd4~%sd6SBlHT2@>5EaOEiiS^U_m6$~AQq5Nv4KS7E4Ns{nUxbY?8LXsR#*iNf3$ zodpp^aZ7ZjPFAdfElPo!SD=?zRFqh$5nTc5>KesrYI1R<Wu`0WC?r-W*eVp{l;{<g zCV_&kSR*Yny*RTf)mFnq#{{G<u|h97Kd&Uev?xsj?jRincqr+B0<xqiF|W8Fzc^I` z#W9*X3OT7|sX4{Ah6Xwc$+?LIw(3rx;8)k=;!3R0D^4wm2agwNsB0iMuQj30M;Vk* z*Mw=Q$Vp5}&Cw`QSE-0MR6&SWB8eLziC5%g=7OUbZbBtO1myV=a2b}9Seaj1qM->b zc1Dv}YVl|iqfrt=EftRtQ7UFlWn^IJ%$ml?z<{WNvt}?dFw}y^YLTm5XG9s_BMF&j zk55m`$w@7$)Jw@M0*&65fo9w}Gjr36(?PT6NNqI8P%h2^_a5d%P}Q$QIKNKmVFgc* zgC@#_;RDg20m__I-OSwdDTzJIrA3)jdfai$S7+uXrh}%hVUup4@(J7gb-aOrp<Y2= z`jj5F;-chY&};|Qj081ku7WCBlyPLx#1?6-ax+6+GjnLc(nCz;3DJO>OkNU^Ot7_Q zvXR>}5y^}U3?can1*t`8`9-;S2a9zS%2O5cQd3hvLl(&y`T51E3W=am<AVI+#2l2; znX5b_GdTm?Cre6IC@qHQNl7h9Ey@M;&=M8$Qp**JOA<>`6%rCE)DsdE(lg6a^Ar*l zl1qy~Yb_9x2?+{`C0wbA$r<2k6FlOfrvM%T&n#Aeboo*gk}AR7KF}O#F31{%goHHc z<Viw;0>n9pA)iDp*zk;=f}=udacN?XLUKlaCTO6h7|DB}30Z_o(~9zQ6%rNP6HAMW zGZXVreVm+{SCU$knxX(5MndriV$`K>U;}#!JPq{>v`aF?vc7}z5>lfzgR_Sn+FL{_ zgL>E?Nd%T*m@3o}-T=2FnV3+=Tk(#rWHEqLLo5dmu!!SGdk9N<a4Ny#i7ZAYM9Z{? zH6fuQ0Xph0*uz+XFcj=^QIK1ZLVz@vo063?5KibJ(*T0L=0VPVuz2HuWk`erz+s?4 zQ5ZB0g3OJ`RD;1aSYn5`!L=MjO95%s7g6<-g|4|NES`zi01r2CI&fqnZ<whBtvA@S z9$ZitCubH^>VfK*Vg+d5FSj(OB(p5BC^NAnH6AjA&cy{wl?t{BSmgDJ%8I#^6><}^ zA>)eRsp`~Xg`!kQ&n+`4CzUI^JiRy`$((BSqQtzE{M>ku?WyWkpiU7)L=QS#5?_>; zu2Gztnqq6HSqlreA?I$?`12<s{zz!ImXe(s&CPVpNorm}G@$w>o(SJyYhJY>H?Mk} zLNZeGzzwJ5qEt|8CoxYU6Fgay44zrC0ym1S67&$W^srSC2?}62MAJc@fLVxQwTGb6 z46&?Sv|=}-5;mODBZJRb;M9sz$z@f5i~_Bu73>kh^a#RT;A~z6QjD|8)5z%RVJfJc z(!)_usS6H(Dd?-KU=?^7ff$0XvC5bZUi_4j4_-8t)xreoG{M(RLHi}BE2laUE2lbp zI14JRa`RJ4b5f`Hf!qZNohg1`EyV??$(d=H$x}Kq=3@0dD3QRHNwq`69o+6<hea?v z;q}0Upz4sPWr-`p+sV&07P=NBmEq=K4RFVUBX<dbIKeel(1l)xe*~A|kk!n3kV3ae z53x82zFZkrv|}baF0R}RXb+%B!4|1!1Iu6<c`2E>wnjP%nR%HdkfPcaF*v4cqN8gP ztEmGXYJ-*SwlIbcbWF+?I>H4S@6}PrODZkOvo$mT4f^GkWMt;qnnLtLN_rgyl#0R@ zg$EmG>KTDPM@>VUh)6>u)Fa(w=LickT?-3vahD-TR5u->0o6B$i0}=lh(Moqn1fP} zB>AOQltAi{#GD*(SJw(uDy4$fFkz`YpjjqCAvd)oBOlyjPXR3rD@rXa%`8ey;mRw` zO-d~SEpC8hu3|(zBZO%eq6qK7CYvFabpfqZN2*O!iE=48oKdTl+aNO`)rvG`{)T!{ zLlfaRa1nGDq>FI<!d_4bTI`sCvwFEnAmVUUFV9h{7Zy+qOaWIF@O8P!wM*7iCI$w- ztZ86!Iuio}s2-8T>0Qw1UIwf>nF|egaCM?hN?gO!Xb(x+p!ShoEzKoA6I$w8l2k2O zfHlB92u>3$%;a?~7NS>6neaNLSVti@BR(-XIklh!)OCQ@HL!G<2hCWvrUsyiB(8#@ z%)Al}B}cH1M9`X`BG6ctm4Xs@(j+%EF;4?-q9(jLprehbVJ1XGn2}HnFG8dMl)1Ye zNz4#YFwiqLH-xWSz@q}y$x2w9+=DdQoLrPyP@<b(S~3M?sW+%mg6tEPy!^b>DcDET zHz2%0VjtPkOxKd6UI|14st=8^_z-!SGsr90YLgu(wTUTs5*xhe1++pKI-QNQkT@e1 zzK9q!d5t=EO{Q+RN3xum85lCevK&Da&Vm}*S0Eq37If~!8UdO_tc9_(&^0uK#{daB z;4TN3CH`ba!5*}-Bw{xsIg{4P3aE29@g*6hxk-76nK|*$I^9;mXu#)lLDRX(i6tee zMW8YbS`tQE=@`U<i%o=pVXTfqv8}0&Lb9!Tk-CmTZeme(YLTsazPe6gPC-VZt%06_ zDaQOTqIyKzM37pHm;k2J#PDb|MqB9&;b=t7-LXXEZsfWGzWxb&b+H#wT4h~BTCqZ4 zUN!3hXkr(s(TkDHr(`{1WMGJ$f?U02=B2|XQ?s6e44}fqrxAEAHS0N5jl(^UirD1h zsHGK>Uy_)kP*j?i2dbq?GIPO0W}rE_VsK4vrKP2yp<tkpo0$jNjIE$xqGxVqsZgAn zoS&Cc3~51ub|JA9mlWmar6W%%sS;&6xKENH*rQ0$C1`z+MpCM_ta^}Yv8-xv(#sI+ zk-_ULczPwEE(2mB?zTF3*L?+eLs&^>E@=A|N~;LD(tU_X#u>Zd!-O6v`_^C^>PX)O z3te}MYXe)xQOJHpuuEaK=#syO?Fq~?pq+xHNg2s74?!~}XAdW6jZ<P~UTP6inu%~_ zWMI(KQ-I4^S%IozNC3i|g(;$20A6Oy#igKN1yf~}-~!z;tN>kv4B4s=-tTLrfNN=k zUO}aT4IW9m1THQz9GF#FP+5{%gv*6q5NYr>iKP7eY&`DEEU3&&!sA4+yd7jVR3mE@ zGtxY1672&AlAGZrOx8wFwgU|>F!Tt)VkRE6eYPkyFBy5$B3vcv@C01HV2=g4@i_&a zo55|%-5@97Y!ZXU#yMav#W`-V16+*Yo=C<qZjr$T9`Xk7CC)m^%)o#;WP!AmxHDsJ zk2IcSIHiXpEi)$-e1t`hjj2J3fswJfrKPEnxv@ctNvfrpp^33cqPcmhk#VA#5$=O1 zAlpu}wt>O~vV!<+hFI2S0^UO|wm|CFV^OcsBM4uD1P{+12@El4-o*^+l^{2XWvvFA zjhc|tuq9*~<srnL(5&Ym7qQ1q$=Z&Ts}Q2dYZBn18G=2Q@PtdM6VX!cdyxGUrrbB+ z;G`_&{v?!g<#484aOpH9>ng|udvl{?%fv)WW5eVWBLgFg6!X-SBulg8)FdNIqePQL zJjoVf45*2NlyX02h-JMb;63D&3sV0Si+b!S7qqMowI0%i7U~3&F6x|;22zV4EkC~` zwP;F@I6PB8L}1&-aT>e~XF|wY%FMu!2s^F?Qm2D=yu-2}=`DvTiSScjw&U1&{|r>y z_eiEz6r?7XAd2^t_@v5sa1m8IB};{cfgx))GXq0$k2qF^nJH6hr-0oLQHG_}0Iyei zJQLg@%PSSqQ}a@b5=&CS%hQ6vM;z(G<ZLoZN(zdt^z|X#d0p6&%=FBXjM5~%%zV3q zcyNscYQcied`QKpmJC@K7(hGiGX#5-VaDRI5|LwxQ=TD~WeTzZXRbybqUm7)2PSbQ zgR3C$YEK11p#U21&N2o$Lo7?51vH9_)BsghARLO|FoZ8)?NNq?vo1WKbdxG|QR83= zB9X$Bqedl$a_G@RaDQdFft;G5nz6Ho3*Mqgnc~fu0rLfF&g&6^XS3qW^t{B9(xOz< zF-qjZ;YWs8mJTRL)H0ay?#sfJC%%C4L}?Pj4H`W%h`Ck7!4KeJ8c@d|<5(&v-}Z>X zoe4cXLKnPXAL3LLLlj`AM?eM=L54sMpaAE1P~#nbBo%Cu7T-ZRQ&M3W9TX79kx!w> z(DW9|(qI9te9p=Oh05;YEG;lM<5<S-Vq|ZE{D6{ZVTWmDXn>4m?BRp1+Kh*^$EW!9 z@W4dCN67f~a1^JOfX~UA(jy2umJ593SXxnjUP)?R%9I|qFz|*FM7QCLUk@iVspS_< z@$2DCNi0b%E=kNS0IeT@SQ8IAf@F$c4;PeMT9h-zuZOoJKRF(BUKmKWcuEgzYF<fE z<&+*FP(cjZvy3F^&Dg^WI)@{#G&jBiw2*g-H)9VU=m>{`c<4E3#Z&xxq#+`yIjNx2 z#ERp~GfOh!!HX<XLDIYsX@mezQ7UMIUOaf)#uRU+9<GeUoDvw9wMQ_u0y=YET8t27 zO-W5EO`qb|!v{Kf26Wa>aY<2XVlK${B}IwJsUS~H>FD9h%qu7@iBHW-&Ig?cG^K~L zv?NW}Lbo_GeM*lEs$_g>QBi(TJZM*T4yalJb?GycOQ!Vj=a-hCn!*Y;WlE1Mnhcr| zS(8{87<%|1<|5nx(=CH4fu^}f0OW__oW$acqSS&M@DXmjuuXCC;8UA=m{Rkm^avNF zCg&HW#HXZ!&OJ)aOU?v`G+T0hURow7j5sq>;tN0rv{X#VVC&%nXAFc;4-@F%7T%Q7 z+=6&`!t?9l0}Ft*lNaSB=76G(A1ngicms-lgit|oYH3P-d_^uONeQG@fVSntBkKgG zlH`*3vdrSl5^xgb2W`AeOv*`(hr5y;mLW1UdU)bfQb9+>fhMo=K<N~!EFRS82On%F z24cl$<`t(Ffp*Ntr{;l7OPSKq!(EhE4(EC^_6UM<ReVlrUV2GJd`@O=X2}#^0reif zg46;;RSohC4@e{_u{bpzlsS4NVAV!JYC*9cq=&7SUzDytrAHK`66}D|qMZ1W)ZBuc z#FA9ddZN?<T~z~<lqo%YMQO=s#)Cu<#;d`MPf09E1SQ$*)FQpi)RHu?9Vz+A`k+I8 z^r!T2mLw*{muIGwWK8kq=#ecc%FK<2XHR&+9}nJEHl?#iptv%xB(WkMzEcu(&>m=H zs)wgIH?gQBzOXbObgE!Sk1&`I;l}6WCnx4WP7{<(&PXguOfE?+g5<Y&$k|r$pkedU zf+?LnpmPwxWiqrJ=<MN5$xqJAOUs7}cr*40fr^Ua(j+u>;2jq6po7f7r8VdX!0ahK z0;#!4sVVWrC6zg;#TluoB~v<kM3Zy!6SLz}b3wBXi76>Xso--DJ9-2`CTHg7#TTdM zq(O?c&K@3!31H)kr*!r(r{<MS@heU0;eZq`si1OEATtlL86_UFqNW(MQADt~G^w~G zv!oQ9j8Z`7Ce}{r5ke6KH9J6?O+lum!8xGgwK7vc;u;ypVy9&6P6W5!VyA%HZ;7Qn z>>#C36_9G<SXL&e8JG$pzzsrBb2Tdf#PtQ$<~^JsEuj7}*jTWp4zM0Sa09XfthS>x zL$Y>?M#iy>lUX36GERam&H^=yvq0u#xq}VkMNTFl1ABOrGfTjE3Y0V<BB0U$rVbJy z$RZGRu~R_FDmN)V2cGi4N=1q*Q3T<tIZ;gHgxLz#B!psqaY<rP38*F!MK=p7!_dQ( znG&CzUkcj#Fr|k(IX@={w4W$HuXsuiyE9aL@|4;sty6-g^zaoV78R$)=cX1HgZA=( zVps@XWFZTKn!J3)mBl5gxiDcwjmiogrh_-Qp?txf1dqys)FM!I30<9~pagHPfIJ54 zyAXBcl@jPM4bUka@NArdbSMdUwB|1;Ch?p^32Ia1W{73|BA~8^6<WbE_OO7`*OVR> zPd_(*&<-ZZai<v?umd@TK>f-eVDqwmvLMFKpkaU+CYgA`1lI2&eJquTz>#1DHP&%= z=3#*&N<bY(;A9E0GBCi8K}7`36GYIY_He_~6}WWa&df{BDNRX@&&f{*B|EMZP_+!s NZBzU}Bjlw?dH}Myj++1g literal 0 HcmV?d00001 diff --git a/docs/source/_build/doctrees/auto_examples/sampler/plot_saltelli.doctree b/docs/source/_build/doctrees/auto_examples/sampler/plot_saltelli.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a07571717bc57a968d5e498a280b514cb975dcbe GIT binary patch literal 19180 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 literal 0 HcmV?d00001 diff --git a/docs/source/_build/doctrees/auto_examples/sampler/sg_execution_times.doctree b/docs/source/_build/doctrees/auto_examples/sampler/sg_execution_times.doctree new file mode 100644 index 0000000000000000000000000000000000000000..1110d7b9e813db52acf9bca6d7a1694b99ab7a5a GIT binary patch literal 7782 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 M7OkLmP-&7L02EO~asU7T literal 0 HcmV?d00001 diff --git a/docs/source/_build/doctrees/auto_examples/sensitivity/index.doctree b/docs/source/_build/doctrees/auto_examples/sensitivity/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..4ec7ce336ee5d63469775dbdc4524a0198a84f2a GIT binary patch literal 7391 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 literal 0 HcmV?d00001 diff --git a/docs/source/_build/doctrees/auto_examples/sensitivity/plot_sobol_analyze.doctree b/docs/source/_build/doctrees/auto_examples/sensitivity/plot_sobol_analyze.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f1d7f2e6308a627d9617bbf8fa4e14840a8c3717 GIT binary patch literal 34899 zcmZo*o$ArS00uq$#RVCec@=tzDJgmRDXGO%dN@+@lS^|`^Gc>no}$?}rFM!&4`)$g zd2xPeQF7{(9)>AB9LX7(IVnY{c~fGiX!P)b)R$!D6zf3^U{B7^MbV$Z+QZ}Gui)n& zqTuS{8KO5OgFSXi24@dTNNNSh7Btz`DPUVOSTopq*a{MhKu*cvDNRc3;YutiDauSL zElDi~yNfw9rFcs0lpglvoW$bdR4|)0FEJOw;z%hiKyZ>0le3Fb)4*ytD{^zJiVG4! z{^2MnN-a(;DodSG+QVLwm=4l0C4(zNEQ7g+GalqOuwOEmd)Qz>5TT!upPQ<mQL67) zP*AMzo>`KUn517&oS9otsh^UcT&xdKsh?O{k{_R1k(gVMlUl4_oSIjhS&~_nSyHKA zkdt2$U!0$mpA(;$mzYyom8w@%Tr#DHB_}g4b&5ArX;KC^B=9p>dn`gcJcAY7Jbhdh z!X1MZ9799=eH}wQogICAA{E?S{ak|_LtI@HoFWy113WzaB6QsyeSBPlBB22-NPz)J zagiaGp;elcm?2&}MI%Epc1nhH?34`I*eMzEu~RY>W2a;&XQ-5Bs6v7+LoI_jLp?(y zL(`iX#V@)c{tCX1-mVJH9*%zQuE9FsB%u)E;i?eq9~$KBst^zv;^FTH_O2Bqr3m(r zs0-EA7UZ~^1;y2dN+d;PL8TJR<z(nYb-f!ou4hGYy{wO?pR0mjsIQZ2P_TkykgI~b zXPB#>f|IL{e>gmm5Kx8cst|Hq#a^0}!O+8!pO;e!FIzyl99A6U<(H%)N%WLE=VT^l zD_9k!rdcIqq!y(r*c2CJRK%y}6ve0Hm*?f=C#J-sL`*zV9*f74#|kR#61Yn86=1p* zN-|Ov(n@o36rj0OAvr%K6%u!xJ)8xJMTzM}i3J&h##I^_f<0`IV3`7s5x7W(SVlf1 z=lNx5`hi26ryw;iB{MHQzM?2K4cQz1R1Q{Hps{7<fy*#h<&nXfQ3H-(!5$V+93q^Z z!ImMG(SYn;)WSuhhXw5D9_Heblqo&z#U&}aAWx(smpY&lr!GS*qY7Vw>|rZPO-sp7 zp3<X(l3WNB$y0hb!TNF&GxMfoboa0qrKXis7Nkz;VFtOQhr1{>Ew!Q`Co?&-WJ(8E zx;(KcZ%PMPUrAz7dTPm(9!HAP>=ckEE1<<GFDQ~rlQIN*l!!>lh%`csYLL;$@sWzN zum`y)7s*AL=)vD34f3{bdQOopEVJq6Waee-f-`v{dK9K-h-IWetOivYe(1&_tM6e+ zttcp((!-KblA8k#n<RuzZw^q+U7D1^*~12n0YpmdvDMR4hzB_gT!x^e1;RxKv^K(3 z|MjpIrKV-3OzE)zSpfDq$O2tx$x^I~R5s~?$|hZK{jUqH|8)y0!G779q3JCI@&n9I zV85^zrzV$V=I0^h;0!iUw$jMp>|rg*EXhGBIr)P@O$&7eu-V0##gNP?*dquQf7CD& zAp=h#85c6dGR{G4g%lsC*%3JkK+%6DLoDMYL^&wRyv0!J9Cbvy#4X6*7gno7>v&Lw z6s%yOYiI^@8PVzy?gbSeckm??<Q56COC?K_GV<W9tCWz8%wl-?U!0L&UaXLjU#?J+ zuaKOdTToh(ssIi(bp@mdRLIOr$xKcyRwymb%uDA2RU=m5MyOSS9$2*_q*a%o02YN* zvY^7-lStb@afIJKL_yl)PNboPyf7t0EaMd<N+BsAqY@rWV%Yr$i9gOB_MFU;)S|>3 z<OKQ^lt42Cdw7sT1mSFO`TrByI@AQGk<rz|R8TpkhohiU7aWXJFpB=~8Dbfq@udNH z(VsCLTq>vJgG=))W<~}EaET2m&{-koqZa9%U<KeJy|ah2pwcQgKczG$b&4OzMUdc_ z;s@4JT#%ZanU<M6r6Xf5ns-521y*)Tfx;JDcC*9M1w1+Tz=c4HkVA#IQW#`5IFX|y zZd;$!5{1%Yh2;Fa;>?uPB5;Gpvp6F&Jux>^A+0nIT&gHoC1;kTS`}C&_@ufQC6;8S zmKYfrnk0ZD7nEw%h%*Kew>`w_$Pmj?W@KPM_AgSR6UXPUjCxq&%+doH0qRr=_VA*3 z0pTK0YRfVJsRMUSAn6-3!LfisVoDDih|(><OmKA>Vp%$j3=GI=u7^1@#c)a@dWQ&C z(z8NMdW;2Az-b8Hl0Z&&8FSG+gq)sap`llrL|ht?g%#N-X{637H?btcDxuOgEhZ;5 ztwf_D-cU!OBHjo@7{?T4re~CB+Qt-T<|)ACp`zO63P|EHAajaxt1D{bji3tRjI<5( z3>7NkjpIy^l~%+XLRCN#8E7;Bq#LRD=ou9566`4(m~cT$xsiBNE?V836%JA@mKBVa zP|;H;C@sNSaq?KxMtwP`&8`4VAr<kN2@09T3Z;3OY57IDIh6`2nZ?i%nG}WmJeay@ z-I#(*9fg>J%-95lwEQBNc&0*3W}ZT{p^lM`acqK~LU^h|N@`kWUMjd)f|o{##R_Tp zIXU^|#gHZ!s03nzI0O+YJus0Bv8-H>cagGnRs<sh1FUf9;YM;jxJ1hk>|w5m&qSC7 zE*r|w3_&d$aD*_(W^jQni#J>lR`n22NYFRJP~RYjG0a!oNP-9}!M^LH$ak#ZSVS1v z0~H|XT2ZKLQDYwFUS1Sogz;b(&!Nc0Dnz9&MD0tQdMy4WuH;oj%3X+oJq;on$%f{- zMkcTTBVGgCXW+2hN}wRX)lyagcRqNbZM*oSoc!c$<RUsbGq)hWs6-*JG`FBqA+cB? zuYijyB{fYUO{2n4r@~05!dTOaOF=<Fp(wSav?xy@uRyOjGf$(!P*Xu$!CVW*HPY15 zGE&f1Fwis9sxa2lGJ(q&YQp?Z7rRh{?I;n!*29{X4;mQn?BU2s%u6p#Oi!KC!=93w zmROooGNp$vBQrfC2ULZ|Cl;lHhOJ98RI?6)(l%sxRF&+MVPvXnYy=A(Vp0Y~1F9Eq z5aC5oH31qB2RARFoqjWvCdAW_j8uiP#G=eZP$yL(KTRPuF*yTP?1QU~oYcgWVo;|F z)K@}L3N0ck6ZBvmEm*e|T&5PMrhv2+mL}$vWTsVutBU0OJV>>ZnV-jn&9=n66p+Hq zB8AL6P`?D+%q47nNoqkc$n}XBE=ep(MN~#&*u9G=z<O}0$PmkV28w%1E35Zth7eU* zfouj>R?-T%V*|+(c$E?K2`4;WVQG}H5@9&FSYl#AZTXYt3rA>r0d<whOEC!N^w>iU zLyVb_miVR+3=blkA)*w8iH-sZDIdxEr0FB*S0dtGgCc(_>nQ}IWmc4A0M4%PlCDP) zQ#n#ZgB4@(6LD3$IZ^@6*~1O4BjXE8^HJt9AcJ)ooIU)hd8N6jMTsS;De*a(#h~d= zSVI+}1~j0@36hD=EJ@8pu586ziW18eiXpR!pi(L`ub{L9GPHyk&&u)#1uUd5j7tYR zU?7UcvI0SRkjf;y88HLaWw6Q+%kpJH?F(b+Vq|%POc%@Y04vS%VM1z~+q;$}=9DIu zKzabV`6;P63W+6<+5_x8sDD8<Kz>q5VrHHKL{WZe2{zBCfvkdfo?@dBp#(NnEGq+K zILV=8ogtQ$0`@xIP{kKY2F|Dhk+8wXq(o5Vn2#DJ#d=&^kP;U$#;He|0TAtiJ*f7A zG8h4y5hY4iBPg)Mvg$z;$zf)bA(mB5YM9~9u00%}Tn8EHV@oVbOv+52(!*8&8n3UI z0$OEIT$+}aSuv%DQ4cf*pXCN}v{;ri5iW29D}@b&Lq?U5rtXPpmKhuCnwrCcoOliJ z<O!}ymk@9(t`@#SX;Rh^q~3DGW+n!Pw4(f61;}~^JxF;|qyTN{2Pfu~q~_#ga-pa} ztZaa*15H3c2f?|x@=`K$6>JrZxsvir^HPcxY(X7?#G<0aN{#4f-Mj)l&~O2miq%md zBoM2~m7JK99ABK8oS&BxpI-zT*R)k|OUx-w<;nx)2?bjPLjxldE-qz-6i}H7b2PLt zDdsAM`XV0YJ6i>q8V!(Jbrc{D)ltB(NfTW&$T#TbK|@Ug>>5pwJFt{<CHV?iinL;` zNCjJkGz~N(i=(Y{3}ST@um~Gs7gjKe1>1~0>vMr8pJ0nmiWF=iEnaAhK?5NYi~n^L zic?clY>hOzg5!%)!JY?2HQXe<qS8DKO)jp2qRhM!4JFs&lFVFCZKsfySyWu23yCf8 zgn&9|5+$|5N<m3S0c=*Zda$8-EZC!(F#TW$m1HI-<|q{B=ahoF7gh?<271PZCOQfR zdL|}DItm7{O0ZtyX!0FRzE!D1F!`dE=9`Ep&9g2uGB9*zT>;M~z{VT0t}!w&)PgH9 zq%j6ZL=zRIu<ywuCVN7&o3Vj~xgj{qnVOiInV2XT=ouIq8=0D0TE=n_mrY@n9KEeY z4ctRm0=GvPK51W^T$EW*qMKh@G6iLs0;mQ>4s({g{JhjD*aJKf5#S^?223q<%}5&5 zfoMSW;bkm7L>|Bfc?H{`P8Q0b&V9Gc^wOeKg{0J+{Bi}z#5id1rYN<zG^eCkPXROv zl9X7a09wpYtWcB+UP+l(qL7NM%;y4kO!G?;b97VF(o&O4AQcX{5&+Gl>wtz2%Tsf5 zKy*n)YG#pwrKu`t;xa8WB{eTO6*7`jmY4&!n5!r?MWMJPu?X4XlA==3FjP)yDtHtJ z<XG&r4#+}1SZaJs4}T&xp6TUNBrElh8s?9|E!M1uAd2LMc{bLBtx3c<wwbZ6p@A_h z%t_FJnzY}OnY0Vh+qt5w3=GgVZEj)-C<*6eCg~Maf>@v=Sdde~#RXan9A5@XWVQ;? zMd~UQ@rEkuI$(wojA5*z9?MmsV5?9KYQ9)S8|s+on8)fUs0W9rTSXh`nCe)>)^a81 z=j4N0SrA3)%4U{H#)(GiP-W`M#>SSGsb=c6T;-W5B^kB`dKO&Ci3P=(RjIbdTwH0H z={gFD6^0773I#bOdc~zlAZHe9q-Caqm1vmg7;A!Cdsy=xT2@0EBTCNCL(g7Zi4}%= zNr^=o6_EBAX5&mp0pdt7siRPtT2y3<+JG~P)lmTZ*cME}41)OxN^5d~?Mkf3EY^rN z(6Q7p&@s?6kJSW=7N?fPSCnKXXBTTk8|s<rnCO}6nCqFM%jP5|rREfCz#|Hx8Kf^B zw0bkQSOa9dt$I>^Nrt*kQhrHEey%OJtAInLQl*lP0@zfr(~&&@(NPI9P%phGGesk$ zs5Dha0kqt)xTG>C)mB|sS6xS;JR>tX!&W^vF)P1F9TpDi=|!oP>N*OEIRzPswt7aU z5W_&etOVPpq3(v%K+eodNv(iu2D=0jh~P+01T8K?Z4`qi=#UFLXipsymdS}FC8<a; ziqU}9Q7E=GHqcQ>wpA}mO;OiT$W1KDPA#%k*HYKy0`*@I>8b>G8BQ=^87bI;lCfS% zd1hXP1}F%O;7Kh+Jr<GFLZJNsd`S(W1~aLF4T2^yTPO`qYDRjXs6$U`MtYz~z?IaD z^oUJMSXAOlOCjpuWNf5I#k2(R1}rUwAV(7R!~}K(7pOQX0Z&imBv$5^mT16xQlkYV zs0}h&KxQUqqZFmM615>DQ5#Y-Q5%BuCM;2p7LcO_B>9ys^$JMT7U^FiTBOMRM)=wQ z>|MtqL<_q|60$ijK0PrfC$*?jFD0`Gv<$oqv`vpQGdI0B9kk^RX^sdog@kj}eh+gZ zXib6;sPU)(9sq=_1FuS*(gR%q8#@KLE1a2^o|CGZnVUW(v4^>|D051WE1pelnYoGS zpnYzzJvtz3P&c{78yFbs738H)>0v7_N-hR%kD!u)pj8!o%nS^$(1R>f0PTT6EVt1j zqMKr9V4`biU<vD|kfH@OStv2%pBTf{2VYs5l#v0O5{wXGWMBYwvyoOYC?utpl&7ZV zDdgv+DuCO#sU@jJ;HFn%PL4u;Nk(cBLcCZZIWbQmDU}Plej+n9MIi~Yh$1C3EiJVO z+_i=onORbdGER%yXNPs!xu9)JJq6D+g_P8i#LS%36ot$@(3(K#0+2jNZ#@yb?gH-O z#Joy{lJa~c*KuVQE99l7rlh9mfc*n<Y;kIdLP7$@z<WXhXc901)aFir_TAwVT%+NH zm<quRC(!!IZ-XrrJ!+UqhjfG(_vraD*g`;^9{$e|%Q68Ki%26q89!jfOOGhld<HB0 z1Tpd;A~?a5j<#qf<DKBn_zraocnJ~<C^I9B>w)m0Do}O<aQ5(n_cz6ZcH4oAE2Ijq zhYeC7z?{qiDjpEVf?XLziYv1MK&l~u26iYT^4Qs2(4ZMa64{NoXP!Z$tgz)0t1`s0 z3<%T;AoZZVa7at-$f&~%jdTr-EMQ?mR2>G@f?9_a5O6K7I&34#IPx1UEniT{4_>$d z9+(B!W~s#`3YmEdMX8B7y5;#rIVlQ>1)#l@;2NY@A+ab`p)9qi61oWsESi{;Q^}QD zQ2?55E=$!@@XS*v$w(|wNKPzH)ln!<RVYd=1}#S|$yZ3tEzJSzQ7B1G&dAFw1dR!2 z<|#ntA3+Mz(lV1XQ}ar4D!D*~XDMPt8a%vGoLQ`=rKJ#@nhM<=Q(~16m64clWME{N z2wBw*8efK2e<c~I`9+nGiV3uahpo7zC_gV9Ij!y<!T|wGOgo2CRDwpp;gN|}Dzt#| zIZ~;Jx9rMl0;v|ussm?;48a~&aKb<s2@}YGs6j3qkhU`kL$))aq$EhdBDONk1la^x z!NdtqZwQOPCE9F|8k}wi?VCf{##DlR8`E^KXAu4dZDTSbejC$LW|SRtj3xNDF(G*d zRLH@$#BG9x7`UvJ1dn23%~tS&sRxfDs9DINPh8Qw3D#{uDY)d|OAL!klQR?&^B}#Y z;!JSq1X&K8A=pDm8QkevM?vu>mUS3J;fy}yi8@e7!K#mK2sdUqA+4c<^!c*fF@!Ww zm)dE9mk%N@ssnAaDT0=i`9%sPMTwbtnR)4uG7M=&;Z2ZxAxV-1LlE8u>le$q4Kjvg zZ|}$u%es!1Qt>P@yaHB=>T?e)i*I0y3}K#DfCNlIer8??sA&RSnFE(jNi0dk2$&Bb zA3*|!dUhbf4Q#wv)+dlHB!}D146&?t;J`rSa1z7KEd-PzK<OS*o8}k6^Cx6yG`NBV zRmuwRN*T61GY!%KOfAM-pvum|zyRGDOf4G_VFor_EQ=Fl2gzZ!D?==cl?8vl9W>AY zUC@dxt!aUC8Dv=*w5?N6S^^F?=%Ob?g#-=+cpo-P4&-J?YSJNK3XX~mVuV<h0>~ti zeZM<HEK7zm-$$Y3G<d3kWj072g9Hv}nQw7PYJq|=Qg%x$C@9LWfG!vVw-*&43w?_* z@}4QkkC4!!rLBmR1-4Ku%N%4c$zi)ELoCafvaq$mzK~A=wBQlE`4UgyVJrx?rob>r zi$$=<7R3xul7x;65#=OAlO`(w6r^HVejtkEklmXhmgPli$l`7lWX)t^V91&UB4&d+ zdu&;AKx|OQ50vwvD}yf*QLtiN84S<uJuQyK#ihBRb?=EKpsh*@iAniosS22T^D{xa z_d(}SU@2`u+cw}8xGp#)aG@15(D6UeLYkD)<dW1B(BcM^?X?+#J#92~3@B;9N<I9} zLFBdqP+}0v$^%g(r-}WDrV`TfE28?rMwYsU=A?C<p<3W>2RG4c2qZ~dUFRd{>r@Qb z;OkWKkak(3EWZYC34t%s_VEZtS)C0phM~({f|C<-5{ujug9A{ML5gL#DX{g>sA@nx z?-KA4cGwqsD<f~{1{dJe-VRFr#pIy%%nG&&MxbR5;N{|m1_sdPAS6t1w38uczbN=5 zmSpBBWK<TU7A2P^r9#%2gARqs$tXrzU+&`(3|*EATUrjXS4Sba2y}2tW_})M#YjbF zZf2gkjsi#soZW4W3=A~6Qc{aE)AJN;6_AXCFENL@(bf>8l1o`3759!Bcxx6?5rZ4M zTt%tH1^Ic!so+)T5SzeDuyqvR9MB4LI0w3{9BdYH+mNdmoUY>26N?K#%gMn!P$~m^ zTN7DY53E@OVx$ge)CTMV@Y)to?++}UngTD`z*7X^-J40^^?jKs;1%UbscHE|sS3II zWtn;D3i)|l$_n7q3d&PK`y0zrL2U<x642>B;D!e1AOg@Cjo|aTD)sdAxM2GOpg{=V zQ-!U$M)aNov=#cGMPIPI1P%%6?=3)yad>V=Y%jpsFwo;t1`WZ%$HYn!vs2-LuA7;c zQktBaqEMQboLU6hdR0;hYSiZ|Bqk^4m*$m#N8G>}#?$~jjF(vjPP4^a$_n7(2^5tu z=YV%LAf*sk@<j`+VjTrj18_P(X<Wcpi4xPapmb{kC|}~;-2f`rY}G+iZ#g-sIpD=o z74hZypaoOKwx)=^4>5U4@O=!f;PJ@(B1k2TGRX$5u)(WzsJj_rwC+GXN?^3^fV31~ znJ*7o@Qv0Tqjd*zVNFbre6;RB*?<V$7B>v)4%B{37ZLp!5>_`IMfA*2b|OWnGD8-+ zlok}E7D0Dkg4$!CWLcD$myWd51w8t$U}$cvV`gDusbFYsqGM)hX$WQ*8=9JPK_>b$ zOEMF46hMt($Zim<rWos(m>Zi}nkyLVm{=NHS{Q;D7G}nVCS1WKiA5zaC*&8DWadKK zHwp@d3JO+WTk=YClTwR7ir_8wV$it}3Wg?J;O#MB>p}7$e}EQMr)TCR<|q{87nh_K zW#$(tAkN^+ELKp^HL@_#F)#<|_J`P*nxcTi;f5B*mX?+ZMmpveW=1CF3MM+nhNdQl zmRt%5t$C&C>8T}%^)?{48E`2$=jWBB7Nvuh{#Yp}gan1Uf_;;jM^u;@>X;iDTACXv z80wfC8yOgxgBV5@Mn-1%!pvy+g&7wY(XBer9y%jS12Yo?3p3CjIx`DXV-sU@@E$q? zOEWW5GZOdEjb<27S{}_Xpt5er6fy&oVNffySy(DG<R!0E*!}qrQOS`y{Ag~eYiI%A z|4Gz{B~%NlFIQvnCGx~Fj^RgN2}YC|@NiJ_f(#aehFH=d8$uylLBVGvXMoq-fVP8z zDmhqZAKJ-<c5Goozg#)_`Pm9Nnc1n($sEC+NXpGe9$ZGY0UjP%yFp{fVp%&u6sbeW zzLJdON2Z05u8|>p%Og>d3Dp93Ja{bmIGK?t$A~_d9LWM7OddX)9_hGW5o8s%J!Fu5 zD!BHLA<2Tb`i-pZil8tnrf>sdV#NUN989bj-8h(&Uj*L?OK9WZXd#n9(WYonh8Znn zK>NCh-xCcAv(ZAPBC{CRPWNH6I~lcUbd`vv5%I%QzVb+|y)1ra#6g9SMV2@>)@4b8 z7Q<rOSC=Kt%)o$iQ(cxENFT*p;Ecd~>arB5Xc%a*3-<kVh$SpeT3X<J<_blnd7y=( z3MHAjsi1xUXs`=%jE<F-mV$<YfkJL(9_ZFS1qDMhJrhey1<2WL#gNVB8d=RqLEWQD zl(Dc?NQwlVfLLh+ZcTqDr5^xW`2882&N2jhWbu0ko;nFB%n-{0nTdO;GWcf33h*^T zprOaSbkx&`kX8o!`Xi;<j9u`}J#HwM9l>s4BK5*F=rU(qw;p92g<Nn2b|}maT{15| z@(qIf1hjv%G$|t)<{M}R<m}-Do&B7cnU`9Gw6!8amyv-%PY<-n2{ciiT4ZIV06)+P z<|<4P-Ga)JjQl(<E(HZEm@2CT7wFY;3ISkQ1;}NN;G5yB6fpO+>J?Nf*kBd5OW@)n z!%<nK1(hYKMYvq$1(8+&U8I$ipP!A@O_>Fic}ZBE1(vac+`6HWrND|P<9fnq69|x; z3NJRY)LEhHe;Im&V4;q6a~DD-e8(C>NU+C<^oW`Q&!6C;z!2mToI?VjeH0up2V!oa z0BvW}W5vH%7{?Vb8EoL2g}?`rW?8c`FrZ!lgLIW#XU5zfQLKq;N)Ja`W=<;T;F~Eu zW+}$0hUO{erj{1wMrM|#DaJ|0=1Hj*#)g)u=H@9$Y1l3tEdXCQmZbv<1n^n(zR`>s zVp*C5{DfTcfHkOM(V)>Ih>`!M^hjWcL31ER=w``-TqTyJ2sRrvnMPqtrc}%oNIM^5 zL9Sqrosy-Cluxo?qKJ)@2qD29V|cP8-c4xfG8JSkCFwE=9BjB3{u7ff^9iL(2`uRn zT)Irj@&@U(Of^e2HcClNvM@=qG&C_VGBQasH#9OxGB!y{NlZ&g#Fi)_27p>0Na->j zlrG~5_z5{(f;B{A(SSW&g3eihRJE||t_v-M2_#I^b;KG-b#_{Qeo1Q4lpb+-l81=E zt^>qrunf+)&yr?kV1VB;1*vwy_ZY$)O={IXB@upi?{@6BDf)(hE94$Y(Eg6(5=1GT z5}#BV4=#IZr)14yWnjn>WMyC|?h(hTFf(OJ?G&){A<D2+?C|QL$1}kla@>VNdTJiz zq;$}U1;OBZs&!#<HW?))1;tkS`j8_sbYVwiq-U07lqTtA=G!I2gDW1;UQEz6o{*Cc zklGAc%RwOx*+HNTGZv4Ph&<Xul=2L*tkobJaOPv=@%SDVa9|Q=GC22wPvcM^6bj&z zKv#mCA(piioF9-Hh{_6tLlGQ?@P1E^GBliZ;Q^(aRH=&^2Z$|%aOJ2`iJ=^NgEZV< zS$jZE%}~wQ*~10j^_?=s8&nKHe1V$rdW7J)475--v81#p6?bzv4P?wBP?)G?FeBgN zhQ2*216Qs{0_O_kTh}yt_`v6>KyLE{-?(`!6=YtI7~E;li$Hb3yV)Vm1C<z{(~}XG z5kRjG1?Ou}D;j=%IN|$Ar=-HNGpHy$j(mq`hNibz);w0w(Xd$$KtA7HoV5VV%{Z2^ zyBOIgAV;I5OxU&O85$sC8GHDWON&5vvd2T(#Z&xxcwi!+!+AirBNnHYlw{_m7f<OC z1YMvGz8pTSC_k?xH7{jK4_jCw=!8y0Ry^a^!wF4K`9)LwdN@JLdy7jFa|=M%D?+S^ z2VEXJ#jl48$}KI*nc~;OTaup~pOl!K4U#RM(!-jXS5j0trAG)<*n%3!NRr-+J-nb> zRP#!6<10W%l}zzw?BN4lUsezgy|KP{ieHa3L?ksQ6?E@=aeR4ZNk%;QcF0taG%rLN zA;43V3c3O*J}0#-HD`)9Qx8{0VonK+%i1HDT9H{2UtE${Qd*1<Wlc#<Dovl_*TV<8 zUJ`Uab8$&gYGN+P_a#M%$*CYuP3h?21FzJMPt8lt2i@X4rH8Y$Bu&>sw>UF>N{<Yx zWPEB-QGQW;Mq*w{4yft@?Lf~=E}7E957|S7WC|<Tlqo&3XfkL<WO1-DF!b<2%tg2X zrdtM80!?#|0LTx;If=y?MX3cjiOH!`dU#=1B*la8+3sOV&70CAT$GxeUz8G`k_x)3 zIyEmj6CBcP;G@?-VZ@o45|22npAVcZ5JEjnpi6goQ%Z9S;^7I;uZIsT06u9TFEIxc zb^KtFlA^@CVo>xWgbIpNOH=aWD{?_eN+7kOAip>@9$6<il_ZzMmt_`bmVlEee|$=2 zabi+VYCPPP?63@xq0z$=p8`5CF%P^R8kA0<%Hlyy_TnkAQ+mWetoY2l;?yG0ndb4S zc_7nLrgZdh7bTX%x!#ODf}mU#pOc!GUXl@?lbM@YGR0Rwy@#(LwE$5cgFM3n5&`W2 ziU(zm9tl|8P>@<stOx1o>g5-u>rd$s1*rr(ptL9_z9cobASbaT6?D;RYJsk*fl11g z9=@WqWHjSJA_(KvV8(-X#)6V;c50DcW@<?q*p8I^WPQ-}%=%M$I7<?f;>$s&nojZN z=#ecc%FK<2XHR(P9$#DlN+F#+0>zbiC5aXB@O!hS^swZB4pQjhDb7tSDuG<BQaq)j zM;Ocp-?UO3pOc@Qn3D<)TG`}`#G=IHlGGwdev60PNFEP5(z3K*N@ovWN`5l95Qdfm zojtrM`N^R3i=YDDj6Fi2qN2Do2~8dNh^u(e#q*h<Q><7(<<68Ifz;fj)RcJeA)v(> zsi`GXI(tNubMh0j<5P1JGjrk-Q&Ngji;Gi1&K3ljoSB~&U!0ng1}WA$dw3uwfQ>Jn z(%HkDnpZZ(uQaKL15&)Cg33h!(Ed8m31IP%o2`pM2}!WHG^w~GvjluJetb%58t9I( z9w8J_P}>45%u$q@2Iqh-MbAtDiECsWi=C3OJ24B?!i=2)Zlooa_OOGLLRCPjjbmB& zL2bR;AOhU#18K-Q2I3wDRoOk9AT6MNE!bGFrVg+kKX5Ct1FW{AG()m>iblq<jFVX) zqcTorIWjUZfbUh!TEoo1kOexL0PL77P;)p7WOmkGum!xxNe5&}4{vg22{@mDk}E_6 zR6@YiK>`U`1fni>3Mi@NCgtbAQzKZZNO2{KAY3&kiiw;sTfv%yP|OD%OI-r0T}08% zg32)TaAl^%gEvut3Tp1;{G6Or@KIUCQ+n8)L7OYU!&|jevc%XJ7`&N^Tc-p~>ESC# zEGkZo&rK~Z1|75pihUt?afU1mYV-0HR~DC~=E8&#wJj@jC=K4?hVlh_;yfw~Qj0)I zS^<*46qMkN7mx>GeHS9GGFJkv&dSR#QGjRg6r^)>z=JQvZ1~4cK&_4346&>N0_u8L zp;a$q4+|*eP3d9r^mFqE9Wj?*3c8suL!$?jPgAFO3xWETd0_Lh^4Sn0U(gW143Ts^ zAp+}lkviB(M9}nsort^p4hx!Y0_re=CaVKfp(9#!(17s`Vnl>YY7aL&QGtsc?##U8 eoYIuk_?-N7P@3aP0oB*wEH}juG=N>2qz3>Ug#mN` literal 0 HcmV?d00001 diff --git a/docs/source/_build/doctrees/auto_examples/sensitivity/sg_execution_times.doctree b/docs/source/_build/doctrees/auto_examples/sensitivity/sg_execution_times.doctree new file mode 100644 index 0000000000000000000000000000000000000000..3135a62adb9e9427642a9a6028026e606dcd5b85 GIT binary patch literal 5398 zcmZo*oyslB00uq$#RVCec@=tzDJgmRDXGO%dN@+@lS^|`^Gc>no}$?}rFM!&4`)$g zd2xPeQF7{(9)>AB9LX7(IVnY{c~fGiX!P)b)R$!D6zf3^U@J*1N>4>-&tUDb($iCj zFD}Tah)>Tcicc&p$&XL1NX#wBNiB{qPR%RMEXgd(EUAnyPLEHmNKGy+$;{7-FUibJ zEw-AH!5%xMhbyt9q$o3~v?R3{>>}pOl;SC|Q+n8wa}tY-Q^9Q3yu@4xizB790KrL0 zOwKM!O@pW@N=?g5nbKnla*S?zPLVFiF}g6v=ps2rw>VuF?igLLW2Th$u$LsJgN&Y% z!PUc(lbM$~#hayvtst=o6kr+5J)H5N-~b0-26GP^EYu?OGxBp&^)pKK9SaJI_1!Z| zauSpD3yL#y3o7+f@{^18Au9Dj&Vh%GK9Y0vF~df$sJLWGX;KDf4|{QHGAPX8QI^4) z!3GLAjSS8n){@MUoKz&K9zo~)+=9}QM35E*h|fTZGdO!#LQ*S0F^5e_>lAQm$Y9OT z%}~hD&QQ!?&QS8pkoPN1O3V<bouZK;6gwqDBz8)MSnQMxiP$L_Qn6D?GvqQfGZZq^ zAj&h8GvvM5!EWX(NGwWBFG?)PKz5q9mX?8mm7$rQiKV5MmO@E>Nn(xyJQ~1`RY=P( zQqa;u2`S`Mq@|^hmYD-fI-n3>D=sO@&r3(PhZn^ja3aev=;4IhJq6)gwhV;~XNdEO z@vUQqLWXT=Qief~6mI7ujK`}AWE8T^8BUNKnZep4i#G&d9+JcvN(dKZfIJw6Yz_YC zM0k)L7SQm(>VXTPJ3SR|60y!u0w)a)SW*Ee5!RB#B$Sj3Nz@sfJ!~cEMfs%#NHGeL z0>w6aa(+&6L25FFBu*Ffa3tsFlxL=tWK8jn1*O=^426uc(xi+kSa3s3C&~bBN)6yZ zHUN};lk!t4F+IcC!(5bKjv)>T0oK&Kk|HcxY+&B$iMA?AO|wb>m4XC{<bs_1lKA5M zr2L%t#Jt3u%Bobog31I1jf4d3G6|aCw5O55(8E)ZnwOH9mmXhHl$wU*&>njVZ3o)` zN(GsD;361SQDv}ZYycNz20a$!dJQdKY{8u`G<sOT9_wK)E=ifv!(LpHq6_k9Dth_1 zDMKM+9lk=chpi|zEhRsBN{<doekD-;PwC+V>&s2d%$t(2zlXgjHLawwAazO)Gsqo1 z+(oHrsTBn|naP<YQ#!%Y<%vakQ#!!<ptUpwAq7gOYoHmICqp4)1-R5>QqVwzVGoE0 zl0ptfP=%F~S&~|mn1h@uBylDwNPHXgh+<802;0CV*)3$N@RwvaKrRD2no$#BN)Myv z6p#e6ImDG-+!+cPOYucCD8v?LC}b=sP0CmT%Z$*n1(7+CY9VN9MiPM+wHg016f*uG zI}*QVVMQ#+kv}PSB%6Vrfr76SENWm}xbw0^85tNd6taXt6wyruBu8cmFfuR@=}!F7 zGcQ9SV>Tg^W<rX5+$Qy~fa;Yg-prs#EXh#FC?sTLKCCi><PpEpB!uZ2J%Y)IMi{ht znIW4BYd@jNgWEmD&}J)v0vofPI3*RiHKvlGkiiT|HsC6ky+<;&q98T7Bpy^;6s6`R zr>4XwRmOu`xwTWW+&~e?Q`{qtRaIunl-em7vKc(Z$i9R50%k9~A)KKM3O&XizU0y( zP?I?x((Ik$*TVx70hj20JsicUB_)}8>BUoe1VK$|a1SG`C_k?xH7{jK4_jDbPHAc} zqWsYG>)}jK%}XsxEXgmL;@88Ol30>jT#}euFvYKj8)8j-PG(;A6u%xWD7UmIXNq4B zZ%KY~JgAcZk}aN+vA9PlEkC~`FTW%eN!XjQhZoe!&MVE0uSm-;%AMlP*uz&`Qj}Q` zpPZiyYVj9O@#~R>h@|GEf<@xXGfOh!VVxAe9$ttvLV%|zwIIK!Bt9p#EH!6}H&YK+ zMq&<}%i1HDT9H{2UtE${Qd$gC#M;A}lA2VSKE<zx4^*Ios@UR^qSVA(kiScc5|dLw z-kH+T!<U&?P+Ah7nwOjps)(obaF&*&>00O(XQof-kwKM=Pc16SFN)7d%uC5hEt=8; zYBXmimrUv5&o3=OHH8&y%9I{iG#NA_vho=j7<%|1<|5nx(=CH4fu^}f0OW__oW$ac zqSS(%L{Q(8HzzSKy)-dBH9k2%C3Q*<Q)=Fn9^s<Y<ou$P_>@#ob0ak`IWrX$5p2o% zd1;xTFyhQii7x>4`zoenu=VhPYgmL(4-=?A$eU7{TM!RVa(+F0V1dlMlGLKS#2k=; z{9uuiqQtynQ1l~&3W`%pQ}W|0azTknAhn_(zc@7>StmG^B$vdOWfo^b5+{FrN@g*r zZ5t1FB|9uDWGMIW#HXYdmt^LFJ7}O33RM;l?$?0&y<#9%d}dy8Y7wXt7oVC3GA(6F zM-O*VVmX}a&DbLd%1`k*sd?!o8Sy!pxtS$Xd<E2d_zF@B5E&li86J>GQetsxJSbcA zNMw|h6ck(O>ldUJ6zdgKmSp7T>E#!t>rd$s1*rr(ptL9_z9cobASbaTbxIFML27}n zs)0$$lpemKv}82nK_Up_)nLY_B$gzCl5BQrkzQtMNgCLWl>B7<jFQ|O{V6@1C5cJ# z<&d^HM~`etQD$yDJbS`RtoY&rPzven5h$+AD@m+~&&W*A$jMC4D4Ej3k^}1d_3#wu zCKi>%7nbIO1`#@Xgu#3WH$EpnIWY$^cp#gckyw<NT#{M@$#3zHMrM3&Vo`Q!!IVz$ zfCsos4J`*cdw5gwlQZ+u@}UCWj6Fi2qN2Do2~AyQE-3Nl<R?OMBWM62drFT$YHm_$ zN_=riWlm~wMrtaku_l_Flb@I!pPHMPnG>Iwl2Vik9_Hxi5d@hG8XhT5%}Ik4Xq`Pg z5EH=07f<QzVNT5}o8niR)WZQOUQ$6NqCjR|N@fwLpocX5ia`lUu(&j-xFoX#GUSp1 z8YZco(j$Z-3aSY}!!97x(%>9Wn-w$)11kPwr)2OX7Wc4&Bq3rNka|Nl%axIVA<GF= zmG^Lhq(Kc-kYNx79bkFC(hMQc_<?MO8dzzDT4@h2awLN^^zbHULWV3r2@4_u%F8fy z5bq$1K-9%f0VRrDPzMG@sYr1piXdDyCyFvon5|&*g;2~dE=epZ0o4Pd=w?A>7<#xe zQ{t2JOF`wxlpgNn{G1%fNKNsS9(HG__~a?IQ(C74P3hq)NGvK&jn7RjE>28`q(&il zfrBiZ!P&!CTv=R_nhO&}RD{rxpA2|=6575r=!y2IEJ!T^)p81u6ri94>Lrmp45p-z zS*(zkU!nldekpp0<};`fo^=xx;RJ?-tTPm{t`Shz!wRh!8GBejDQ8L#i>IHPKd5$s zj7MfD!-wHYGvu<aK+Nmmh6fus>2qi1CFhi;q{ipur-M>GR|=@kfEKTywoqx39sv4- B1i=6R literal 0 HcmV?d00001 diff --git a/docs/source/_build/doctrees/auto_examples/simulator/index.doctree b/docs/source/_build/doctrees/auto_examples/simulator/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f957970b9b940d7eed4292ce1aca5e445c25a30a GIT binary patch literal 11909 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 literal 0 HcmV?d00001 diff --git a/docs/source/_build/doctrees/auto_examples/simulator/plot_mass_point_model.doctree b/docs/source/_build/doctrees/auto_examples/simulator/plot_mass_point_model.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c140f59d6194cf424c468620674fccc79d23f480 GIT binary patch literal 24737 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 literal 0 HcmV?d00001 diff --git a/docs/source/_build/doctrees/auto_examples/simulator/plot_ravaflow24.doctree b/docs/source/_build/doctrees/auto_examples/simulator/plot_ravaflow24.doctree new file mode 100644 index 0000000000000000000000000000000000000000..4a05c523a29c6f61a362a20171f1c5238b0368b9 GIT binary patch literal 33188 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 literal 0 HcmV?d00001 diff --git a/docs/source/_build/doctrees/auto_examples/simulator/plot_run_mass_point_model.doctree b/docs/source/_build/doctrees/auto_examples/simulator/plot_run_mass_point_model.doctree new file mode 100644 index 0000000000000000000000000000000000000000..4ca8a0c6ba16ddbfb62de8fc0a42305496a7f31f GIT binary patch literal 40356 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 C>LPvs literal 0 HcmV?d00001 diff --git a/docs/source/_build/doctrees/auto_examples/simulator/plot_run_ravaflow24.doctree b/docs/source/_build/doctrees/auto_examples/simulator/plot_run_ravaflow24.doctree new file mode 100644 index 0000000000000000000000000000000000000000..ced5144e5726a6d694f3dda9e32c709624bc5f94 GIT binary patch literal 51659 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 F0|28(h)Vzf literal 0 HcmV?d00001 diff --git a/docs/source/_build/doctrees/auto_examples/simulator/sg_execution_times.doctree b/docs/source/_build/doctrees/auto_examples/simulator/sg_execution_times.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c995d0c4d37c587e2753f27c28a6944860adede8 GIT binary patch literal 9179 zcmZo*oq9o;0StQhiwiO`^D6WbQ&RHsQ&Nkk^l+r)Czs}?=9NsDJVmo{O6?Sl9?qh~ z^5Xo`qU6*mJq%NNIFd6mb5e>@^QOd3(dgj=sV~XQDb|A;z*dr2l%9&vp26B<p{J)1 zUtEw;5uct@6rWgHk{_R1k(gVMlUf{KoS9pilUR~p6knVkpIVWcTw0QupBG<}nVVW{ zH6?>Rc1jOdVo6C+W>RTMYBAV7%$X_0Q(~v|uqWpv78j?2*{peqxeyjdN@)Rtla!d8 zU6h&zQB#zfmYFi8#~9=k-SnIyU650BVNTJ7J4LrRT^H^YU9eN8l=iTfB&LH5o|3`U z!;+Jkmpa9prH8E`u?Q4c8O%ML@t~jp2VDkp4;w7R!t^upb5r#*O7$HJ3X1jJGfQ$3 zlk^LUGjj_n^;7bbi}fKY^+Aq-hl@VkG5VO{qE}R0GNm*rgR_UdI5im*Uhv4uV9j6y z1)4?%XAf&hW=T#el2nhNbAE0?X-OhTivq-7AjKJ+JuD%q6`(l7rlfTWI2~lLX6R-p zWN2q7W-w<c`DMual_n)-2-Hr|$PkL1k|7d1B||KBN`^%2lnklZDWw^58JZai8EO#a z8Oj;*-t1sEa~32PC8if87Gxkh%~MOuz{1MZNYC8RNJ~qhB)=pvM*$uQV8<$?<rgVv zX`zG@BK>G-DWqlQz!D9}|7^u2MfrK@$hPpJ*aA*o83sL^aGR$f{K}T0kl_q*JTZQC z%uvX%EltWW=#j$hc!cqIRe_8`wmHKIk`psnd!+IBALbo#93h0TJp<&qFk~z6M<l{? z?65$F2UHJS2;JGKcoT<ph7veYaKI7?IB~F+BqpJxSx9ou;Ot>5NiWJTEkKG*h!iNM z*^~2giVIScF(h%ipob$lKc_r1r6gmDcP1#UR%R$<l$9oBRKbE8VmeU<a8qgk2eJX6 zjGL67Qi<UikWZP5^2@PGu%_mf6k+Pguz~rfC)lbeHO(pkRQTa7hYND@OX7<X%M#Oa z^2?1(^a?5y6f_bNum~q;f|Hy^215@|L26z~W?p)HMNw)Rk^_6J$hQ@2I4I^b^T5R| ztU}6Q&Da1gwhSOeIf=eO%LZF;X9JBM7O;1En2SqNru48Em!#-|yqAhz&~3_4$XJK3 zH0)t3N=-}2PoC0)T72Ox=BM;<f_3F4X68-F*x$oml$usjS&%xVhZ*FG9`2&lwA6}% zoXq6Rk|~{F>GH&)yeS=Eeb8!{ydVOl$2HIl%9Ejxu>xGOF)3&u0<Q<e14$u=AE-*o z$t+1NO3Xn{1Y+2e4<v#OdW1037Q!BIS#=B968vS=4Un6_&Slg@n9{?jIRzwvYz}ed z6L*F}#!`H73ks{n844K-N|Q2{z;YY3^g!f3P6JabQ!_n7Q*)TFkwoByX~w?{g^WMQ zj>PX-SRo2><WI^S$!4Hupy2BSb0LficV3n#BLhQ*LY6RyBDxuX<j5=mMg|5V-HAVX z=4B{k%q~sJn2#Fb8hD~0nxvwrG!JJXh#>_p2-m_~(_=@OWsoS?3^Ojv5)|U>u~RY( zdd!I|!O>lb$PAz?m1PYw5oa7~Wb7lR)XOp_5TEdZFXJ@0R7%MQmu6Y6j0_Cm5{sw; zE#o5jz6NDaSW(88p^#+^c5#LQxcq{rY%mWhi=6#3Zo;CVM+#Pmp$BY20wlH!dc+_F z8M*?rkdMI|^5}KT4XCRyinNS3P#I+R;?Fd&oXDG@kYxZ42mHm$;tYi>U9dVl*^1M^ z$ja1M&)Coc77R!t@Bq%L2l-kds}@AzOm^s=M|N-(*dbJKFsxXEwjp3#gj1)1+^CQ> z1w@hM)QKcH6@Q$OQP8E6TK42778l1C<Y(rU#OLOxq~@Tu`AYNRu_?e(=($kCVn`}N z6n(ou(ZCKa`fQ0W`mnedEgS9unTs=ei7fzk5Qu7A1>iAK3qT6}j$8~1WGG~90lOPl zF$j`HE>@6=K?S5@5KAB<3PTxqVTeT;T3p=48yD!M0;os?xe$Ai2$Df|JO1niD`EIE z6tXsg!-Q}Nvkt5dZ;@zVWnidhW`We$gNq=_83rbBYw90Ko=0}@Z?HqC;9yu8h_gr( zhd5OfMB&Uc=<$T?R3Rp!8h%-ju*Dx|WE6?<q?Alp(kr41j7<_tQRqOah3LhgH7MvI z#h@i|#UK`!qGdZ<keN86lh`8Al0ekrDgxb^NNfXA;BVyOPbfnn%M|QpT*V(q7P$yP zD*j}k#UGZyMHGD!;Gz$U614D-!yEqS*$Gtafn0{Y*aOKRyBU8Lf@Mv?423Ksa99v7 zMfAby2p4;%rUsD23mRDk7keNPM6uTh^0h)%J&3}Y_|QF%?BE)(L#W_jg2mnpkQ)`U zrhzE3oI05#r{a$@Xt9T1(M-rVCT>MNETF;CDc;PWEK!o7kWomeKb{X8p@j?x`IROi zOxNfUOh(KpK<7#_WK&_&0jToeVf<p~3=H03JIqOsDXGX)3o0238O)I64jx5j?~zQc zC`e5%i3bge6{Y4Sr>4XwRmOuSY-*=uodm@oPjQbpR#llPQ);JV$Y$^qBl`{J2bjI^ zIh_n;P}ni{@FkZPfo6Z=Au~8r{Cap`BH#f_zaEa_)RL0Sy!7HJJ%XUwA@D?5T2X#p zNoroolpeOQ#GKO9V#H9Hre6<ddTL&35oktiieC?BN@7WBaY<rs!4$t9ZiqGUIhlFc zQ~Y|kpxn};oGE@iye0X`@u1l*kZkdkjKw`dY5DmjdHE%&NW$KXJ-nbPqrB4G_=>dr zqTDIoj6HnCB}JJ9@yYqQpvkM^DSkcD5RufJRIo^Vd1gsQJZ!ejuZI^RjS%1|N-fAQ zDv8fYElbUr;?2~<m64bO=d$()rdDK@#21$&mXsF56tVWOrlcm7rcd$f;R6j@f(DO^ zONvqxb3y(tDN0OE1$k#mM-N|SUO{O|d}>~DK4^$}N)KmgNt&*OZgFP%lpYyW$@tWw zqWq%xjKsW@oYbNzJ)k+D%;b_OJ^cBlC8(ybf=!vyBa0@3W<=H}P&LH|F&E(mm~I(V z2{g?;0w6yW=Oh+q6r~pAB!Z?;d2<r;(n}N5Q{$8KQ&Ok&Fs0^A=@BkUP0lY$iBCxd z4Wy^$C1<9BB7!YBKQAp46h@qxDe(oM3CxNq8Eid#;3*!2P!AJmVv{$eG`Aogp5**` z_`m|0c_pbud5Jk71Np%sB}IvO#h~a%2o)5kmZs##SLA{clR#=kL4I*+JhD!3DoHMh zFUu^>EXgmL;@86;pORS&ny!h5yOJH26*822c;Zu1i%T-|z_X2@6be-q51yt2P2h@w zSn-*8#i>Q08Oiw6JdkNAQ#yLMixSJ>TyMr6K~R2*&q>WoFUg3{$;{0xnc^#;-osar zT7by#AkXlCM3NGVQ{zF|qDLa5q@<wON?*SqwV+t9pt2+*KTj{eC|!R_k0?kb*a4+Q zIq@Z_xdl0iC8<+-I0{k=bX5&ZQl|9q6{RJk84nUc7_SC1J|(dv5tL-JQ;YO6Q%lmo zcBJGd>t~eY=IBr9;Vel^iZ6#uH*xgHmK0^?#>2BGyu^wxE&!#F&K`l{%Dj@qiujDo z^o*R$^o)`zJuEq(smvap;@rfdlK8^Xe9&xoM~^U=58=k=<R>TQKxV;ZlQR;F5|c|( ziy-+e9x{g#pPN{eU0N`u6FhGZo*#ym1D!p*Df!8nd1?7j0dK}0Ay83KT$+TYE;ARD zcysa-A-NGW7oI((M<6vfDK#a&xTG>CwKyX+6*MIwnw*oLm>r**o0ypspO}(TlnS1& z@8}T(nGBleFHX%#gA{0;Jv<N-z{VF(>Fi-n%`2PYSDMtr0V!TmL5WTvGcP5x2vpER zCOC>g2}!WHG^w~GvjnnsASE>ov{0Z&2t^cB6M%&|ic-_y9MHTBXgL9>_>Y~E!IN0r z!w!;!h-pCT4cV*{ObiTJM?rOY4<|?(G-?Sl45FX|EbmvEAq1KXm(5TEE6q?V?cqg^ zWRQj)-sDWk{5vRNK}0}#8Kw^69b^%Ry4We8M3I}6p94=fV5K6(l_-L6)to3Ma>8r{ zYZ5{+zqll^s036Gh@zVXm0{@N%1nt*&MyU(BU5^~lk;<OAj=Mlr}VHpL&Yagsh!d~ zC1^?yUqNC~acX>SYH@L5IwUm;!3!K@;SA0mzT(Q_lGI$7D54^SE@MDUUqUBT40<9x zDhpDJK((9#Bn2oafx1H^uIErv$ShXK%P&!YXTB6Yw8nW1GvOYqb%sJ#Bms3jtk7za zv4;heZl?6Gc>1~dgX$*8qM8h4_<EAk47sduh<QES@IV76eD2J=<ebu!)cBnIbWob- RN&(dv(83ke5-Ls70|253I57YK literal 0 HcmV?d00001 diff --git a/docs/source/_build/html/_sources/auto_examples/emulator/index.rst.txt b/docs/source/_build/html/_sources/auto_examples/emulator/index.rst.txt new file mode 100644 index 0000000..4327595 --- /dev/null +++ b/docs/source/_build/html/_sources/auto_examples/emulator/index.rst.txt @@ -0,0 +1,75 @@ +:orphan: + +Emulator +======== + + +.. raw:: html + + <div class="sphx-glr-thumbnails"> + + +.. raw:: html + + <div class="sphx-glr-thumbcontainer" tooltip="PPGaSP: GP emulation for multi-output functions"> + +.. only:: html + + .. image:: /auto_examples/emulator/images/thumb/sphx_glr_plot_ppgasp_thumb.png + :alt: PPGaSP: GP emulation for multi-output functions + + :ref:`sphx_glr_auto_examples_emulator_plot_ppgasp.py` + +.. raw:: html + + <div class="sphx-glr-thumbnail-title">PPGaSP: GP emulation for multi-output functions</div> + </div> + + +.. raw:: html + + <div class="sphx-glr-thumbcontainer" tooltip="ScalarGaSP: GP emulation for a single-output function"> + +.. only:: html + + .. image:: /auto_examples/emulator/images/thumb/sphx_glr_plot_scalargasp_thumb.png + :alt: ScalarGaSP: GP emulation for a single-output function + + :ref:`sphx_glr_auto_examples_emulator_plot_scalargasp.py` + +.. raw:: html + + <div class="sphx-glr-thumbnail-title">ScalarGaSP: GP emulation for a single-output function</div> + </div> + + +.. raw:: html + + </div> + + +.. toctree:: + :hidden: + + /auto_examples/emulator/plot_ppgasp + /auto_examples/emulator/plot_scalargasp + + +.. only:: html + + .. container:: sphx-glr-footer sphx-glr-footer-gallery + + .. container:: sphx-glr-download sphx-glr-download-python + + :download:`Download all examples in Python source code: emulator_python.zip </auto_examples/emulator/emulator_python.zip>` + + .. container:: sphx-glr-download sphx-glr-download-jupyter + + :download:`Download all examples in Jupyter notebooks: emulator_jupyter.zip </auto_examples/emulator/emulator_jupyter.zip>` + + +.. only:: html + + .. rst-class:: sphx-glr-signature + + `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.github.io>`_ diff --git a/docs/source/_build/html/_sources/auto_examples/emulator/plot_ppgasp.rst.txt b/docs/source/_build/html/_sources/auto_examples/emulator/plot_ppgasp.rst.txt new file mode 100644 index 0000000..e1b86d5 --- /dev/null +++ b/docs/source/_build/html/_sources/auto_examples/emulator/plot_ppgasp.rst.txt @@ -0,0 +1,280 @@ + +.. DO NOT EDIT. +.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. +.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: +.. "auto_examples/emulator/plot_ppgasp.py" +.. LINE NUMBERS ARE GIVEN BELOW. + +.. only:: html + + .. note:: + :class: sphx-glr-download-link-note + + Click :ref:`here <sphx_glr_download_auto_examples_emulator_plot_ppgasp.py>` + to download the full example code + +.. rst-class:: sphx-glr-example-title + +.. _sphx_glr_auto_examples_emulator_plot_ppgasp.py: + + +PPGaSP: GP emulation for multi-output functions +=============================================== + +.. GENERATED FROM PYTHON SOURCE LINES 9-23 + +This example shows how to apply Gaussian process emulation to a multi-output +function using class :class:`.PPGaSP`. + +The multi-output function that we are going to look at is the `DIAMOND` +(diplomatic and military operations in a non-warfighting domain) computer model. +It is used as a testbed to illustrate the `PP GaSP` emulator in the `R` package +`RobustGaSP`, see :cite:t:`Gu2019` for more detail. + +The simulator has :math:`13` input parameters and :math:`5` outputs. Namely, +:math:`\mathbf{y}=f(\mathbf{x})` where :math:`\mathbf{x}=(x_1,\ldots,x_{13})^T` +and :math:`\mathbf{y}=(y_1,\ldots,y_5)^T`. + +The training and testing data are provided in the folder '.../tests/data/'. +We first load the training and testing data. + +.. GENERATED FROM PYTHON SOURCE LINES 24-40 + +.. code-block:: default + + + import numpy as np + import os + + dir_data = os.path.abspath('../../../tests/data/') + + humanityX = np.genfromtxt(os.path.join(dir_data, 'humanityX.csv'), delimiter=',') + humanityY = np.genfromtxt(os.path.join(dir_data, 'humanityY.csv'), delimiter=',') + print(f"Number of training data points: ", humanityX.shape[0]) + print(f"Input dimension: ", humanityX.shape[1]) + print(f"Output dimension: ", humanityY.shape[1]) + + humanityXt = np.genfromtxt(os.path.join(dir_data, 'humanityXt.csv'), delimiter=',') + humanityYt = np.genfromtxt(os.path.join(dir_data, 'humanityYt.csv'), delimiter=',') + print(f"Number of testing data points: ", humanityXt.shape[0]) + + + + + +.. rst-class:: sphx-glr-script-out + + .. code-block:: none + + Number of training data points: 120 + Input dimension: 13 + Output dimension: 5 + Number of testing data points: 120 + + + + +.. GENERATED FROM PYTHON SOURCE LINES 41-43 + +.. note:: You may need to modify ``dir_data`` according to where you save them + on your local machine. + +.. GENERATED FROM PYTHON SOURCE LINES 45-50 + +``humanityX`` and ``humanitY`` are the training data, corresponding to ``design`` +and ``response`` respectively. ``humanityXt`` are testing input data, at which +we are going to make predictions once the emulator is trained. ``humanityYt`` +are the true outputs at ``humanityXt``, which is then used to validate the +performance of the trained emulator. + +.. GENERATED FROM PYTHON SOURCE LINES 52-54 + +To build a `PP GaSP` emulator for the above simulator, first import class +:class:`.PPGaSP` by + +.. GENERATED FROM PYTHON SOURCE LINES 55-58 + +.. code-block:: default + + + from psimpy.emulator import PPGaSP + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 59-63 + +Then, create an instance of :class:`.PPGaSP`. The parameter ``ndim`` +(dimension of function input ``x``) must be specified. Optional parameters, such +as ``method``, ``kernel_type``, etc., can be set up if desired. Here, we leave +all the optional parameters to their default values. + +.. GENERATED FROM PYTHON SOURCE LINES 64-68 + +.. code-block:: default + + + emulator = PPGaSP(ndim=humanityX.shape[1]) + + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 69-71 + +Next, we train the `PP GaSP` emulator based on the training data using +:py:meth:`.PPGaSP.train` method. + +.. GENERATED FROM PYTHON SOURCE LINES 72-75 + +.. code-block:: default + + + emulator.train(design=humanityX, response=humanityY) + + + + + +.. rst-class:: sphx-glr-script-out + + .. code-block:: none + + The upper bounds of the range parameters are 296,974 297,1814 294,7672 295,9345 296,563 295,935 297,3198 296,4444 296,9323 298,2373 298,0619 298,7249 298,7249 + The initial values of range parameters are 5,93948 5,943628 5,895344 5,918691 5,93126 5,918701 5,946395 5,928888 5,938645 5,964745 5,961238 5,974498 5,974498 + Start of the optimization 1 : + The number of iterations is 44 + The value of the marginal posterior function is -5279,534 + Optimized range parameters are 25,46132 2,891428 5,30812 26,95519 291,1828 48,17274 84,56133 2,874385 39,12121 51,81304 0,5407651 1,728696 1,020605 + Optimized nugget parameter is 0 + Convergence: TRUE + The initial values of range parameters are 12,37503 12,38367 12,28307 12,33172 12,3579 12,33174 12,38944 12,35296 12,37329 12,42767 12,42037 12,44799 12,44799 + Start of the optimization 2 : + The number of iterations is 45 + The value of the marginal posterior function is -5279,534 + Optimized range parameters are 25,46132 2,891428 5,308121 26,95519 291,183 48,17274 84,56133 2,874385 39,12121 51,81304 0,5407651 1,728696 1,020605 + Optimized nugget parameter is 0 + Convergence: TRUE + + + + +.. GENERATED FROM PYTHON SOURCE LINES 76-79 + +With the trained emulator, we can make predictions for any arbitrary set of +input points using :py:meth:`PPGaSP.predict` method. +Here, we make predictions at testing input points ``humanityXt``. + +.. GENERATED FROM PYTHON SOURCE LINES 80-83 + +.. code-block:: default + + + predictions = emulator.predict(humanityXt) + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 84-86 + +We can validate the performance of the trained emulator based on the true outputs +``humanityYt``. + +.. GENERATED FROM PYTHON SOURCE LINES 87-106 + +.. code-block:: default + + + import matplotlib.pyplot as plt + + fig, ax = plt.subplots(5, 1, figsize=(6,15)) + + for i in range(humanityY.shape[1]): + + ax[i].set_xlabel(f'Actual $y_{i+1}$') + ax[i].set_ylabel(f'Emulator-predicted $y_{i+1}$') + ax[i].set_xlim(np.min(humanityYt[:,i]),np.max(humanityYt[:,i])) + ax[i].set_ylim(np.min(humanityYt[:,i]),np.max(humanityYt[:,i])) + + _ = ax[i].plot([np.min(humanityYt[:,i]),np.max(humanityYt[:,i])], [np.min(humanityYt[:,i]),np.max(humanityYt[:,i])]) + _ = ax[i].errorbar(humanityYt[:,i], predictions[:,i,0], predictions[:,i,3], fmt='.', linestyle='', label='prediction and std') + _ = ax[i].legend() + + plt.tight_layout() + + + + + +.. image-sg:: /auto_examples/emulator/images/sphx_glr_plot_ppgasp_001.png + :alt: plot ppgasp + :srcset: /auto_examples/emulator/images/sphx_glr_plot_ppgasp_001.png + :class: sphx-glr-single-img + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 107-109 + +We can also draw any number of samples at testing input ``humanityXt`` using +:py:meth:`.PPGaSPsample()` method. + +.. GENERATED FROM PYTHON SOURCE LINES 110-112 + +.. code-block:: default + + + samples = emulator.sample(humanityXt, nsamples=10) + print("Shape of samples: ", samples.shape) + + + +.. rst-class:: sphx-glr-script-out + + .. code-block:: none + + Shape of samples: (120, 5, 10) + + + + + +.. rst-class:: sphx-glr-timing + + **Total running time of the script:** ( 0 minutes 5.333 seconds) + + +.. _sphx_glr_download_auto_examples_emulator_plot_ppgasp.py: + +.. only:: html + + .. container:: sphx-glr-footer sphx-glr-footer-example + + + .. container:: sphx-glr-download sphx-glr-download-python + + :download:`Download Python source code: plot_ppgasp.py <plot_ppgasp.py>` + + .. container:: sphx-glr-download sphx-glr-download-jupyter + + :download:`Download Jupyter notebook: plot_ppgasp.ipynb <plot_ppgasp.ipynb>` + + +.. only:: html + + .. rst-class:: sphx-glr-signature + + `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.github.io>`_ diff --git a/docs/source/_build/html/_sources/auto_examples/emulator/plot_scalargasp.rst.txt b/docs/source/_build/html/_sources/auto_examples/emulator/plot_scalargasp.rst.txt new file mode 100644 index 0000000..95b144b --- /dev/null +++ b/docs/source/_build/html/_sources/auto_examples/emulator/plot_scalargasp.rst.txt @@ -0,0 +1,289 @@ + +.. DO NOT EDIT. +.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. +.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: +.. "auto_examples/emulator/plot_scalargasp.py" +.. LINE NUMBERS ARE GIVEN BELOW. + +.. only:: html + + .. note:: + :class: sphx-glr-download-link-note + + Click :ref:`here <sphx_glr_download_auto_examples_emulator_plot_scalargasp.py>` + to download the full example code + +.. rst-class:: sphx-glr-example-title + +.. _sphx_glr_auto_examples_emulator_plot_scalargasp.py: + + +ScalarGaSP: GP emulation for a single-output function +===================================================== + +.. GENERATED FROM PYTHON SOURCE LINES 8-13 + +This example shows how to apply Gaussian process emulation to a single-output +function using class :class:`.ScalarGaSP`. + +The task is to build a GP emulator for the function :math:`y = x * sin(x)` +based on a few number of training data. + +.. GENERATED FROM PYTHON SOURCE LINES 16-17 + +First, import the class :class:`.ScalarGaSP` by + +.. GENERATED FROM PYTHON SOURCE LINES 18-21 + +.. code-block:: default + + + from psimpy.emulator import ScalarGaSP + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 22-26 + +Then, create an instance of :class:`.ScalarGaSP`. The parameter ``ndim`` +(dimension of function input ``x``) must be specified. Optional parameters, such +as ``method``, ``kernel_type``, etc., can be set up if desired. Here, we leave +all the optional parameters to their default values. + +.. GENERATED FROM PYTHON SOURCE LINES 27-30 + +.. code-block:: default + + + emulator = ScalarGaSP(ndim=1) + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 31-34 + +Given training input points ``design`` and corresponding output values ``response``, +the emulator can be trained using :py:meth:`.ScalarGaSP.train`. Below we train +an emulator using :math:`8` selected points. + +.. GENERATED FROM PYTHON SOURCE LINES 35-47 + +.. code-block:: default + + + import numpy as np + + def f(x): + #return x + 3*np.sin(x/2) + return x*np.sin(x) + + x = np.arange(2,10,1) + y = f(x) + + emulator.train(design=x, response=y) + + + + + +.. rst-class:: sphx-glr-script-out + + .. code-block:: none + + The upper bounds of the range parameters are 1881,404 + The initial values of range parameters are 37,62809 + Start of the optimization 1 : + The number of iterations is 9 + The value of the marginal posterior function is -13,79116 + Optimized range parameters are 2,237467 + Optimized nugget parameter is 0 + Convergence: TRUE + The initial values of range parameters are 0,21875 + Start of the optimization 2 : + The number of iterations is 9 + The value of the marginal posterior function is -13,79116 + Optimized range parameters are 2,237467 + Optimized nugget parameter is 0 + Convergence: TRUE + + + + +.. GENERATED FROM PYTHON SOURCE LINES 48-50 + +We can validate the performance of the trained emulator using the leave-one-out +cross validation method :py:meth:`loo_validate()`. + +.. GENERATED FROM PYTHON SOURCE LINES 51-54 + +.. code-block:: default + + + validation = emulator.loo_validate() + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 55-57 + +Let's plot emulator predictions vs actual outputs. The error bar indicates the +standard deviation. + +.. GENERATED FROM PYTHON SOURCE LINES 58-74 + +.. code-block:: default + + + import matplotlib.pyplot as plt + + fig , ax = plt.subplots(figsize=(4,4)) + + ax.set_xlabel('Actual y') + ax.set_ylabel('Emulator-predicted y') + ax.set_xlim(np.min(y)-1,np.max(y)+1) + ax.set_ylim(np.min(y)-1,np.max(y)+1) + + _ = ax.plot([np.min(y)-1,np.max(y)+1], [np.min(y)-1,np.max(y)+1]) + _ = ax.errorbar(y, validation[:,0], validation[:,1], fmt='.', linestyle='', label='prediction and std') + _ = plt.legend() + plt.tight_layout() + + + + + +.. image-sg:: /auto_examples/emulator/images/sphx_glr_plot_scalargasp_001.png + :alt: plot scalargasp + :srcset: /auto_examples/emulator/images/sphx_glr_plot_scalargasp_001.png + :class: sphx-glr-single-img + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 75-80 + +With the trained emulator at our deposit, we can use the +:py:meth:`.ScalarGaSP.predict()` method to make predictions at +any arbitrary set of input points (``testing_input``). It should be noted that, +``testing_trend`` should be set according to ``trend`` used during emulator +training. + +.. GENERATED FROM PYTHON SOURCE LINES 81-95 + +.. code-block:: default + + + testing_input = np.arange(0,10,0.1) + predictions = emulator.predict(testing_input) + + plt.plot(testing_input, predictions[:, 0], 'r-', label= "mean") + plt.scatter(x, y, s=15, c='k', label="training data", zorder=3) + plt.plot(testing_input, f(testing_input), 'k:', zorder=2, label="true function") + plt.fill_between(testing_input, predictions[:, 1], predictions[:, 2], alpha=0.3, label="95% CI") + plt.xlabel('x') + plt.ylabel('emulator-predicted y') + plt.xlim(testing_input[0], testing_input[-1]) + _ = plt.legend() + plt.tight_layout() + + + + +.. image-sg:: /auto_examples/emulator/images/sphx_glr_plot_scalargasp_002.png + :alt: plot scalargasp + :srcset: /auto_examples/emulator/images/sphx_glr_plot_scalargasp_002.png + :class: sphx-glr-single-img + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 96-98 + +We can also draw any number of samples at ``testing_input``` using +:py:meth:`.ScalarGaSP.sample()` method. + +.. GENERATED FROM PYTHON SOURCE LINES 99-117 + +.. code-block:: default + + + nsamples = 5 + samples = emulator.sample(testing_input, nsamples=nsamples) + + # sphinx_gallery_thumbnail_number = 3 + for i in range(nsamples): + plt.plot(testing_input, samples[:,i], '--', label=f'sample{i+1}') + + plt.scatter(x, y, s=15, c='k', label="training data", zorder=2) + plt.plot(testing_input, f(testing_input), 'k:', zorder=2, label="true function") + plt.fill_between(testing_input, predictions[:, 1], predictions[:, 2], alpha=0.3, label="95% CI") + plt.xlabel('x') + plt.ylabel('emulator-predicted y') + plt.xlim(testing_input[0], testing_input[-1]) + _ = plt.legend() + plt.tight_layout() + + + + + +.. image-sg:: /auto_examples/emulator/images/sphx_glr_plot_scalargasp_003.png + :alt: plot scalargasp + :srcset: /auto_examples/emulator/images/sphx_glr_plot_scalargasp_003.png + :class: sphx-glr-single-img + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 118-124 + +.. tip:: Above example shows how to train a GP emulator based on noise-free training data, + which is often the case of emulating a deterministic simulator. If you are dealing + with noisy training data, you can + + - set the parameter ``nugget`` to a desired value, or + - set ``nugget`` to :math:`0` and ``nugget_est`` to `True`, meaning that ``nugget`` + is estimated from the noisy training data. + + +.. rst-class:: sphx-glr-timing + + **Total running time of the script:** ( 0 minutes 0.728 seconds) + + +.. _sphx_glr_download_auto_examples_emulator_plot_scalargasp.py: + +.. only:: html + + .. container:: sphx-glr-footer sphx-glr-footer-example + + + .. container:: sphx-glr-download sphx-glr-download-python + + :download:`Download Python source code: plot_scalargasp.py <plot_scalargasp.py>` + + .. container:: sphx-glr-download sphx-glr-download-jupyter + + :download:`Download Jupyter notebook: plot_scalargasp.ipynb <plot_scalargasp.ipynb>` + + +.. only:: html + + .. rst-class:: sphx-glr-signature + + `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.github.io>`_ diff --git a/docs/source/_build/html/_sources/auto_examples/emulator/sg_execution_times.rst.txt b/docs/source/_build/html/_sources/auto_examples/emulator/sg_execution_times.rst.txt new file mode 100644 index 0000000..92925ce --- /dev/null +++ b/docs/source/_build/html/_sources/auto_examples/emulator/sg_execution_times.rst.txt @@ -0,0 +1,14 @@ + +:orphan: + +.. _sphx_glr_auto_examples_emulator_sg_execution_times: + +Computation times +================= +**00:06.062** total execution time for **auto_examples_emulator** files: + ++------------------------------------------------------------------------------------+-----------+--------+ +| :ref:`sphx_glr_auto_examples_emulator_plot_ppgasp.py` (``plot_ppgasp.py``) | 00:05.333 | 0.0 MB | ++------------------------------------------------------------------------------------+-----------+--------+ +| :ref:`sphx_glr_auto_examples_emulator_plot_scalargasp.py` (``plot_scalargasp.py``) | 00:00.728 | 0.0 MB | ++------------------------------------------------------------------------------------+-----------+--------+ diff --git a/docs/source/_build/html/_sources/auto_examples/inference/index.rst.txt b/docs/source/_build/html/_sources/auto_examples/inference/index.rst.txt new file mode 100644 index 0000000..8df5785 --- /dev/null +++ b/docs/source/_build/html/_sources/auto_examples/inference/index.rst.txt @@ -0,0 +1,75 @@ +:orphan: + +Inference +========= + + +.. raw:: html + + <div class="sphx-glr-thumbnails"> + + +.. raw:: html + + <div class="sphx-glr-thumbcontainer" tooltip="Bayesian inference"> + +.. only:: html + + .. image:: /auto_examples/inference/images/thumb/sphx_glr_plot_bayes_inference_thumb.png + :alt: Bayesian inference + + :ref:`sphx_glr_auto_examples_inference_plot_bayes_inference.py` + +.. raw:: html + + <div class="sphx-glr-thumbnail-title">Bayesian inference</div> + </div> + + +.. raw:: html + + <div class="sphx-glr-thumbcontainer" tooltip="Active learning"> + +.. only:: html + + .. image:: /auto_examples/inference/images/thumb/sphx_glr_plot_active_learning_thumb.png + :alt: Active learning + + :ref:`sphx_glr_auto_examples_inference_plot_active_learning.py` + +.. raw:: html + + <div class="sphx-glr-thumbnail-title">Active learning</div> + </div> + + +.. raw:: html + + </div> + + +.. toctree:: + :hidden: + + /auto_examples/inference/plot_bayes_inference + /auto_examples/inference/plot_active_learning + + +.. only:: html + + .. container:: sphx-glr-footer sphx-glr-footer-gallery + + .. container:: sphx-glr-download sphx-glr-download-python + + :download:`Download all examples in Python source code: inference_python.zip </auto_examples/inference/inference_python.zip>` + + .. container:: sphx-glr-download sphx-glr-download-jupyter + + :download:`Download all examples in Jupyter notebooks: inference_jupyter.zip </auto_examples/inference/inference_jupyter.zip>` + + +.. only:: html + + .. rst-class:: sphx-glr-signature + + `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.github.io>`_ diff --git a/docs/source/_build/html/_sources/auto_examples/inference/plot_active_learning.rst.txt b/docs/source/_build/html/_sources/auto_examples/inference/plot_active_learning.rst.txt new file mode 100644 index 0000000..f98c7f2 --- /dev/null +++ b/docs/source/_build/html/_sources/auto_examples/inference/plot_active_learning.rst.txt @@ -0,0 +1,1155 @@ + +.. DO NOT EDIT. +.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. +.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: +.. "auto_examples/inference/plot_active_learning.py" +.. LINE NUMBERS ARE GIVEN BELOW. + +.. only:: html + + .. note:: + :class: sphx-glr-download-link-note + + Click :ref:`here <sphx_glr_download_auto_examples_inference_plot_active_learning.py>` + to download the full example code + +.. rst-class:: sphx-glr-example-title + +.. _sphx_glr_auto_examples_inference_plot_active_learning.py: + + +Active learning +=============== + +.. GENERATED FROM PYTHON SOURCE LINES 8-18 + +This example shows how to use the :class:`.ActiveLearning` class to iteratively +build a Gaussian process emulator for an unnormalized posterior involving a +simulator. It should be noted that this example is only for illustration +purpose, rather than a real case. For simplicity, required arguments for +:class:`.ActiveLearning` (including `simulator`, `likelihood`, `data`, etc.) are purely +made up. For a realistic case of active learning, one can refer to :cite:t:`Zhao2022`. + +First, we define the simulator, prior distribution of its variable parameters, +observed data, and likelihood function. They basically define the Bayesian +inference problem. + +.. GENERATED FROM PYTHON SOURCE LINES 19-39 + +.. code-block:: default + + + import numpy as np + + ndim = 2 # dimension of variable parameters of the simulator + bounds = bounds = np.array([[-5,5],[-5,5]]) # bounds of variable parameters + data = np.array([1,0]) + + def simulator(x1, x2): + """Simulator y=f(x).""" + y1, y2 = x1, x2 + return np.array([y1, y2]) + + def prior(x): + """Uniform prior.""" + return 1/(10*10) + + def likelihood(y, data): + """Likelihood function L(y,data).""" + return np.exp(-(y[0]-data[0])**2/100 - (y[0]**2-y[1]-data[1])**2) + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 40-56 + +Imagine that the simulator is a complex solver. It is not computationally feasible +to compute the posterior distribution of the variable parameters using grid estimation +or Metropolis Hastings estimation. This is because they require evaluating the likelihood +many times which essentially leads to many evaluations of the simulator. Therefore, we +resort to use active learning to build a Gaussian process emulator for the unnormalized +posterior (prior times likelihood) based on a small number of evaluations of the simulator. +The the posterior can be estimated using the emulator. + +To do so, we need to pass arguments to following parameters of the :class:`.ActiveLearning` class: + + - run_sim_obj : instance of class :class:`.RunSimulator`. It carries information on how + to run the simulator. + - lhs_sampler : instance of class :class:`.LHS`. It is used to draw initial samples to run + simulations in order to train an inital Gaussian process emulator. + - scalar_gasp : instance of class :class:`.ScalarGaSP`. It sets up the emulator structure. + + +.. GENERATED FROM PYTHON SOURCE LINES 57-66 + +.. code-block:: default + + + from psimpy.simulator import RunSimulator + from psimpy.sampler import LHS + from psimpy.emulator import ScalarGaSP + + run_simulator = RunSimulator(simulator, var_inp_parameter=['x1','x2']) + lhs_sampler = LHS(ndim=ndim, bounds=bounds, seed=1) + scalar_gasp = ScalarGaSP(ndim=ndim) + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 67-68 + +Next, we create an object of the :class:`.ActiveLearning` class by + +.. GENERATED FROM PYTHON SOURCE LINES 69-75 + +.. code-block:: default + + + from psimpy.inference import ActiveLearning + + active_learner = ActiveLearning(ndim, bounds, data, run_simulator, prior, likelihood, + lhs_sampler, scalar_gasp) + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 76-81 + +Then we can call the :py:meth:`.ActiveLearning.initial_simulation` method to run initial +simulations and call the :py:meth:`.ActiveLearning.iterative_emulation` method to +iteratively run new simulation and build emulator. Here we allocate 40 simulations for +initial emulator training and 60 simulations for adaptive training. + + +.. GENERATED FROM PYTHON SOURCE LINES 82-91 + +.. code-block:: default + + n0 = 40 + niter = 60 + + init_var_samples, init_sim_outputs = active_learner.initial_simulation( + n0, mode='parallel', max_workers=4) + + var_samples, _, _ = active_learner.iterative_emulation( + n0, init_var_samples, init_sim_outputs, niter=niter) + + + + + +.. rst-class:: sphx-glr-script-out + + .. code-block:: none + + The upper bounds of the range parameters are 401,3482 397,4694 + The initial values of range parameters are 8,026963 7,949389 + Start of the optimization 1 : + The number of iterations is 22 + The value of the marginal posterior function is -146,5038 + Optimized range parameters are 30,59853 130,6077 + Optimized nugget parameter is 0 + Convergence: TRUE + The initial values of range parameters are 0,9828751 0,9733764 + Start of the optimization 2 : + The number of iterations is 36 + The value of the marginal posterior function is -146,5038 + Optimized range parameters are 30,59827 130,6067 + Optimized nugget parameter is 0 + Convergence: FALSE + The upper bounds of the range parameters are 423,194 420,3365 + The initial values of range parameters are 8,463881 8,40673 + Start of the optimization 1 : + The number of iterations is 13 + The value of the marginal posterior function is -148,6792 + Optimized range parameters are 30,19534 133,3286 + Optimized nugget parameter is 0 + Convergence: TRUE + The initial values of range parameters are 0,9589025 0,9524277 + Start of the optimization 2 : + The number of iterations is 12 + The value of the marginal posterior function is -148,6792 + Optimized range parameters are 30,19539 133,329 + Optimized nugget parameter is 0 + Convergence: TRUE + The upper bounds of the range parameters are 422,8426 419,9874 + The initial values of range parameters are 8,456851 8,399747 + Start of the optimization 1 : + The number of iterations is 34 + The value of the marginal posterior function is -149,9595 + Optimized range parameters are 30,64771 135,0597 + Optimized nugget parameter is 0 + Convergence: FALSE + The initial values of range parameters are 0,9360715 0,9297509 + Start of the optimization 2 : + The number of iterations is 24 + The value of the marginal posterior function is -149,9595 + Optimized range parameters are 30,64696 135,0536 + Optimized nugget parameter is 0 + Convergence: TRUE + The upper bounds of the range parameters are 423,2876 420,4294 + The initial values of range parameters are 8,465751 8,408588 + Start of the optimization 1 : + The number of iterations is 25 + The value of the marginal posterior function is -151,304 + Optimized range parameters are 31,21605 136,8571 + Optimized nugget parameter is 0 + Convergence: FALSE + The initial values of range parameters are 0,9143024 0,9081287 + Start of the optimization 2 : + The number of iterations is 23 + The value of the marginal posterior function is -151,304 + Optimized range parameters are 31,21617 136,8537 + Optimized nugget parameter is 0 + Convergence: FALSE + The upper bounds of the range parameters are 389,6167 386,9859 + The initial values of range parameters are 7,792334 7,739717 + Start of the optimization 1 : + The number of iterations is 13 + The value of the marginal posterior function is -152,6009 + Optimized range parameters are 32,285 141,3784 + Optimized nugget parameter is 0 + Convergence: TRUE + The initial values of range parameters are 0,8935228 0,8874894 + Start of the optimization 2 : + The number of iterations is 17 + The value of the marginal posterior function is -152,6009 + Optimized range parameters are 32,28096 141,3737 + Optimized nugget parameter is 0 + Convergence: TRUE + The upper bounds of the range parameters are 368,8855 366,3947 + The initial values of range parameters are 7,377711 7,327894 + Start of the optimization 1 : + The number of iterations is 17 + The value of the marginal posterior function is -153,5419 + Optimized range parameters are 32,43481 141,7852 + Optimized nugget parameter is 0 + Convergence: TRUE + The initial values of range parameters are 0,8736668 0,8677675 + Start of the optimization 2 : + The number of iterations is 24 + The value of the marginal posterior function is -153,5419 + Optimized range parameters are 32,43357 141,7844 + Optimized nugget parameter is 0 + Convergence: FALSE + The upper bounds of the range parameters are 339,4555 337,1634 + The initial values of range parameters are 6,789111 6,743268 + Start of the optimization 1 : + The number of iterations is 17 + The value of the marginal posterior function is -154,9929 + Optimized range parameters are 33,69448 151,2103 + Optimized nugget parameter is 0 + Convergence: TRUE + The initial values of range parameters are 0,854674 0,848903 + Start of the optimization 2 : + The number of iterations is 22 + The value of the marginal posterior function is -154,9929 + Optimized range parameters are 33,69468 151,2111 + Optimized nugget parameter is 0 + Convergence: FALSE + The upper bounds of the range parameters are 369,9581 367,46 + The initial values of range parameters are 7,399163 7,349201 + Start of the optimization 1 : + The number of iterations is 26 + The value of the marginal posterior function is -155,4764 + Optimized range parameters are 33,90556 152,0139 + Optimized nugget parameter is 0 + Convergence: FALSE + The initial values of range parameters are 0,8364895 0,8308412 + Start of the optimization 2 : + The number of iterations is 23 + The value of the marginal posterior function is -155,4764 + Optimized range parameters are 33,90541 152,0137 + Optimized nugget parameter is 0 + Convergence: FALSE + The upper bounds of the range parameters are 299,8308 297,8062 + The initial values of range parameters are 5,996615 5,956124 + Start of the optimization 1 : + The number of iterations is 27 + The value of the marginal posterior function is -155,8802 + Optimized range parameters are 34,04389 152,6133 + Optimized nugget parameter is 0 + Convergence: FALSE + The initial values of range parameters are 0,8190626 0,813532 + Start of the optimization 2 : + The number of iterations is 24 + The value of the marginal posterior function is -155,8802 + Optimized range parameters are 34,04381 152,6131 + Optimized nugget parameter is 0 + Convergence: FALSE + The upper bounds of the range parameters are 272,589 270,7484 + The initial values of range parameters are 5,45178 5,414968 + Start of the optimization 1 : + The number of iterations is 22 + The value of the marginal posterior function is -156,1383 + Optimized range parameters are 34,46966 151,4246 + Optimized nugget parameter is 0 + Convergence: TRUE + The initial values of range parameters are 0,802347 0,7969293 + Start of the optimization 2 : + The number of iterations is 24 + The value of the marginal posterior function is -156,1383 + Optimized range parameters are 34,46972 151,4261 + Optimized nugget parameter is 0 + Convergence: FALSE + The upper bounds of the range parameters are 217,1413 215,6751 + The initial values of range parameters are 4,342826 4,313501 + Start of the optimization 1 : + The number of iterations is 16 + The value of the marginal posterior function is -156,184 + Optimized range parameters are 34,52228 152,8428 + Optimized nugget parameter is 0 + Convergence: TRUE + The initial values of range parameters are 0,7863001 0,7809907 + Start of the optimization 2 : + The number of iterations is 29 + The value of the marginal posterior function is -156,184 + Optimized range parameters are 34,5049 152,8145 + Optimized nugget parameter is 0 + Convergence: FALSE + The upper bounds of the range parameters are 206,6122 205,2171 + The initial values of range parameters are 4,132244 4,104342 + Start of the optimization 1 : + The number of iterations is 25 + The value of the marginal posterior function is -156,2348 + Optimized range parameters are 34,79805 155,1646 + Optimized nugget parameter is 0 + Convergence: FALSE + The initial values of range parameters are 0,7708824 0,7656772 + Start of the optimization 2 : + The number of iterations is 22 + The value of the marginal posterior function is -156,2348 + Optimized range parameters are 34,82503 155,2481 + Optimized nugget parameter is 0 + Convergence: TRUE + The upper bounds of the range parameters are 264,8501 263,0618 + The initial values of range parameters are 5,297002 5,261235 + Start of the optimization 1 : + The number of iterations is 30 + The value of the marginal posterior function is -156,4063 + Optimized range parameters are 34,74024 156,9499 + Optimized nugget parameter is 0 + Convergence: FALSE + The initial values of range parameters are 0,7560578 0,7509526 + Start of the optimization 2 : + The number of iterations is 35 + The value of the marginal posterior function is -156,4062 + Optimized range parameters are 34,71806 156,8712 + Optimized nugget parameter is 0 + Convergence: FALSE + The upper bounds of the range parameters are 255,2317 253,5083 + The initial values of range parameters are 5,104633 5,070165 + Start of the optimization 1 : + The number of iterations is 20 + The value of the marginal posterior function is -156,5552 + Optimized range parameters are 35,37305 157,5615 + Optimized nugget parameter is 0 + Convergence: TRUE + The initial values of range parameters are 0,7417925 0,7367837 + Start of the optimization 2 : + The number of iterations is 37 + The value of the marginal posterior function is -156,5552 + Optimized range parameters are 35,37704 157,591 + Optimized nugget parameter is 0 + Convergence: FALSE + The upper bounds of the range parameters are 234,5139 232,9304 + The initial values of range parameters are 4,690278 4,658607 + Start of the optimization 1 : + The number of iterations is 25 + The value of the marginal posterior function is -156,8767 + Optimized range parameters are 35,91747 161,0899 + Optimized nugget parameter is 0 + Convergence: FALSE + The initial values of range parameters are 0,7280556 0,7231396 + Start of the optimization 2 : + The number of iterations is 32 + The value of the marginal posterior function is -156,8767 + Optimized range parameters are 35,92577 161,0559 + Optimized nugget parameter is 0 + Convergence: FALSE + The upper bounds of the range parameters are 237,6023 235,9979 + The initial values of range parameters are 4,752045 4,719958 + Start of the optimization 1 : + The number of iterations is 15 + The value of the marginal posterior function is -156,6342 + Optimized range parameters are 36,30341 161,9859 + Optimized nugget parameter is 0 + Convergence: TRUE + The initial values of range parameters are 0,7148183 0,7099916 + Start of the optimization 2 : + The number of iterations is 26 + The value of the marginal posterior function is -156,6343 + Optimized range parameters are 36,30117 161,8561 + Optimized nugget parameter is 0 + Convergence: FALSE + The upper bounds of the range parameters are 231,5375 229,9741 + The initial values of range parameters are 4,63075 4,599482 + Start of the optimization 1 : + The number of iterations is 27 + The value of the marginal posterior function is -156,3683 + Optimized range parameters are 36,27212 162,5847 + Optimized nugget parameter is 0 + Convergence: TRUE + The initial values of range parameters are 0,7020536 0,6973131 + Start of the optimization 2 : + The number of iterations is 30 + The value of the marginal posterior function is -156,3684 + Optimized range parameters are 36,25962 162,5355 + Optimized nugget parameter is 0 + Convergence: TRUE + The upper bounds of the range parameters are 237,6502 236,0455 + The initial values of range parameters are 4,753005 4,720911 + Start of the optimization 1 : + The number of iterations is 14 + The value of the marginal posterior function is -156,014 + Optimized range parameters are 36,19577 162,4854 + Optimized nugget parameter is 0 + Convergence: TRUE + The initial values of range parameters are 0,6897369 0,6850796 + Start of the optimization 2 : + The number of iterations is 27 + The value of the marginal posterior function is -156,014 + Optimized range parameters are 36,19621 162,4877 + Optimized nugget parameter is 0 + Convergence: FALSE + The upper bounds of the range parameters are 221,4001 219,9051 + The initial values of range parameters are 4,428002 4,398102 + Start of the optimization 1 : + The number of iterations is 36 + The value of the marginal posterior function is -155,8456 + Optimized range parameters are 36,93092 166,708 + Optimized nugget parameter is 0 + Convergence: FALSE + The initial values of range parameters are 0,6778449 0,6732679 + Start of the optimization 2 : + The number of iterations is 19 + The value of the marginal posterior function is -155,8455 + Optimized range parameters are 37,00954 166,8438 + Optimized nugget parameter is 0 + Convergence: TRUE + The upper bounds of the range parameters are 207,5545 206,153 + The initial values of range parameters are 4,15109 4,123061 + Start of the optimization 1 : + The number of iterations is 36 + The value of the marginal posterior function is -155,2611 + Optimized range parameters are 37,54574 171,0122 + Optimized nugget parameter is 0 + Convergence: TRUE + The initial values of range parameters are 0,666356 0,6618565 + Start of the optimization 2 : + The number of iterations is 26 + The value of the marginal posterior function is -155,2611 + Optimized range parameters are 37,52707 170,9901 + Optimized nugget parameter is 0 + Convergence: FALSE + The upper bounds of the range parameters are 211,1368 209,7111 + The initial values of range parameters are 4,222736 4,194222 + Start of the optimization 1 : + The number of iterations is 38 + The value of the marginal posterior function is -154,6105 + Optimized range parameters are 37,27271 173,4402 + Optimized nugget parameter is 0 + Convergence: FALSE + The initial values of range parameters are 0,6552501 0,6508256 + Start of the optimization 2 : + The number of iterations is 38 + The value of the marginal posterior function is -154,6104 + Optimized range parameters are 37,31152 173,4271 + Optimized nugget parameter is 0 + Convergence: FALSE + The upper bounds of the range parameters are 229,1987 227,651 + The initial values of range parameters are 4,583973 4,553021 + Start of the optimization 1 : + The number of iterations is 30 + The value of the marginal posterior function is -153,8922 + Optimized range parameters are 37,52317 173,0118 + Optimized nugget parameter is 0 + Convergence: FALSE + The initial values of range parameters are 0,6445083 0,6401563 + Start of the optimization 2 : + The number of iterations is 29 + The value of the marginal posterior function is -153,8923 + Optimized range parameters are 37,52772 173,0381 + Optimized nugget parameter is 0 + Convergence: FALSE + The upper bounds of the range parameters are 200,215 198,8631 + The initial values of range parameters are 4,004301 3,977262 + Start of the optimization 1 : + The number of iterations is 29 + The value of the marginal posterior function is -153,0737 + Optimized range parameters are 37,6626 173,7851 + Optimized nugget parameter is 0 + Convergence: FALSE + The initial values of range parameters are 0,634113 0,6298312 + Start of the optimization 2 : + The number of iterations is 38 + The value of the marginal posterior function is -153,0733 + Optimized range parameters are 37,57977 172,9914 + Optimized nugget parameter is 0 + Convergence: FALSE + The upper bounds of the range parameters are 208,2931 206,8866 + The initial values of range parameters are 4,165862 4,137733 + Start of the optimization 1 : + The number of iterations is 31 + The value of the marginal posterior function is -152,171 + Optimized range parameters are 37,55899 172,4488 + Optimized nugget parameter is 0 + Convergence: TRUE + The initial values of range parameters are 0,6240477 0,6198339 + Start of the optimization 2 : + The number of iterations is 34 + The value of the marginal posterior function is -152,1711 + Optimized range parameters are 37,55216 172,3431 + Optimized nugget parameter is 0 + Convergence: FALSE + The upper bounds of the range parameters are 190,9562 189,6668 + The initial values of range parameters are 3,819124 3,793336 + Start of the optimization 1 : + The number of iterations is 26 + The value of the marginal posterior function is -151,4191 + Optimized range parameters are 37,87024 177,6757 + Optimized nugget parameter is 0 + Convergence: FALSE + The initial values of range parameters are 0,6142969 0,610149 + Start of the optimization 2 : + The number of iterations is 31 + The value of the marginal posterior function is -151,4191 + Optimized range parameters are 37,8678 177,4358 + Optimized nugget parameter is 0 + Convergence: TRUE + The upper bounds of the range parameters are 187,3139 186,0491 + The initial values of range parameters are 3,746279 3,720983 + Start of the optimization 1 : + The number of iterations is 27 + The value of the marginal posterior function is -150,3521 + Optimized range parameters are 37,93228 177,0193 + Optimized nugget parameter is 0 + Convergence: FALSE + The initial values of range parameters are 0,6048462 0,6007621 + Start of the optimization 2 : + The number of iterations is 15 + The value of the marginal posterior function is -150,3521 + Optimized range parameters are 37,92683 176,9819 + Optimized nugget parameter is 0 + Convergence: TRUE + The upper bounds of the range parameters are 201,0467 199,6892 + The initial values of range parameters are 4,020934 3,993783 + Start of the optimization 1 : + The number of iterations is 31 + The value of the marginal posterior function is -149,229 + Optimized range parameters are 37,73923 179,7933 + Optimized nugget parameter is 0 + Convergence: FALSE + The initial values of range parameters are 0,5956819 0,5916596 + Start of the optimization 2 : + The number of iterations is 23 + The value of the marginal posterior function is -149,2295 + Optimized range parameters are 37,68347 179,3098 + Optimized nugget parameter is 0 + Convergence: FALSE + The upper bounds of the range parameters are 208,1589 206,7533 + The initial values of range parameters are 4,163178 4,135067 + Start of the optimization 1 : + The number of iterations is 31 + The value of the marginal posterior function is -148,0364 + Optimized range parameters are 37,10463 181,452 + Optimized nugget parameter is 0 + Convergence: TRUE + The initial values of range parameters are 0,5867911 0,5828289 + Start of the optimization 2 : + The number of iterations is 28 + The value of the marginal posterior function is -148,0353 + Optimized range parameters are 37,10023 181,8802 + Optimized nugget parameter is 0 + Convergence: TRUE + The upper bounds of the range parameters are 207,5545 206,153 + The initial values of range parameters are 4,15109 4,123061 + Start of the optimization 1 : + The number of iterations is 31 + The value of the marginal posterior function is -147,2549 + Optimized range parameters are 36,89036 184,8898 + Optimized nugget parameter is 0 + Convergence: TRUE + The initial values of range parameters are 0,5781618 0,5742579 + Start of the optimization 2 : + The number of iterations is 18 + The value of the marginal posterior function is -147,2555 + Optimized range parameters are 36,87001 184,82 + Optimized nugget parameter is 0 + Convergence: TRUE + The upper bounds of the range parameters are 166,9279 165,8008 + The initial values of range parameters are 3,338559 3,316015 + Start of the optimization 1 : + The number of iterations is 24 + The value of the marginal posterior function is -146,0908 + Optimized range parameters are 34,10173 165,8008 + Optimized nugget parameter is 0 + Convergence: FALSE + The initial values of range parameters are 0,5697827 0,5659353 + Start of the optimization 2 : + The number of iterations is 12 + The value of the marginal posterior function is -146,091 + Optimized range parameters are 34,11888 165,8008 + Optimized nugget parameter is 0 + Convergence: TRUE + The upper bounds of the range parameters are 164,9351 163,8214 + The initial values of range parameters are 3,298703 3,276429 + Start of the optimization 1 : + The number of iterations is 29 + The value of the marginal posterior function is -144,8362 + Optimized range parameters are 33,02363 163,8214 + Optimized nugget parameter is 0 + Convergence: FALSE + The initial values of range parameters are 0,5616429 0,5578505 + Start of the optimization 2 : + The number of iterations is 15 + The value of the marginal posterior function is -144,8366 + Optimized range parameters are 32,96846 163,8214 + Optimized nugget parameter is 0 + Convergence: TRUE + The upper bounds of the range parameters are 161,9899 160,8961 + The initial values of range parameters are 3,239799 3,217922 + Start of the optimization 1 : + The number of iterations is 30 + The value of the marginal posterior function is -143,1679 + Optimized range parameters are 32,60853 160,8961 + Optimized nugget parameter is 0 + Convergence: FALSE + The initial values of range parameters are 0,5537325 0,5499935 + Start of the optimization 2 : + The number of iterations is 23 + The value of the marginal posterior function is -143,1673 + Optimized range parameters are 32,60514 160,8961 + Optimized nugget parameter is 0 + Convergence: TRUE + The upper bounds of the range parameters are 167,4923 166,3613 + The initial values of range parameters are 3,349846 3,327227 + Start of the optimization 1 : + The number of iterations is 31 + The value of the marginal posterior function is -141,4524 + Optimized range parameters are 32,84554 166,3613 + Optimized nugget parameter is 0 + Convergence: FALSE + The initial values of range parameters are 0,5460417 0,5423547 + Start of the optimization 2 : + The number of iterations is 10 + The value of the marginal posterior function is -141,4531 + Optimized range parameters are 32,87053 166,3613 + Optimized nugget parameter is 0 + Convergence: TRUE + The upper bounds of the range parameters are 158,1908 157,1226 + The initial values of range parameters are 3,163815 3,142452 + Start of the optimization 1 : + The number of iterations is 21 + The value of the marginal posterior function is -140,039 + Optimized range parameters are 31,62214 157,1226 + Optimized nugget parameter is 0 + Convergence: FALSE + The initial values of range parameters are 0,5385617 0,5349251 + Start of the optimization 2 : + The number of iterations is 16 + The value of the marginal posterior function is -140,0387 + Optimized range parameters are 31,62433 157,1226 + Optimized nugget parameter is 0 + Convergence: TRUE + The upper bounds of the range parameters are 174,0066 172,8316 + The initial values of range parameters are 3,480131 3,456632 + Start of the optimization 1 : + The number of iterations is 23 + The value of the marginal posterior function is -138,1222 + Optimized range parameters are 33,48823 172,8316 + Optimized nugget parameter is 0 + Convergence: FALSE + The initial values of range parameters are 0,5312838 0,5276964 + Start of the optimization 2 : + The number of iterations is 28 + The value of the marginal posterior function is -138,1223 + Optimized range parameters are 33,40525 172,8316 + Optimized nugget parameter is 0 + Convergence: FALSE + The upper bounds of the range parameters are 150,4312 149,4154 + The initial values of range parameters are 3,008624 2,988309 + Start of the optimization 1 : + The number of iterations is 21 + The value of the marginal posterior function is -139,2082 + Optimized range parameters are 30,85041 149,4154 + Optimized nugget parameter is 0 + Convergence: TRUE + The initial values of range parameters are 0,5242001 0,5206605 + Start of the optimization 2 : + The number of iterations is 25 + The value of the marginal posterior function is -139,2085 + Optimized range parameters are 30,93585 149,4154 + Optimized nugget parameter is 0 + Convergence: TRUE + The upper bounds of the range parameters are 163,2096 162,1076 + The initial values of range parameters are 3,264193 3,242152 + Start of the optimization 1 : + The number of iterations is 30 + The value of the marginal posterior function is -136,829 + Optimized range parameters are 31,64889 162,1076 + Optimized nugget parameter is 0 + Convergence: FALSE + The initial values of range parameters are 0,5173027 0,5138097 + Start of the optimization 2 : + The number of iterations is 29 + The value of the marginal posterior function is -136,8292 + Optimized range parameters are 31,73272 162,1076 + Optimized nugget parameter is 0 + Convergence: FALSE + The upper bounds of the range parameters are 155,3651 154,316 + The initial values of range parameters are 3,107301 3,08632 + Start of the optimization 1 : + The number of iterations is 38 + The value of the marginal posterior function is -137,2507 + Optimized range parameters are 31,11748 154,316 + Optimized nugget parameter is 0 + Convergence: FALSE + The initial values of range parameters are 0,5105845 0,5071368 + Start of the optimization 2 : + The number of iterations is 11 + The value of the marginal posterior function is -137,2507 + Optimized range parameters are 31,11466 154,316 + Optimized nugget parameter is 0 + Convergence: TRUE + The upper bounds of the range parameters are 159,0334 157,9595 + The initial values of range parameters are 3,180667 3,15919 + Start of the optimization 1 : + The number of iterations is 19 + The value of the marginal posterior function is -134,9592 + Optimized range parameters are 30,6283 157,9595 + Optimized nugget parameter is 0 + Convergence: FALSE + The initial values of range parameters are 0,5040385 0,5006351 + Start of the optimization 2 : + The number of iterations is 20 + The value of the marginal posterior function is -134,9589 + Optimized range parameters are 30,62948 157,9595 + Optimized nugget parameter is 0 + Convergence: FALSE + The upper bounds of the range parameters are 150,6829 149,6655 + The initial values of range parameters are 3,013659 2,993309 + Start of the optimization 1 : + The number of iterations is 9 + The value of the marginal posterior function is -133,0322 + Optimized range parameters are 28,62106 149,6655 + Optimized nugget parameter is 0 + Convergence: TRUE + The initial values of range parameters are 0,4976583 0,4942979 + Start of the optimization 2 : + The number of iterations is 27 + The value of the marginal posterior function is -133,0311 + Optimized range parameters are 28,6202 149,6655 + Optimized nugget parameter is 0 + Convergence: FALSE + The upper bounds of the range parameters are 143,0785 142,1124 + The initial values of range parameters are 2,86157 2,842247 + Start of the optimization 1 : + The number of iterations is 27 + The value of the marginal posterior function is -131,5134 + Optimized range parameters are 27,05986 142,1124 + Optimized nugget parameter is 0 + Convergence: FALSE + The initial values of range parameters are 0,4914376 0,4881192 + Start of the optimization 2 : + The number of iterations is 28 + The value of the marginal posterior function is -131,5142 + Optimized range parameters are 27,09861 142,1124 + Optimized nugget parameter is 0 + Convergence: TRUE + The upper bounds of the range parameters are 149,9901 148,9774 + The initial values of range parameters are 2,999803 2,979547 + Start of the optimization 1 : + The number of iterations is 17 + The value of the marginal posterior function is -128,3138 + Optimized range parameters are 26,94379 148,9774 + Optimized nugget parameter is 0 + Convergence: TRUE + The initial values of range parameters are 0,4853704 0,482093 + Start of the optimization 2 : + The number of iterations is 11 + The value of the marginal posterior function is -128,3136 + Optimized range parameters are 26,93153 148,9774 + Optimized nugget parameter is 0 + Convergence: TRUE + The upper bounds of the range parameters are 141,9733 141,0146 + The initial values of range parameters are 2,839465 2,820292 + Start of the optimization 1 : + The number of iterations is 15 + The value of the marginal posterior function is -126,565 + Optimized range parameters are 25,84325 141,0146 + Optimized nugget parameter is 0 + Convergence: TRUE + The initial values of range parameters are 0,4794513 0,4762139 + Start of the optimization 2 : + The number of iterations is 30 + The value of the marginal posterior function is -126,5658 + Optimized range parameters are 25,84843 141,0146 + Optimized nugget parameter is 0 + Convergence: FALSE + The upper bounds of the range parameters are 148,4124 147,4103 + The initial values of range parameters are 2,968249 2,948206 + Start of the optimization 1 : + The number of iterations is 14 + The value of the marginal posterior function is -123,2249 + Optimized range parameters are 26,04536 147,4103 + Optimized nugget parameter is 0 + Convergence: TRUE + The initial values of range parameters are 0,4736748 0,4704763 + Start of the optimization 2 : + The number of iterations is 37 + The value of the marginal posterior function is -123,2255 + Optimized range parameters are 26,11794 147,4103 + Optimized nugget parameter is 0 + Convergence: FALSE + The upper bounds of the range parameters are 141,3136 140,3594 + The initial values of range parameters are 2,826273 2,807189 + Start of the optimization 1 : + The number of iterations is 24 + The value of the marginal posterior function is -121,373 + Optimized range parameters are 25,34355 140,3594 + Optimized nugget parameter is 0 + Convergence: FALSE + The initial values of range parameters are 0,4680358 0,4648754 + Start of the optimization 2 : + The number of iterations is 27 + The value of the marginal posterior function is -121,3719 + Optimized range parameters are 25,3222 140,3594 + Optimized nugget parameter is 0 + Convergence: FALSE + The upper bounds of the range parameters are 146,0605 145,0743 + The initial values of range parameters are 2,921211 2,901486 + Start of the optimization 1 : + The number of iterations is 17 + The value of the marginal posterior function is -119,1731 + Optimized range parameters are 25,38398 145,0743 + Optimized nugget parameter is 0 + Convergence: TRUE + The initial values of range parameters are 0,4625295 0,4594063 + Start of the optimization 2 : + The number of iterations is 24 + The value of the marginal posterior function is -119,1742 + Optimized range parameters are 25,27086 145,0743 + Optimized nugget parameter is 0 + Convergence: FALSE + The upper bounds of the range parameters are 136,1432 135,2239 + The initial values of range parameters are 2,722864 2,704479 + Start of the optimization 1 : + The number of iterations is 16 + The value of the marginal posterior function is -117,4765 + Optimized range parameters are 23,8631 135,2239 + Optimized nugget parameter is 0 + Convergence: TRUE + The initial values of range parameters are 0,4571512 0,4540644 + Start of the optimization 2 : + The number of iterations is 31 + The value of the marginal posterior function is -117,4779 + Optimized range parameters are 23,87798 135,2239 + Optimized nugget parameter is 0 + Convergence: FALSE + The upper bounds of the range parameters are 121,8399 121,0172 + The initial values of range parameters are 2,436797 2,420343 + Start of the optimization 1 : + The number of iterations is 21 + The value of the marginal posterior function is -117,2996 + Optimized range parameters are 22,38443 121,0172 + Optimized nugget parameter is 0 + Convergence: FALSE + The initial values of range parameters are 0,4518966 0,4488452 + Start of the optimization 2 : + The number of iterations is 19 + The value of the marginal posterior function is -117,2989 + Optimized range parameters are 22,37563 121,0172 + Optimized nugget parameter is 0 + Convergence: TRUE + The upper bounds of the range parameters are 123,1404 122,309 + The initial values of range parameters are 2,462809 2,446179 + Start of the optimization 1 : + The number of iterations is 18 + The value of the marginal posterior function is -114,6525 + Optimized range parameters are 22,32619 122,309 + Optimized nugget parameter is 0 + Convergence: TRUE + The initial values of range parameters are 0,4467614 0,4437447 + Start of the optimization 2 : + The number of iterations is 38 + The value of the marginal posterior function is -114,6523 + Optimized range parameters are 22,33099 122,309 + Optimized nugget parameter is 0 + Convergence: FALSE + The upper bounds of the range parameters are 117,4477 116,6546 + The initial values of range parameters are 2,348953 2,333092 + Start of the optimization 1 : + The number of iterations is 23 + The value of the marginal posterior function is -113,3472 + Optimized range parameters are 21,62668 116,6546 + Optimized nugget parameter is 0 + Convergence: FALSE + The initial values of range parameters are 0,4417416 0,4387588 + Start of the optimization 2 : + The number of iterations is 28 + The value of the marginal posterior function is -113,3475 + Optimized range parameters are 21,65104 116,6546 + Optimized nugget parameter is 0 + Convergence: FALSE + The upper bounds of the range parameters are 115,2499 114,4717 + The initial values of range parameters are 2,304998 2,289433 + Start of the optimization 1 : + The number of iterations is 12 + The value of the marginal posterior function is -110,7155 + Optimized range parameters are 20,98512 114,4717 + Optimized nugget parameter is 0 + Convergence: TRUE + The initial values of range parameters are 0,4368334 0,4338837 + Start of the optimization 2 : + The number of iterations is 30 + The value of the marginal posterior function is -110,7149 + Optimized range parameters are 21,00228 114,4717 + Optimized nugget parameter is 0 + Convergence: TRUE + The upper bounds of the range parameters are 111,8946 111,139 + The initial values of range parameters are 2,237892 2,222781 + Start of the optimization 1 : + The number of iterations is 17 + The value of the marginal posterior function is -108,5065 + Optimized range parameters are 20,44681 111,139 + Optimized nugget parameter is 0 + Convergence: TRUE + The initial values of range parameters are 0,432033 0,4291158 + Start of the optimization 2 : + The number of iterations is 19 + The value of the marginal posterior function is -108,507 + Optimized range parameters are 20,44983 111,139 + Optimized nugget parameter is 0 + Convergence: TRUE + The upper bounds of the range parameters are 93,38518 92,75461 + The initial values of range parameters are 1,867704 1,855092 + Start of the optimization 1 : + The number of iterations is 17 + The value of the marginal posterior function is -111,367 + Optimized range parameters are 18,37032 92,75461 + Optimized nugget parameter is 0 + Convergence: TRUE + The initial values of range parameters are 0,427337 0,4244515 + Start of the optimization 2 : + The number of iterations is 18 + The value of the marginal posterior function is -111,3671 + Optimized range parameters are 18,37078 92,75461 + Optimized nugget parameter is 0 + Convergence: TRUE + The upper bounds of the range parameters are 99,64494 98,97211 + The initial values of range parameters are 1,992899 1,979442 + Start of the optimization 1 : + The number of iterations is 23 + The value of the marginal posterior function is -106,2562 + Optimized range parameters are 18,89163 98,97211 + Optimized nugget parameter is 0 + Convergence: FALSE + The initial values of range parameters are 0,422742 0,4198875 + Start of the optimization 2 : + The number of iterations is 27 + The value of the marginal posterior function is -106,2561 + Optimized range parameters are 18,88065 98,97211 + Optimized nugget parameter is 0 + Convergence: FALSE + The upper bounds of the range parameters are 99,75194 99,07838 + The initial values of range parameters are 1,995039 1,981568 + Start of the optimization 1 : + The number of iterations is 17 + The value of the marginal posterior function is -103,2099 + Optimized range parameters are 18,65492 99,07838 + Optimized nugget parameter is 0 + Convergence: TRUE + The initial values of range parameters are 0,4182447 0,4154206 + Start of the optimization 2 : + The number of iterations is 27 + The value of the marginal posterior function is -103,2113 + Optimized range parameters are 18,65549 99,07838 + Optimized nugget parameter is 0 + Convergence: FALSE + The upper bounds of the range parameters are 104,3536 103,649 + The initial values of range parameters are 2,087073 2,07298 + Start of the optimization 1 : + The number of iterations is 20 + The value of the marginal posterior function is -98,42375 + Optimized range parameters are 18,87395 103,649 + Optimized nugget parameter is 0 + Convergence: TRUE + The initial values of range parameters are 0,4138422 0,4110477 + Start of the optimization 2 : + The number of iterations is 27 + The value of the marginal posterior function is -98,42241 + Optimized range parameters are 18,87764 103,649 + Optimized nugget parameter is 0 + Convergence: TRUE + The upper bounds of the range parameters are 103,1118 102,4155 + The initial values of range parameters are 2,062236 2,048311 + Start of the optimization 1 : + The number of iterations is 20 + The value of the marginal posterior function is -95,30729 + Optimized range parameters are 18,51323 102,4155 + Optimized nugget parameter is 0 + Convergence: FALSE + The initial values of range parameters are 0,4095313 0,406766 + Start of the optimization 2 : + The number of iterations is 29 + The value of the marginal posterior function is -95,30714 + Optimized range parameters are 18,54824 102,4155 + Optimized nugget parameter is 0 + Convergence: FALSE + The upper bounds of the range parameters are 95,06543 94,42352 + The initial values of range parameters are 1,901309 1,88847 + Start of the optimization 1 : + The number of iterations is 14 + The value of the marginal posterior function is -95,1497 + Optimized range parameters are 17,52307 94,42352 + Optimized nugget parameter is 0 + Convergence: TRUE + The initial values of range parameters are 0,4053093 0,4025725 + Start of the optimization 2 : + The number of iterations is 23 + The value of the marginal posterior function is -95,14898 + Optimized range parameters are 17,55379 94,42352 + Optimized nugget parameter is 0 + Convergence: FALSE + The upper bounds of the range parameters are 91,10625 90,49107 + The initial values of range parameters are 1,822125 1,809821 + Start of the optimization 1 : + The number of iterations is 21 + The value of the marginal posterior function is -93,31858 + Optimized range parameters are 16,88561 90,49107 + Optimized nugget parameter is 0 + Convergence: FALSE + The initial values of range parameters are 0,4011735 0,3984647 + Start of the optimization 2 : + The number of iterations is 24 + The value of the marginal posterior function is -93,31829 + Optimized range parameters are 16,83654 90,49107 + Optimized nugget parameter is 0 + Convergence: FALSE + The upper bounds of the range parameters are 95,06911 94,42717 + The initial values of range parameters are 1,901382 1,888543 + Start of the optimization 1 : + The number of iterations is 11 + The value of the marginal posterior function is -88,62383 + Optimized range parameters are 17,19113 94,42717 + Optimized nugget parameter is 0 + Convergence: TRUE + The initial values of range parameters are 0,3971213 0,3944398 + Start of the optimization 2 : + The number of iterations is 23 + The value of the marginal posterior function is -88,62286 + Optimized range parameters are 17,21816 94,42717 + Optimized nugget parameter is 0 + Convergence: FALSE + The upper bounds of the range parameters are 84,25512 83,6862 + The initial values of range parameters are 1,685102 1,673724 + Start of the optimization 1 : + The number of iterations is 20 + The value of the marginal posterior function is -90,56369 + Optimized range parameters are 16,01921 83,6862 + Optimized nugget parameter is 0 + Convergence: FALSE + The initial values of range parameters are 0,39315 0,3904954 + Start of the optimization 2 : + The number of iterations is 24 + The value of the marginal posterior function is -90,56328 + Optimized range parameters are 16,0189 83,6862 + Optimized nugget parameter is 0 + Convergence: FALSE + + + + +.. GENERATED FROM PYTHON SOURCE LINES 92-100 + +Once the active learning process is finished, we obtain the final emulator for the +logarithm of the unnormalized posterior, which is given by the +:py:meth:`.ActiveLearning.approx_ln_pxl` method. + +We can then estimate the posterior using grid estimation or Metropolis Hastings +estimation based on the emulator. An example is as follows. The contour plot shows +the estimated posterior. + + +.. GENERATED FROM PYTHON SOURCE LINES 101-127 + +.. code-block:: default + + from psimpy.inference import GridEstimation + import matplotlib.pyplot as plt + + grid_estimator = GridEstimation(ndim, bounds, ln_pxl=active_learner.approx_ln_pxl) + posterior, x_ndim = grid_estimator.run(nbins=50) + + fig, ax = plt.subplots(1,1,figsize=(5,4)) + + # initial training points + ax.scatter(init_var_samples[:,0], init_var_samples[:,1], s=10, c='r', marker='o', + zorder=1, alpha=0.8, label='initial training points') + # actively picked training points + ax.scatter(var_samples[n0:,0], var_samples[n0:,1], s=15, c='k', marker='+', + zorder=2, alpha=0.8, label='iterative training points') + + # estimated posterior based on the final emulator + posterior = np.where(posterior < 1e-10, None, posterior) + contour = ax.contour(x_ndim[0], x_ndim[1], np.transpose(posterior), levels=10, zorder=0) + plt.colorbar(contour, ax=ax) + + ax.legend() + ax.set_title('Active learning') + ax.set_xlabel('x1') + ax.set_ylabel('x2') + ax.set_xlim([-5,5]) + ax.set_ylim([-5,5]) + plt.tight_layout() + + +.. image-sg:: /auto_examples/inference/images/sphx_glr_plot_active_learning_001.png + :alt: Active learning + :srcset: /auto_examples/inference/images/sphx_glr_plot_active_learning_001.png + :class: sphx-glr-single-img + + + + + + +.. rst-class:: sphx-glr-timing + + **Total running time of the script:** ( 2 minutes 12.653 seconds) + + +.. _sphx_glr_download_auto_examples_inference_plot_active_learning.py: + +.. only:: html + + .. container:: sphx-glr-footer sphx-glr-footer-example + + + .. container:: sphx-glr-download sphx-glr-download-python + + :download:`Download Python source code: plot_active_learning.py <plot_active_learning.py>` + + .. container:: sphx-glr-download sphx-glr-download-jupyter + + :download:`Download Jupyter notebook: plot_active_learning.ipynb <plot_active_learning.ipynb>` + + +.. only:: html + + .. rst-class:: sphx-glr-signature + + `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.github.io>`_ diff --git a/docs/source/_build/html/_sources/auto_examples/inference/plot_bayes_inference.rst.txt b/docs/source/_build/html/_sources/auto_examples/inference/plot_bayes_inference.rst.txt new file mode 100644 index 0000000..f8b71d7 --- /dev/null +++ b/docs/source/_build/html/_sources/auto_examples/inference/plot_bayes_inference.rst.txt @@ -0,0 +1,231 @@ + +.. DO NOT EDIT. +.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. +.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: +.. "auto_examples/inference/plot_bayes_inference.py" +.. LINE NUMBERS ARE GIVEN BELOW. + +.. only:: html + + .. note:: + :class: sphx-glr-download-link-note + + Click :ref:`here <sphx_glr_download_auto_examples_inference_plot_bayes_inference.py>` + to download the full example code + +.. rst-class:: sphx-glr-example-title + +.. _sphx_glr_auto_examples_inference_plot_bayes_inference.py: + + +Bayesian inference +================== + +.. GENERATED FROM PYTHON SOURCE LINES 8-16 + +This example shows how to perform Bayesian inference given the uniform prior + +:math:`p(\mathbf{x})=p(x_1,x_2)=0.01` + +where :math:`x_i \in [-5,5], i=1,2`, and likelihood + +:math:`L(\mathbf{x}|\mathbf{d})=\exp \left(-\frac{1}{100}\left(x_1-1\right)^2-\left(x_1^2-x_2\right)^2\right)`. + + +.. GENERATED FROM PYTHON SOURCE LINES 17-29 + +.. code-block:: default + + + import numpy as np + + ndim = 2 + bounds = np.array([[-5,5],[-5,5]]) + + def prior(x): + return 0.01 + + def likelihood(x): + return np.exp(-(x[0]-1)**2/100 - (x[0]**2-x[1])**2) + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 30-33 + +To estimate the posterior using grid estimation, we need to import the +:class:`.GridEstimation` class, create an instance, and call the +:py:meth:`.GridEstimation.run` method. + +.. GENERATED FROM PYTHON SOURCE LINES 34-40 + +.. code-block:: default + + + from psimpy.inference.bayes_inference import GridEstimation + + grid_estimator = GridEstimation(ndim, bounds, prior, likelihood) + posterior, x_ndim = grid_estimator.run(nbins=[50,40]) + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 41-43 + +The following figure plots the estimated posterior. + + +.. GENERATED FROM PYTHON SOURCE LINES 44-61 + +.. code-block:: default + + + import matplotlib.pyplot as plt + + fig, ax = plt.subplots(1,1,figsize=(6,4)) + + # mask insignificant values + posterior = np.where(posterior < 1e-10, None, posterior) + + contour = ax.contour(x_ndim[0], x_ndim[1], np.transpose(posterior), levels=10) + plt.colorbar(contour, ax=ax) + ax.set_xlim(bounds[0,0], bounds[0,1]) + ax.set_ylim(bounds[1,0], bounds[1,1]) + ax.set_title('Grid estimation') + ax.set_xlabel('x1') + ax.set_ylabel('x2') + plt.tight_layout() + + + + +.. image-sg:: /auto_examples/inference/images/sphx_glr_plot_bayes_inference_001.png + :alt: Grid estimation + :srcset: /auto_examples/inference/images/sphx_glr_plot_bayes_inference_001.png + :class: sphx-glr-single-img + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 62-67 + +To estimate the posterior using Metropolis Hastings estimation, we need to import +the :class:`.MetropolisHastingsEstimation` class, create an instance, and call the +:py:meth:`.MetropolisHastingsEstimation.run` method. The +:py:meth:`.MetropolisHastingsEstimation.run` method has a parameter, ``mh_sampler``, +which takes an instance of :class:`.MetropolisHastings` as argument. + +.. GENERATED FROM PYTHON SOURCE LINES 68-92 + +.. code-block:: default + + + from psimpy.inference.bayes_inference import MetropolisHastingsEstimation + + mh_estimator = MetropolisHastingsEstimation(ndim, bounds, prior, likelihood) + + # create a mh_sampler + from psimpy.sampler.metropolis_hastings import MetropolisHastings + from scipy.stats import multivariate_normal + + init_state = np.array([-4,-4]) + f_sample = multivariate_normal.rvs + nburn = 100 + nthin = 10 + seed = 1 + kwgs_f_sample = {'random_state': np.random.default_rng(seed)} + + mh_sampler = MetropolisHastings(ndim=ndim, init_state=init_state, + f_sample=f_sample, bounds=bounds, nburn=nburn, nthin=nthin, seed=seed, + kwgs_f_sample=kwgs_f_sample) + + nsamples = 5000 + mh_samples, mh_accept = mh_estimator.run(nsamples, mh_sampler) + + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 93-96 + +The following figure plots the samples drawn from the unnormalized posterior, +which can be used to estimate the posterior and its poperties. + + +.. GENERATED FROM PYTHON SOURCE LINES 97-110 + +.. code-block:: default + + import matplotlib.pyplot as plt + + fig, ax = plt.subplots(1,1,figsize=(5,4)) + + ax.scatter(mh_samples[:,0], mh_samples[:,1], s=10, c='r', marker='o', alpha=0.1) + ax.set_xlim(bounds[0,0], bounds[0,1]) + ax.set_ylim(bounds[1,0], bounds[1,1]) + ax.set_title('MH estimation') + ax.set_xlabel('x1') + ax.set_ylabel('x2') + plt.tight_layout() + + + + + +.. image-sg:: /auto_examples/inference/images/sphx_glr_plot_bayes_inference_002.png + :alt: MH estimation + :srcset: /auto_examples/inference/images/sphx_glr_plot_bayes_inference_002.png + :class: sphx-glr-single-img + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 111-116 + +.. note:: Besides ``prior`` and ``likelihood``, one can also instantiate + the :class:`.MetropolisHastingsEstimation` class with + + - ``ln_prior`` and ``ln_likelihood``: Natural logarithm of ``prior`` and ``likelihood``. + - ``ln_pxl``: Natural logarithm of the product of ``prior`` and ``likelihood``. + + +.. rst-class:: sphx-glr-timing + + **Total running time of the script:** ( 0 minutes 9.739 seconds) + + +.. _sphx_glr_download_auto_examples_inference_plot_bayes_inference.py: + +.. only:: html + + .. container:: sphx-glr-footer sphx-glr-footer-example + + + .. container:: sphx-glr-download sphx-glr-download-python + + :download:`Download Python source code: plot_bayes_inference.py <plot_bayes_inference.py>` + + .. container:: sphx-glr-download sphx-glr-download-jupyter + + :download:`Download Jupyter notebook: plot_bayes_inference.ipynb <plot_bayes_inference.ipynb>` + + +.. only:: html + + .. rst-class:: sphx-glr-signature + + `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.github.io>`_ diff --git a/docs/source/_build/html/_sources/auto_examples/inference/sg_execution_times.rst.txt b/docs/source/_build/html/_sources/auto_examples/inference/sg_execution_times.rst.txt new file mode 100644 index 0000000..4f6c429 --- /dev/null +++ b/docs/source/_build/html/_sources/auto_examples/inference/sg_execution_times.rst.txt @@ -0,0 +1,14 @@ + +:orphan: + +.. _sphx_glr_auto_examples_inference_sg_execution_times: + +Computation times +================= +**02:22.392** total execution time for **auto_examples_inference** files: + ++-----------------------------------------------------------------------------------------------+-----------+--------+ +| :ref:`sphx_glr_auto_examples_inference_plot_active_learning.py` (``plot_active_learning.py``) | 02:12.653 | 0.0 MB | ++-----------------------------------------------------------------------------------------------+-----------+--------+ +| :ref:`sphx_glr_auto_examples_inference_plot_bayes_inference.py` (``plot_bayes_inference.py``) | 00:09.739 | 0.0 MB | ++-----------------------------------------------------------------------------------------------+-----------+--------+ diff --git a/docs/source/_build/html/_sources/auto_examples/sampler/index.rst.txt b/docs/source/_build/html/_sources/auto_examples/sampler/index.rst.txt new file mode 100644 index 0000000..6192045 --- /dev/null +++ b/docs/source/_build/html/_sources/auto_examples/sampler/index.rst.txt @@ -0,0 +1,93 @@ +:orphan: + +Sampler +======= + + +.. raw:: html + + <div class="sphx-glr-thumbnails"> + + +.. raw:: html + + <div class="sphx-glr-thumbcontainer" tooltip="Saltelli sampling"> + +.. only:: html + + .. image:: /auto_examples/sampler/images/thumb/sphx_glr_plot_saltelli_thumb.png + :alt: Saltelli sampling + + :ref:`sphx_glr_auto_examples_sampler_plot_saltelli.py` + +.. raw:: html + + <div class="sphx-glr-thumbnail-title">Saltelli sampling</div> + </div> + + +.. raw:: html + + <div class="sphx-glr-thumbcontainer" tooltip="Latin hypercube sampling"> + +.. only:: html + + .. image:: /auto_examples/sampler/images/thumb/sphx_glr_plot_latin_thumb.png + :alt: Latin hypercube sampling + + :ref:`sphx_glr_auto_examples_sampler_plot_latin.py` + +.. raw:: html + + <div class="sphx-glr-thumbnail-title">Latin hypercube sampling</div> + </div> + + +.. raw:: html + + <div class="sphx-glr-thumbcontainer" tooltip="Metropolis Hastings sampling"> + +.. only:: html + + .. image:: /auto_examples/sampler/images/thumb/sphx_glr_plot_metropolis_hastings_thumb.png + :alt: Metropolis Hastings sampling + + :ref:`sphx_glr_auto_examples_sampler_plot_metropolis_hastings.py` + +.. raw:: html + + <div class="sphx-glr-thumbnail-title">Metropolis Hastings sampling</div> + </div> + + +.. raw:: html + + </div> + + +.. toctree:: + :hidden: + + /auto_examples/sampler/plot_saltelli + /auto_examples/sampler/plot_latin + /auto_examples/sampler/plot_metropolis_hastings + + +.. only:: html + + .. container:: sphx-glr-footer sphx-glr-footer-gallery + + .. container:: sphx-glr-download sphx-glr-download-python + + :download:`Download all examples in Python source code: sampler_python.zip </auto_examples/sampler/sampler_python.zip>` + + .. container:: sphx-glr-download sphx-glr-download-jupyter + + :download:`Download all examples in Jupyter notebooks: sampler_jupyter.zip </auto_examples/sampler/sampler_jupyter.zip>` + + +.. only:: html + + .. rst-class:: sphx-glr-signature + + `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.github.io>`_ diff --git a/docs/source/_build/html/_sources/auto_examples/sampler/plot_latin.rst.txt b/docs/source/_build/html/_sources/auto_examples/sampler/plot_latin.rst.txt new file mode 100644 index 0000000..3c1fd90 --- /dev/null +++ b/docs/source/_build/html/_sources/auto_examples/sampler/plot_latin.rst.txt @@ -0,0 +1,209 @@ + +.. DO NOT EDIT. +.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. +.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: +.. "auto_examples/sampler/plot_latin.py" +.. LINE NUMBERS ARE GIVEN BELOW. + +.. only:: html + + .. note:: + :class: sphx-glr-download-link-note + + Click :ref:`here <sphx_glr_download_auto_examples_sampler_plot_latin.py>` + to download the full example code + +.. rst-class:: sphx-glr-example-title + +.. _sphx_glr_auto_examples_sampler_plot_latin.py: + + +Latin hypercube sampling +======================== + +.. GENERATED FROM PYTHON SOURCE LINES 8-11 + +This example shows how to draw samples using Latin hypercube sampling. + + + +.. GENERATED FROM PYTHON SOURCE LINES 14-17 + +For the illustration purpose, let's have a look at a two-dimensional example +where we have two random variables X and Y. Each is uniformly distributed in its +range. + +.. GENERATED FROM PYTHON SOURCE LINES 18-25 + +.. code-block:: default + + + import numpy as np + + ndim = 2 + # range of X is 10 to 20, range of Y is -10 to 0 + bounds = np.array([[10,20], [-10,0]]) + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 26-28 + +Given this setting, we can import :class:`.Latin`, create an instance, and +call the :py:meth:`.Latin.sample` method to draw required number of samples + +.. GENERATED FROM PYTHON SOURCE LINES 29-36 + +.. code-block:: default + + + from psimpy.sampler import LHS + + # setting seed leads to same samples every time when the codes are run + lhs_sampler = LHS(ndim, bounds, seed=10) + lhs_samples = lhs_sampler.sample(nsamples=5) + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 37-38 + +The samples are plotted in the following figure. + +.. GENERATED FROM PYTHON SOURCE LINES 39-54 + +.. code-block:: default + + + import matplotlib.pyplot as plt + + fig , ax = plt.subplots(figsize=(6,4)) + + ax.scatter(lhs_samples[:,0], lhs_samples[:,1], s=10, c='blue', marker='o') + + ax.set_xlabel('X') + ax.set_ylabel('Y') + ax.set_xlim(bounds[0]) + ax.set_ylim(bounds[1]) + ax.set_title("Latin hypercube samples (criterion='random')") + _ = ax.grid(visible=True, which='major', axis='both') + + + + + +.. image-sg:: /auto_examples/sampler/images/sphx_glr_plot_latin_001.png + :alt: Latin hypercube samples (criterion='random') + :srcset: /auto_examples/sampler/images/sphx_glr_plot_latin_001.png + :class: sphx-glr-single-img + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 55-58 + +There are different criterions to pick samples in each hypercube. The default +is `random`, as used above. Other options are `center` and `maximin`. For instance, +we can use the `center` criterion to draw :math:`5` samples as follows: + +.. GENERATED FROM PYTHON SOURCE LINES 59-75 + +.. code-block:: default + + + lhs_sampler = LHS(ndim, bounds, criterion='center', seed=10) + lhs_samples = lhs_sampler.sample(nsamples=5) + + fig , ax = plt.subplots(figsize=(6,4)) + + ax.scatter(lhs_samples[:,0], lhs_samples[:,1], s=10, c='blue', marker='o') + + ax.set_xlabel('X') + ax.set_ylabel('Y') + ax.set_xlim(bounds[0]) + ax.set_ylim(bounds[1]) + ax.set_title("Latin hypercube samples (criterion='center')") + _ = ax.grid(visible=True, which='major', axis='both') + + + + + +.. image-sg:: /auto_examples/sampler/images/sphx_glr_plot_latin_002.png + :alt: Latin hypercube samples (criterion='center') + :srcset: /auto_examples/sampler/images/sphx_glr_plot_latin_002.png + :class: sphx-glr-single-img + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 76-77 + +And we can use the `maximin` criterion as follows: + +.. GENERATED FROM PYTHON SOURCE LINES 78-91 + +.. code-block:: default + + + lhs_sampler = LHS(ndim, bounds, criterion='maximin', seed=10, iteration=500) + lhs_samples = lhs_sampler.sample(nsamples=5) + + fig , ax = plt.subplots(figsize=(6,4)) + + ax.scatter(lhs_samples[:,0], lhs_samples[:,1], s=10, c='blue', marker='o') + + ax.set_xlabel('X') + ax.set_ylabel('Y') + ax.set_xlim(bounds[0]) + ax.set_ylim(bounds[1]) + ax.set_title("Latin hypercube samples (criterion='maximin')") + _ = ax.grid(visible=True, which='major', axis='both') + + +.. image-sg:: /auto_examples/sampler/images/sphx_glr_plot_latin_003.png + :alt: Latin hypercube samples (criterion='maximin') + :srcset: /auto_examples/sampler/images/sphx_glr_plot_latin_003.png + :class: sphx-glr-single-img + + + + + + +.. rst-class:: sphx-glr-timing + + **Total running time of the script:** ( 0 minutes 0.270 seconds) + + +.. _sphx_glr_download_auto_examples_sampler_plot_latin.py: + +.. only:: html + + .. container:: sphx-glr-footer sphx-glr-footer-example + + + .. container:: sphx-glr-download sphx-glr-download-python + + :download:`Download Python source code: plot_latin.py <plot_latin.py>` + + .. container:: sphx-glr-download sphx-glr-download-jupyter + + :download:`Download Jupyter notebook: plot_latin.ipynb <plot_latin.ipynb>` + + +.. only:: html + + .. rst-class:: sphx-glr-signature + + `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.github.io>`_ diff --git a/docs/source/_build/html/_sources/auto_examples/sampler/plot_metropolis_hastings.rst.txt b/docs/source/_build/html/_sources/auto_examples/sampler/plot_metropolis_hastings.rst.txt new file mode 100644 index 0000000..41772d3 --- /dev/null +++ b/docs/source/_build/html/_sources/auto_examples/sampler/plot_metropolis_hastings.rst.txt @@ -0,0 +1,248 @@ + +.. DO NOT EDIT. +.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. +.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: +.. "auto_examples/sampler/plot_metropolis_hastings.py" +.. LINE NUMBERS ARE GIVEN BELOW. + +.. only:: html + + .. note:: + :class: sphx-glr-download-link-note + + Click :ref:`here <sphx_glr_download_auto_examples_sampler_plot_metropolis_hastings.py>` + to download the full example code + +.. rst-class:: sphx-glr-example-title + +.. _sphx_glr_auto_examples_sampler_plot_metropolis_hastings.py: + + +Metropolis Hastings sampling +============================ + +.. GENERATED FROM PYTHON SOURCE LINES 8-22 + +This example shows how to draw samples using Metropolis Hastings sampling. +The target probability distribution is + +:math:`p(\mathbf{x})=p(x_1, x_2) \propto \exp \left(-\frac{1}{100}\left(x_1-1\right)^2-\left(x_1^2-x_2\right)^2\right)` + +where :math:`x_1 \in [-5,5]` and :math:`x_2 \in [-5,5]`. + +It should be noted that the right hand side of the equation is an unnormalized +probability density function since its integral is not equal to :math:`1`. +This can happen, for example, when the normalization constant is unknown or difficult +to compute. + +We can define the target probability distribution in Python as follows: + + +.. GENERATED FROM PYTHON SOURCE LINES 23-32 + +.. code-block:: default + + + import numpy as np + + def target_dist(x): + if (x[0]>=-5 and x[0]<=5) and (x[1]>=-5 and x[1]<=5): + return np.exp(-0.01*(x[0]-1)**2 - (x[0]**2-x[1])**2) + else: + return 0 + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 33-34 + +The figure below shows how the target distribution looks like. + +.. GENERATED FROM PYTHON SOURCE LINES 35-60 + +.. code-block:: default + + + import matplotlib.pyplot as plt + import itertools + + x1_values = np.linspace(-5,5.1,100) + x2_values = np.linspace(-5,5.1,100) + + target_values = np.zeros((100, 100)) + for i, j in itertools.product(range(100), range(100)): + x1 = x1_values[i] + x2 = x2_values[j] + target_values[i,j] = target_dist(np.array([x1, x2])) + + fig , ax = plt.subplots(figsize=(4,4)) + + ax.contourf(x1_values, x2_values, np.transpose(target_values), levels=10, cmap='Blues') + + ax.set_title('(unnormalized) target distribution') + ax.set_xlabel(r'$x_1$') + ax.set_ylabel(r'$x_2$') + ax.set_xlim(-5,5) + ax.set_ylim(-5,5) + plt.tight_layout() + + + + + +.. image-sg:: /auto_examples/sampler/images/sphx_glr_plot_metropolis_hastings_001.png + :alt: (unnormalized) target distribution + :srcset: /auto_examples/sampler/images/sphx_glr_plot_metropolis_hastings_001.png + :class: sphx-glr-single-img + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 61-67 + +To perform Metropolis Hastings sampling, we need to choose a proposal distribution +which can be used to determine a new state ``x'`` given a current state ``x`` at +each iteration. This is defined by the parameter ``f_sample`` which should be a +function. A usual choice is to choose the new state from a Gaussian distribution +centered at the current state. + + +.. GENERATED FROM PYTHON SOURCE LINES 68-75 + +.. code-block:: default + + + from scipy.stats import multivariate_normal + + f_sample = multivariate_normal.rvs + # make the samples reproducible + kwgs_f_sample = {'random_state': np.random.default_rng(seed=1)} + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 76-77 + +Then, we create an instance of :class:`.MetropolisHastings` class. + +.. GENERATED FROM PYTHON SOURCE LINES 78-85 + +.. code-block:: default + + + from psimpy.sampler.metropolis_hastings import MetropolisHastings + + mh_sampler = MetropolisHastings(ndim=2, init_state=np.array([-4,-4]), + f_sample=f_sample, target=target_dist, nburn=1000, nthin=5, + seed=1, kwgs_f_sample=kwgs_f_sample) + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 86-88 + +Next, we call the :py:meth:`.MetropolisHastings.sample` method to draw required +number of samples. + +.. GENERATED FROM PYTHON SOURCE LINES 89-95 + +.. code-block:: default + + + mh_samples, mh_accept = mh_sampler.sample(nsamples=5000) + + print("Acceptance ratio: ", np.mean(mh_accept)) + + + + + + +.. rst-class:: sphx-glr-script-out + + .. code-block:: none + + Acceptance ratio: 0.3712 + + + + +.. GENERATED FROM PYTHON SOURCE LINES 96-97 + +The following figure shows how the samples look like. + +.. GENERATED FROM PYTHON SOURCE LINES 98-117 + +.. code-block:: default + + + import matplotlib.pyplot as plt + import itertools + + # sphinx_gallery_thumbnail_number = 2 + fig , ax = plt.subplots(figsize=(4,4)) + + ax.contourf(x1_values, x2_values, np.transpose(target_values), levels=10, cmap='Blues') + ax.scatter(mh_samples[:,0], mh_samples[:,1], s=5, c='r', marker='o',alpha=0.05) + + ax.set_title('Metropolis Hastings samples') + ax.set_xlabel(r'$x_1$') + ax.set_ylabel(r'$x_2$') + ax.set_xlim(-5,5) + ax.set_ylim(-5,5) + plt.tight_layout() + + + + + + +.. image-sg:: /auto_examples/sampler/images/sphx_glr_plot_metropolis_hastings_002.png + :alt: Metropolis Hastings samples + :srcset: /auto_examples/sampler/images/sphx_glr_plot_metropolis_hastings_002.png + :class: sphx-glr-single-img + + + + + + +.. rst-class:: sphx-glr-timing + + **Total running time of the script:** ( 0 minutes 4.769 seconds) + + +.. _sphx_glr_download_auto_examples_sampler_plot_metropolis_hastings.py: + +.. only:: html + + .. container:: sphx-glr-footer sphx-glr-footer-example + + + .. container:: sphx-glr-download sphx-glr-download-python + + :download:`Download Python source code: plot_metropolis_hastings.py <plot_metropolis_hastings.py>` + + .. container:: sphx-glr-download sphx-glr-download-jupyter + + :download:`Download Jupyter notebook: plot_metropolis_hastings.ipynb <plot_metropolis_hastings.ipynb>` + + +.. only:: html + + .. rst-class:: sphx-glr-signature + + `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.github.io>`_ diff --git a/docs/source/_build/html/_sources/auto_examples/sampler/plot_saltelli.rst.txt b/docs/source/_build/html/_sources/auto_examples/sampler/plot_saltelli.rst.txt new file mode 100644 index 0000000..8204636 --- /dev/null +++ b/docs/source/_build/html/_sources/auto_examples/sampler/plot_saltelli.rst.txt @@ -0,0 +1,193 @@ + +.. DO NOT EDIT. +.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. +.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: +.. "auto_examples/sampler/plot_saltelli.py" +.. LINE NUMBERS ARE GIVEN BELOW. + +.. only:: html + + .. note:: + :class: sphx-glr-download-link-note + + Click :ref:`here <sphx_glr_download_auto_examples_sampler_plot_saltelli.py>` + to download the full example code + +.. rst-class:: sphx-glr-example-title + +.. _sphx_glr_auto_examples_sampler_plot_saltelli.py: + + +Saltelli sampling +================= + +.. GENERATED FROM PYTHON SOURCE LINES 8-11 + +This example shows how to draw samples using Saltelli sampling. +Assume that there is a three-dimensional problem where X, Y, and Z are the +three random variables. + +.. GENERATED FROM PYTHON SOURCE LINES 12-19 + +.. code-block:: default + + + import numpy as np + + ndim = 3 + # range of X is 10 to 20, range of Y is 100 to 200, range of Z is 1000 to 2000 + bounds = np.array([[10,20], [100,200], [1000,2000]]) + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 20-22 + +Given this setting, we can import :class:`.Saltelli`, create an instance, and +call the :py:meth:`.Saltelli.sample` method to draw required number of samples. + +.. GENERATED FROM PYTHON SOURCE LINES 23-29 + +.. code-block:: default + + + from psimpy.sampler import Saltelli + + saltelli_sampler = Saltelli(ndim, bounds, calc_second_order=False) + saltelli_samples = saltelli_sampler.sample(nbase=128) + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 30-34 + +In above codes, we set ``calc_second_order`` to `False`. It means that picked +samples can be used in following Sobol' analysis to compute first-order and +total-effect Sobol' indices but not second-order Sobol' indices. It leads to +:math:`nbase*(ndim+2)` samples as shown below + +.. GENERATED FROM PYTHON SOURCE LINES 35-51 + +.. code-block:: default + + + import matplotlib.pyplot as plt + + fig = plt.figure() + ax = fig.add_subplot(projection='3d') + + ax.scatter(saltelli_samples[:,0], saltelli_samples[:,1], saltelli_samples[:,2], marker='o') + ax.set_xlabel('X') + ax.set_ylabel('Y') + ax.set_zlabel('Z') + + plt.tight_layout() + + print('Number of samples: ', f'{len(saltelli_samples)}') + + + + + +.. image-sg:: /auto_examples/sampler/images/sphx_glr_plot_saltelli_001.png + :alt: plot saltelli + :srcset: /auto_examples/sampler/images/sphx_glr_plot_saltelli_001.png + :class: sphx-glr-single-img + + +.. rst-class:: sphx-glr-script-out + + .. code-block:: none + + Number of samples: 640 + + + + +.. GENERATED FROM PYTHON SOURCE LINES 52-55 + +If we want to draw samples which can also be used to compute second-order +Sobol' indices, we need to set ``calc_second_order`` to `True`. +It leads to :math:`nbase*(2*ndim+2)` samples. + +.. GENERATED FROM PYTHON SOURCE LINES 56-73 + +.. code-block:: default + + + saltelli_sampler = Saltelli(ndim, bounds, calc_second_order=True) + saltelli_samples = saltelli_sampler.sample(nbase=128) + + fig = plt.figure() + ax = fig.add_subplot(projection='3d') + + ax.scatter(saltelli_samples[:,0], saltelli_samples[:,1], saltelli_samples[:,2], marker='o') + ax.set_xlabel('X') + ax.set_ylabel('Y') + ax.set_zlabel('Z') + + plt.tight_layout() + + print('Number of samples: ', f'{len(saltelli_samples)}') + + + + + +.. image-sg:: /auto_examples/sampler/images/sphx_glr_plot_saltelli_002.png + :alt: plot saltelli + :srcset: /auto_examples/sampler/images/sphx_glr_plot_saltelli_002.png + :class: sphx-glr-single-img + + +.. rst-class:: sphx-glr-script-out + + .. code-block:: none + + Number of samples: 1024 + + + + +.. GENERATED FROM PYTHON SOURCE LINES 74-78 + +.. note:: If one has a two-dimensional problem, there is no need to set + ``calc_second_order`` to `True`. The reason is that the second-order Sobol' + index can be directly computed based on the first-order and total-effect + Sobol' index in that case. + + +.. rst-class:: sphx-glr-timing + + **Total running time of the script:** ( 0 minutes 0.309 seconds) + + +.. _sphx_glr_download_auto_examples_sampler_plot_saltelli.py: + +.. only:: html + + .. container:: sphx-glr-footer sphx-glr-footer-example + + + .. container:: sphx-glr-download sphx-glr-download-python + + :download:`Download Python source code: plot_saltelli.py <plot_saltelli.py>` + + .. container:: sphx-glr-download sphx-glr-download-jupyter + + :download:`Download Jupyter notebook: plot_saltelli.ipynb <plot_saltelli.ipynb>` + + +.. only:: html + + .. rst-class:: sphx-glr-signature + + `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.github.io>`_ diff --git a/docs/source/_build/html/_sources/auto_examples/sampler/sg_execution_times.rst.txt b/docs/source/_build/html/_sources/auto_examples/sampler/sg_execution_times.rst.txt new file mode 100644 index 0000000..4f0d609 --- /dev/null +++ b/docs/source/_build/html/_sources/auto_examples/sampler/sg_execution_times.rst.txt @@ -0,0 +1,16 @@ + +:orphan: + +.. _sphx_glr_auto_examples_sampler_sg_execution_times: + +Computation times +================= +**00:05.348** total execution time for **auto_examples_sampler** files: + ++-----------------------------------------------------------------------------------------------------+-----------+--------+ +| :ref:`sphx_glr_auto_examples_sampler_plot_metropolis_hastings.py` (``plot_metropolis_hastings.py``) | 00:04.769 | 0.0 MB | ++-----------------------------------------------------------------------------------------------------+-----------+--------+ +| :ref:`sphx_glr_auto_examples_sampler_plot_saltelli.py` (``plot_saltelli.py``) | 00:00.309 | 0.0 MB | ++-----------------------------------------------------------------------------------------------------+-----------+--------+ +| :ref:`sphx_glr_auto_examples_sampler_plot_latin.py` (``plot_latin.py``) | 00:00.270 | 0.0 MB | ++-----------------------------------------------------------------------------------------------------+-----------+--------+ diff --git a/docs/source/_build/html/_sources/auto_examples/sensitivity/index.rst.txt b/docs/source/_build/html/_sources/auto_examples/sensitivity/index.rst.txt new file mode 100644 index 0000000..7275650 --- /dev/null +++ b/docs/source/_build/html/_sources/auto_examples/sensitivity/index.rst.txt @@ -0,0 +1,57 @@ +:orphan: + +Sensitivity +=========== + + +.. raw:: html + + <div class="sphx-glr-thumbnails"> + + +.. raw:: html + + <div class="sphx-glr-thumbcontainer" tooltip="Sobol' analysis"> + +.. only:: html + + .. image:: /auto_examples/sensitivity/images/thumb/sphx_glr_plot_sobol_analyze_thumb.png + :alt: Sobol' analysis + + :ref:`sphx_glr_auto_examples_sensitivity_plot_sobol_analyze.py` + +.. raw:: html + + <div class="sphx-glr-thumbnail-title">Sobol' analysis</div> + </div> + + +.. raw:: html + + </div> + + +.. toctree:: + :hidden: + + /auto_examples/sensitivity/plot_sobol_analyze + + +.. only:: html + + .. container:: sphx-glr-footer sphx-glr-footer-gallery + + .. container:: sphx-glr-download sphx-glr-download-python + + :download:`Download all examples in Python source code: sensitivity_python.zip </auto_examples/sensitivity/sensitivity_python.zip>` + + .. container:: sphx-glr-download sphx-glr-download-jupyter + + :download:`Download all examples in Jupyter notebooks: sensitivity_jupyter.zip </auto_examples/sensitivity/sensitivity_jupyter.zip>` + + +.. only:: html + + .. rst-class:: sphx-glr-signature + + `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.github.io>`_ diff --git a/docs/source/_build/html/_sources/auto_examples/sensitivity/plot_sobol_analyze.rst.txt b/docs/source/_build/html/_sources/auto_examples/sensitivity/plot_sobol_analyze.rst.txt new file mode 100644 index 0000000..4309db9 --- /dev/null +++ b/docs/source/_build/html/_sources/auto_examples/sensitivity/plot_sobol_analyze.rst.txt @@ -0,0 +1,358 @@ + +.. DO NOT EDIT. +.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. +.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: +.. "auto_examples/sensitivity/plot_sobol_analyze.py" +.. LINE NUMBERS ARE GIVEN BELOW. + +.. only:: html + + .. note:: + :class: sphx-glr-download-link-note + + Click :ref:`here <sphx_glr_download_auto_examples_sensitivity_plot_sobol_analyze.py>` + to download the full example code + +.. rst-class:: sphx-glr-example-title + +.. _sphx_glr_auto_examples_sensitivity_plot_sobol_analyze.py: + + +Sobol' analysis +=============== + +.. GENERATED FROM PYTHON SOURCE LINES 8-16 + +This example shows how to compute Sobol' sensitivity indices using +the :class:`.SobolAnalyze` class. + +Let us consider the Ishigami function :cite:p:`LeGratiet2014` + +:math:`y=f\left(x_1, x_2, x_3\right)=\sin \left(x_1\right)+7 \sin \left(\mathrm{x}_2\right)^2+0.1 x_3^4 \sin \left(x_1\right)` + +where :math:`x_i` is uniformly distributed on :math:`[-\pi, \pi]` for :math:`i \in [1,2,3]`. We define the function as follows: + +.. GENERATED FROM PYTHON SOURCE LINES 17-24 + +.. code-block:: default + + + import numpy as np + + def f(x1,x2,x3): + return np.sin(x1) + 7*np.sin(x2)**2 + 0.1*x3**4*np.sin(x1) + + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 25-32 + +The variation of each :math:`x_i` leads to the variation of :math:`y`. Sobol' analysis is used to quantify the contribution +of each :math:`x_i` and their interactions to the variation of :math:`y`. Steps of a Sobol' analysis are: + + #. Draw samples of input. + #. Evaluate the model at each input sample to obtain model output. + #. Compute Sobol' indices based on model outputs. + + +.. GENERATED FROM PYTHON SOURCE LINES 33-57 + +.. code-block:: default + + + from psimpy.sampler import Saltelli + from psimpy.sensitivity import SobolAnalyze + + ndim = 3 + bounds = np.array([[-np.pi, np.pi], [-np.pi, np.pi], [-np.pi, np.pi]]) + calc_second_order = False + nbase = 1024 + + # draw Saltelli samples + saltelli_sampler = Saltelli(ndim, bounds, calc_second_order) + saltelli_samples = saltelli_sampler.sample(nbase) + + # Evaluate the model to obtain model outputs + Y = f(saltelli_samples[:,0], saltelli_samples[:,1], saltelli_samples[:, 2]) + + # Compute Sobol' indices + sobol_analyzer = SobolAnalyze(ndim, Y, calc_second_order, seed=2) + S_res = sobol_analyzer.run() + + print("Estimated first-order Sobol' index: ", S_res['S1'][:,0]) + print("Analytical solution: [0.314, 0.442, 0]") + + + + + + +.. rst-class:: sphx-glr-script-out + + .. code-block:: none + + Estimated first-order Sobol' index: [0.31430871 0.44545644 0.01325799] + Analytical solution: [0.314, 0.442, 0] + + + + +.. GENERATED FROM PYTHON SOURCE LINES 58-62 + +Figure below shows the results. The bar plots represent estimated first-order +and total-effect Sobol' indices, as well as their 95% confidence interval. The +red stars represent true values of the first-order Sobol' indices. + + +.. GENERATED FROM PYTHON SOURCE LINES 63-103 + +.. code-block:: default + + + import matplotlib.pyplot as plt + + name_vars = [r'$x_1$',r'$x_2$',r'$x_3$'] + x = {'S1':[1,4,7], 'ST':[2,5,8]} + color = {'S1':'#69b3a2', 'ST':'#3399e6'} + width=0.8 + capsize=3 + + fig, ax1 = plt.subplots(figsize=(4,3)) + + # estimated first-order Sobol' indices and their confidence interval + ax1.bar(x['S1'], S_res['S1'][:,0], width=width, yerr=S_res['S1'][:,2], color=color['S1'], capsize=capsize) + + ax1.axis([0,9,0,0.7]) + ax1.set_xticks([1.5,4.5,7.5]) + ax1.set_xticklabels(name_vars) + ax1.tick_params(axis='both',bottom=False) + ax1.tick_params(axis="y", labelcolor=color['S1']) + ax1.yaxis.grid(True, linestyle='--', which='major', color='grey', alpha=.25) + ax1.set_ylabel('First-order index', color=color['S1']) + + # analytical solution for first-order indices + ax1.scatter(x['S1'], [0.314, 0.442, 0], s=30, c='red', marker='*') + + + # estimated total-effect Sobol' indices and their confidence interval + ax2 = ax1.twinx() + ax2.bar(x['ST'], S_res['ST'][:,0], width=width, yerr=S_res['ST'][:,2], color=color['ST'], capsize=capsize) + + ax2.axis([0,9,0,0.7]) + ax2.set_xticks([1.5,4.5,7.5]) + ax2.tick_params(axis='both',bottom=False) + ax2.tick_params(axis="y", labelcolor=color['ST']) + ax2.yaxis.grid(True, linestyle='--', which='major', color='grey', alpha=.25) + ax2.set_ylabel('Total-effect index', color=color['ST']) + + plt.tight_layout() + + + + + +.. image-sg:: /auto_examples/sensitivity/images/sphx_glr_plot_sobol_analyze_001.png + :alt: plot sobol analyze + :srcset: /auto_examples/sensitivity/images/sphx_glr_plot_sobol_analyze_001.png + :class: sphx-glr-single-img + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 104-109 + +.. note:: The interaction between one parameter and all other parameters can be + quantified by the difference between its first-order and total-effet Sobol' + indices. If detailed information on interaction between any two parameters + is needed, one can set ``calc_second_order`` to `True`. + + +.. GENERATED FROM PYTHON SOURCE LINES 112-128 + +**Many models of interest in real-world applications are very computationally +expensive. In that case, we resort to emulation techniques in order to efficiently +conduct Sobol' analysis.** See :cite:t:`Zhao2021a` for the detailed theory. + +Steps of such an analysis are: + + #. Draw input samples for emulator training. + #. Evaluate the model at each training input point to obtain training data. + #. Train an emulator for the computationally expensive model of interest. + #. Draw samples of input for Sobol' analysis. + #. Evaluate the emulator at each input sample at step 3 to obtain approximated model outputs. + #. Compute Sobol' indices based on approximated model outputs. + +Assume that the above Ishigami function is computationally expensive, an emulator-based +Sobol' analysis can be conducted as follows: + + +.. GENERATED FROM PYTHON SOURCE LINES 129-178 + +.. code-block:: default + + + import numpy as np + from psimpy.sampler import LHS + from psimpy.emulator import ScalarGaSP + from psimpy.sampler import Saltelli + from psimpy.sensitivity import SobolAnalyze + + # define the model + def f(x1,x2,x3): + return np.sin(x1) + 7*np.sin(x2)**2 + 0.1*x3**4*np.sin(x1) + + ndim = 3 + bounds = np.array([[-np.pi, np.pi], [-np.pi, np.pi], [-np.pi, np.pi]]) + seed = 2 + + # draw 100 input samples for emulator training using Latin hypercube sampling + lhs_sampler = LHS(ndim, bounds, seed, criterion='maximin', iteration=200) + design = lhs_sampler.sample(nsamples=100) + + # evaluate the model at each training input point + response = f(design[:,0], design[:,1], design[:,2]) + + # train an emulator + scalar_gasp = ScalarGaSP(ndim) + scalar_gasp.train(design, response) + + # the trained emulator needs to be validated before moving on + # here we leave out this step for simplicity... + + # draw samples of input for Sobol' analysis + calc_second_order = False + nbase = 1024 + + saltelli_sampler = Saltelli(ndim, bounds, calc_second_order) + saltelli_samples = saltelli_sampler.sample(nbase) + + # evaluate the emulator to obtain approximated model output. + # in order to take emulator-induced uncertainty into account, we draw 50 realizations + # from the emulator + Y = scalar_gasp.sample(saltelli_samples, 50) + + # Compute Sobol' indices based on approximated model outputs + sobol_analyzer = SobolAnalyze(ndim, Y, calc_second_order, seed=seed) + S_res = sobol_analyzer.run(mode='parallel', max_workers=5) + + print("\n") + print("Emulator-based first-order Sobol' index: ", S_res['S1'][:,0]) + print("Analytical solution: [0.314, 0.442, 0]") + + + + + +.. rst-class:: sphx-glr-script-out + + .. code-block:: none + + The upper bounds of the range parameters are 173,6849 174,6991 174,3157 + The initial values of range parameters are 3,473697 3,493981 3,486314 + Start of the optimization 1 : + The number of iterations is 14 + The value of the marginal posterior function is -284,0714 + Optimized range parameters are 3,183999 2,786247 4,315419 + Optimized nugget parameter is 0 + Convergence: TRUE + The initial values of range parameters are 1,721972 1,732027 1,728226 + Start of the optimization 2 : + The number of iterations is 14 + The value of the marginal posterior function is -284,0714 + Optimized range parameters are 3,183999 2,786247 4,315419 + Optimized nugget parameter is 0 + Convergence: TRUE + + + Emulator-based first-order Sobol' index: [0.29064086 0.46853437 0.01096656] + Analytical solution: [0.314, 0.442, 0] + + + + +.. GENERATED FROM PYTHON SOURCE LINES 179-182 + +The following figure shows how the results of emulator-based Sobol' analysis +look like. + + +.. GENERATED FROM PYTHON SOURCE LINES 182-213 + +.. code-block:: default + + + import matplotlib.pyplot as plt + + name_vars = [r'$x_1$',r'$x_2$',r'$x_3$'] + x = {'S1':[1,4,7], 'ST':[2,5,8]} + color = {'S1':'#69b3a2', 'ST':'#3399e6'} + width=0.8 + capsize=3 + + fig, ax1 = plt.subplots(figsize=(4,3)) + + ax1.bar(x['S1'], S_res['S1'][:,0], width=width, yerr=S_res['S1'][:,2], color=color['S1'], capsize=capsize) + ax1.axis([0,9,0,0.7]) + ax1.set_xticks([1.5,4.5,7.5]) + ax1.set_xticklabels(name_vars) + ax1.tick_params(axis='both',bottom=False) + ax1.tick_params(axis="y", labelcolor=color['S1']) + ax1.yaxis.grid(True, linestyle='--', which='major', color='grey', alpha=.25) + ax1.set_ylabel('First-order index', color=color['S1']) + + ax1.scatter(x['S1'], [0.314, 0.442, 0], s=30, c='red', marker='*') + + ax2 = ax1.twinx() + ax2.bar(x['ST'], S_res['ST'][:,0], width=width, yerr=S_res['ST'][:,2], color=color['ST'], capsize=capsize) + ax2.axis([0,9,0,0.7]) + ax2.set_xticks([1.5,4.5,7.5]) + ax2.tick_params(axis='both',bottom=False) + ax2.tick_params(axis="y", labelcolor=color['ST']) + ax2.yaxis.grid(True, linestyle='--', which='major', color='grey', alpha=.25) + ax2.set_ylabel('Total-effect index', color=color['ST']) + + plt.tight_layout() + + +.. image-sg:: /auto_examples/sensitivity/images/sphx_glr_plot_sobol_analyze_002.png + :alt: plot sobol analyze + :srcset: /auto_examples/sensitivity/images/sphx_glr_plot_sobol_analyze_002.png + :class: sphx-glr-single-img + + + + + + +.. rst-class:: sphx-glr-timing + + **Total running time of the script:** ( 0 minutes 16.499 seconds) + + +.. _sphx_glr_download_auto_examples_sensitivity_plot_sobol_analyze.py: + +.. only:: html + + .. container:: sphx-glr-footer sphx-glr-footer-example + + + .. container:: sphx-glr-download sphx-glr-download-python + + :download:`Download Python source code: plot_sobol_analyze.py <plot_sobol_analyze.py>` + + .. container:: sphx-glr-download sphx-glr-download-jupyter + + :download:`Download Jupyter notebook: plot_sobol_analyze.ipynb <plot_sobol_analyze.ipynb>` + + +.. only:: html + + .. rst-class:: sphx-glr-signature + + `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.github.io>`_ diff --git a/docs/source/_build/html/_sources/auto_examples/sensitivity/sg_execution_times.rst.txt b/docs/source/_build/html/_sources/auto_examples/sensitivity/sg_execution_times.rst.txt new file mode 100644 index 0000000..77cb35d --- /dev/null +++ b/docs/source/_build/html/_sources/auto_examples/sensitivity/sg_execution_times.rst.txt @@ -0,0 +1,12 @@ + +:orphan: + +.. _sphx_glr_auto_examples_sensitivity_sg_execution_times: + +Computation times +================= +**00:16.499** total execution time for **auto_examples_sensitivity** files: + ++---------------------------------------------------------------------------------------------+-----------+--------+ +| :ref:`sphx_glr_auto_examples_sensitivity_plot_sobol_analyze.py` (``plot_sobol_analyze.py``) | 00:16.499 | 0.0 MB | ++---------------------------------------------------------------------------------------------+-----------+--------+ diff --git a/docs/source/_build/html/_sources/auto_examples/simulator/index.rst.txt b/docs/source/_build/html/_sources/auto_examples/simulator/index.rst.txt new file mode 100644 index 0000000..c994f61 --- /dev/null +++ b/docs/source/_build/html/_sources/auto_examples/simulator/index.rst.txt @@ -0,0 +1,112 @@ +:orphan: + +Simulator +========= + + + +.. raw:: html + + <div class="sphx-glr-thumbnails"> + + +.. raw:: html + + <div class="sphx-glr-thumbcontainer" tooltip="Mass Point Model"> + +.. only:: html + + .. image:: /auto_examples/simulator/images/thumb/sphx_glr_plot_mass_point_model_thumb.png + :alt: Mass Point Model + + :ref:`sphx_glr_auto_examples_simulator_plot_mass_point_model.py` + +.. raw:: html + + <div class="sphx-glr-thumbnail-title">Mass Point Model</div> + </div> + + +.. raw:: html + + <div class="sphx-glr-thumbcontainer" tooltip="RunSimulator: Mass Point Model"> + +.. only:: html + + .. image:: /auto_examples/simulator/images/thumb/sphx_glr_plot_run_mass_point_model_thumb.png + :alt: RunSimulator: Mass Point Model + + :ref:`sphx_glr_auto_examples_simulator_plot_run_mass_point_model.py` + +.. raw:: html + + <div class="sphx-glr-thumbnail-title">RunSimulator: Mass Point Model</div> + </div> + + +.. raw:: html + + <div class="sphx-glr-thumbcontainer" tooltip="Ravaflow24 Mixture Model"> + +.. only:: html + + .. image:: /auto_examples/simulator/images/thumb/sphx_glr_plot_ravaflow24_thumb.png + :alt: Ravaflow24 Mixture Model + + :ref:`sphx_glr_auto_examples_simulator_plot_ravaflow24.py` + +.. raw:: html + + <div class="sphx-glr-thumbnail-title">Ravaflow24 Mixture Model</div> + </div> + + +.. raw:: html + + <div class="sphx-glr-thumbcontainer" tooltip="RunSimulator: Ravaflow24 Mixture Model"> + +.. only:: html + + .. image:: /auto_examples/simulator/images/thumb/sphx_glr_plot_run_ravaflow24_thumb.png + :alt: RunSimulator: Ravaflow24 Mixture Model + + :ref:`sphx_glr_auto_examples_simulator_plot_run_ravaflow24.py` + +.. raw:: html + + <div class="sphx-glr-thumbnail-title">RunSimulator: Ravaflow24 Mixture Model</div> + </div> + + +.. raw:: html + + </div> + + +.. toctree:: + :hidden: + + /auto_examples/simulator/plot_mass_point_model + /auto_examples/simulator/plot_run_mass_point_model + /auto_examples/simulator/plot_ravaflow24 + /auto_examples/simulator/plot_run_ravaflow24 + + +.. only:: html + + .. container:: sphx-glr-footer sphx-glr-footer-gallery + + .. container:: sphx-glr-download sphx-glr-download-python + + :download:`Download all examples in Python source code: simulator_python.zip </auto_examples/simulator/simulator_python.zip>` + + .. container:: sphx-glr-download sphx-glr-download-jupyter + + :download:`Download all examples in Jupyter notebooks: simulator_jupyter.zip </auto_examples/simulator/simulator_jupyter.zip>` + + +.. only:: html + + .. rst-class:: sphx-glr-signature + + `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.github.io>`_ diff --git a/docs/source/_build/html/_sources/auto_examples/simulator/plot_mass_point_model.rst.txt b/docs/source/_build/html/_sources/auto_examples/simulator/plot_mass_point_model.rst.txt new file mode 100644 index 0000000..ce38db1 --- /dev/null +++ b/docs/source/_build/html/_sources/auto_examples/simulator/plot_mass_point_model.rst.txt @@ -0,0 +1,259 @@ + +.. DO NOT EDIT. +.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. +.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: +.. "auto_examples/simulator/plot_mass_point_model.py" +.. LINE NUMBERS ARE GIVEN BELOW. + +.. only:: html + + .. note:: + :class: sphx-glr-download-link-note + + Click :ref:`here <sphx_glr_download_auto_examples_simulator_plot_mass_point_model.py>` + to download the full example code + +.. rst-class:: sphx-glr-example-title + +.. _sphx_glr_auto_examples_simulator_plot_mass_point_model.py: + + +Mass Point Model +================ + +.. GENERATED FROM PYTHON SOURCE LINES 8-12 + +This example shows how to simulate the movement of a masspoint on a topography +using :class:`.MassPointModel`. + + + +.. GENERATED FROM PYTHON SOURCE LINES 15-16 + +First, import the class :class:`.MassPointModel` and create an instance by + +.. GENERATED FROM PYTHON SOURCE LINES 17-22 + +.. code-block:: default + + + from psimpy.simulator import MassPointModel + + mpm = MassPointModel() + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 23-31 + +Required inputs for a simulation using :class:`.MassPointModel` include: + 1. topographic data: digital elevation model (in `ESRI ascii` format) + 2. friction coefficients: coulomb friction and turbulent friction coefficients + 3. initial state: initial location and initial velocity of the masspoint + 4. computational parameters: such as time step, end time, etc. + +The synthetic topography ``synthetic_topo.asc`` is used here for illustration. +It is located at the `tests/data/` folder. + +.. GENERATED FROM PYTHON SOURCE LINES 32-41 + +.. code-block:: default + + + import os + import linecache + import numpy as np + + dir_data = os.path.abspath('../../../tests/data/') + elevation = os.path.join(dir_data, 'synthetic_topo.asc') + + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 42-44 + +.. note:: You may need to modify ``dir_data`` according to where you save + ``synthetic_topo.asc`` on your local machine. + +.. GENERATED FROM PYTHON SOURCE LINES 46-49 + +We can load the elevation data and visulize it. The figure below shows how +the topography looks like, as well as the initial location of the masspoint +(noted by the red dot). + +.. GENERATED FROM PYTHON SOURCE LINES 49-90 + +.. code-block:: default + + + header = [linecache.getline(elevation, i) for i in range(1,6)] + header_values = [float(h.split()[-1].strip()) for h in header] + ncols, nrows, xll, yll, cellsize = header_values + ncols = int(ncols) + nrows = int(nrows) + + x_values = np.arange(xll, xll+(cellsize*ncols), cellsize) + y_values = np.arange(yll, yll+(cellsize*nrows), cellsize) + + z_values = np.loadtxt(elevation, skiprows=6) + z_values = np.rot90(np.transpose(z_values)) + + # initial location + x0 = 200 + y0 = 2000 + z0 = z_values[0, int(x0/cellsize)] + + import matplotlib.pyplot as plt + + fig, ax = plt.subplots(2, 1, figsize=(10,6), height_ratios=[3,2]) + + fig0 = ax[0].contourf(x_values, y_values, z_values, levels=20) + ax[0].set_xlabel('x') + ax[0].set_ylabel('y') + ax[0].set_title('synthetic topography') + ax[0].scatter(x0, y0, s=10, c='r', marker='o') + cbar = plt.colorbar(fig0, ax=ax[0], format='%d', orientation='horizontal', + fraction=0.1, pad=0.2) + cbar.ax.set_ylabel('z') + + + ax[1].plot(x_values, z_values[0, :]) + ax[1].scatter(x0, z0, s=10, c='r', marker='o') + ax[1].set_xlabel('x') + ax[1].set_ylabel('z') + ax[1].set_xlim(0, 5000) + ax[1].set_title('cross section at any y') + + plt.tight_layout() + + + + +.. image-sg:: /auto_examples/simulator/images/sphx_glr_plot_mass_point_model_001.png + :alt: synthetic topography, cross section at any y + :srcset: /auto_examples/simulator/images/sphx_glr_plot_mass_point_model_001.png + :class: sphx-glr-single-img + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 91-92 + +We set the friction coefficients as + +.. GENERATED FROM PYTHON SOURCE LINES 92-96 + +.. code-block:: default + + + mu = 0.15 + xi = 1000 + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 97-101 + +Given above topography, initial location, and friction coefficients, we can +call the :py:meth:`.MassPointModel.run` method to perform a simulation. Other +parameters are set to their default values. (we suppress raised warnings ) +(other parameters are set to their default values). + +.. GENERATED FROM PYTHON SOURCE LINES 101-107 + +.. code-block:: default + + + import warnings + + warnings.filterwarnings("ignore") + output = mpm.run(elevation=elevation, coulomb_friction=mu, turbulent_friction=xi, x0=x0, y0=y0) + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 108-110 + +The simulation returns time history of the mass point's location and velocity. +Following plots show the simulation results. + +.. GENERATED FROM PYTHON SOURCE LINES 110-129 + +.. code-block:: default + + + fig, ax = plt.subplots(3, 1, figsize=(10,6)) + + ax[0].set_xlabel('time (s)') + ax[0].set_ylabel('x') + ax[0].set_title("x-t plot") + ax[0].plot(output[:,0], output[:,1]) + + ax[1].set_xlabel('time (s)') + ax[1].set_ylabel('velocity') + ax[1].set_title("v-t plot") + ax[1].plot(output[:,0], output[:,5]) + + ax[2].set_xlabel('x') + ax[2].set_ylabel('velocity') + ax[2].set_title("x-v plot") + ax[2].plot(output[:,1], output[:,5]) + + plt.tight_layout() + + + +.. image-sg:: /auto_examples/simulator/images/sphx_glr_plot_mass_point_model_002.png + :alt: x-t plot, v-t plot, x-v plot + :srcset: /auto_examples/simulator/images/sphx_glr_plot_mass_point_model_002.png + :class: sphx-glr-single-img + + + + + + +.. rst-class:: sphx-glr-timing + + **Total running time of the script:** ( 0 minutes 1.550 seconds) + + +.. _sphx_glr_download_auto_examples_simulator_plot_mass_point_model.py: + +.. only:: html + + .. container:: sphx-glr-footer sphx-glr-footer-example + + + .. container:: sphx-glr-download sphx-glr-download-python + + :download:`Download Python source code: plot_mass_point_model.py <plot_mass_point_model.py>` + + .. container:: sphx-glr-download sphx-glr-download-jupyter + + :download:`Download Jupyter notebook: plot_mass_point_model.ipynb <plot_mass_point_model.ipynb>` + + +.. only:: html + + .. rst-class:: sphx-glr-signature + + `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.github.io>`_ diff --git a/docs/source/_build/html/_sources/auto_examples/simulator/plot_ravaflow24.rst.txt b/docs/source/_build/html/_sources/auto_examples/simulator/plot_ravaflow24.rst.txt new file mode 100644 index 0000000..4737357 --- /dev/null +++ b/docs/source/_build/html/_sources/auto_examples/simulator/plot_ravaflow24.rst.txt @@ -0,0 +1,304 @@ + +.. DO NOT EDIT. +.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. +.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: +.. "auto_examples/simulator/plot_ravaflow24.py" +.. LINE NUMBERS ARE GIVEN BELOW. + +.. only:: html + + .. note:: + :class: sphx-glr-download-link-note + + Click :ref:`here <sphx_glr_download_auto_examples_simulator_plot_ravaflow24.py>` + to download the full example code + +.. rst-class:: sphx-glr-example-title + +.. _sphx_glr_auto_examples_simulator_plot_ravaflow24.py: + + +Ravaflow24 Mixture Model +======================== + +.. GENERATED FROM PYTHON SOURCE LINES 8-12 + +This example shows how to simulate mass flow on a topography using +:class:`.Ravaflow24Mixture`. + + + +.. GENERATED FROM PYTHON SOURCE LINES 15-16 + +First, import the class :class:`.Ravaflow24Mixture` by + +.. GENERATED FROM PYTHON SOURCE LINES 17-20 + +.. code-block:: default + + + from psimpy.simulator import Ravaflow24Mixture + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 21-24 + +To create an instance of this class, we must specify the parameter ``dir_sim``. +It represents the directory in which output files generated by r.avaflow will be +saved. + +.. GENERATED FROM PYTHON SOURCE LINES 25-35 + +.. code-block:: default + + + import os + + # Here we create a folder called `temp_Ravaflow24Mixture_example` to save output + # files generated by r.avaflow + cwd = os.getcwd() + if not os.path.exists('temp_Ravaflow24Mixture_example'): + os.mkdir('temp_Ravaflow24Mixture_example') + dir_sim = os.path.join(cwd, 'temp_Ravaflow24Mixture_example') + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 36-40 + +Now, we can create an instance of :class:`.Ravaflow24Mixture` by given +``dir_sim`` and leaving other parameters to their default values +(Other parameters include ``time_step``, ``time_end``, ``curvature_control``, +``entrainment_control``, ``stopping_control``, etc.) + +.. GENERATED FROM PYTHON SOURCE LINES 41-44 + +.. code-block:: default + + + voellmy_model = Ravaflow24Mixture(dir_sim) + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 45-57 + +To run a simulation using above `voellmy_model`, one needs to specify + 1. ``elevation`` – Name of elevation raster file (including its path). + 2. ``hrelease`` – Name of release height raster file (including its path). + 3. ``prefix`` – Prefix required by r.avaflow to name output files. + 4. If ``elevation`` is not a georeferenced file which can be used to create + a `GRASS Location`, ``EPSG`` must be provided. + +Other optional parameters include ``internal_friction``, ``basal_friction``, +``turbulent_friction``, ``entrainment_coef`` etc. + +The synthetic topography ``synthetic_topo.tif`` and release mass ``synthetic_rel.tif`` +are used here for illustration. They are located at the `/tests/data/` folder. + +.. GENERATED FROM PYTHON SOURCE LINES 58-64 + +.. code-block:: default + + + dir_data = os.path.abspath('../../../tests/data/') + elevation = os.path.join(dir_data, 'synthetic_topo.tif') + hrelease = os.path.join(dir_data, 'synthetic_rel.tif') + prefix = 'synthetic' + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 65-67 + +.. note:: You may need to modify ``dir_data`` according to where you save them + on your local machine. + +.. GENERATED FROM PYTHON SOURCE LINES 70-73 + +Given above inputs, we can create a `GRASS Location` and a shell file by calling +:py:meth:`.Ravaflow24Mixture.preprocess` method, and run the simulation using +:py:meth:`.Ravaflow24Mixture.run` method + +.. GENERATED FROM PYTHON SOURCE LINES 74-79 + +.. code-block:: default + + + grass_location, sh_file = voellmy_model.preprocess( + prefix=prefix, elevation=elevation, hrelease=hrelease, EPSG='2326') + voellmy_model.run(grass_location, sh_file) + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 80-86 + +Once the simulation is finished, the results are located in the folder +`/dir_sim/your_prefix_results`. In this case, they are located in +`/temp_Ravaflow24Mixture_example/synthetic_results`. We can extract desired +outputs using respective method and visualize them. +For example, we can extract the overall impact area, maximum flow velocity, or +maximum flow velocity at specific locations: + +.. GENERATED FROM PYTHON SOURCE LINES 87-104 + +.. code-block:: default + + + import numpy as np + + # overall impact area + impact_area = voellmy_model.extract_impact_area(prefix) + print(f"Impact_area is {impact_area} m^2") + + # overall maximum flow velocity + v_mmax = voellmy_model.extract_qoi_max(prefix, 'v', aggregate=True) + print(f"Maximum flow velocity is {v_mmax} m/s^2") + + # maximum flow velocity at specific locations + loc = np.array([[500, 2000], [1500, 2000]]) + v_max_loc = voellmy_model.extract_qoi_max_loc(prefix, loc, 'v') + print(f"Maximum flow velocity at location {loc[0]} is {v_max_loc[0]} m/s^2") + print(f"Maximum flow velocity at location {loc[1]} is {v_max_loc[1]} m/s^2") + + + + + +.. rst-class:: sphx-glr-script-out + + .. code-block:: none + + Impact_area is 1394800.0 m^2 + Maximum flow velocity is 41.39 m/s^2 + Maximum flow velocity at location [ 500 2000] is 34.264 m/s^2 + Maximum flow velocity at location [1500 2000] is 36.689 m/s^2 + + + + +.. GENERATED FROM PYTHON SOURCE LINES 105-106 + +We can visulize point-wise maximum flow height and velocity using heatmaps: + +.. GENERATED FROM PYTHON SOURCE LINES 107-144 + +.. code-block:: default + + + import matplotlib.pyplot as plt + import linecache + + # extract head information of result ascii files and compute x and y coordinates + hmax_asc = os.path.join(dir_sim, f'{prefix}_results', f'{prefix}_ascii', f'{prefix}_hflow_max.asc') + + header = [linecache.getline(hmax_asc, i) for i in range(1,6)] + header_values = [float(h.split()[-1].strip()) for h in header] + ncols, nrows, xll, yll, cellsize = header_values + ncols = int(ncols) + nrows = int(nrows) + + x = np.arange(xll, xll+(cellsize*ncols), cellsize) + y = np.arange(yll, yll+(cellsize*nrows), cellsize) + + # point-wise maximum flow height + h_max = voellmy_model.extract_qoi_max(prefix, 'h', aggregate=False) + # point-wise maximum flow velocity + v_max = voellmy_model.extract_qoi_max(prefix, 'v', aggregate=False) + + fig, ax = plt.subplots(2, 1, figsize=(10,6)) + + fig0 = ax[0].contourf(x, y, h_max, levels=20) + ax[0].set_xlabel('x') + ax[0].set_ylabel('y') + ax[0].set_title('maximum flow height' + r' $(m/s)$') + cbar0 = plt.colorbar(fig0, ax=ax[0], format='%.1f', orientation='vertical', fraction=0.1) + + fig1 = ax[1].contourf(x, y, v_max, levels=20) + ax[1].set_xlabel('x') + ax[1].set_ylabel('y') + ax[1].set_title('maximum flow velocity' + r' ($m/s^2$)') + cbar1 = plt.colorbar(fig1, ax=ax[1], format='%.1f', orientation='vertical', fraction=0.1) + + plt.tight_layout() + + + + +.. image-sg:: /auto_examples/simulator/images/sphx_glr_plot_ravaflow24_001.png + :alt: maximum flow height $(m/s)$, maximum flow velocity ($m/s^2$) + :srcset: /auto_examples/simulator/images/sphx_glr_plot_ravaflow24_001.png + :class: sphx-glr-single-img + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 145-146 + +Here we delete the folder `temp_Ravaflow24Mixture_example` and all files therein. + +.. GENERATED FROM PYTHON SOURCE LINES 147-151 + +.. code-block:: default + + + import shutil + + shutil.rmtree(dir_sim) + + + + + + + + +.. rst-class:: sphx-glr-timing + + **Total running time of the script:** ( 5 minutes 56.157 seconds) + + +.. _sphx_glr_download_auto_examples_simulator_plot_ravaflow24.py: + +.. only:: html + + .. container:: sphx-glr-footer sphx-glr-footer-example + + + .. container:: sphx-glr-download sphx-glr-download-python + + :download:`Download Python source code: plot_ravaflow24.py <plot_ravaflow24.py>` + + .. container:: sphx-glr-download sphx-glr-download-jupyter + + :download:`Download Jupyter notebook: plot_ravaflow24.ipynb <plot_ravaflow24.ipynb>` + + +.. only:: html + + .. rst-class:: sphx-glr-signature + + `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.github.io>`_ diff --git a/docs/source/_build/html/_sources/auto_examples/simulator/plot_run_mass_point_model.rst.txt b/docs/source/_build/html/_sources/auto_examples/simulator/plot_run_mass_point_model.rst.txt new file mode 100644 index 0000000..c969e75 --- /dev/null +++ b/docs/source/_build/html/_sources/auto_examples/simulator/plot_run_mass_point_model.rst.txt @@ -0,0 +1,376 @@ + +.. DO NOT EDIT. +.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. +.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: +.. "auto_examples/simulator/plot_run_mass_point_model.py" +.. LINE NUMBERS ARE GIVEN BELOW. + +.. only:: html + + .. note:: + :class: sphx-glr-download-link-note + + Click :ref:`here <sphx_glr_download_auto_examples_simulator_plot_run_mass_point_model.py>` + to download the full example code + +.. rst-class:: sphx-glr-example-title + +.. _sphx_glr_auto_examples_simulator_plot_run_mass_point_model.py: + + +RunSimulator: Mass Point Model +============================== + +.. GENERATED FROM PYTHON SOURCE LINES 8-12 + +This example shows how to run multiple MassPointModel simulations in serial +and parallelly using :class:`.RunSimulator`. + + + +.. GENERATED FROM PYTHON SOURCE LINES 16-18 + +First, we import the class :class:`.MassPointModel` and define a `simulator` +based on :py:meth:`.MassPointModel.run` method. + +.. GENERATED FROM PYTHON SOURCE LINES 19-26 + +.. code-block:: default + + + from psimpy.simulator import MassPointModel + + mpm = MassPointModel() + mpm_simulator = mpm.run + + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 27-39 + +This simulator takes required input data, solves the mass point model, and +returns time history of the mass point's location and velocity +(see :py:meth:`.MassPointModel.run`). + +Required inputs for `mpm_simulator` include: + 1. topographic data: digital elevation model (in `ESRI ascii` format) + 2. friction coefficients: coulomb friction and turbulent friction coefficients + 3. initial state: initial location and initial velocity of the masspoint + 4. computational parameters: such as time step, end time, etc. + +The synthetic topography ``synthetic_topo.asc`` is used here for illustration. +It is located at the `/tests/data/` folder. + +.. GENERATED FROM PYTHON SOURCE LINES 40-46 + +.. code-block:: default + + + import os + + dir_data = os.path.abspath('../../../tests/data/') + elevation = os.path.join(dir_data, 'synthetic_topo.asc') + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 47-49 + +.. note:: You may need to modify ``dir_data`` according to where you save + ``synthetic_topo.asc`` on your local machine. + +.. GENERATED FROM PYTHON SOURCE LINES 51-57 + +For this example, we are going to run multiple simulations at different values +of coulomb friction coefficient (``coulomb_friction``) and turbulent friction +coefficient (``turbulent_friction``) while keep other inputs fixed. Namely, +``coulomb_friction`` and ``turbulent_friction`` are variable input parameters. +All other inputs are fixed input parameters. + + +.. GENERATED FROM PYTHON SOURCE LINES 58-74 + +.. code-block:: default + + + import numpy as np + import itertools + + # Variable iput parameters are defined as a list of strings. Their values will be + # passed as a numpy array (var_samples) when run simulations. + var_inp_parameter = ['coulomb_friction', 'turbulent_friction'] + coulomb_friction = np.arange(0.1, 0.31, 0.1) + turbulent_friction = np.arange(500, 2001, 400) + var_samples = np.array( + [x for x in itertools.product(coulomb_friction, turbulent_friction)]) + print("Number of variable input samples are: ", len(var_samples)) + + # Fixed input parameters are defined as a dictionary. Their values are given. + fix_inp = {'elevation': elevation, 'x0': 200, 'y0': 2000, 'tend': 50} + + + + + +.. rst-class:: sphx-glr-script-out + + .. code-block:: none + + Number of variable input samples are: 12 + + + + +.. GENERATED FROM PYTHON SOURCE LINES 75-78 + +.. note:: Parameters of `mpm_simulator` which are not included in + ``var_inp_parameter`` and ``fix_inp``, such as ``ux0``, ``uy0`` and + ``curvature``, will automatically take their default values. + +.. GENERATED FROM PYTHON SOURCE LINES 80-83 + +We may want to save outputs returned by `mpm_simulator` at each simulation for +later inspection or processing. In that case, we need to define ``dir_out`` and +set ``save_out`` as `True`. + +.. GENERATED FROM PYTHON SOURCE LINES 84-95 + +.. code-block:: default + + + import os + + # Here we create a folder called `temp_run_MassPointModel_example` to save outputs + # returned at each simulation. + cwd = os.getcwd() + if not os.path.exists('temp_run_MassPointModel_example'): + os.mkdir('temp_run_MassPointModel_example') + dir_out = os.path.join(cwd, 'temp_run_MassPointModel_example') + + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 96-97 + +Now we can define an object of :class:`.RunSimulator` by + +.. GENERATED FROM PYTHON SOURCE LINES 98-104 + +.. code-block:: default + + + from psimpy.simulator import RunSimulator + + run_mpm_simulator = RunSimulator(mpm_simulator, var_inp_parameter, fix_inp, + dir_out=dir_out, save_out=True) + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 105-108 + +.. note:: Since outputs of each simulation are saved in the same folder ``dir_out``, + we need to give each file a unique name in order to avoid conflict. This is + realized by defining ``prefixes``. + +.. GENERATED FROM PYTHON SOURCE LINES 108-113 + +.. code-block:: default + + + serial_prefixes = ["serial"+str(i) for i in range(len(var_samples))] + parallel_prefixes = ["parallel"+str(i) for i in range(len(var_samples))] + + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 114-117 + +Using :py:meth:`.RunSimulator.serial_run` method or +:py:meth:`.RunSimulator.parallel_run` method, we can run the simulations +in serial or parallelly. + +.. GENERATED FROM PYTHON SOURCE LINES 118-136 + +.. code-block:: default + + + import time + + start = time.time() + run_mpm_simulator.serial_run(var_samples=var_samples, prefixes=serial_prefixes) + serial_time = time.time() - start + serial_output = run_mpm_simulator.outputs + + start = time.time() + # max_workers controls maximum number of tasks running in parallel + run_mpm_simulator.parallel_run(var_samples, prefixes=parallel_prefixes, max_workers=4) + parallel_time = time.time() - start + parallel_output = run_mpm_simulator.outputs + + print("Serial run time: ", serial_time) + print("Parallel run time: ", parallel_time) + + + + + + +.. rst-class:: sphx-glr-script-out + + .. code-block:: none + + Serial run time: 1.1941184997558594 + Parallel run time: 0.4859800338745117 + + + + +.. GENERATED FROM PYTHON SOURCE LINES 137-139 + +Once a simulation is done, its output is saved to ``dir_out``. All output files +generated by above simulations are as follows: + +.. GENERATED FROM PYTHON SOURCE LINES 140-144 + +.. code-block:: default + + + os.listdir(dir_out) + + + + + + +.. rst-class:: sphx-glr-script-out + + .. code-block:: none + + + ['serial0_output.npy', 'serial9_output.npy', 'serial11_output.npy', 'parallel10_output.npy', 'parallel0_output.npy', 'parallel5_output.npy', 'parallel11_output.npy', 'serial1_output.npy', 'serial4_output.npy', 'parallel7_output.npy', 'serial5_output.npy', 'serial8_output.npy', 'parallel6_output.npy', 'parallel4_output.npy', 'parallel2_output.npy', 'serial3_output.npy', 'serial6_output.npy', 'parallel3_output.npy', 'serial2_output.npy', 'parallel9_output.npy', 'serial7_output.npy', 'parallel1_output.npy', 'parallel8_output.npy', 'serial10_output.npy'] + + + +.. GENERATED FROM PYTHON SOURCE LINES 145-147 + +Once all simulations are done, their outputs can also be accessed by +:py:attr:`.RunSimulator.outputs` attribute, which is a list. + +.. GENERATED FROM PYTHON SOURCE LINES 148-157 + +.. code-block:: default + + + # Here we print the maximum velocity of each simulation in the parallel run. + max_v = [np.max(output[:,5]) for output in parallel_output] + print( + f"Maximum velocity of {parallel_prefixes[0]} to {parallel_prefixes[-1]} are: ", + '\n', + max_v) + + + + + + +.. rst-class:: sphx-glr-script-out + + .. code-block:: none + + Maximum velocity of parallel0 to parallel11 are: + [16.55505557211892, 22.014114896121015, 26.245546886730782, 29.78487303612985, 15.34198274528081, 20.371864007499866, 24.249957243412815, 27.485487855011687, 14.031665649204944, 18.589324449452967, 22.092803891476187, 24.99727320816709] + + + + +.. GENERATED FROM PYTHON SOURCE LINES 158-164 + +.. warning:: If one simulation failed due to whatever reason, the error massage + will be printed to the screen but other simulations will continue. In that + case, the output file of failed simulation will not be writted to ``dir_out``. + Also, the element of :py:attr:`.RunSimulator.outputs` corresponding to that + simulation will be a string representing the error message, instead of a + numpy array. + +.. GENERATED FROM PYTHON SOURCE LINES 167-168 + +Here we delete the folder `temp_run_MassPointModel_example` and all files therein. + +.. GENERATED FROM PYTHON SOURCE LINES 169-185 + +.. code-block:: default + + + import shutil + + shutil.rmtree(dir_out) + + + + + + + + + + + + + + + + + + + + +.. rst-class:: sphx-glr-timing + + **Total running time of the script:** ( 0 minutes 1.687 seconds) + + +.. _sphx_glr_download_auto_examples_simulator_plot_run_mass_point_model.py: + +.. only:: html + + .. container:: sphx-glr-footer sphx-glr-footer-example + + + .. container:: sphx-glr-download sphx-glr-download-python + + :download:`Download Python source code: plot_run_mass_point_model.py <plot_run_mass_point_model.py>` + + .. container:: sphx-glr-download sphx-glr-download-jupyter + + :download:`Download Jupyter notebook: plot_run_mass_point_model.ipynb <plot_run_mass_point_model.ipynb>` + + +.. only:: html + + .. rst-class:: sphx-glr-signature + + `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.github.io>`_ diff --git a/docs/source/_build/html/_sources/auto_examples/simulator/plot_run_ravaflow24.rst.txt b/docs/source/_build/html/_sources/auto_examples/simulator/plot_run_ravaflow24.rst.txt new file mode 100644 index 0000000..b727903 --- /dev/null +++ b/docs/source/_build/html/_sources/auto_examples/simulator/plot_run_ravaflow24.rst.txt @@ -0,0 +1,444 @@ + +.. DO NOT EDIT. +.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. +.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: +.. "auto_examples/simulator/plot_run_ravaflow24.py" +.. LINE NUMBERS ARE GIVEN BELOW. + +.. only:: html + + .. note:: + :class: sphx-glr-download-link-note + + Click :ref:`here <sphx_glr_download_auto_examples_simulator_plot_run_ravaflow24.py>` + to download the full example code + +.. rst-class:: sphx-glr-example-title + +.. _sphx_glr_auto_examples_simulator_plot_run_ravaflow24.py: + + +RunSimulator: Ravaflow24 Mixture Model +====================================== + +.. GENERATED FROM PYTHON SOURCE LINES 8-11 + +This example shows how to run multiple Ravaflow24Mixture simulations in serial +and parallelly using :class:`.RunSimulator`. + + +.. GENERATED FROM PYTHON SOURCE LINES 14-15 + +First, we import the class :class:`.Ravaflow24Mixture`. + +.. GENERATED FROM PYTHON SOURCE LINES 16-19 + +.. code-block:: default + + + from psimpy.simulator import Ravaflow24Mixture + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 20-23 + +To create an instance of this class, we must specify the parameter ``dir_sim``. +It represents the directory in which output files generated by r.avaflow will be +saved. + +.. GENERATED FROM PYTHON SOURCE LINES 24-34 + +.. code-block:: default + + + import os + + # Here we create a folder called `temp1_run_Ravaflow24Mixture_example` to save + # output files generated by r.avaflow + cwd = os.getcwd() + if not os.path.exists('temp1_run_Ravaflow24Mixture_example'): + os.mkdir('temp1_run_Ravaflow24Mixture_example') + dir_sim = os.path.join(cwd, 'temp1_run_Ravaflow24Mixture_example') + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 35-38 + +Given ``dir_sim``, we can create an instance of :class:`.Ravaflow24Mixture`. +To reduce simulation time, we set ``time_end`` to :math:`50`. Other parameters +are set to their default values. + +.. GENERATED FROM PYTHON SOURCE LINES 39-42 + +.. code-block:: default + + + voellmy_model = Ravaflow24Mixture(dir_sim, time_end=50) + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 43-45 + +The `simulator` in this example is defined based on ``voellmy_model`` as follows. +It takes required inputs and returns the overall impact area. + +.. GENERATED FROM PYTHON SOURCE LINES 46-59 + +.. code-block:: default + + + import numpy as np + + def simulator(prefix, elevation, hrelease, basal_friction, turbulent_friction, EPSG): + """Preprocess required inputs, run simulation, and return output as a numpy array.""" + grass_location, sh_file = voellmy_model.preprocess(prefix=prefix, elevation=elevation, + hrelease=hrelease, basal_friction=basal_friction, turbulent_friction=turbulent_friction, EPSG=EPSG) + voellmy_model.run(grass_location, sh_file) # run this line, r.avaflow will write outputs to dir_sim + impact_area = voellmy_model.extract_impact_area(prefix) + + return np.array([impact_area]) # define dir_out and set save_out to True, returned numpy array will be saved to dir_out + + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 60-63 + +To demonstrate how to run multiple simulations using :class:`.RunSimulator`, +we choose ``basal_friction`` and ``turbulent_friction`` as variable input +parameters. Each has two different values, leading to four simulations. + +.. GENERATED FROM PYTHON SOURCE LINES 64-74 + +.. code-block:: default + + + import itertools + + var_inp_parameter = ['basal_friction', 'turbulent_friction'] + basal_friction = [20, 30] + turbulent_friction = [3, 4] + var_samples = np.array( + [x for x in itertools.product(basal_friction, turbulent_friction)]) + + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 75-78 + +Other parameters of the `simulator`, including ``elevation``, ``hrelease``, and +``EPSG`` are treated as fixed input. It means that their values are the same in +all simulations. + +.. GENERATED FROM PYTHON SOURCE LINES 79-85 + +.. code-block:: default + + + dir_data = os.path.abspath('../../../tests/data/') + elevation = os.path.join(dir_data, 'synthetic_topo.tif') + hrelease = os.path.join(dir_data, 'synthetic_rel.tif') + fix_inp = {'elevation': elevation, 'hrelease': hrelease, 'EPSG': '2326'} + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 86-91 + +The parameter ``prefix`` of the `simulator` is special. It is not involved in +the computational model, but only used to name output files generated by r.avaflow. +Such parameter is not defined in ``var_inp_parameter`` or ``fix_inp`` of +:class:`.RunSimulator`. Instead, we use a seperate parameter, called ``o_parameter`` +for this purpose. + +.. GENERATED FROM PYTHON SOURCE LINES 92-96 + +.. code-block:: default + + + o_parameter = 'prefix' + + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 97-100 + +We may want to save outputs returned by the `simulator` at each simulation for +later inspection or processing. In that case, we need to define ``dir_out`` and +set ``save_out`` as `True`. + +.. GENERATED FROM PYTHON SOURCE LINES 101-109 + +.. code-block:: default + + + import os + + cwd = os.getcwd() + if not os.path.exists('temp2_run_Ravaflow24Mixture_example'): + os.mkdir('temp2_run_Ravaflow24Mixture_example') + dir_out = os.path.join(cwd, 'temp2_run_Ravaflow24Mixture_example') + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 110-132 + +.. note:: Please note that ``dir_out`` and ``dir_sim`` are two different + parameters for different purposes. + + - ``dir_out`` is a parameter of :class:`.RunSimulator`. The `simulator` + returns output of interest as a numpy array for each simulation. If + we want to save this returned output of interest (here impact area) + to our local machine, we need to specify the value of ``dir_out`` which + represents the directory in which output of interest will be saved and + set ``save_out`` to `True`. Otherwise, we do not need ``dir_out`` and + leave ``save_out`` to `False`. + - ``dir_sim`` is a parameter of :class:`.Ravaflow24Mixture`. :class:`.Ravaflow24Mixture` + relies on the third party software r.avaflow 2.4. When we call + :py:meth:`.Ravaflow24Mixture.run` in the function body of above `simulator`, + r.avaflow 2.4 will be run and it generates output files. The value of + ``dir_sim`` specifies the directory in which output files generated by + r.avaflow 2.4 are going to be saved. + + The value of ``dir_out`` and ``dir_sim`` can be the same if file names + have no conflict. We recommend to keep them seperate. In addition, if the function + body of the `simulator` does not write files to disk, ``dir_sim`` is not required. Our + :class:`.MassPointModel` is an example. Similarly, if we do not want to save + returned numpy array of the `simulator`, ``dir_out`` is not needed. + +.. GENERATED FROM PYTHON SOURCE LINES 135-136 + +Now we can define an object of :class:`.RunSimulator` by + +.. GENERATED FROM PYTHON SOURCE LINES 137-144 + +.. code-block:: default + + + from psimpy.simulator import RunSimulator + + run_simulator = RunSimulator(simulator, var_inp_parameter, fix_inp, o_parameter, + dir_out, save_out=True) + + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 145-148 + +Before running simulations, we need to specify values of ``prefixes`` which +will be used to name files generated by each r.avaflow simulation and +each returned numpy array of `simulator`. + +.. GENERATED FROM PYTHON SOURCE LINES 149-153 + +.. code-block:: default + + + serial_prefixes = ["serial"+str(i) for i in range(len(var_samples))] + parallel_prefixes = ["parallel"+str(i) for i in range(len(var_samples))] + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 154-157 + +Now we can use :py:meth:`.RunSimulator.serial_run` method or +:py:meth:`.RunSimulator.parallel_run` method to run the simulations +in serial or parallelly. + +.. GENERATED FROM PYTHON SOURCE LINES 158-181 + +.. code-block:: default + + + import time + + start = time.time() + run_simulator.serial_run(var_samples=var_samples, prefixes=serial_prefixes) + serial_time = time.time() - start + serial_output = run_simulator.outputs + print(f"serial_output: {serial_output}") + + start = time.time() + # append setting to True means that simulation outputs of parallel run will be + # appended to above serial run outputs + run_simulator.parallel_run(var_samples, prefixes=parallel_prefixes, + max_workers=2, append=True) + parallel_time = time.time() - start + + parallel_output = run_simulator.outputs[len(var_samples):] + print(f"parallel_output: {parallel_output}") + + + print("Serial run time: ", serial_time) + print("Parallel run time: ", parallel_time) + + + + + +.. rst-class:: sphx-glr-script-out + + .. code-block:: none + + serial_output: [array([1008000.]), array([1520800.]), array([674000.]), array([869600.])] + parallel_output: [array([1008000.]), array([1520800.]), array([674000.]), array([869600.])] + Serial run time: 110.85352993011475 + Parallel run time: 62.39644193649292 + + + + +.. GENERATED FROM PYTHON SOURCE LINES 182-183 + +All output files returned by the `simulator` are + +.. GENERATED FROM PYTHON SOURCE LINES 184-187 + +.. code-block:: default + + + os.listdir(dir_out) + + + + + +.. rst-class:: sphx-glr-script-out + + .. code-block:: none + + + ['serial0_output.npy', 'parallel0_output.npy', 'serial1_output.npy', 'parallel2_output.npy', 'serial3_output.npy', 'parallel3_output.npy', 'serial2_output.npy', 'parallel1_output.npy'] + + + +.. GENERATED FROM PYTHON SOURCE LINES 188-190 + +All output files/directories generated by r.avaflow simulations +(including files/directories generated during preprocessing) are + +.. GENERATED FROM PYTHON SOURCE LINES 191-195 + +.. code-block:: default + + + os.listdir(dir_sim) + + + + + + +.. rst-class:: sphx-glr-script-out + + .. code-block:: none + + + ['serial0_glocation', 'parallel3_results', 'parallel2_glocation', 'serial3_shell.sh', 'parallel1_results', 'serial3_glocation', 'serial1_shell.sh', 'parallel2_results', 'serial0_shell.sh', 'parallel1_glocation', 'parallel3_shell.sh', 'parallel0_shell.sh', 'serial1_glocation', 'parallel1_shell.sh', 'parallel2_shell.sh', 'serial0_results', 'serial1_results', 'serial2_shell.sh', 'serial2_glocation', 'serial2_results', 'parallel3_glocation', 'parallel0_glocation', 'serial3_results', 'parallel0_results'] + + + +.. GENERATED FROM PYTHON SOURCE LINES 196-202 + +.. warning:: If one simulation failed due to whatever reason, the error massage + will be printed to the screen but other simulations will continue. In that + case, the output file of failed simulation will not be writted to ``dir_out``. + Also, the element of :py:attr:`.RunSimulator.outputs` corresponding to that + simulation will be a string representing the error message, instead of a + numpy array. + +.. GENERATED FROM PYTHON SOURCE LINES 205-207 + +In the end, we delete the folder `temp1_run_Ravaflow24Mixture_example` and +`temp2_run_Ravaflow24Mixture_example` and all files therein. + +.. GENERATED FROM PYTHON SOURCE LINES 208-212 + +.. code-block:: default + + + import shutil + + shutil.rmtree(dir_sim) + shutil.rmtree(dir_out) + + + + + + + +.. rst-class:: sphx-glr-timing + + **Total running time of the script:** ( 2 minutes 53.318 seconds) + + +.. _sphx_glr_download_auto_examples_simulator_plot_run_ravaflow24.py: + +.. only:: html + + .. container:: sphx-glr-footer sphx-glr-footer-example + + + .. container:: sphx-glr-download sphx-glr-download-python + + :download:`Download Python source code: plot_run_ravaflow24.py <plot_run_ravaflow24.py>` + + .. container:: sphx-glr-download sphx-glr-download-jupyter + + :download:`Download Jupyter notebook: plot_run_ravaflow24.ipynb <plot_run_ravaflow24.ipynb>` + + +.. only:: html + + .. rst-class:: sphx-glr-signature + + `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.github.io>`_ diff --git a/docs/source/_build/html/_sources/auto_examples/simulator/sg_execution_times.rst.txt b/docs/source/_build/html/_sources/auto_examples/simulator/sg_execution_times.rst.txt new file mode 100644 index 0000000..383f358 --- /dev/null +++ b/docs/source/_build/html/_sources/auto_examples/simulator/sg_execution_times.rst.txt @@ -0,0 +1,18 @@ + +:orphan: + +.. _sphx_glr_auto_examples_simulator_sg_execution_times: + +Computation times +================= +**08:52.712** total execution time for **auto_examples_simulator** files: + ++---------------------------------------------------------------------------------------------------------+-----------+--------+ +| :ref:`sphx_glr_auto_examples_simulator_plot_ravaflow24.py` (``plot_ravaflow24.py``) | 05:56.157 | 0.0 MB | ++---------------------------------------------------------------------------------------------------------+-----------+--------+ +| :ref:`sphx_glr_auto_examples_simulator_plot_run_ravaflow24.py` (``plot_run_ravaflow24.py``) | 02:53.318 | 0.0 MB | ++---------------------------------------------------------------------------------------------------------+-----------+--------+ +| :ref:`sphx_glr_auto_examples_simulator_plot_run_mass_point_model.py` (``plot_run_mass_point_model.py``) | 00:01.687 | 0.0 MB | ++---------------------------------------------------------------------------------------------------------+-----------+--------+ +| :ref:`sphx_glr_auto_examples_simulator_plot_mass_point_model.py` (``plot_mass_point_model.py``) | 00:01.550 | 0.0 MB | ++---------------------------------------------------------------------------------------------------------+-----------+--------+ diff --git a/docs/source/_build/html/auto_examples/emulator/index.html b/docs/source/_build/html/auto_examples/emulator/index.html new file mode 100644 index 0000000..ad9a429 --- /dev/null +++ b/docs/source/_build/html/auto_examples/emulator/index.html @@ -0,0 +1,147 @@ +<!DOCTYPE html> +<html class="writer-html5" lang="en" > +<head> + <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>Emulator — PSimPy's documentation</title> + <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-binder.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-dataframe.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-rendered-html.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" /> + <!--[if lt IE 9]> + <script src="../../_static/js/html5shiv.min.js"></script> + <![endif]--> + + <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> + <script src="../../_static/jquery.js"></script> + <script src="../../_static/underscore.js"></script> + <script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script> + <script src="../../_static/doctools.js"></script> + <script src="../../_static/sphinx_highlight.js"></script> + <script src="../../_static/js/theme.js"></script> + <link rel="index" title="Index" href="../../genindex.html" /> + <link rel="search" title="Search" href="../../search.html" /> + <link rel="next" title="PPGaSP: GP emulation for multi-output functions" href="plot_ppgasp.html" /> + <link rel="prev" title="Example Gallery" href="../../examples.html" /> +</head> + +<body class="wy-body-for-nav"> + <div class="wy-grid-for-nav"> + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + <a href="../../index.html" class="icon icon-home"> psimpy + </a> + <div class="version"> + 0.1.2 + </div> +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> + <ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../../index.html">Home</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../quickstart.html">Getting Started</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../api.html">API & Theory</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../../examples.html">Example Gallery</a><ul class="current"> +<li class="toctree-l2 current"><a class="current reference internal" href="#">Emulator</a><ul> +<li class="toctree-l3"><a class="reference internal" href="plot_ppgasp.html">PPGaSP: GP emulation for multi-output functions</a></li> +<li class="toctree-l3"><a class="reference internal" href="plot_scalargasp.html">ScalarGaSP: GP emulation for a single-output function</a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="../inference/index.html">Inference</a></li> +<li class="toctree-l2"><a class="reference internal" href="../sampler/index.html">Sampler</a></li> +<li class="toctree-l2"><a class="reference internal" href="../sensitivity/index.html">Sensitivity</a></li> +<li class="toctree-l2"><a class="reference internal" href="../simulator/index.html">Simulator</a></li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="../../changelog.html">Changes</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../refs.html">References</a></li> +</ul> + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">psimpy</a> + </nav> + + <div class="wy-nav-content"> + <div class="rst-content"> + <div role="navigation" aria-label="Page navigation"> + <ul class="wy-breadcrumbs"> + <li><a href="../../index.html" class="icon icon-home"></a></li> + <li class="breadcrumb-item"><a href="../../examples.html">Example Gallery</a></li> + <li class="breadcrumb-item active">Emulator</li> + <li class="wy-breadcrumbs-aside"> + <a href="../../_sources/auto_examples/emulator/index.rst.txt" rel="nofollow"> View page source</a> + </li> + </ul> + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <section id="emulator"> +<h1>Emulator<a class="headerlink" href="#emulator" title="Permalink to this heading"></a></h1> +<div class="sphx-glr-thumbnails"><div class="sphx-glr-thumbcontainer" tooltip="PPGaSP: GP emulation for multi-output functions"><img alt="PPGaSP: GP emulation for multi-output functions" src="../../_images/sphx_glr_plot_ppgasp_thumb.png" /> +<p><a class="reference internal" href="plot_ppgasp.html#sphx-glr-auto-examples-emulator-plot-ppgasp-py"><span class="std std-ref">PPGaSP: GP emulation for multi-output functions</span></a></p> + <div class="sphx-glr-thumbnail-title">PPGaSP: GP emulation for multi-output functions</div> +</div><div class="sphx-glr-thumbcontainer" tooltip="ScalarGaSP: GP emulation for a single-output function"><img alt="ScalarGaSP: GP emulation for a single-output function" src="../../_images/sphx_glr_plot_scalargasp_thumb.png" /> +<p><a class="reference internal" href="plot_scalargasp.html#sphx-glr-auto-examples-emulator-plot-scalargasp-py"><span class="std std-ref">ScalarGaSP: GP emulation for a single-output function</span></a></p> + <div class="sphx-glr-thumbnail-title">ScalarGaSP: GP emulation for a single-output function</div> +</div></div><div class="toctree-wrapper compound"> +</div> +<div class="sphx-glr-footer sphx-glr-footer-gallery docutils container"> +<div class="sphx-glr-download sphx-glr-download-python docutils container"> +<p><a class="reference download internal" download="" href="../../_downloads/ff2071d6226ad5ba480d05dc9b72039e/emulator_python.zip"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">all</span> <span class="pre">examples</span> <span class="pre">in</span> <span class="pre">Python</span> <span class="pre">source</span> <span class="pre">code:</span> <span class="pre">emulator_python.zip</span></code></a></p> +</div> +<div class="sphx-glr-download sphx-glr-download-jupyter docutils container"> +<p><a class="reference download internal" download="" href="../../_downloads/af73dbd4cdfb71a4d5cac0b204c855e0/emulator_jupyter.zip"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">all</span> <span class="pre">examples</span> <span class="pre">in</span> <span class="pre">Jupyter</span> <span class="pre">notebooks:</span> <span class="pre">emulator_jupyter.zip</span></code></a></p> +</div> +</div> +<p class="sphx-glr-signature"><a class="reference external" href="https://sphinx-gallery.github.io">Gallery generated by Sphinx-Gallery</a></p> +</section> + + + </div> + </div> + <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer"> + <a href="../../examples.html" class="btn btn-neutral float-left" title="Example Gallery" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> + <a href="plot_ppgasp.html" class="btn btn-neutral float-right" title="PPGaSP: GP emulation for multi-output functions" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a> + </div> + + <hr/> + + <div role="contentinfo"> + <p>© Copyright 2023, Hu Zhao.</p> + </div> + + Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a + <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> + provided by <a href="https://readthedocs.org">Read the Docs</a>. + + +</footer> + </div> + </div> + </section> + </div> + <script> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + +</body> +</html> \ No newline at end of file diff --git a/docs/source/_build/html/auto_examples/emulator/plot_ppgasp.html b/docs/source/_build/html/auto_examples/emulator/plot_ppgasp.html new file mode 100644 index 0000000..f34a15a --- /dev/null +++ b/docs/source/_build/html/auto_examples/emulator/plot_ppgasp.html @@ -0,0 +1,259 @@ +<!DOCTYPE html> +<html class="writer-html5" lang="en" > +<head> + <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>PPGaSP: GP emulation for multi-output functions — PSimPy's documentation</title> + <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-binder.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-dataframe.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-rendered-html.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" /> + <!--[if lt IE 9]> + <script src="../../_static/js/html5shiv.min.js"></script> + <![endif]--> + + <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> + <script src="../../_static/jquery.js"></script> + <script src="../../_static/underscore.js"></script> + <script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script> + <script src="../../_static/doctools.js"></script> + <script src="../../_static/sphinx_highlight.js"></script> + <script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script> + <script src="../../_static/js/theme.js"></script> + <link rel="index" title="Index" href="../../genindex.html" /> + <link rel="search" title="Search" href="../../search.html" /> + <link rel="next" title="ScalarGaSP: GP emulation for a single-output function" href="plot_scalargasp.html" /> + <link rel="prev" title="Emulator" href="index.html" /> +</head> + +<body class="wy-body-for-nav"> + <div class="wy-grid-for-nav"> + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + <a href="../../index.html" class="icon icon-home"> psimpy + </a> + <div class="version"> + 0.1.2 + </div> +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> + <ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../../index.html">Home</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../quickstart.html">Getting Started</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../api.html">API & Theory</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../../examples.html">Example Gallery</a><ul class="current"> +<li class="toctree-l2 current"><a class="reference internal" href="index.html">Emulator</a><ul class="current"> +<li class="toctree-l3 current"><a class="current reference internal" href="#">PPGaSP: GP emulation for multi-output functions</a></li> +<li class="toctree-l3"><a class="reference internal" href="plot_scalargasp.html">ScalarGaSP: GP emulation for a single-output function</a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="../inference/index.html">Inference</a></li> +<li class="toctree-l2"><a class="reference internal" href="../sampler/index.html">Sampler</a></li> +<li class="toctree-l2"><a class="reference internal" href="../sensitivity/index.html">Sensitivity</a></li> +<li class="toctree-l2"><a class="reference internal" href="../simulator/index.html">Simulator</a></li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="../../changelog.html">Changes</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../refs.html">References</a></li> +</ul> + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">psimpy</a> + </nav> + + <div class="wy-nav-content"> + <div class="rst-content"> + <div role="navigation" aria-label="Page navigation"> + <ul class="wy-breadcrumbs"> + <li><a href="../../index.html" class="icon icon-home"></a></li> + <li class="breadcrumb-item"><a href="../../examples.html">Example Gallery</a></li> + <li class="breadcrumb-item"><a href="index.html">Emulator</a></li> + <li class="breadcrumb-item active">PPGaSP: GP emulation for multi-output functions</li> + <li class="wy-breadcrumbs-aside"> + <a href="../../_sources/auto_examples/emulator/plot_ppgasp.rst.txt" rel="nofollow"> View page source</a> + </li> + </ul> + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="sphx-glr-download-link-note admonition note"> +<p class="admonition-title">Note</p> +<p>Click <a class="reference internal" href="#sphx-glr-download-auto-examples-emulator-plot-ppgasp-py"><span class="std std-ref">here</span></a> +to download the full example code</p> +</div> +<section class="sphx-glr-example-title" id="ppgasp-gp-emulation-for-multi-output-functions"> +<span id="sphx-glr-auto-examples-emulator-plot-ppgasp-py"></span><h1>PPGaSP: GP emulation for multi-output functions<a class="headerlink" href="#ppgasp-gp-emulation-for-multi-output-functions" title="Permalink to this heading"></a></h1> +<p>This example shows how to apply Gaussian process emulation to a multi-output +function using class <a class="reference internal" href="../../emulator/robustgasp.html#psimpy.emulator.robustgasp.PPGaSP" title="psimpy.emulator.robustgasp.PPGaSP"><code class="xref py py-class docutils literal notranslate"><span class="pre">PPGaSP</span></code></a>.</p> +<p>The multi-output function that we are going to look at is the <cite>DIAMOND</cite> +(diplomatic and military operations in a non-warfighting domain) computer model. +It is used as a testbed to illustrate the <cite>PP GaSP</cite> emulator in the <cite>R</cite> package +<cite>RobustGaSP</cite>, see <span id="id1">Gu <em>et al.</em> [<a class="reference internal" href="../../refs.html#id6" title="Meng Yang Gu, Jesus Palomo, and James O. Berger. Robustgasp: robust Gaussian stochastic process emulation in R. The R Journal, 11(1):112–136, 2019. doi:10.32614/RJ-2019-011.">2019</a>]</span> for more detail.</p> +<p>The simulator has <span class="math notranslate nohighlight">\(13\)</span> input parameters and <span class="math notranslate nohighlight">\(5\)</span> outputs. Namely, +<span class="math notranslate nohighlight">\(\mathbf{y}=f(\mathbf{x})\)</span> where <span class="math notranslate nohighlight">\(\mathbf{x}=(x_1,\ldots,x_{13})^T\)</span> +and <span class="math notranslate nohighlight">\(\mathbf{y}=(y_1,\ldots,y_5)^T\)</span>.</p> +<p>The training and testing data are provided in the folder ‘…/tests/data/’. +We first load the training and testing data.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span> +<span class="kn">import</span> <span class="nn">os</span> + +<span class="n">dir_data</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="s1">'../../../tests/data/'</span><span class="p">)</span> + +<span class="n">humanityX</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">genfromtxt</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">dir_data</span><span class="p">,</span> <span class="s1">'humanityX.csv'</span><span class="p">),</span> <span class="n">delimiter</span><span class="o">=</span><span class="s1">','</span><span class="p">)</span> +<span class="n">humanityY</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">genfromtxt</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">dir_data</span><span class="p">,</span> <span class="s1">'humanityY.csv'</span><span class="p">),</span> <span class="n">delimiter</span><span class="o">=</span><span class="s1">','</span><span class="p">)</span> +<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Number of training data points: "</span><span class="p">,</span> <span class="n">humanityX</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> +<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Input dimension: "</span><span class="p">,</span> <span class="n">humanityX</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> +<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Output dimension: "</span><span class="p">,</span> <span class="n">humanityY</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> + +<span class="n">humanityXt</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">genfromtxt</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">dir_data</span><span class="p">,</span> <span class="s1">'humanityXt.csv'</span><span class="p">),</span> <span class="n">delimiter</span><span class="o">=</span><span class="s1">','</span><span class="p">)</span> +<span class="n">humanityYt</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">genfromtxt</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">dir_data</span><span class="p">,</span> <span class="s1">'humanityYt.csv'</span><span class="p">),</span> <span class="n">delimiter</span><span class="o">=</span><span class="s1">','</span><span class="p">)</span> +<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Number of testing data points: "</span><span class="p">,</span> <span class="n">humanityXt</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> +</pre></div> +</div> +<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>Number of training data points: 120 +Input dimension: 13 +Output dimension: 5 +Number of testing data points: 120 +</pre></div> +</div> +<div class="admonition note"> +<p class="admonition-title">Note</p> +<p>You may need to modify <code class="docutils literal notranslate"><span class="pre">dir_data</span></code> according to where you save them +on your local machine.</p> +</div> +<p><code class="docutils literal notranslate"><span class="pre">humanityX</span></code> and <code class="docutils literal notranslate"><span class="pre">humanitY</span></code> are the training data, corresponding to <code class="docutils literal notranslate"><span class="pre">design</span></code> +and <code class="docutils literal notranslate"><span class="pre">response</span></code> respectively. <code class="docutils literal notranslate"><span class="pre">humanityXt</span></code> are testing input data, at which +we are going to make predictions once the emulator is trained. <code class="docutils literal notranslate"><span class="pre">humanityYt</span></code> +are the true outputs at <code class="docutils literal notranslate"><span class="pre">humanityXt</span></code>, which is then used to validate the +performance of the trained emulator.</p> +<p>To build a <cite>PP GaSP</cite> emulator for the above simulator, first import class +<a class="reference internal" href="../../emulator/robustgasp.html#psimpy.emulator.robustgasp.PPGaSP" title="psimpy.emulator.robustgasp.PPGaSP"><code class="xref py py-class docutils literal notranslate"><span class="pre">PPGaSP</span></code></a> by</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">psimpy.emulator</span> <span class="kn">import</span> <span class="n">PPGaSP</span> +</pre></div> +</div> +<p>Then, create an instance of <a class="reference internal" href="../../emulator/robustgasp.html#psimpy.emulator.robustgasp.PPGaSP" title="psimpy.emulator.robustgasp.PPGaSP"><code class="xref py py-class docutils literal notranslate"><span class="pre">PPGaSP</span></code></a>. The parameter <code class="docutils literal notranslate"><span class="pre">ndim</span></code> +(dimension of function input <code class="docutils literal notranslate"><span class="pre">x</span></code>) must be specified. Optional parameters, such +as <code class="docutils literal notranslate"><span class="pre">method</span></code>, <code class="docutils literal notranslate"><span class="pre">kernel_type</span></code>, etc., can be set up if desired. Here, we leave +all the optional parameters to their default values.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">emulator</span> <span class="o">=</span> <span class="n">PPGaSP</span><span class="p">(</span><span class="n">ndim</span><span class="o">=</span><span class="n">humanityX</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> +</pre></div> +</div> +<p>Next, we train the <cite>PP GaSP</cite> emulator based on the training data using +<a class="reference internal" href="../../emulator/robustgasp.html#psimpy.emulator.robustgasp.PPGaSP.train" title="psimpy.emulator.robustgasp.PPGaSP.train"><code class="xref py py-meth docutils literal notranslate"><span class="pre">PPGaSP.train()</span></code></a> method.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">emulator</span><span class="o">.</span><span class="n">train</span><span class="p">(</span><span class="n">design</span><span class="o">=</span><span class="n">humanityX</span><span class="p">,</span> <span class="n">response</span><span class="o">=</span><span class="n">humanityY</span><span class="p">)</span> +</pre></div> +</div> +<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>The upper bounds of the range parameters are 296,974 297,1814 294,7672 295,9345 296,563 295,935 297,3198 296,4444 296,9323 298,2373 298,0619 298,7249 298,7249 +The initial values of range parameters are 5,93948 5,943628 5,895344 5,918691 5,93126 5,918701 5,946395 5,928888 5,938645 5,964745 5,961238 5,974498 5,974498 +Start of the optimization 1 : +The number of iterations is 44 + The value of the marginal posterior function is -5279,534 + Optimized range parameters are 25,46132 2,891428 5,30812 26,95519 291,1828 48,17274 84,56133 2,874385 39,12121 51,81304 0,5407651 1,728696 1,020605 + Optimized nugget parameter is 0 + Convergence: TRUE +The initial values of range parameters are 12,37503 12,38367 12,28307 12,33172 12,3579 12,33174 12,38944 12,35296 12,37329 12,42767 12,42037 12,44799 12,44799 +Start of the optimization 2 : +The number of iterations is 45 + The value of the marginal posterior function is -5279,534 + Optimized range parameters are 25,46132 2,891428 5,308121 26,95519 291,183 48,17274 84,56133 2,874385 39,12121 51,81304 0,5407651 1,728696 1,020605 + Optimized nugget parameter is 0 + Convergence: TRUE +</pre></div> +</div> +<p>With the trained emulator, we can make predictions for any arbitrary set of +input points using <code class="xref py py-meth docutils literal notranslate"><span class="pre">PPGaSP.predict()</span></code> method. +Here, we make predictions at testing input points <code class="docutils literal notranslate"><span class="pre">humanityXt</span></code>.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">predictions</span> <span class="o">=</span> <span class="n">emulator</span><span class="o">.</span><span class="n">predict</span><span class="p">(</span><span class="n">humanityXt</span><span class="p">)</span> +</pre></div> +</div> +<p>We can validate the performance of the trained emulator based on the true outputs +<code class="docutils literal notranslate"><span class="pre">humanityYt</span></code>.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span> + +<span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">6</span><span class="p">,</span><span class="mi">15</span><span class="p">))</span> + +<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">humanityY</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">1</span><span class="p">]):</span> + + <span class="n">ax</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="sa">f</span><span class="s1">'Actual $y_</span><span class="si">{</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="si">}</span><span class="s1">$'</span><span class="p">)</span> + <span class="n">ax</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="sa">f</span><span class="s1">'Emulator-predicted $y_</span><span class="si">{</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="si">}</span><span class="s1">$'</span><span class="p">)</span> + <span class="n">ax</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">min</span><span class="p">(</span><span class="n">humanityYt</span><span class="p">[:,</span><span class="n">i</span><span class="p">]),</span><span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">humanityYt</span><span class="p">[:,</span><span class="n">i</span><span class="p">]))</span> + <span class="n">ax</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">set_ylim</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">min</span><span class="p">(</span><span class="n">humanityYt</span><span class="p">[:,</span><span class="n">i</span><span class="p">]),</span><span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">humanityYt</span><span class="p">[:,</span><span class="n">i</span><span class="p">]))</span> + + <span class="n">_</span> <span class="o">=</span> <span class="n">ax</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">plot</span><span class="p">([</span><span class="n">np</span><span class="o">.</span><span class="n">min</span><span class="p">(</span><span class="n">humanityYt</span><span class="p">[:,</span><span class="n">i</span><span class="p">]),</span><span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">humanityYt</span><span class="p">[:,</span><span class="n">i</span><span class="p">])],</span> <span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">min</span><span class="p">(</span><span class="n">humanityYt</span><span class="p">[:,</span><span class="n">i</span><span class="p">]),</span><span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">humanityYt</span><span class="p">[:,</span><span class="n">i</span><span class="p">])])</span> + <span class="n">_</span> <span class="o">=</span> <span class="n">ax</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">errorbar</span><span class="p">(</span><span class="n">humanityYt</span><span class="p">[:,</span><span class="n">i</span><span class="p">],</span> <span class="n">predictions</span><span class="p">[:,</span><span class="n">i</span><span class="p">,</span><span class="mi">0</span><span class="p">],</span> <span class="n">predictions</span><span class="p">[:,</span><span class="n">i</span><span class="p">,</span><span class="mi">3</span><span class="p">],</span> <span class="n">fmt</span><span class="o">=</span><span class="s1">'.'</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s1">''</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">'prediction and std'</span><span class="p">)</span> + <span class="n">_</span> <span class="o">=</span> <span class="n">ax</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">legend</span><span class="p">()</span> + +<span class="n">plt</span><span class="o">.</span><span class="n">tight_layout</span><span class="p">()</span> +</pre></div> +</div> +<img src="../../_images/sphx_glr_plot_ppgasp_001.png" srcset="../../_images/sphx_glr_plot_ppgasp_001.png" alt="plot ppgasp" class = "sphx-glr-single-img"/><p>We can also draw any number of samples at testing input <code class="docutils literal notranslate"><span class="pre">humanityXt</span></code> using +<code class="xref py py-meth docutils literal notranslate"><span class="pre">PPGaSPsample()</span></code> method.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">samples</span> <span class="o">=</span> <span class="n">emulator</span><span class="o">.</span><span class="n">sample</span><span class="p">(</span><span class="n">humanityXt</span><span class="p">,</span> <span class="n">nsamples</span><span class="o">=</span><span class="mi">10</span><span class="p">)</span> +<span class="nb">print</span><span class="p">(</span><span class="s2">"Shape of samples: "</span><span class="p">,</span> <span class="n">samples</span><span class="o">.</span><span class="n">shape</span><span class="p">)</span> +</pre></div> +</div> +<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>Shape of samples: (120, 5, 10) +</pre></div> +</div> +<p class="sphx-glr-timing"><strong>Total running time of the script:</strong> ( 0 minutes 5.333 seconds)</p> +<div class="sphx-glr-footer sphx-glr-footer-example docutils container" id="sphx-glr-download-auto-examples-emulator-plot-ppgasp-py"> +<div class="sphx-glr-download sphx-glr-download-python docutils container"> +<p><a class="reference download internal" download="" href="../../_downloads/bfca202fd55dbe4c4a07ec2f8128e4cc/plot_ppgasp.py"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">Python</span> <span class="pre">source</span> <span class="pre">code:</span> <span class="pre">plot_ppgasp.py</span></code></a></p> +</div> +<div class="sphx-glr-download sphx-glr-download-jupyter docutils container"> +<p><a class="reference download internal" download="" href="../../_downloads/9ac7682e0f10ab62297eb4ff29689bc8/plot_ppgasp.ipynb"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">Jupyter</span> <span class="pre">notebook:</span> <span class="pre">plot_ppgasp.ipynb</span></code></a></p> +</div> +</div> +<p class="sphx-glr-signature"><a class="reference external" href="https://sphinx-gallery.github.io">Gallery generated by Sphinx-Gallery</a></p> +</section> + + + </div> + </div> + <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer"> + <a href="index.html" class="btn btn-neutral float-left" title="Emulator" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> + <a href="plot_scalargasp.html" class="btn btn-neutral float-right" title="ScalarGaSP: GP emulation for a single-output function" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a> + </div> + + <hr/> + + <div role="contentinfo"> + <p>© Copyright 2023, Hu Zhao.</p> + </div> + + Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a + <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> + provided by <a href="https://readthedocs.org">Read the Docs</a>. + + +</footer> + </div> + </div> + </section> + </div> + <script> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + +</body> +</html> \ No newline at end of file diff --git a/docs/source/_build/html/auto_examples/emulator/plot_scalargasp.html b/docs/source/_build/html/auto_examples/emulator/plot_scalargasp.html new file mode 100644 index 0000000..9ed6b50 --- /dev/null +++ b/docs/source/_build/html/auto_examples/emulator/plot_scalargasp.html @@ -0,0 +1,267 @@ +<!DOCTYPE html> +<html class="writer-html5" lang="en" > +<head> + <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>ScalarGaSP: GP emulation for a single-output function — PSimPy's documentation</title> + <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-binder.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-dataframe.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-rendered-html.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" /> + <!--[if lt IE 9]> + <script src="../../_static/js/html5shiv.min.js"></script> + <![endif]--> + + <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> + <script src="../../_static/jquery.js"></script> + <script src="../../_static/underscore.js"></script> + <script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script> + <script src="../../_static/doctools.js"></script> + <script src="../../_static/sphinx_highlight.js"></script> + <script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script> + <script src="../../_static/js/theme.js"></script> + <link rel="index" title="Index" href="../../genindex.html" /> + <link rel="search" title="Search" href="../../search.html" /> + <link rel="next" title="Inference" href="../inference/index.html" /> + <link rel="prev" title="PPGaSP: GP emulation for multi-output functions" href="plot_ppgasp.html" /> +</head> + +<body class="wy-body-for-nav"> + <div class="wy-grid-for-nav"> + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + <a href="../../index.html" class="icon icon-home"> psimpy + </a> + <div class="version"> + 0.1.2 + </div> +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> + <ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../../index.html">Home</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../quickstart.html">Getting Started</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../api.html">API & Theory</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../../examples.html">Example Gallery</a><ul class="current"> +<li class="toctree-l2 current"><a class="reference internal" href="index.html">Emulator</a><ul class="current"> +<li class="toctree-l3"><a class="reference internal" href="plot_ppgasp.html">PPGaSP: GP emulation for multi-output functions</a></li> +<li class="toctree-l3 current"><a class="current reference internal" href="#">ScalarGaSP: GP emulation for a single-output function</a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="../inference/index.html">Inference</a></li> +<li class="toctree-l2"><a class="reference internal" href="../sampler/index.html">Sampler</a></li> +<li class="toctree-l2"><a class="reference internal" href="../sensitivity/index.html">Sensitivity</a></li> +<li class="toctree-l2"><a class="reference internal" href="../simulator/index.html">Simulator</a></li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="../../changelog.html">Changes</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../refs.html">References</a></li> +</ul> + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">psimpy</a> + </nav> + + <div class="wy-nav-content"> + <div class="rst-content"> + <div role="navigation" aria-label="Page navigation"> + <ul class="wy-breadcrumbs"> + <li><a href="../../index.html" class="icon icon-home"></a></li> + <li class="breadcrumb-item"><a href="../../examples.html">Example Gallery</a></li> + <li class="breadcrumb-item"><a href="index.html">Emulator</a></li> + <li class="breadcrumb-item active">ScalarGaSP: GP emulation for a single-output function</li> + <li class="wy-breadcrumbs-aside"> + <a href="../../_sources/auto_examples/emulator/plot_scalargasp.rst.txt" rel="nofollow"> View page source</a> + </li> + </ul> + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="sphx-glr-download-link-note admonition note"> +<p class="admonition-title">Note</p> +<p>Click <a class="reference internal" href="#sphx-glr-download-auto-examples-emulator-plot-scalargasp-py"><span class="std std-ref">here</span></a> +to download the full example code</p> +</div> +<section class="sphx-glr-example-title" id="scalargasp-gp-emulation-for-a-single-output-function"> +<span id="sphx-glr-auto-examples-emulator-plot-scalargasp-py"></span><h1>ScalarGaSP: GP emulation for a single-output function<a class="headerlink" href="#scalargasp-gp-emulation-for-a-single-output-function" title="Permalink to this heading"></a></h1> +<p>This example shows how to apply Gaussian process emulation to a single-output +function using class <a class="reference internal" href="../../emulator/robustgasp.html#psimpy.emulator.robustgasp.ScalarGaSP" title="psimpy.emulator.robustgasp.ScalarGaSP"><code class="xref py py-class docutils literal notranslate"><span class="pre">ScalarGaSP</span></code></a>.</p> +<p>The task is to build a GP emulator for the function <span class="math notranslate nohighlight">\(y = x * sin(x)\)</span> +based on a few number of training data.</p> +<p>First, import the class <a class="reference internal" href="../../emulator/robustgasp.html#psimpy.emulator.robustgasp.ScalarGaSP" title="psimpy.emulator.robustgasp.ScalarGaSP"><code class="xref py py-class docutils literal notranslate"><span class="pre">ScalarGaSP</span></code></a> by</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">psimpy.emulator</span> <span class="kn">import</span> <span class="n">ScalarGaSP</span> +</pre></div> +</div> +<p>Then, create an instance of <a class="reference internal" href="../../emulator/robustgasp.html#psimpy.emulator.robustgasp.ScalarGaSP" title="psimpy.emulator.robustgasp.ScalarGaSP"><code class="xref py py-class docutils literal notranslate"><span class="pre">ScalarGaSP</span></code></a>. The parameter <code class="docutils literal notranslate"><span class="pre">ndim</span></code> +(dimension of function input <code class="docutils literal notranslate"><span class="pre">x</span></code>) must be specified. Optional parameters, such +as <code class="docutils literal notranslate"><span class="pre">method</span></code>, <code class="docutils literal notranslate"><span class="pre">kernel_type</span></code>, etc., can be set up if desired. Here, we leave +all the optional parameters to their default values.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">emulator</span> <span class="o">=</span> <span class="n">ScalarGaSP</span><span class="p">(</span><span class="n">ndim</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> +</pre></div> +</div> +<p>Given training input points <code class="docutils literal notranslate"><span class="pre">design</span></code> and corresponding output values <code class="docutils literal notranslate"><span class="pre">response</span></code>, +the emulator can be trained using <a class="reference internal" href="../../emulator/robustgasp.html#psimpy.emulator.robustgasp.ScalarGaSP.train" title="psimpy.emulator.robustgasp.ScalarGaSP.train"><code class="xref py py-meth docutils literal notranslate"><span class="pre">ScalarGaSP.train()</span></code></a>. Below we train +an emulator using <span class="math notranslate nohighlight">\(8\)</span> selected points.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span> + +<span class="k">def</span> <span class="nf">f</span><span class="p">(</span><span class="n">x</span><span class="p">):</span> + <span class="c1">#return x + 3*np.sin(x/2)</span> + <span class="k">return</span> <span class="n">x</span><span class="o">*</span><span class="n">np</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> + +<span class="n">x</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="mi">10</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> +<span class="n">y</span> <span class="o">=</span> <span class="n">f</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> + +<span class="n">emulator</span><span class="o">.</span><span class="n">train</span><span class="p">(</span><span class="n">design</span><span class="o">=</span><span class="n">x</span><span class="p">,</span> <span class="n">response</span><span class="o">=</span><span class="n">y</span><span class="p">)</span> +</pre></div> +</div> +<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>The upper bounds of the range parameters are 1881,404 +The initial values of range parameters are 37,62809 +Start of the optimization 1 : +The number of iterations is 9 + The value of the marginal posterior function is -13,79116 + Optimized range parameters are 2,237467 + Optimized nugget parameter is 0 + Convergence: TRUE +The initial values of range parameters are 0,21875 +Start of the optimization 2 : +The number of iterations is 9 + The value of the marginal posterior function is -13,79116 + Optimized range parameters are 2,237467 + Optimized nugget parameter is 0 + Convergence: TRUE +</pre></div> +</div> +<p>We can validate the performance of the trained emulator using the leave-one-out +cross validation method <code class="xref py py-meth docutils literal notranslate"><span class="pre">loo_validate()</span></code>.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">validation</span> <span class="o">=</span> <span class="n">emulator</span><span class="o">.</span><span class="n">loo_validate</span><span class="p">()</span> +</pre></div> +</div> +<p>Let’s plot emulator predictions vs actual outputs. The error bar indicates the +standard deviation.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span> + +<span class="n">fig</span> <span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span><span class="mi">4</span><span class="p">))</span> + +<span class="n">ax</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="s1">'Actual y'</span><span class="p">)</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s1">'Emulator-predicted y'</span><span class="p">)</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">min</span><span class="p">(</span><span class="n">y</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">y</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_ylim</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">min</span><span class="p">(</span><span class="n">y</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">y</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span> + +<span class="n">_</span> <span class="o">=</span> <span class="n">ax</span><span class="o">.</span><span class="n">plot</span><span class="p">([</span><span class="n">np</span><span class="o">.</span><span class="n">min</span><span class="p">(</span><span class="n">y</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">y</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">],</span> <span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">min</span><span class="p">(</span><span class="n">y</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">y</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">])</span> +<span class="n">_</span> <span class="o">=</span> <span class="n">ax</span><span class="o">.</span><span class="n">errorbar</span><span class="p">(</span><span class="n">y</span><span class="p">,</span> <span class="n">validation</span><span class="p">[:,</span><span class="mi">0</span><span class="p">],</span> <span class="n">validation</span><span class="p">[:,</span><span class="mi">1</span><span class="p">],</span> <span class="n">fmt</span><span class="o">=</span><span class="s1">'.'</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s1">''</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">'prediction and std'</span><span class="p">)</span> +<span class="n">_</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">legend</span><span class="p">()</span> +<span class="n">plt</span><span class="o">.</span><span class="n">tight_layout</span><span class="p">()</span> +</pre></div> +</div> +<img src="../../_images/sphx_glr_plot_scalargasp_001.png" srcset="../../_images/sphx_glr_plot_scalargasp_001.png" alt="plot scalargasp" class = "sphx-glr-single-img"/><p>With the trained emulator at our deposit, we can use the +<a class="reference internal" href="../../emulator/robustgasp.html#psimpy.emulator.robustgasp.ScalarGaSP.predict" title="psimpy.emulator.robustgasp.ScalarGaSP.predict"><code class="xref py py-meth docutils literal notranslate"><span class="pre">ScalarGaSP.predict()</span></code></a> method to make predictions at +any arbitrary set of input points (<code class="docutils literal notranslate"><span class="pre">testing_input</span></code>). It should be noted that, +<code class="docutils literal notranslate"><span class="pre">testing_trend</span></code> should be set according to <code class="docutils literal notranslate"><span class="pre">trend</span></code> used during emulator +training.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">testing_input</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">10</span><span class="p">,</span><span class="mf">0.1</span><span class="p">)</span> +<span class="n">predictions</span> <span class="o">=</span> <span class="n">emulator</span><span class="o">.</span><span class="n">predict</span><span class="p">(</span><span class="n">testing_input</span><span class="p">)</span> + +<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">testing_input</span><span class="p">,</span> <span class="n">predictions</span><span class="p">[:,</span> <span class="mi">0</span><span class="p">],</span> <span class="s1">'r-'</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span> <span class="s2">"mean"</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">scatter</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">s</span><span class="o">=</span><span class="mi">15</span><span class="p">,</span> <span class="n">c</span><span class="o">=</span><span class="s1">'k'</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s2">"training data"</span><span class="p">,</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">3</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">testing_input</span><span class="p">,</span> <span class="n">f</span><span class="p">(</span><span class="n">testing_input</span><span class="p">),</span> <span class="s1">'k:'</span><span class="p">,</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s2">"true function"</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">fill_between</span><span class="p">(</span><span class="n">testing_input</span><span class="p">,</span> <span class="n">predictions</span><span class="p">[:,</span> <span class="mi">1</span><span class="p">],</span> <span class="n">predictions</span><span class="p">[:,</span> <span class="mi">2</span><span class="p">],</span> <span class="n">alpha</span><span class="o">=</span><span class="mf">0.3</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s2">"95% CI"</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'x'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'emulator-predicted y'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">xlim</span><span class="p">(</span><span class="n">testing_input</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">testing_input</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span> +<span class="n">_</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">legend</span><span class="p">()</span> +<span class="n">plt</span><span class="o">.</span><span class="n">tight_layout</span><span class="p">()</span> +</pre></div> +</div> +<img src="../../_images/sphx_glr_plot_scalargasp_002.png" srcset="../../_images/sphx_glr_plot_scalargasp_002.png" alt="plot scalargasp" class = "sphx-glr-single-img"/><p>We can also draw any number of samples at <code class="docutils literal notranslate"><span class="pre">testing_input`</span></code> using +<a class="reference internal" href="../../emulator/robustgasp.html#psimpy.emulator.robustgasp.ScalarGaSP.sample" title="psimpy.emulator.robustgasp.ScalarGaSP.sample"><code class="xref py py-meth docutils literal notranslate"><span class="pre">ScalarGaSP.sample()</span></code></a> method.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">nsamples</span> <span class="o">=</span> <span class="mi">5</span> +<span class="n">samples</span> <span class="o">=</span> <span class="n">emulator</span><span class="o">.</span><span class="n">sample</span><span class="p">(</span><span class="n">testing_input</span><span class="p">,</span> <span class="n">nsamples</span><span class="o">=</span><span class="n">nsamples</span><span class="p">)</span> + +<span class="c1"># sphinx_gallery_thumbnail_number = 3</span> +<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">nsamples</span><span class="p">):</span> + <span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">testing_input</span><span class="p">,</span> <span class="n">samples</span><span class="p">[:,</span><span class="n">i</span><span class="p">],</span> <span class="s1">'--'</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="sa">f</span><span class="s1">'sample</span><span class="si">{</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="si">}</span><span class="s1">'</span><span class="p">)</span> + +<span class="n">plt</span><span class="o">.</span><span class="n">scatter</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">s</span><span class="o">=</span><span class="mi">15</span><span class="p">,</span> <span class="n">c</span><span class="o">=</span><span class="s1">'k'</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s2">"training data"</span><span class="p">,</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">testing_input</span><span class="p">,</span> <span class="n">f</span><span class="p">(</span><span class="n">testing_input</span><span class="p">),</span> <span class="s1">'k:'</span><span class="p">,</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s2">"true function"</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">fill_between</span><span class="p">(</span><span class="n">testing_input</span><span class="p">,</span> <span class="n">predictions</span><span class="p">[:,</span> <span class="mi">1</span><span class="p">],</span> <span class="n">predictions</span><span class="p">[:,</span> <span class="mi">2</span><span class="p">],</span> <span class="n">alpha</span><span class="o">=</span><span class="mf">0.3</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s2">"95% CI"</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'x'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'emulator-predicted y'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">xlim</span><span class="p">(</span><span class="n">testing_input</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">testing_input</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span> +<span class="n">_</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">legend</span><span class="p">()</span> +<span class="n">plt</span><span class="o">.</span><span class="n">tight_layout</span><span class="p">()</span> +</pre></div> +</div> +<img src="../../_images/sphx_glr_plot_scalargasp_003.png" srcset="../../_images/sphx_glr_plot_scalargasp_003.png" alt="plot scalargasp" class = "sphx-glr-single-img"/><div class="admonition tip"> +<p class="admonition-title">Tip</p> +<p>Above example shows how to train a GP emulator based on noise-free training data, +which is often the case of emulating a deterministic simulator. If you are dealing +with noisy training data, you can</p> +<blockquote> +<div><ul class="simple"> +<li><p>set the parameter <code class="docutils literal notranslate"><span class="pre">nugget</span></code> to a desired value, or</p></li> +<li><p>set <code class="docutils literal notranslate"><span class="pre">nugget</span></code> to <span class="math notranslate nohighlight">\(0\)</span> and <code class="docutils literal notranslate"><span class="pre">nugget_est</span></code> to <cite>True</cite>, meaning that <code class="docutils literal notranslate"><span class="pre">nugget</span></code> +is estimated from the noisy training data.</p></li> +</ul> +</div></blockquote> +</div> +<p class="sphx-glr-timing"><strong>Total running time of the script:</strong> ( 0 minutes 0.728 seconds)</p> +<div class="sphx-glr-footer sphx-glr-footer-example docutils container" id="sphx-glr-download-auto-examples-emulator-plot-scalargasp-py"> +<div class="sphx-glr-download sphx-glr-download-python docutils container"> +<p><a class="reference download internal" download="" href="../../_downloads/ca97a6211ade4816b175cce5bc31a34b/plot_scalargasp.py"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">Python</span> <span class="pre">source</span> <span class="pre">code:</span> <span class="pre">plot_scalargasp.py</span></code></a></p> +</div> +<div class="sphx-glr-download sphx-glr-download-jupyter docutils container"> +<p><a class="reference download internal" download="" href="../../_downloads/8c06e92daa6ae4230f607ca4f47a3769/plot_scalargasp.ipynb"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">Jupyter</span> <span class="pre">notebook:</span> <span class="pre">plot_scalargasp.ipynb</span></code></a></p> +</div> +</div> +<p class="sphx-glr-signature"><a class="reference external" href="https://sphinx-gallery.github.io">Gallery generated by Sphinx-Gallery</a></p> +</section> + + + </div> + </div> + <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer"> + <a href="plot_ppgasp.html" class="btn btn-neutral float-left" title="PPGaSP: GP emulation for multi-output functions" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> + <a href="../inference/index.html" class="btn btn-neutral float-right" title="Inference" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a> + </div> + + <hr/> + + <div role="contentinfo"> + <p>© Copyright 2023, Hu Zhao.</p> + </div> + + Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a + <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> + provided by <a href="https://readthedocs.org">Read the Docs</a>. + + +</footer> + </div> + </div> + </section> + </div> + <script> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + +</body> +</html> \ No newline at end of file diff --git a/docs/source/_build/html/auto_examples/emulator/sg_execution_times.html b/docs/source/_build/html/auto_examples/emulator/sg_execution_times.html new file mode 100644 index 0000000..c67dc83 --- /dev/null +++ b/docs/source/_build/html/auto_examples/emulator/sg_execution_times.html @@ -0,0 +1,131 @@ +<!DOCTYPE html> +<html class="writer-html5" lang="en" > +<head> + <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>Computation times — PSimPy's documentation</title> + <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-binder.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-dataframe.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-rendered-html.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" /> + <!--[if lt IE 9]> + <script src="../../_static/js/html5shiv.min.js"></script> + <![endif]--> + + <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> + <script src="../../_static/jquery.js"></script> + <script src="../../_static/underscore.js"></script> + <script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script> + <script src="../../_static/doctools.js"></script> + <script src="../../_static/sphinx_highlight.js"></script> + <script src="../../_static/js/theme.js"></script> + <link rel="index" title="Index" href="../../genindex.html" /> + <link rel="search" title="Search" href="../../search.html" /> +</head> + +<body class="wy-body-for-nav"> + <div class="wy-grid-for-nav"> + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + <a href="../../index.html" class="icon icon-home"> psimpy + </a> + <div class="version"> + 0.1.2 + </div> +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> + <ul> +<li class="toctree-l1"><a class="reference internal" href="../../index.html">Home</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../quickstart.html">Getting Started</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../api.html">API & Theory</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../examples.html">Example Gallery</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../changelog.html">Changes</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../refs.html">References</a></li> +</ul> + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">psimpy</a> + </nav> + + <div class="wy-nav-content"> + <div class="rst-content"> + <div role="navigation" aria-label="Page navigation"> + <ul class="wy-breadcrumbs"> + <li><a href="../../index.html" class="icon icon-home"></a></li> + <li class="breadcrumb-item active">Computation times</li> + <li class="wy-breadcrumbs-aside"> + <a href="../../_sources/auto_examples/emulator/sg_execution_times.rst.txt" rel="nofollow"> View page source</a> + </li> + </ul> + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <section id="computation-times"> +<span id="sphx-glr-auto-examples-emulator-sg-execution-times"></span><h1>Computation times<a class="headerlink" href="#computation-times" title="Permalink to this heading"></a></h1> +<p><strong>00:06.062</strong> total execution time for <strong>auto_examples_emulator</strong> files:</p> +<table class="docutils align-default"> +<colgroup> +<col style="width: 82%" /> +<col style="width: 11%" /> +<col style="width: 8%" /> +</colgroup> +<tbody> +<tr class="row-odd"><td><p><a class="reference internal" href="plot_ppgasp.html#sphx-glr-auto-examples-emulator-plot-ppgasp-py"><span class="std std-ref">PPGaSP: GP emulation for multi-output functions</span></a> (<code class="docutils literal notranslate"><span class="pre">plot_ppgasp.py</span></code>)</p></td> +<td><p>00:05.333</p></td> +<td><p>0.0 MB</p></td> +</tr> +<tr class="row-even"><td><p><a class="reference internal" href="plot_scalargasp.html#sphx-glr-auto-examples-emulator-plot-scalargasp-py"><span class="std std-ref">ScalarGaSP: GP emulation for a single-output function</span></a> (<code class="docutils literal notranslate"><span class="pre">plot_scalargasp.py</span></code>)</p></td> +<td><p>00:00.728</p></td> +<td><p>0.0 MB</p></td> +</tr> +</tbody> +</table> +</section> + + + </div> + </div> + <footer> + + <hr/> + + <div role="contentinfo"> + <p>© Copyright 2023, Hu Zhao.</p> + </div> + + Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a + <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> + provided by <a href="https://readthedocs.org">Read the Docs</a>. + + +</footer> + </div> + </div> + </section> + </div> + <script> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + +</body> +</html> \ No newline at end of file diff --git a/docs/source/_build/html/auto_examples/inference/index.html b/docs/source/_build/html/auto_examples/inference/index.html new file mode 100644 index 0000000..6d74022 --- /dev/null +++ b/docs/source/_build/html/auto_examples/inference/index.html @@ -0,0 +1,147 @@ +<!DOCTYPE html> +<html class="writer-html5" lang="en" > +<head> + <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>Inference — PSimPy's documentation</title> + <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-binder.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-dataframe.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-rendered-html.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" /> + <!--[if lt IE 9]> + <script src="../../_static/js/html5shiv.min.js"></script> + <![endif]--> + + <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> + <script src="../../_static/jquery.js"></script> + <script src="../../_static/underscore.js"></script> + <script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script> + <script src="../../_static/doctools.js"></script> + <script src="../../_static/sphinx_highlight.js"></script> + <script src="../../_static/js/theme.js"></script> + <link rel="index" title="Index" href="../../genindex.html" /> + <link rel="search" title="Search" href="../../search.html" /> + <link rel="next" title="Bayesian inference" href="plot_bayes_inference.html" /> + <link rel="prev" title="ScalarGaSP: GP emulation for a single-output function" href="../emulator/plot_scalargasp.html" /> +</head> + +<body class="wy-body-for-nav"> + <div class="wy-grid-for-nav"> + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + <a href="../../index.html" class="icon icon-home"> psimpy + </a> + <div class="version"> + 0.1.2 + </div> +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> + <ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../../index.html">Home</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../quickstart.html">Getting Started</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../api.html">API & Theory</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../../examples.html">Example Gallery</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="../emulator/index.html">Emulator</a></li> +<li class="toctree-l2 current"><a class="current reference internal" href="#">Inference</a><ul> +<li class="toctree-l3"><a class="reference internal" href="plot_bayes_inference.html">Bayesian inference</a></li> +<li class="toctree-l3"><a class="reference internal" href="plot_active_learning.html">Active learning</a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="../sampler/index.html">Sampler</a></li> +<li class="toctree-l2"><a class="reference internal" href="../sensitivity/index.html">Sensitivity</a></li> +<li class="toctree-l2"><a class="reference internal" href="../simulator/index.html">Simulator</a></li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="../../changelog.html">Changes</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../refs.html">References</a></li> +</ul> + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">psimpy</a> + </nav> + + <div class="wy-nav-content"> + <div class="rst-content"> + <div role="navigation" aria-label="Page navigation"> + <ul class="wy-breadcrumbs"> + <li><a href="../../index.html" class="icon icon-home"></a></li> + <li class="breadcrumb-item"><a href="../../examples.html">Example Gallery</a></li> + <li class="breadcrumb-item active">Inference</li> + <li class="wy-breadcrumbs-aside"> + <a href="../../_sources/auto_examples/inference/index.rst.txt" rel="nofollow"> View page source</a> + </li> + </ul> + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <section id="inference"> +<h1>Inference<a class="headerlink" href="#inference" title="Permalink to this heading"></a></h1> +<div class="sphx-glr-thumbnails"><div class="sphx-glr-thumbcontainer" tooltip="Bayesian inference"><img alt="Bayesian inference" src="../../_images/sphx_glr_plot_bayes_inference_thumb.png" /> +<p><a class="reference internal" href="plot_bayes_inference.html#sphx-glr-auto-examples-inference-plot-bayes-inference-py"><span class="std std-ref">Bayesian inference</span></a></p> + <div class="sphx-glr-thumbnail-title">Bayesian inference</div> +</div><div class="sphx-glr-thumbcontainer" tooltip="Active learning"><img alt="Active learning" src="../../_images/sphx_glr_plot_active_learning_thumb.png" /> +<p><a class="reference internal" href="plot_active_learning.html#sphx-glr-auto-examples-inference-plot-active-learning-py"><span class="std std-ref">Active learning</span></a></p> + <div class="sphx-glr-thumbnail-title">Active learning</div> +</div></div><div class="toctree-wrapper compound"> +</div> +<div class="sphx-glr-footer sphx-glr-footer-gallery docutils container"> +<div class="sphx-glr-download sphx-glr-download-python docutils container"> +<p><a class="reference download internal" download="" href="../../_downloads/4647ee707541b918a88f2f6fccfe8f6e/inference_python.zip"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">all</span> <span class="pre">examples</span> <span class="pre">in</span> <span class="pre">Python</span> <span class="pre">source</span> <span class="pre">code:</span> <span class="pre">inference_python.zip</span></code></a></p> +</div> +<div class="sphx-glr-download sphx-glr-download-jupyter docutils container"> +<p><a class="reference download internal" download="" href="../../_downloads/a7f224bf083830ea00d3ddeb607984f7/inference_jupyter.zip"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">all</span> <span class="pre">examples</span> <span class="pre">in</span> <span class="pre">Jupyter</span> <span class="pre">notebooks:</span> <span class="pre">inference_jupyter.zip</span></code></a></p> +</div> +</div> +<p class="sphx-glr-signature"><a class="reference external" href="https://sphinx-gallery.github.io">Gallery generated by Sphinx-Gallery</a></p> +</section> + + + </div> + </div> + <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer"> + <a href="../emulator/plot_scalargasp.html" class="btn btn-neutral float-left" title="ScalarGaSP: GP emulation for a single-output function" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> + <a href="plot_bayes_inference.html" class="btn btn-neutral float-right" title="Bayesian inference" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a> + </div> + + <hr/> + + <div role="contentinfo"> + <p>© Copyright 2023, Hu Zhao.</p> + </div> + + Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a + <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> + provided by <a href="https://readthedocs.org">Read the Docs</a>. + + +</footer> + </div> + </div> + </section> + </div> + <script> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + +</body> +</html> \ No newline at end of file diff --git a/docs/source/_build/html/auto_examples/inference/plot_active_learning.html b/docs/source/_build/html/auto_examples/inference/plot_active_learning.html new file mode 100644 index 0000000..4068de9 --- /dev/null +++ b/docs/source/_build/html/auto_examples/inference/plot_active_learning.html @@ -0,0 +1,1174 @@ +<!DOCTYPE html> +<html class="writer-html5" lang="en" > +<head> + <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>Active learning — PSimPy's documentation</title> + <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-binder.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-dataframe.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-rendered-html.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" /> + <!--[if lt IE 9]> + <script src="../../_static/js/html5shiv.min.js"></script> + <![endif]--> + + <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> + <script src="../../_static/jquery.js"></script> + <script src="../../_static/underscore.js"></script> + <script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script> + <script src="../../_static/doctools.js"></script> + <script src="../../_static/sphinx_highlight.js"></script> + <script src="../../_static/js/theme.js"></script> + <link rel="index" title="Index" href="../../genindex.html" /> + <link rel="search" title="Search" href="../../search.html" /> + <link rel="next" title="Sampler" href="../sampler/index.html" /> + <link rel="prev" title="Bayesian inference" href="plot_bayes_inference.html" /> +</head> + +<body class="wy-body-for-nav"> + <div class="wy-grid-for-nav"> + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + <a href="../../index.html" class="icon icon-home"> psimpy + </a> + <div class="version"> + 0.1.2 + </div> +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> + <ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../../index.html">Home</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../quickstart.html">Getting Started</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../api.html">API & Theory</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../../examples.html">Example Gallery</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="../emulator/index.html">Emulator</a></li> +<li class="toctree-l2 current"><a class="reference internal" href="index.html">Inference</a><ul class="current"> +<li class="toctree-l3"><a class="reference internal" href="plot_bayes_inference.html">Bayesian inference</a></li> +<li class="toctree-l3 current"><a class="current reference internal" href="#">Active learning</a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="../sampler/index.html">Sampler</a></li> +<li class="toctree-l2"><a class="reference internal" href="../sensitivity/index.html">Sensitivity</a></li> +<li class="toctree-l2"><a class="reference internal" href="../simulator/index.html">Simulator</a></li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="../../changelog.html">Changes</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../refs.html">References</a></li> +</ul> + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">psimpy</a> + </nav> + + <div class="wy-nav-content"> + <div class="rst-content"> + <div role="navigation" aria-label="Page navigation"> + <ul class="wy-breadcrumbs"> + <li><a href="../../index.html" class="icon icon-home"></a></li> + <li class="breadcrumb-item"><a href="../../examples.html">Example Gallery</a></li> + <li class="breadcrumb-item"><a href="index.html">Inference</a></li> + <li class="breadcrumb-item active">Active learning</li> + <li class="wy-breadcrumbs-aside"> + <a href="../../_sources/auto_examples/inference/plot_active_learning.rst.txt" rel="nofollow"> View page source</a> + </li> + </ul> + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="sphx-glr-download-link-note admonition note"> +<p class="admonition-title">Note</p> +<p>Click <a class="reference internal" href="#sphx-glr-download-auto-examples-inference-plot-active-learning-py"><span class="std std-ref">here</span></a> +to download the full example code</p> +</div> +<section class="sphx-glr-example-title" id="active-learning"> +<span id="sphx-glr-auto-examples-inference-plot-active-learning-py"></span><h1>Active learning<a class="headerlink" href="#active-learning" title="Permalink to this heading"></a></h1> +<p>This example shows how to use the <a class="reference internal" href="../../inference/active_learning.html#psimpy.inference.active_learning.ActiveLearning" title="psimpy.inference.active_learning.ActiveLearning"><code class="xref py py-class docutils literal notranslate"><span class="pre">ActiveLearning</span></code></a> class to iteratively +build a Gaussian process emulator for an unnormalized posterior involving a +simulator. It should be noted that this example is only for illustration +purpose, rather than a real case. For simplicity, required arguments for +<a class="reference internal" href="../../inference/active_learning.html#psimpy.inference.active_learning.ActiveLearning" title="psimpy.inference.active_learning.ActiveLearning"><code class="xref py py-class docutils literal notranslate"><span class="pre">ActiveLearning</span></code></a> (including <cite>simulator</cite>, <cite>likelihood</cite>, <cite>data</cite>, etc.) are purely +made up. For a realistic case of active learning, one can refer to <span id="id1">Zhao and Kowalski [<a class="reference internal" href="../../refs.html#id16" title="Hu Zhao and Julia Kowalski. Bayesian active learning for parameter calibration of landslide run-out models. Landslides, 19():2033–2045, 2022. doi:https://doi.org/10.1007/s10346-022-01857-z.">2022</a>]</span>.</p> +<p>First, we define the simulator, prior distribution of its variable parameters, +observed data, and likelihood function. They basically define the Bayesian +inference problem.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span> + +<span class="n">ndim</span> <span class="o">=</span> <span class="mi">2</span> <span class="c1"># dimension of variable parameters of the simulator</span> +<span class="n">bounds</span> <span class="o">=</span> <span class="n">bounds</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([[</span><span class="o">-</span><span class="mi">5</span><span class="p">,</span><span class="mi">5</span><span class="p">],[</span><span class="o">-</span><span class="mi">5</span><span class="p">,</span><span class="mi">5</span><span class="p">]])</span> <span class="c1"># bounds of variable parameters</span> +<span class="n">data</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">])</span> + +<span class="k">def</span> <span class="nf">simulator</span><span class="p">(</span><span class="n">x1</span><span class="p">,</span> <span class="n">x2</span><span class="p">):</span> + <span class="sd">"""Simulator y=f(x)."""</span> + <span class="n">y1</span><span class="p">,</span> <span class="n">y2</span> <span class="o">=</span> <span class="n">x1</span><span class="p">,</span> <span class="n">x2</span> + <span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">y1</span><span class="p">,</span> <span class="n">y2</span><span class="p">])</span> + +<span class="k">def</span> <span class="nf">prior</span><span class="p">(</span><span class="n">x</span><span class="p">):</span> + <span class="sd">"""Uniform prior."""</span> + <span class="k">return</span> <span class="mi">1</span><span class="o">/</span><span class="p">(</span><span class="mi">10</span><span class="o">*</span><span class="mi">10</span><span class="p">)</span> + +<span class="k">def</span> <span class="nf">likelihood</span><span class="p">(</span><span class="n">y</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span> + <span class="sd">"""Likelihood function L(y,data)."""</span> + <span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">exp</span><span class="p">(</span><span class="o">-</span><span class="p">(</span><span class="n">y</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">-</span><span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="o">**</span><span class="mi">2</span><span class="o">/</span><span class="mi">100</span> <span class="o">-</span> <span class="p">(</span><span class="n">y</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">**</span><span class="mi">2</span><span class="o">-</span><span class="n">y</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span><span class="o">**</span><span class="mi">2</span><span class="p">)</span> +</pre></div> +</div> +<p>Imagine that the simulator is a complex solver. It is not computationally feasible +to compute the posterior distribution of the variable parameters using grid estimation +or Metropolis Hastings estimation. This is because they require evaluating the likelihood +many times which essentially leads to many evaluations of the simulator. Therefore, we +resort to use active learning to build a Gaussian process emulator for the unnormalized +posterior (prior times likelihood) based on a small number of evaluations of the simulator. +The the posterior can be estimated using the emulator.</p> +<p>To do so, we need to pass arguments to following parameters of the <a class="reference internal" href="../../inference/active_learning.html#psimpy.inference.active_learning.ActiveLearning" title="psimpy.inference.active_learning.ActiveLearning"><code class="xref py py-class docutils literal notranslate"><span class="pre">ActiveLearning</span></code></a> class:</p> +<blockquote> +<div><ul class="simple"> +<li><p>run_sim_obj : instance of class <a class="reference internal" href="../../simulator/run_simulator.html#psimpy.simulator.run_simulator.RunSimulator" title="psimpy.simulator.run_simulator.RunSimulator"><code class="xref py py-class docutils literal notranslate"><span class="pre">RunSimulator</span></code></a>. It carries information on how +to run the simulator.</p></li> +<li><p>lhs_sampler : instance of class <a class="reference internal" href="../../sampler/latin.html#psimpy.sampler.latin.LHS" title="psimpy.sampler.latin.LHS"><code class="xref py py-class docutils literal notranslate"><span class="pre">LHS</span></code></a>. It is used to draw initial samples to run +simulations in order to train an inital Gaussian process emulator.</p></li> +<li><p>scalar_gasp : instance of class <a class="reference internal" href="../../emulator/robustgasp.html#psimpy.emulator.robustgasp.ScalarGaSP" title="psimpy.emulator.robustgasp.ScalarGaSP"><code class="xref py py-class docutils literal notranslate"><span class="pre">ScalarGaSP</span></code></a>. It sets up the emulator structure.</p></li> +</ul> +</div></blockquote> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">psimpy.simulator</span> <span class="kn">import</span> <span class="n">RunSimulator</span> +<span class="kn">from</span> <span class="nn">psimpy.sampler</span> <span class="kn">import</span> <span class="n">LHS</span> +<span class="kn">from</span> <span class="nn">psimpy.emulator</span> <span class="kn">import</span> <span class="n">ScalarGaSP</span> + +<span class="n">run_simulator</span> <span class="o">=</span> <span class="n">RunSimulator</span><span class="p">(</span><span class="n">simulator</span><span class="p">,</span> <span class="n">var_inp_parameter</span><span class="o">=</span><span class="p">[</span><span class="s1">'x1'</span><span class="p">,</span><span class="s1">'x2'</span><span class="p">])</span> +<span class="n">lhs_sampler</span> <span class="o">=</span> <span class="n">LHS</span><span class="p">(</span><span class="n">ndim</span><span class="o">=</span><span class="n">ndim</span><span class="p">,</span> <span class="n">bounds</span><span class="o">=</span><span class="n">bounds</span><span class="p">,</span> <span class="n">seed</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> +<span class="n">scalar_gasp</span> <span class="o">=</span> <span class="n">ScalarGaSP</span><span class="p">(</span><span class="n">ndim</span><span class="o">=</span><span class="n">ndim</span><span class="p">)</span> +</pre></div> +</div> +<p>Next, we create an object of the <a class="reference internal" href="../../inference/active_learning.html#psimpy.inference.active_learning.ActiveLearning" title="psimpy.inference.active_learning.ActiveLearning"><code class="xref py py-class docutils literal notranslate"><span class="pre">ActiveLearning</span></code></a> class by</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">psimpy.inference</span> <span class="kn">import</span> <span class="n">ActiveLearning</span> + +<span class="n">active_learner</span> <span class="o">=</span> <span class="n">ActiveLearning</span><span class="p">(</span><span class="n">ndim</span><span class="p">,</span> <span class="n">bounds</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">run_simulator</span><span class="p">,</span> <span class="n">prior</span><span class="p">,</span> <span class="n">likelihood</span><span class="p">,</span> + <span class="n">lhs_sampler</span><span class="p">,</span> <span class="n">scalar_gasp</span><span class="p">)</span> +</pre></div> +</div> +<p>Then we can call the <a class="reference internal" href="../../inference/active_learning.html#psimpy.inference.active_learning.ActiveLearning.initial_simulation" title="psimpy.inference.active_learning.ActiveLearning.initial_simulation"><code class="xref py py-meth docutils literal notranslate"><span class="pre">ActiveLearning.initial_simulation()</span></code></a> method to run initial +simulations and call the <a class="reference internal" href="../../inference/active_learning.html#psimpy.inference.active_learning.ActiveLearning.iterative_emulation" title="psimpy.inference.active_learning.ActiveLearning.iterative_emulation"><code class="xref py py-meth docutils literal notranslate"><span class="pre">ActiveLearning.iterative_emulation()</span></code></a> method to +iteratively run new simulation and build emulator. Here we allocate 40 simulations for +initial emulator training and 60 simulations for adaptive training.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">n0</span> <span class="o">=</span> <span class="mi">40</span> +<span class="n">niter</span> <span class="o">=</span> <span class="mi">60</span> + +<span class="n">init_var_samples</span><span class="p">,</span> <span class="n">init_sim_outputs</span> <span class="o">=</span> <span class="n">active_learner</span><span class="o">.</span><span class="n">initial_simulation</span><span class="p">(</span> + <span class="n">n0</span><span class="p">,</span> <span class="n">mode</span><span class="o">=</span><span class="s1">'parallel'</span><span class="p">,</span> <span class="n">max_workers</span><span class="o">=</span><span class="mi">4</span><span class="p">)</span> + +<span class="n">var_samples</span><span class="p">,</span> <span class="n">_</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="n">active_learner</span><span class="o">.</span><span class="n">iterative_emulation</span><span class="p">(</span> + <span class="n">n0</span><span class="p">,</span> <span class="n">init_var_samples</span><span class="p">,</span> <span class="n">init_sim_outputs</span><span class="p">,</span> <span class="n">niter</span><span class="o">=</span><span class="n">niter</span><span class="p">)</span> +</pre></div> +</div> +<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>The upper bounds of the range parameters are 401,3482 397,4694 +The initial values of range parameters are 8,026963 7,949389 +Start of the optimization 1 : +The number of iterations is 22 + The value of the marginal posterior function is -146,5038 + Optimized range parameters are 30,59853 130,6077 + Optimized nugget parameter is 0 + Convergence: TRUE +The initial values of range parameters are 0,9828751 0,9733764 +Start of the optimization 2 : +The number of iterations is 36 + The value of the marginal posterior function is -146,5038 + Optimized range parameters are 30,59827 130,6067 + Optimized nugget parameter is 0 + Convergence: FALSE +The upper bounds of the range parameters are 423,194 420,3365 +The initial values of range parameters are 8,463881 8,40673 +Start of the optimization 1 : +The number of iterations is 13 + The value of the marginal posterior function is -148,6792 + Optimized range parameters are 30,19534 133,3286 + Optimized nugget parameter is 0 + Convergence: TRUE +The initial values of range parameters are 0,9589025 0,9524277 +Start of the optimization 2 : +The number of iterations is 12 + The value of the marginal posterior function is -148,6792 + Optimized range parameters are 30,19539 133,329 + Optimized nugget parameter is 0 + Convergence: TRUE +The upper bounds of the range parameters are 422,8426 419,9874 +The initial values of range parameters are 8,456851 8,399747 +Start of the optimization 1 : +The number of iterations is 34 + The value of the marginal posterior function is -149,9595 + Optimized range parameters are 30,64771 135,0597 + Optimized nugget parameter is 0 + Convergence: FALSE +The initial values of range parameters are 0,9360715 0,9297509 +Start of the optimization 2 : +The number of iterations is 24 + The value of the marginal posterior function is -149,9595 + Optimized range parameters are 30,64696 135,0536 + Optimized nugget parameter is 0 + Convergence: TRUE +The upper bounds of the range parameters are 423,2876 420,4294 +The initial values of range parameters are 8,465751 8,408588 +Start of the optimization 1 : +The number of iterations is 25 + The value of the marginal posterior function is -151,304 + Optimized range parameters are 31,21605 136,8571 + Optimized nugget parameter is 0 + Convergence: FALSE +The initial values of range parameters are 0,9143024 0,9081287 +Start of the optimization 2 : +The number of iterations is 23 + The value of the marginal posterior function is -151,304 + Optimized range parameters are 31,21617 136,8537 + Optimized nugget parameter is 0 + Convergence: FALSE +The upper bounds of the range parameters are 389,6167 386,9859 +The initial values of range parameters are 7,792334 7,739717 +Start of the optimization 1 : +The number of iterations is 13 + The value of the marginal posterior function is -152,6009 + Optimized range parameters are 32,285 141,3784 + Optimized nugget parameter is 0 + Convergence: TRUE +The initial values of range parameters are 0,8935228 0,8874894 +Start of the optimization 2 : +The number of iterations is 17 + The value of the marginal posterior function is -152,6009 + Optimized range parameters are 32,28096 141,3737 + Optimized nugget parameter is 0 + Convergence: TRUE +The upper bounds of the range parameters are 368,8855 366,3947 +The initial values of range parameters are 7,377711 7,327894 +Start of the optimization 1 : +The number of iterations is 17 + The value of the marginal posterior function is -153,5419 + Optimized range parameters are 32,43481 141,7852 + Optimized nugget parameter is 0 + Convergence: TRUE +The initial values of range parameters are 0,8736668 0,8677675 +Start of the optimization 2 : +The number of iterations is 24 + The value of the marginal posterior function is -153,5419 + Optimized range parameters are 32,43357 141,7844 + Optimized nugget parameter is 0 + Convergence: FALSE +The upper bounds of the range parameters are 339,4555 337,1634 +The initial values of range parameters are 6,789111 6,743268 +Start of the optimization 1 : +The number of iterations is 17 + The value of the marginal posterior function is -154,9929 + Optimized range parameters are 33,69448 151,2103 + Optimized nugget parameter is 0 + Convergence: TRUE +The initial values of range parameters are 0,854674 0,848903 +Start of the optimization 2 : +The number of iterations is 22 + The value of the marginal posterior function is -154,9929 + Optimized range parameters are 33,69468 151,2111 + Optimized nugget parameter is 0 + Convergence: FALSE +The upper bounds of the range parameters are 369,9581 367,46 +The initial values of range parameters are 7,399163 7,349201 +Start of the optimization 1 : +The number of iterations is 26 + The value of the marginal posterior function is -155,4764 + Optimized range parameters are 33,90556 152,0139 + Optimized nugget parameter is 0 + Convergence: FALSE +The initial values of range parameters are 0,8364895 0,8308412 +Start of the optimization 2 : +The number of iterations is 23 + The value of the marginal posterior function is -155,4764 + Optimized range parameters are 33,90541 152,0137 + Optimized nugget parameter is 0 + Convergence: FALSE +The upper bounds of the range parameters are 299,8308 297,8062 +The initial values of range parameters are 5,996615 5,956124 +Start of the optimization 1 : +The number of iterations is 27 + The value of the marginal posterior function is -155,8802 + Optimized range parameters are 34,04389 152,6133 + Optimized nugget parameter is 0 + Convergence: FALSE +The initial values of range parameters are 0,8190626 0,813532 +Start of the optimization 2 : +The number of iterations is 24 + The value of the marginal posterior function is -155,8802 + Optimized range parameters are 34,04381 152,6131 + Optimized nugget parameter is 0 + Convergence: FALSE +The upper bounds of the range parameters are 272,589 270,7484 +The initial values of range parameters are 5,45178 5,414968 +Start of the optimization 1 : +The number of iterations is 22 + The value of the marginal posterior function is -156,1383 + Optimized range parameters are 34,46966 151,4246 + Optimized nugget parameter is 0 + Convergence: TRUE +The initial values of range parameters are 0,802347 0,7969293 +Start of the optimization 2 : +The number of iterations is 24 + The value of the marginal posterior function is -156,1383 + Optimized range parameters are 34,46972 151,4261 + Optimized nugget parameter is 0 + Convergence: FALSE +The upper bounds of the range parameters are 217,1413 215,6751 +The initial values of range parameters are 4,342826 4,313501 +Start of the optimization 1 : +The number of iterations is 16 + The value of the marginal posterior function is -156,184 + Optimized range parameters are 34,52228 152,8428 + Optimized nugget parameter is 0 + Convergence: TRUE +The initial values of range parameters are 0,7863001 0,7809907 +Start of the optimization 2 : +The number of iterations is 29 + The value of the marginal posterior function is -156,184 + Optimized range parameters are 34,5049 152,8145 + Optimized nugget parameter is 0 + Convergence: FALSE +The upper bounds of the range parameters are 206,6122 205,2171 +The initial values of range parameters are 4,132244 4,104342 +Start of the optimization 1 : +The number of iterations is 25 + The value of the marginal posterior function is -156,2348 + Optimized range parameters are 34,79805 155,1646 + Optimized nugget parameter is 0 + Convergence: FALSE +The initial values of range parameters are 0,7708824 0,7656772 +Start of the optimization 2 : +The number of iterations is 22 + The value of the marginal posterior function is -156,2348 + Optimized range parameters are 34,82503 155,2481 + Optimized nugget parameter is 0 + Convergence: TRUE +The upper bounds of the range parameters are 264,8501 263,0618 +The initial values of range parameters are 5,297002 5,261235 +Start of the optimization 1 : +The number of iterations is 30 + The value of the marginal posterior function is -156,4063 + Optimized range parameters are 34,74024 156,9499 + Optimized nugget parameter is 0 + Convergence: FALSE +The initial values of range parameters are 0,7560578 0,7509526 +Start of the optimization 2 : +The number of iterations is 35 + The value of the marginal posterior function is -156,4062 + Optimized range parameters are 34,71806 156,8712 + Optimized nugget parameter is 0 + Convergence: FALSE +The upper bounds of the range parameters are 255,2317 253,5083 +The initial values of range parameters are 5,104633 5,070165 +Start of the optimization 1 : +The number of iterations is 20 + The value of the marginal posterior function is -156,5552 + Optimized range parameters are 35,37305 157,5615 + Optimized nugget parameter is 0 + Convergence: TRUE +The initial values of range parameters are 0,7417925 0,7367837 +Start of the optimization 2 : +The number of iterations is 37 + The value of the marginal posterior function is -156,5552 + Optimized range parameters are 35,37704 157,591 + Optimized nugget parameter is 0 + Convergence: FALSE +The upper bounds of the range parameters are 234,5139 232,9304 +The initial values of range parameters are 4,690278 4,658607 +Start of the optimization 1 : +The number of iterations is 25 + The value of the marginal posterior function is -156,8767 + Optimized range parameters are 35,91747 161,0899 + Optimized nugget parameter is 0 + Convergence: FALSE +The initial values of range parameters are 0,7280556 0,7231396 +Start of the optimization 2 : +The number of iterations is 32 + The value of the marginal posterior function is -156,8767 + Optimized range parameters are 35,92577 161,0559 + Optimized nugget parameter is 0 + Convergence: FALSE +The upper bounds of the range parameters are 237,6023 235,9979 +The initial values of range parameters are 4,752045 4,719958 +Start of the optimization 1 : +The number of iterations is 15 + The value of the marginal posterior function is -156,6342 + Optimized range parameters are 36,30341 161,9859 + Optimized nugget parameter is 0 + Convergence: TRUE +The initial values of range parameters are 0,7148183 0,7099916 +Start of the optimization 2 : +The number of iterations is 26 + The value of the marginal posterior function is -156,6343 + Optimized range parameters are 36,30117 161,8561 + Optimized nugget parameter is 0 + Convergence: FALSE +The upper bounds of the range parameters are 231,5375 229,9741 +The initial values of range parameters are 4,63075 4,599482 +Start of the optimization 1 : +The number of iterations is 27 + The value of the marginal posterior function is -156,3683 + Optimized range parameters are 36,27212 162,5847 + Optimized nugget parameter is 0 + Convergence: TRUE +The initial values of range parameters are 0,7020536 0,6973131 +Start of the optimization 2 : +The number of iterations is 30 + The value of the marginal posterior function is -156,3684 + Optimized range parameters are 36,25962 162,5355 + Optimized nugget parameter is 0 + Convergence: TRUE +The upper bounds of the range parameters are 237,6502 236,0455 +The initial values of range parameters are 4,753005 4,720911 +Start of the optimization 1 : +The number of iterations is 14 + The value of the marginal posterior function is -156,014 + Optimized range parameters are 36,19577 162,4854 + Optimized nugget parameter is 0 + Convergence: TRUE +The initial values of range parameters are 0,6897369 0,6850796 +Start of the optimization 2 : +The number of iterations is 27 + The value of the marginal posterior function is -156,014 + Optimized range parameters are 36,19621 162,4877 + Optimized nugget parameter is 0 + Convergence: FALSE +The upper bounds of the range parameters are 221,4001 219,9051 +The initial values of range parameters are 4,428002 4,398102 +Start of the optimization 1 : +The number of iterations is 36 + The value of the marginal posterior function is -155,8456 + Optimized range parameters are 36,93092 166,708 + Optimized nugget parameter is 0 + Convergence: FALSE +The initial values of range parameters are 0,6778449 0,6732679 +Start of the optimization 2 : +The number of iterations is 19 + The value of the marginal posterior function is -155,8455 + Optimized range parameters are 37,00954 166,8438 + Optimized nugget parameter is 0 + Convergence: TRUE +The upper bounds of the range parameters are 207,5545 206,153 +The initial values of range parameters are 4,15109 4,123061 +Start of the optimization 1 : +The number of iterations is 36 + The value of the marginal posterior function is -155,2611 + Optimized range parameters are 37,54574 171,0122 + Optimized nugget parameter is 0 + Convergence: TRUE +The initial values of range parameters are 0,666356 0,6618565 +Start of the optimization 2 : +The number of iterations is 26 + The value of the marginal posterior function is -155,2611 + Optimized range parameters are 37,52707 170,9901 + Optimized nugget parameter is 0 + Convergence: FALSE +The upper bounds of the range parameters are 211,1368 209,7111 +The initial values of range parameters are 4,222736 4,194222 +Start of the optimization 1 : +The number of iterations is 38 + The value of the marginal posterior function is -154,6105 + Optimized range parameters are 37,27271 173,4402 + Optimized nugget parameter is 0 + Convergence: FALSE +The initial values of range parameters are 0,6552501 0,6508256 +Start of the optimization 2 : +The number of iterations is 38 + The value of the marginal posterior function is -154,6104 + Optimized range parameters are 37,31152 173,4271 + Optimized nugget parameter is 0 + Convergence: FALSE +The upper bounds of the range parameters are 229,1987 227,651 +The initial values of range parameters are 4,583973 4,553021 +Start of the optimization 1 : +The number of iterations is 30 + The value of the marginal posterior function is -153,8922 + Optimized range parameters are 37,52317 173,0118 + Optimized nugget parameter is 0 + Convergence: FALSE +The initial values of range parameters are 0,6445083 0,6401563 +Start of the optimization 2 : +The number of iterations is 29 + The value of the marginal posterior function is -153,8923 + Optimized range parameters are 37,52772 173,0381 + Optimized nugget parameter is 0 + Convergence: FALSE +The upper bounds of the range parameters are 200,215 198,8631 +The initial values of range parameters are 4,004301 3,977262 +Start of the optimization 1 : +The number of iterations is 29 + The value of the marginal posterior function is -153,0737 + Optimized range parameters are 37,6626 173,7851 + Optimized nugget parameter is 0 + Convergence: FALSE +The initial values of range parameters are 0,634113 0,6298312 +Start of the optimization 2 : +The number of iterations is 38 + The value of the marginal posterior function is -153,0733 + Optimized range parameters are 37,57977 172,9914 + Optimized nugget parameter is 0 + Convergence: FALSE +The upper bounds of the range parameters are 208,2931 206,8866 +The initial values of range parameters are 4,165862 4,137733 +Start of the optimization 1 : +The number of iterations is 31 + The value of the marginal posterior function is -152,171 + Optimized range parameters are 37,55899 172,4488 + Optimized nugget parameter is 0 + Convergence: TRUE +The initial values of range parameters are 0,6240477 0,6198339 +Start of the optimization 2 : +The number of iterations is 34 + The value of the marginal posterior function is -152,1711 + Optimized range parameters are 37,55216 172,3431 + Optimized nugget parameter is 0 + Convergence: FALSE +The upper bounds of the range parameters are 190,9562 189,6668 +The initial values of range parameters are 3,819124 3,793336 +Start of the optimization 1 : +The number of iterations is 26 + The value of the marginal posterior function is -151,4191 + Optimized range parameters are 37,87024 177,6757 + Optimized nugget parameter is 0 + Convergence: FALSE +The initial values of range parameters are 0,6142969 0,610149 +Start of the optimization 2 : +The number of iterations is 31 + The value of the marginal posterior function is -151,4191 + Optimized range parameters are 37,8678 177,4358 + Optimized nugget parameter is 0 + Convergence: TRUE +The upper bounds of the range parameters are 187,3139 186,0491 +The initial values of range parameters are 3,746279 3,720983 +Start of the optimization 1 : +The number of iterations is 27 + The value of the marginal posterior function is -150,3521 + Optimized range parameters are 37,93228 177,0193 + Optimized nugget parameter is 0 + Convergence: FALSE +The initial values of range parameters are 0,6048462 0,6007621 +Start of the optimization 2 : +The number of iterations is 15 + The value of the marginal posterior function is -150,3521 + Optimized range parameters are 37,92683 176,9819 + Optimized nugget parameter is 0 + Convergence: TRUE +The upper bounds of the range parameters are 201,0467 199,6892 +The initial values of range parameters are 4,020934 3,993783 +Start of the optimization 1 : +The number of iterations is 31 + The value of the marginal posterior function is -149,229 + Optimized range parameters are 37,73923 179,7933 + Optimized nugget parameter is 0 + Convergence: FALSE +The initial values of range parameters are 0,5956819 0,5916596 +Start of the optimization 2 : +The number of iterations is 23 + The value of the marginal posterior function is -149,2295 + Optimized range parameters are 37,68347 179,3098 + Optimized nugget parameter is 0 + Convergence: FALSE +The upper bounds of the range parameters are 208,1589 206,7533 +The initial values of range parameters are 4,163178 4,135067 +Start of the optimization 1 : +The number of iterations is 31 + The value of the marginal posterior function is -148,0364 + Optimized range parameters are 37,10463 181,452 + Optimized nugget parameter is 0 + Convergence: TRUE +The initial values of range parameters are 0,5867911 0,5828289 +Start of the optimization 2 : +The number of iterations is 28 + The value of the marginal posterior function is -148,0353 + Optimized range parameters are 37,10023 181,8802 + Optimized nugget parameter is 0 + Convergence: TRUE +The upper bounds of the range parameters are 207,5545 206,153 +The initial values of range parameters are 4,15109 4,123061 +Start of the optimization 1 : +The number of iterations is 31 + The value of the marginal posterior function is -147,2549 + Optimized range parameters are 36,89036 184,8898 + Optimized nugget parameter is 0 + Convergence: TRUE +The initial values of range parameters are 0,5781618 0,5742579 +Start of the optimization 2 : +The number of iterations is 18 + The value of the marginal posterior function is -147,2555 + Optimized range parameters are 36,87001 184,82 + Optimized nugget parameter is 0 + Convergence: TRUE +The upper bounds of the range parameters are 166,9279 165,8008 +The initial values of range parameters are 3,338559 3,316015 +Start of the optimization 1 : +The number of iterations is 24 + The value of the marginal posterior function is -146,0908 + Optimized range parameters are 34,10173 165,8008 + Optimized nugget parameter is 0 + Convergence: FALSE +The initial values of range parameters are 0,5697827 0,5659353 +Start of the optimization 2 : +The number of iterations is 12 + The value of the marginal posterior function is -146,091 + Optimized range parameters are 34,11888 165,8008 + Optimized nugget parameter is 0 + Convergence: TRUE +The upper bounds of the range parameters are 164,9351 163,8214 +The initial values of range parameters are 3,298703 3,276429 +Start of the optimization 1 : +The number of iterations is 29 + The value of the marginal posterior function is -144,8362 + Optimized range parameters are 33,02363 163,8214 + Optimized nugget parameter is 0 + Convergence: FALSE +The initial values of range parameters are 0,5616429 0,5578505 +Start of the optimization 2 : +The number of iterations is 15 + The value of the marginal posterior function is -144,8366 + Optimized range parameters are 32,96846 163,8214 + Optimized nugget parameter is 0 + Convergence: TRUE +The upper bounds of the range parameters are 161,9899 160,8961 +The initial values of range parameters are 3,239799 3,217922 +Start of the optimization 1 : +The number of iterations is 30 + The value of the marginal posterior function is -143,1679 + Optimized range parameters are 32,60853 160,8961 + Optimized nugget parameter is 0 + Convergence: FALSE +The initial values of range parameters are 0,5537325 0,5499935 +Start of the optimization 2 : +The number of iterations is 23 + The value of the marginal posterior function is -143,1673 + Optimized range parameters are 32,60514 160,8961 + Optimized nugget parameter is 0 + Convergence: TRUE +The upper bounds of the range parameters are 167,4923 166,3613 +The initial values of range parameters are 3,349846 3,327227 +Start of the optimization 1 : +The number of iterations is 31 + The value of the marginal posterior function is -141,4524 + Optimized range parameters are 32,84554 166,3613 + Optimized nugget parameter is 0 + Convergence: FALSE +The initial values of range parameters are 0,5460417 0,5423547 +Start of the optimization 2 : +The number of iterations is 10 + The value of the marginal posterior function is -141,4531 + Optimized range parameters are 32,87053 166,3613 + Optimized nugget parameter is 0 + Convergence: TRUE +The upper bounds of the range parameters are 158,1908 157,1226 +The initial values of range parameters are 3,163815 3,142452 +Start of the optimization 1 : +The number of iterations is 21 + The value of the marginal posterior function is -140,039 + Optimized range parameters are 31,62214 157,1226 + Optimized nugget parameter is 0 + Convergence: FALSE +The initial values of range parameters are 0,5385617 0,5349251 +Start of the optimization 2 : +The number of iterations is 16 + The value of the marginal posterior function is -140,0387 + Optimized range parameters are 31,62433 157,1226 + Optimized nugget parameter is 0 + Convergence: TRUE +The upper bounds of the range parameters are 174,0066 172,8316 +The initial values of range parameters are 3,480131 3,456632 +Start of the optimization 1 : +The number of iterations is 23 + The value of the marginal posterior function is -138,1222 + Optimized range parameters are 33,48823 172,8316 + Optimized nugget parameter is 0 + Convergence: FALSE +The initial values of range parameters are 0,5312838 0,5276964 +Start of the optimization 2 : +The number of iterations is 28 + The value of the marginal posterior function is -138,1223 + Optimized range parameters are 33,40525 172,8316 + Optimized nugget parameter is 0 + Convergence: FALSE +The upper bounds of the range parameters are 150,4312 149,4154 +The initial values of range parameters are 3,008624 2,988309 +Start of the optimization 1 : +The number of iterations is 21 + The value of the marginal posterior function is -139,2082 + Optimized range parameters are 30,85041 149,4154 + Optimized nugget parameter is 0 + Convergence: TRUE +The initial values of range parameters are 0,5242001 0,5206605 +Start of the optimization 2 : +The number of iterations is 25 + The value of the marginal posterior function is -139,2085 + Optimized range parameters are 30,93585 149,4154 + Optimized nugget parameter is 0 + Convergence: TRUE +The upper bounds of the range parameters are 163,2096 162,1076 +The initial values of range parameters are 3,264193 3,242152 +Start of the optimization 1 : +The number of iterations is 30 + The value of the marginal posterior function is -136,829 + Optimized range parameters are 31,64889 162,1076 + Optimized nugget parameter is 0 + Convergence: FALSE +The initial values of range parameters are 0,5173027 0,5138097 +Start of the optimization 2 : +The number of iterations is 29 + The value of the marginal posterior function is -136,8292 + Optimized range parameters are 31,73272 162,1076 + Optimized nugget parameter is 0 + Convergence: FALSE +The upper bounds of the range parameters are 155,3651 154,316 +The initial values of range parameters are 3,107301 3,08632 +Start of the optimization 1 : +The number of iterations is 38 + The value of the marginal posterior function is -137,2507 + Optimized range parameters are 31,11748 154,316 + Optimized nugget parameter is 0 + Convergence: FALSE +The initial values of range parameters are 0,5105845 0,5071368 +Start of the optimization 2 : +The number of iterations is 11 + The value of the marginal posterior function is -137,2507 + Optimized range parameters are 31,11466 154,316 + Optimized nugget parameter is 0 + Convergence: TRUE +The upper bounds of the range parameters are 159,0334 157,9595 +The initial values of range parameters are 3,180667 3,15919 +Start of the optimization 1 : +The number of iterations is 19 + The value of the marginal posterior function is -134,9592 + Optimized range parameters are 30,6283 157,9595 + Optimized nugget parameter is 0 + Convergence: FALSE +The initial values of range parameters are 0,5040385 0,5006351 +Start of the optimization 2 : +The number of iterations is 20 + The value of the marginal posterior function is -134,9589 + Optimized range parameters are 30,62948 157,9595 + Optimized nugget parameter is 0 + Convergence: FALSE +The upper bounds of the range parameters are 150,6829 149,6655 +The initial values of range parameters are 3,013659 2,993309 +Start of the optimization 1 : +The number of iterations is 9 + The value of the marginal posterior function is -133,0322 + Optimized range parameters are 28,62106 149,6655 + Optimized nugget parameter is 0 + Convergence: TRUE +The initial values of range parameters are 0,4976583 0,4942979 +Start of the optimization 2 : +The number of iterations is 27 + The value of the marginal posterior function is -133,0311 + Optimized range parameters are 28,6202 149,6655 + Optimized nugget parameter is 0 + Convergence: FALSE +The upper bounds of the range parameters are 143,0785 142,1124 +The initial values of range parameters are 2,86157 2,842247 +Start of the optimization 1 : +The number of iterations is 27 + The value of the marginal posterior function is -131,5134 + Optimized range parameters are 27,05986 142,1124 + Optimized nugget parameter is 0 + Convergence: FALSE +The initial values of range parameters are 0,4914376 0,4881192 +Start of the optimization 2 : +The number of iterations is 28 + The value of the marginal posterior function is -131,5142 + Optimized range parameters are 27,09861 142,1124 + Optimized nugget parameter is 0 + Convergence: TRUE +The upper bounds of the range parameters are 149,9901 148,9774 +The initial values of range parameters are 2,999803 2,979547 +Start of the optimization 1 : +The number of iterations is 17 + The value of the marginal posterior function is -128,3138 + Optimized range parameters are 26,94379 148,9774 + Optimized nugget parameter is 0 + Convergence: TRUE +The initial values of range parameters are 0,4853704 0,482093 +Start of the optimization 2 : +The number of iterations is 11 + The value of the marginal posterior function is -128,3136 + Optimized range parameters are 26,93153 148,9774 + Optimized nugget parameter is 0 + Convergence: TRUE +The upper bounds of the range parameters are 141,9733 141,0146 +The initial values of range parameters are 2,839465 2,820292 +Start of the optimization 1 : +The number of iterations is 15 + The value of the marginal posterior function is -126,565 + Optimized range parameters are 25,84325 141,0146 + Optimized nugget parameter is 0 + Convergence: TRUE +The initial values of range parameters are 0,4794513 0,4762139 +Start of the optimization 2 : +The number of iterations is 30 + The value of the marginal posterior function is -126,5658 + Optimized range parameters are 25,84843 141,0146 + Optimized nugget parameter is 0 + Convergence: FALSE +The upper bounds of the range parameters are 148,4124 147,4103 +The initial values of range parameters are 2,968249 2,948206 +Start of the optimization 1 : +The number of iterations is 14 + The value of the marginal posterior function is -123,2249 + Optimized range parameters are 26,04536 147,4103 + Optimized nugget parameter is 0 + Convergence: TRUE +The initial values of range parameters are 0,4736748 0,4704763 +Start of the optimization 2 : +The number of iterations is 37 + The value of the marginal posterior function is -123,2255 + Optimized range parameters are 26,11794 147,4103 + Optimized nugget parameter is 0 + Convergence: FALSE +The upper bounds of the range parameters are 141,3136 140,3594 +The initial values of range parameters are 2,826273 2,807189 +Start of the optimization 1 : +The number of iterations is 24 + The value of the marginal posterior function is -121,373 + Optimized range parameters are 25,34355 140,3594 + Optimized nugget parameter is 0 + Convergence: FALSE +The initial values of range parameters are 0,4680358 0,4648754 +Start of the optimization 2 : +The number of iterations is 27 + The value of the marginal posterior function is -121,3719 + Optimized range parameters are 25,3222 140,3594 + Optimized nugget parameter is 0 + Convergence: FALSE +The upper bounds of the range parameters are 146,0605 145,0743 +The initial values of range parameters are 2,921211 2,901486 +Start of the optimization 1 : +The number of iterations is 17 + The value of the marginal posterior function is -119,1731 + Optimized range parameters are 25,38398 145,0743 + Optimized nugget parameter is 0 + Convergence: TRUE +The initial values of range parameters are 0,4625295 0,4594063 +Start of the optimization 2 : +The number of iterations is 24 + The value of the marginal posterior function is -119,1742 + Optimized range parameters are 25,27086 145,0743 + Optimized nugget parameter is 0 + Convergence: FALSE +The upper bounds of the range parameters are 136,1432 135,2239 +The initial values of range parameters are 2,722864 2,704479 +Start of the optimization 1 : +The number of iterations is 16 + The value of the marginal posterior function is -117,4765 + Optimized range parameters are 23,8631 135,2239 + Optimized nugget parameter is 0 + Convergence: TRUE +The initial values of range parameters are 0,4571512 0,4540644 +Start of the optimization 2 : +The number of iterations is 31 + The value of the marginal posterior function is -117,4779 + Optimized range parameters are 23,87798 135,2239 + Optimized nugget parameter is 0 + Convergence: FALSE +The upper bounds of the range parameters are 121,8399 121,0172 +The initial values of range parameters are 2,436797 2,420343 +Start of the optimization 1 : +The number of iterations is 21 + The value of the marginal posterior function is -117,2996 + Optimized range parameters are 22,38443 121,0172 + Optimized nugget parameter is 0 + Convergence: FALSE +The initial values of range parameters are 0,4518966 0,4488452 +Start of the optimization 2 : +The number of iterations is 19 + The value of the marginal posterior function is -117,2989 + Optimized range parameters are 22,37563 121,0172 + Optimized nugget parameter is 0 + Convergence: TRUE +The upper bounds of the range parameters are 123,1404 122,309 +The initial values of range parameters are 2,462809 2,446179 +Start of the optimization 1 : +The number of iterations is 18 + The value of the marginal posterior function is -114,6525 + Optimized range parameters are 22,32619 122,309 + Optimized nugget parameter is 0 + Convergence: TRUE +The initial values of range parameters are 0,4467614 0,4437447 +Start of the optimization 2 : +The number of iterations is 38 + The value of the marginal posterior function is -114,6523 + Optimized range parameters are 22,33099 122,309 + Optimized nugget parameter is 0 + Convergence: FALSE +The upper bounds of the range parameters are 117,4477 116,6546 +The initial values of range parameters are 2,348953 2,333092 +Start of the optimization 1 : +The number of iterations is 23 + The value of the marginal posterior function is -113,3472 + Optimized range parameters are 21,62668 116,6546 + Optimized nugget parameter is 0 + Convergence: FALSE +The initial values of range parameters are 0,4417416 0,4387588 +Start of the optimization 2 : +The number of iterations is 28 + The value of the marginal posterior function is -113,3475 + Optimized range parameters are 21,65104 116,6546 + Optimized nugget parameter is 0 + Convergence: FALSE +The upper bounds of the range parameters are 115,2499 114,4717 +The initial values of range parameters are 2,304998 2,289433 +Start of the optimization 1 : +The number of iterations is 12 + The value of the marginal posterior function is -110,7155 + Optimized range parameters are 20,98512 114,4717 + Optimized nugget parameter is 0 + Convergence: TRUE +The initial values of range parameters are 0,4368334 0,4338837 +Start of the optimization 2 : +The number of iterations is 30 + The value of the marginal posterior function is -110,7149 + Optimized range parameters are 21,00228 114,4717 + Optimized nugget parameter is 0 + Convergence: TRUE +The upper bounds of the range parameters are 111,8946 111,139 +The initial values of range parameters are 2,237892 2,222781 +Start of the optimization 1 : +The number of iterations is 17 + The value of the marginal posterior function is -108,5065 + Optimized range parameters are 20,44681 111,139 + Optimized nugget parameter is 0 + Convergence: TRUE +The initial values of range parameters are 0,432033 0,4291158 +Start of the optimization 2 : +The number of iterations is 19 + The value of the marginal posterior function is -108,507 + Optimized range parameters are 20,44983 111,139 + Optimized nugget parameter is 0 + Convergence: TRUE +The upper bounds of the range parameters are 93,38518 92,75461 +The initial values of range parameters are 1,867704 1,855092 +Start of the optimization 1 : +The number of iterations is 17 + The value of the marginal posterior function is -111,367 + Optimized range parameters are 18,37032 92,75461 + Optimized nugget parameter is 0 + Convergence: TRUE +The initial values of range parameters are 0,427337 0,4244515 +Start of the optimization 2 : +The number of iterations is 18 + The value of the marginal posterior function is -111,3671 + Optimized range parameters are 18,37078 92,75461 + Optimized nugget parameter is 0 + Convergence: TRUE +The upper bounds of the range parameters are 99,64494 98,97211 +The initial values of range parameters are 1,992899 1,979442 +Start of the optimization 1 : +The number of iterations is 23 + The value of the marginal posterior function is -106,2562 + Optimized range parameters are 18,89163 98,97211 + Optimized nugget parameter is 0 + Convergence: FALSE +The initial values of range parameters are 0,422742 0,4198875 +Start of the optimization 2 : +The number of iterations is 27 + The value of the marginal posterior function is -106,2561 + Optimized range parameters are 18,88065 98,97211 + Optimized nugget parameter is 0 + Convergence: FALSE +The upper bounds of the range parameters are 99,75194 99,07838 +The initial values of range parameters are 1,995039 1,981568 +Start of the optimization 1 : +The number of iterations is 17 + The value of the marginal posterior function is -103,2099 + Optimized range parameters are 18,65492 99,07838 + Optimized nugget parameter is 0 + Convergence: TRUE +The initial values of range parameters are 0,4182447 0,4154206 +Start of the optimization 2 : +The number of iterations is 27 + The value of the marginal posterior function is -103,2113 + Optimized range parameters are 18,65549 99,07838 + Optimized nugget parameter is 0 + Convergence: FALSE +The upper bounds of the range parameters are 104,3536 103,649 +The initial values of range parameters are 2,087073 2,07298 +Start of the optimization 1 : +The number of iterations is 20 + The value of the marginal posterior function is -98,42375 + Optimized range parameters are 18,87395 103,649 + Optimized nugget parameter is 0 + Convergence: TRUE +The initial values of range parameters are 0,4138422 0,4110477 +Start of the optimization 2 : +The number of iterations is 27 + The value of the marginal posterior function is -98,42241 + Optimized range parameters are 18,87764 103,649 + Optimized nugget parameter is 0 + Convergence: TRUE +The upper bounds of the range parameters are 103,1118 102,4155 +The initial values of range parameters are 2,062236 2,048311 +Start of the optimization 1 : +The number of iterations is 20 + The value of the marginal posterior function is -95,30729 + Optimized range parameters are 18,51323 102,4155 + Optimized nugget parameter is 0 + Convergence: FALSE +The initial values of range parameters are 0,4095313 0,406766 +Start of the optimization 2 : +The number of iterations is 29 + The value of the marginal posterior function is -95,30714 + Optimized range parameters are 18,54824 102,4155 + Optimized nugget parameter is 0 + Convergence: FALSE +The upper bounds of the range parameters are 95,06543 94,42352 +The initial values of range parameters are 1,901309 1,88847 +Start of the optimization 1 : +The number of iterations is 14 + The value of the marginal posterior function is -95,1497 + Optimized range parameters are 17,52307 94,42352 + Optimized nugget parameter is 0 + Convergence: TRUE +The initial values of range parameters are 0,4053093 0,4025725 +Start of the optimization 2 : +The number of iterations is 23 + The value of the marginal posterior function is -95,14898 + Optimized range parameters are 17,55379 94,42352 + Optimized nugget parameter is 0 + Convergence: FALSE +The upper bounds of the range parameters are 91,10625 90,49107 +The initial values of range parameters are 1,822125 1,809821 +Start of the optimization 1 : +The number of iterations is 21 + The value of the marginal posterior function is -93,31858 + Optimized range parameters are 16,88561 90,49107 + Optimized nugget parameter is 0 + Convergence: FALSE +The initial values of range parameters are 0,4011735 0,3984647 +Start of the optimization 2 : +The number of iterations is 24 + The value of the marginal posterior function is -93,31829 + Optimized range parameters are 16,83654 90,49107 + Optimized nugget parameter is 0 + Convergence: FALSE +The upper bounds of the range parameters are 95,06911 94,42717 +The initial values of range parameters are 1,901382 1,888543 +Start of the optimization 1 : +The number of iterations is 11 + The value of the marginal posterior function is -88,62383 + Optimized range parameters are 17,19113 94,42717 + Optimized nugget parameter is 0 + Convergence: TRUE +The initial values of range parameters are 0,3971213 0,3944398 +Start of the optimization 2 : +The number of iterations is 23 + The value of the marginal posterior function is -88,62286 + Optimized range parameters are 17,21816 94,42717 + Optimized nugget parameter is 0 + Convergence: FALSE +The upper bounds of the range parameters are 84,25512 83,6862 +The initial values of range parameters are 1,685102 1,673724 +Start of the optimization 1 : +The number of iterations is 20 + The value of the marginal posterior function is -90,56369 + Optimized range parameters are 16,01921 83,6862 + Optimized nugget parameter is 0 + Convergence: FALSE +The initial values of range parameters are 0,39315 0,3904954 +Start of the optimization 2 : +The number of iterations is 24 + The value of the marginal posterior function is -90,56328 + Optimized range parameters are 16,0189 83,6862 + Optimized nugget parameter is 0 + Convergence: FALSE +</pre></div> +</div> +<p>Once the active learning process is finished, we obtain the final emulator for the +logarithm of the unnormalized posterior, which is given by the +<a class="reference internal" href="../../inference/active_learning.html#psimpy.inference.active_learning.ActiveLearning.approx_ln_pxl" title="psimpy.inference.active_learning.ActiveLearning.approx_ln_pxl"><code class="xref py py-meth docutils literal notranslate"><span class="pre">ActiveLearning.approx_ln_pxl()</span></code></a> method.</p> +<p>We can then estimate the posterior using grid estimation or Metropolis Hastings +estimation based on the emulator. An example is as follows. The contour plot shows +the estimated posterior.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">psimpy.inference</span> <span class="kn">import</span> <span class="n">GridEstimation</span> +<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span> + +<span class="n">grid_estimator</span> <span class="o">=</span> <span class="n">GridEstimation</span><span class="p">(</span><span class="n">ndim</span><span class="p">,</span> <span class="n">bounds</span><span class="p">,</span> <span class="n">ln_pxl</span><span class="o">=</span><span class="n">active_learner</span><span class="o">.</span><span class="n">approx_ln_pxl</span><span class="p">)</span> +<span class="n">posterior</span><span class="p">,</span> <span class="n">x_ndim</span> <span class="o">=</span> <span class="n">grid_estimator</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">nbins</span><span class="o">=</span><span class="mi">50</span><span class="p">)</span> + +<span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span><span class="mi">4</span><span class="p">))</span> + +<span class="c1"># initial training points</span> +<span class="n">ax</span><span class="o">.</span><span class="n">scatter</span><span class="p">(</span><span class="n">init_var_samples</span><span class="p">[:,</span><span class="mi">0</span><span class="p">],</span> <span class="n">init_var_samples</span><span class="p">[:,</span><span class="mi">1</span><span class="p">],</span> <span class="n">s</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">c</span><span class="o">=</span><span class="s1">'r'</span><span class="p">,</span> <span class="n">marker</span><span class="o">=</span><span class="s1">'o'</span><span class="p">,</span> + <span class="n">zorder</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mf">0.8</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">'initial training points'</span><span class="p">)</span> +<span class="c1"># actively picked training points</span> +<span class="n">ax</span><span class="o">.</span><span class="n">scatter</span><span class="p">(</span><span class="n">var_samples</span><span class="p">[</span><span class="n">n0</span><span class="p">:,</span><span class="mi">0</span><span class="p">],</span> <span class="n">var_samples</span><span class="p">[</span><span class="n">n0</span><span class="p">:,</span><span class="mi">1</span><span class="p">],</span> <span class="n">s</span><span class="o">=</span><span class="mi">15</span><span class="p">,</span> <span class="n">c</span><span class="o">=</span><span class="s1">'k'</span><span class="p">,</span> <span class="n">marker</span><span class="o">=</span><span class="s1">'+'</span><span class="p">,</span> + <span class="n">zorder</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mf">0.8</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">'iterative training points'</span><span class="p">)</span> + +<span class="c1"># estimated posterior based on the final emulator</span> +<span class="n">posterior</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">posterior</span> <span class="o"><</span> <span class="mf">1e-10</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">posterior</span><span class="p">)</span> +<span class="n">contour</span> <span class="o">=</span> <span class="n">ax</span><span class="o">.</span><span class="n">contour</span><span class="p">(</span><span class="n">x_ndim</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">x_ndim</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">np</span><span class="o">.</span><span class="n">transpose</span><span class="p">(</span><span class="n">posterior</span><span class="p">),</span> <span class="n">levels</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">colorbar</span><span class="p">(</span><span class="n">contour</span><span class="p">,</span> <span class="n">ax</span><span class="o">=</span><span class="n">ax</span><span class="p">)</span> + +<span class="n">ax</span><span class="o">.</span><span class="n">legend</span><span class="p">()</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="s1">'Active learning'</span><span class="p">)</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="s1">'x1'</span><span class="p">)</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s1">'x2'</span><span class="p">)</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">([</span><span class="o">-</span><span class="mi">5</span><span class="p">,</span><span class="mi">5</span><span class="p">])</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_ylim</span><span class="p">([</span><span class="o">-</span><span class="mi">5</span><span class="p">,</span><span class="mi">5</span><span class="p">])</span> +<span class="n">plt</span><span class="o">.</span><span class="n">tight_layout</span><span class="p">()</span> +</pre></div> +</div> +<img src="../../_images/sphx_glr_plot_active_learning_001.png" srcset="../../_images/sphx_glr_plot_active_learning_001.png" alt="Active learning" class = "sphx-glr-single-img"/><p class="sphx-glr-timing"><strong>Total running time of the script:</strong> ( 2 minutes 12.653 seconds)</p> +<div class="sphx-glr-footer sphx-glr-footer-example docutils container" id="sphx-glr-download-auto-examples-inference-plot-active-learning-py"> +<div class="sphx-glr-download sphx-glr-download-python docutils container"> +<p><a class="reference download internal" download="" href="../../_downloads/49e9d5799ebf50f0ee6452a55ef932ec/plot_active_learning.py"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">Python</span> <span class="pre">source</span> <span class="pre">code:</span> <span class="pre">plot_active_learning.py</span></code></a></p> +</div> +<div class="sphx-glr-download sphx-glr-download-jupyter docutils container"> +<p><a class="reference download internal" download="" href="../../_downloads/e02cb6046784acec18b4383ffbd83d67/plot_active_learning.ipynb"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">Jupyter</span> <span class="pre">notebook:</span> <span class="pre">plot_active_learning.ipynb</span></code></a></p> +</div> +</div> +<p class="sphx-glr-signature"><a class="reference external" href="https://sphinx-gallery.github.io">Gallery generated by Sphinx-Gallery</a></p> +</section> + + + </div> + </div> + <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer"> + <a href="plot_bayes_inference.html" class="btn btn-neutral float-left" title="Bayesian inference" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> + <a href="../sampler/index.html" class="btn btn-neutral float-right" title="Sampler" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a> + </div> + + <hr/> + + <div role="contentinfo"> + <p>© Copyright 2023, Hu Zhao.</p> + </div> + + Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a + <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> + provided by <a href="https://readthedocs.org">Read the Docs</a>. + + +</footer> + </div> + </div> + </section> + </div> + <script> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + +</body> +</html> \ No newline at end of file diff --git a/docs/source/_build/html/auto_examples/inference/plot_bayes_inference.html b/docs/source/_build/html/auto_examples/inference/plot_bayes_inference.html new file mode 100644 index 0000000..9c48546 --- /dev/null +++ b/docs/source/_build/html/auto_examples/inference/plot_bayes_inference.html @@ -0,0 +1,244 @@ +<!DOCTYPE html> +<html class="writer-html5" lang="en" > +<head> + <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>Bayesian inference — PSimPy's documentation</title> + <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-binder.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-dataframe.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-rendered-html.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" /> + <!--[if lt IE 9]> + <script src="../../_static/js/html5shiv.min.js"></script> + <![endif]--> + + <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> + <script src="../../_static/jquery.js"></script> + <script src="../../_static/underscore.js"></script> + <script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script> + <script src="../../_static/doctools.js"></script> + <script src="../../_static/sphinx_highlight.js"></script> + <script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script> + <script src="../../_static/js/theme.js"></script> + <link rel="index" title="Index" href="../../genindex.html" /> + <link rel="search" title="Search" href="../../search.html" /> + <link rel="next" title="Active learning" href="plot_active_learning.html" /> + <link rel="prev" title="Inference" href="index.html" /> +</head> + +<body class="wy-body-for-nav"> + <div class="wy-grid-for-nav"> + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + <a href="../../index.html" class="icon icon-home"> psimpy + </a> + <div class="version"> + 0.1.2 + </div> +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> + <ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../../index.html">Home</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../quickstart.html">Getting Started</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../api.html">API & Theory</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../../examples.html">Example Gallery</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="../emulator/index.html">Emulator</a></li> +<li class="toctree-l2 current"><a class="reference internal" href="index.html">Inference</a><ul class="current"> +<li class="toctree-l3 current"><a class="current reference internal" href="#">Bayesian inference</a></li> +<li class="toctree-l3"><a class="reference internal" href="plot_active_learning.html">Active learning</a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="../sampler/index.html">Sampler</a></li> +<li class="toctree-l2"><a class="reference internal" href="../sensitivity/index.html">Sensitivity</a></li> +<li class="toctree-l2"><a class="reference internal" href="../simulator/index.html">Simulator</a></li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="../../changelog.html">Changes</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../refs.html">References</a></li> +</ul> + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">psimpy</a> + </nav> + + <div class="wy-nav-content"> + <div class="rst-content"> + <div role="navigation" aria-label="Page navigation"> + <ul class="wy-breadcrumbs"> + <li><a href="../../index.html" class="icon icon-home"></a></li> + <li class="breadcrumb-item"><a href="../../examples.html">Example Gallery</a></li> + <li class="breadcrumb-item"><a href="index.html">Inference</a></li> + <li class="breadcrumb-item active">Bayesian inference</li> + <li class="wy-breadcrumbs-aside"> + <a href="../../_sources/auto_examples/inference/plot_bayes_inference.rst.txt" rel="nofollow"> View page source</a> + </li> + </ul> + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="sphx-glr-download-link-note admonition note"> +<p class="admonition-title">Note</p> +<p>Click <a class="reference internal" href="#sphx-glr-download-auto-examples-inference-plot-bayes-inference-py"><span class="std std-ref">here</span></a> +to download the full example code</p> +</div> +<section class="sphx-glr-example-title" id="bayesian-inference"> +<span id="sphx-glr-auto-examples-inference-plot-bayes-inference-py"></span><h1>Bayesian inference<a class="headerlink" href="#bayesian-inference" title="Permalink to this heading"></a></h1> +<p>This example shows how to perform Bayesian inference given the uniform prior</p> +<p><span class="math notranslate nohighlight">\(p(\mathbf{x})=p(x_1,x_2)=0.01\)</span></p> +<p>where <span class="math notranslate nohighlight">\(x_i \in [-5,5], i=1,2\)</span>, and likelihood</p> +<p><span class="math notranslate nohighlight">\(L(\mathbf{x}|\mathbf{d})=\exp \left(-\frac{1}{100}\left(x_1-1\right)^2-\left(x_1^2-x_2\right)^2\right)\)</span>.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span> + +<span class="n">ndim</span> <span class="o">=</span> <span class="mi">2</span> +<span class="n">bounds</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([[</span><span class="o">-</span><span class="mi">5</span><span class="p">,</span><span class="mi">5</span><span class="p">],[</span><span class="o">-</span><span class="mi">5</span><span class="p">,</span><span class="mi">5</span><span class="p">]])</span> + +<span class="k">def</span> <span class="nf">prior</span><span class="p">(</span><span class="n">x</span><span class="p">):</span> + <span class="k">return</span> <span class="mf">0.01</span> + +<span class="k">def</span> <span class="nf">likelihood</span><span class="p">(</span><span class="n">x</span><span class="p">):</span> + <span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">exp</span><span class="p">(</span><span class="o">-</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span><span class="o">/</span><span class="mi">100</span> <span class="o">-</span> <span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">**</span><span class="mi">2</span><span class="o">-</span><span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span><span class="o">**</span><span class="mi">2</span><span class="p">)</span> +</pre></div> +</div> +<p>To estimate the posterior using grid estimation, we need to import the +<a class="reference internal" href="../../inference/bayes_inference.html#psimpy.inference.bayes_inference.GridEstimation" title="psimpy.inference.bayes_inference.GridEstimation"><code class="xref py py-class docutils literal notranslate"><span class="pre">GridEstimation</span></code></a> class, create an instance, and call the +<a class="reference internal" href="../../inference/bayes_inference.html#psimpy.inference.bayes_inference.GridEstimation.run" title="psimpy.inference.bayes_inference.GridEstimation.run"><code class="xref py py-meth docutils literal notranslate"><span class="pre">GridEstimation.run()</span></code></a> method.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">psimpy.inference.bayes_inference</span> <span class="kn">import</span> <span class="n">GridEstimation</span> + +<span class="n">grid_estimator</span> <span class="o">=</span> <span class="n">GridEstimation</span><span class="p">(</span><span class="n">ndim</span><span class="p">,</span> <span class="n">bounds</span><span class="p">,</span> <span class="n">prior</span><span class="p">,</span> <span class="n">likelihood</span><span class="p">)</span> +<span class="n">posterior</span><span class="p">,</span> <span class="n">x_ndim</span> <span class="o">=</span> <span class="n">grid_estimator</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">nbins</span><span class="o">=</span><span class="p">[</span><span class="mi">50</span><span class="p">,</span><span class="mi">40</span><span class="p">])</span> +</pre></div> +</div> +<p>The following figure plots the estimated posterior.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span> + +<span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">6</span><span class="p">,</span><span class="mi">4</span><span class="p">))</span> + +<span class="c1"># mask insignificant values</span> +<span class="n">posterior</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">posterior</span> <span class="o"><</span> <span class="mf">1e-10</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">posterior</span><span class="p">)</span> + +<span class="n">contour</span> <span class="o">=</span> <span class="n">ax</span><span class="o">.</span><span class="n">contour</span><span class="p">(</span><span class="n">x_ndim</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">x_ndim</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">np</span><span class="o">.</span><span class="n">transpose</span><span class="p">(</span><span class="n">posterior</span><span class="p">),</span> <span class="n">levels</span><span class="o">=</span><span class="mi">10</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">colorbar</span><span class="p">(</span><span class="n">contour</span><span class="p">,</span> <span class="n">ax</span><span class="o">=</span><span class="n">ax</span><span class="p">)</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">(</span><span class="n">bounds</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">],</span> <span class="n">bounds</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">])</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_ylim</span><span class="p">(</span><span class="n">bounds</span><span class="p">[</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">],</span> <span class="n">bounds</span><span class="p">[</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">])</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="s1">'Grid estimation'</span><span class="p">)</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="s1">'x1'</span><span class="p">)</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s1">'x2'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">tight_layout</span><span class="p">()</span> +</pre></div> +</div> +<img src="../../_images/sphx_glr_plot_bayes_inference_001.png" srcset="../../_images/sphx_glr_plot_bayes_inference_001.png" alt="Grid estimation" class = "sphx-glr-single-img"/><p>To estimate the posterior using Metropolis Hastings estimation, we need to import +the <a class="reference internal" href="../../inference/bayes_inference.html#psimpy.inference.bayes_inference.MetropolisHastingsEstimation" title="psimpy.inference.bayes_inference.MetropolisHastingsEstimation"><code class="xref py py-class docutils literal notranslate"><span class="pre">MetropolisHastingsEstimation</span></code></a> class, create an instance, and call the +<a class="reference internal" href="../../inference/bayes_inference.html#psimpy.inference.bayes_inference.MetropolisHastingsEstimation.run" title="psimpy.inference.bayes_inference.MetropolisHastingsEstimation.run"><code class="xref py py-meth docutils literal notranslate"><span class="pre">MetropolisHastingsEstimation.run()</span></code></a> method. The +<a class="reference internal" href="../../inference/bayes_inference.html#psimpy.inference.bayes_inference.MetropolisHastingsEstimation.run" title="psimpy.inference.bayes_inference.MetropolisHastingsEstimation.run"><code class="xref py py-meth docutils literal notranslate"><span class="pre">MetropolisHastingsEstimation.run()</span></code></a> method has a parameter, <code class="docutils literal notranslate"><span class="pre">mh_sampler</span></code>, +which takes an instance of <a class="reference internal" href="../../sampler/metropolis_hastings.html#psimpy.sampler.metropolis_hastings.MetropolisHastings" title="psimpy.sampler.metropolis_hastings.MetropolisHastings"><code class="xref py py-class docutils literal notranslate"><span class="pre">MetropolisHastings</span></code></a> as argument.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">psimpy.inference.bayes_inference</span> <span class="kn">import</span> <span class="n">MetropolisHastingsEstimation</span> + +<span class="n">mh_estimator</span> <span class="o">=</span> <span class="n">MetropolisHastingsEstimation</span><span class="p">(</span><span class="n">ndim</span><span class="p">,</span> <span class="n">bounds</span><span class="p">,</span> <span class="n">prior</span><span class="p">,</span> <span class="n">likelihood</span><span class="p">)</span> + +<span class="c1"># create a mh_sampler</span> +<span class="kn">from</span> <span class="nn">psimpy.sampler.metropolis_hastings</span> <span class="kn">import</span> <span class="n">MetropolisHastings</span> +<span class="kn">from</span> <span class="nn">scipy.stats</span> <span class="kn">import</span> <span class="n">multivariate_normal</span> + +<span class="n">init_state</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="o">-</span><span class="mi">4</span><span class="p">,</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span> +<span class="n">f_sample</span> <span class="o">=</span> <span class="n">multivariate_normal</span><span class="o">.</span><span class="n">rvs</span> +<span class="n">nburn</span> <span class="o">=</span> <span class="mi">100</span> +<span class="n">nthin</span> <span class="o">=</span> <span class="mi">10</span> +<span class="n">seed</span> <span class="o">=</span> <span class="mi">1</span> +<span class="n">kwgs_f_sample</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'random_state'</span><span class="p">:</span> <span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">default_rng</span><span class="p">(</span><span class="n">seed</span><span class="p">)}</span> + +<span class="n">mh_sampler</span> <span class="o">=</span> <span class="n">MetropolisHastings</span><span class="p">(</span><span class="n">ndim</span><span class="o">=</span><span class="n">ndim</span><span class="p">,</span> <span class="n">init_state</span><span class="o">=</span><span class="n">init_state</span><span class="p">,</span> + <span class="n">f_sample</span><span class="o">=</span><span class="n">f_sample</span><span class="p">,</span> <span class="n">bounds</span><span class="o">=</span><span class="n">bounds</span><span class="p">,</span> <span class="n">nburn</span><span class="o">=</span><span class="n">nburn</span><span class="p">,</span> <span class="n">nthin</span><span class="o">=</span><span class="n">nthin</span><span class="p">,</span> <span class="n">seed</span><span class="o">=</span><span class="n">seed</span><span class="p">,</span> + <span class="n">kwgs_f_sample</span><span class="o">=</span><span class="n">kwgs_f_sample</span><span class="p">)</span> + +<span class="n">nsamples</span> <span class="o">=</span> <span class="mi">5000</span> +<span class="n">mh_samples</span><span class="p">,</span> <span class="n">mh_accept</span> <span class="o">=</span> <span class="n">mh_estimator</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">nsamples</span><span class="p">,</span> <span class="n">mh_sampler</span><span class="p">)</span> +</pre></div> +</div> +<p>The following figure plots the samples drawn from the unnormalized posterior, +which can be used to estimate the posterior and its poperties.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span> + +<span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span><span class="mi">4</span><span class="p">))</span> + +<span class="n">ax</span><span class="o">.</span><span class="n">scatter</span><span class="p">(</span><span class="n">mh_samples</span><span class="p">[:,</span><span class="mi">0</span><span class="p">],</span> <span class="n">mh_samples</span><span class="p">[:,</span><span class="mi">1</span><span class="p">],</span> <span class="n">s</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">c</span><span class="o">=</span><span class="s1">'r'</span><span class="p">,</span> <span class="n">marker</span><span class="o">=</span><span class="s1">'o'</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mf">0.1</span><span class="p">)</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">(</span><span class="n">bounds</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">],</span> <span class="n">bounds</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">])</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_ylim</span><span class="p">(</span><span class="n">bounds</span><span class="p">[</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">],</span> <span class="n">bounds</span><span class="p">[</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">])</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="s1">'MH estimation'</span><span class="p">)</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="s1">'x1'</span><span class="p">)</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s1">'x2'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">tight_layout</span><span class="p">()</span> +</pre></div> +</div> +<img src="../../_images/sphx_glr_plot_bayes_inference_002.png" srcset="../../_images/sphx_glr_plot_bayes_inference_002.png" alt="MH estimation" class = "sphx-glr-single-img"/><div class="admonition note"> +<p class="admonition-title">Note</p> +<p>Besides <code class="docutils literal notranslate"><span class="pre">prior</span></code> and <code class="docutils literal notranslate"><span class="pre">likelihood</span></code>, one can also instantiate +the <a class="reference internal" href="../../inference/bayes_inference.html#psimpy.inference.bayes_inference.MetropolisHastingsEstimation" title="psimpy.inference.bayes_inference.MetropolisHastingsEstimation"><code class="xref py py-class docutils literal notranslate"><span class="pre">MetropolisHastingsEstimation</span></code></a> class with</p> +<blockquote> +<div><ul class="simple"> +<li><p><code class="docutils literal notranslate"><span class="pre">ln_prior</span></code> and <code class="docutils literal notranslate"><span class="pre">ln_likelihood</span></code>: Natural logarithm of <code class="docutils literal notranslate"><span class="pre">prior</span></code> and <code class="docutils literal notranslate"><span class="pre">likelihood</span></code>.</p></li> +<li><p><code class="docutils literal notranslate"><span class="pre">ln_pxl</span></code>: Natural logarithm of the product of <code class="docutils literal notranslate"><span class="pre">prior</span></code> and <code class="docutils literal notranslate"><span class="pre">likelihood</span></code>.</p></li> +</ul> +</div></blockquote> +</div> +<p class="sphx-glr-timing"><strong>Total running time of the script:</strong> ( 0 minutes 9.739 seconds)</p> +<div class="sphx-glr-footer sphx-glr-footer-example docutils container" id="sphx-glr-download-auto-examples-inference-plot-bayes-inference-py"> +<div class="sphx-glr-download sphx-glr-download-python docutils container"> +<p><a class="reference download internal" download="" href="../../_downloads/44f0f511484d9bfd5f8d212c8f287e9e/plot_bayes_inference.py"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">Python</span> <span class="pre">source</span> <span class="pre">code:</span> <span class="pre">plot_bayes_inference.py</span></code></a></p> +</div> +<div class="sphx-glr-download sphx-glr-download-jupyter docutils container"> +<p><a class="reference download internal" download="" href="../../_downloads/2d9fc590bc1edb11501b144674a0a949/plot_bayes_inference.ipynb"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">Jupyter</span> <span class="pre">notebook:</span> <span class="pre">plot_bayes_inference.ipynb</span></code></a></p> +</div> +</div> +<p class="sphx-glr-signature"><a class="reference external" href="https://sphinx-gallery.github.io">Gallery generated by Sphinx-Gallery</a></p> +</section> + + + </div> + </div> + <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer"> + <a href="index.html" class="btn btn-neutral float-left" title="Inference" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> + <a href="plot_active_learning.html" class="btn btn-neutral float-right" title="Active learning" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a> + </div> + + <hr/> + + <div role="contentinfo"> + <p>© Copyright 2023, Hu Zhao.</p> + </div> + + Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a + <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> + provided by <a href="https://readthedocs.org">Read the Docs</a>. + + +</footer> + </div> + </div> + </section> + </div> + <script> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + +</body> +</html> \ No newline at end of file diff --git a/docs/source/_build/html/auto_examples/inference/sg_execution_times.html b/docs/source/_build/html/auto_examples/inference/sg_execution_times.html new file mode 100644 index 0000000..f396b9a --- /dev/null +++ b/docs/source/_build/html/auto_examples/inference/sg_execution_times.html @@ -0,0 +1,131 @@ +<!DOCTYPE html> +<html class="writer-html5" lang="en" > +<head> + <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>Computation times — PSimPy's documentation</title> + <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-binder.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-dataframe.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-rendered-html.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" /> + <!--[if lt IE 9]> + <script src="../../_static/js/html5shiv.min.js"></script> + <![endif]--> + + <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> + <script src="../../_static/jquery.js"></script> + <script src="../../_static/underscore.js"></script> + <script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script> + <script src="../../_static/doctools.js"></script> + <script src="../../_static/sphinx_highlight.js"></script> + <script src="../../_static/js/theme.js"></script> + <link rel="index" title="Index" href="../../genindex.html" /> + <link rel="search" title="Search" href="../../search.html" /> +</head> + +<body class="wy-body-for-nav"> + <div class="wy-grid-for-nav"> + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + <a href="../../index.html" class="icon icon-home"> psimpy + </a> + <div class="version"> + 0.1.2 + </div> +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> + <ul> +<li class="toctree-l1"><a class="reference internal" href="../../index.html">Home</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../quickstart.html">Getting Started</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../api.html">API & Theory</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../examples.html">Example Gallery</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../changelog.html">Changes</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../refs.html">References</a></li> +</ul> + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">psimpy</a> + </nav> + + <div class="wy-nav-content"> + <div class="rst-content"> + <div role="navigation" aria-label="Page navigation"> + <ul class="wy-breadcrumbs"> + <li><a href="../../index.html" class="icon icon-home"></a></li> + <li class="breadcrumb-item active">Computation times</li> + <li class="wy-breadcrumbs-aside"> + <a href="../../_sources/auto_examples/inference/sg_execution_times.rst.txt" rel="nofollow"> View page source</a> + </li> + </ul> + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <section id="computation-times"> +<span id="sphx-glr-auto-examples-inference-sg-execution-times"></span><h1>Computation times<a class="headerlink" href="#computation-times" title="Permalink to this heading"></a></h1> +<p><strong>02:22.392</strong> total execution time for <strong>auto_examples_inference</strong> files:</p> +<table class="docutils align-default"> +<colgroup> +<col style="width: 83%" /> +<col style="width: 10%" /> +<col style="width: 7%" /> +</colgroup> +<tbody> +<tr class="row-odd"><td><p><a class="reference internal" href="plot_active_learning.html#sphx-glr-auto-examples-inference-plot-active-learning-py"><span class="std std-ref">Active learning</span></a> (<code class="docutils literal notranslate"><span class="pre">plot_active_learning.py</span></code>)</p></td> +<td><p>02:12.653</p></td> +<td><p>0.0 MB</p></td> +</tr> +<tr class="row-even"><td><p><a class="reference internal" href="plot_bayes_inference.html#sphx-glr-auto-examples-inference-plot-bayes-inference-py"><span class="std std-ref">Bayesian inference</span></a> (<code class="docutils literal notranslate"><span class="pre">plot_bayes_inference.py</span></code>)</p></td> +<td><p>00:09.739</p></td> +<td><p>0.0 MB</p></td> +</tr> +</tbody> +</table> +</section> + + + </div> + </div> + <footer> + + <hr/> + + <div role="contentinfo"> + <p>© Copyright 2023, Hu Zhao.</p> + </div> + + Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a + <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> + provided by <a href="https://readthedocs.org">Read the Docs</a>. + + +</footer> + </div> + </div> + </section> + </div> + <script> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + +</body> +</html> \ No newline at end of file diff --git a/docs/source/_build/html/auto_examples/sampler/index.html b/docs/source/_build/html/auto_examples/sampler/index.html new file mode 100644 index 0000000..221c96f --- /dev/null +++ b/docs/source/_build/html/auto_examples/sampler/index.html @@ -0,0 +1,151 @@ +<!DOCTYPE html> +<html class="writer-html5" lang="en" > +<head> + <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>Sampler — PSimPy's documentation</title> + <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-binder.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-dataframe.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-rendered-html.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" /> + <!--[if lt IE 9]> + <script src="../../_static/js/html5shiv.min.js"></script> + <![endif]--> + + <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> + <script src="../../_static/jquery.js"></script> + <script src="../../_static/underscore.js"></script> + <script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script> + <script src="../../_static/doctools.js"></script> + <script src="../../_static/sphinx_highlight.js"></script> + <script src="../../_static/js/theme.js"></script> + <link rel="index" title="Index" href="../../genindex.html" /> + <link rel="search" title="Search" href="../../search.html" /> + <link rel="next" title="Saltelli sampling" href="plot_saltelli.html" /> + <link rel="prev" title="Active learning" href="../inference/plot_active_learning.html" /> +</head> + +<body class="wy-body-for-nav"> + <div class="wy-grid-for-nav"> + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + <a href="../../index.html" class="icon icon-home"> psimpy + </a> + <div class="version"> + 0.1.2 + </div> +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> + <ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../../index.html">Home</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../quickstart.html">Getting Started</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../api.html">API & Theory</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../../examples.html">Example Gallery</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="../emulator/index.html">Emulator</a></li> +<li class="toctree-l2"><a class="reference internal" href="../inference/index.html">Inference</a></li> +<li class="toctree-l2 current"><a class="current reference internal" href="#">Sampler</a><ul> +<li class="toctree-l3"><a class="reference internal" href="plot_saltelli.html">Saltelli sampling</a></li> +<li class="toctree-l3"><a class="reference internal" href="plot_latin.html">Latin hypercube sampling</a></li> +<li class="toctree-l3"><a class="reference internal" href="plot_metropolis_hastings.html">Metropolis Hastings sampling</a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="../sensitivity/index.html">Sensitivity</a></li> +<li class="toctree-l2"><a class="reference internal" href="../simulator/index.html">Simulator</a></li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="../../changelog.html">Changes</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../refs.html">References</a></li> +</ul> + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">psimpy</a> + </nav> + + <div class="wy-nav-content"> + <div class="rst-content"> + <div role="navigation" aria-label="Page navigation"> + <ul class="wy-breadcrumbs"> + <li><a href="../../index.html" class="icon icon-home"></a></li> + <li class="breadcrumb-item"><a href="../../examples.html">Example Gallery</a></li> + <li class="breadcrumb-item active">Sampler</li> + <li class="wy-breadcrumbs-aside"> + <a href="../../_sources/auto_examples/sampler/index.rst.txt" rel="nofollow"> View page source</a> + </li> + </ul> + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <section id="sampler"> +<h1>Sampler<a class="headerlink" href="#sampler" title="Permalink to this heading"></a></h1> +<div class="sphx-glr-thumbnails"><div class="sphx-glr-thumbcontainer" tooltip="Saltelli sampling"><img alt="Saltelli sampling" src="../../_images/sphx_glr_plot_saltelli_thumb.png" /> +<p><a class="reference internal" href="plot_saltelli.html#sphx-glr-auto-examples-sampler-plot-saltelli-py"><span class="std std-ref">Saltelli sampling</span></a></p> + <div class="sphx-glr-thumbnail-title">Saltelli sampling</div> +</div><div class="sphx-glr-thumbcontainer" tooltip="Latin hypercube sampling"><img alt="Latin hypercube sampling" src="../../_images/sphx_glr_plot_latin_thumb.png" /> +<p><a class="reference internal" href="plot_latin.html#sphx-glr-auto-examples-sampler-plot-latin-py"><span class="std std-ref">Latin hypercube sampling</span></a></p> + <div class="sphx-glr-thumbnail-title">Latin hypercube sampling</div> +</div><div class="sphx-glr-thumbcontainer" tooltip="Metropolis Hastings sampling"><img alt="Metropolis Hastings sampling" src="../../_images/sphx_glr_plot_metropolis_hastings_thumb.png" /> +<p><a class="reference internal" href="plot_metropolis_hastings.html#sphx-glr-auto-examples-sampler-plot-metropolis-hastings-py"><span class="std std-ref">Metropolis Hastings sampling</span></a></p> + <div class="sphx-glr-thumbnail-title">Metropolis Hastings sampling</div> +</div></div><div class="toctree-wrapper compound"> +</div> +<div class="sphx-glr-footer sphx-glr-footer-gallery docutils container"> +<div class="sphx-glr-download sphx-glr-download-python docutils container"> +<p><a class="reference download internal" download="" href="../../_downloads/79d68b726b379b22e24e81ddc36bf480/sampler_python.zip"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">all</span> <span class="pre">examples</span> <span class="pre">in</span> <span class="pre">Python</span> <span class="pre">source</span> <span class="pre">code:</span> <span class="pre">sampler_python.zip</span></code></a></p> +</div> +<div class="sphx-glr-download sphx-glr-download-jupyter docutils container"> +<p><a class="reference download internal" download="" href="../../_downloads/9be10f28a70b43dfd67c8234c21c2052/sampler_jupyter.zip"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">all</span> <span class="pre">examples</span> <span class="pre">in</span> <span class="pre">Jupyter</span> <span class="pre">notebooks:</span> <span class="pre">sampler_jupyter.zip</span></code></a></p> +</div> +</div> +<p class="sphx-glr-signature"><a class="reference external" href="https://sphinx-gallery.github.io">Gallery generated by Sphinx-Gallery</a></p> +</section> + + + </div> + </div> + <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer"> + <a href="../inference/plot_active_learning.html" class="btn btn-neutral float-left" title="Active learning" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> + <a href="plot_saltelli.html" class="btn btn-neutral float-right" title="Saltelli sampling" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a> + </div> + + <hr/> + + <div role="contentinfo"> + <p>© Copyright 2023, Hu Zhao.</p> + </div> + + Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a + <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> + provided by <a href="https://readthedocs.org">Read the Docs</a>. + + +</footer> + </div> + </div> + </section> + </div> + <script> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + +</body> +</html> \ No newline at end of file diff --git a/docs/source/_build/html/auto_examples/sampler/plot_latin.html b/docs/source/_build/html/auto_examples/sampler/plot_latin.html new file mode 100644 index 0000000..119f626 --- /dev/null +++ b/docs/source/_build/html/auto_examples/sampler/plot_latin.html @@ -0,0 +1,217 @@ +<!DOCTYPE html> +<html class="writer-html5" lang="en" > +<head> + <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>Latin hypercube sampling — PSimPy's documentation</title> + <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-binder.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-dataframe.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-rendered-html.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" /> + <!--[if lt IE 9]> + <script src="../../_static/js/html5shiv.min.js"></script> + <![endif]--> + + <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> + <script src="../../_static/jquery.js"></script> + <script src="../../_static/underscore.js"></script> + <script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script> + <script src="../../_static/doctools.js"></script> + <script src="../../_static/sphinx_highlight.js"></script> + <script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script> + <script src="../../_static/js/theme.js"></script> + <link rel="index" title="Index" href="../../genindex.html" /> + <link rel="search" title="Search" href="../../search.html" /> + <link rel="next" title="Metropolis Hastings sampling" href="plot_metropolis_hastings.html" /> + <link rel="prev" title="Saltelli sampling" href="plot_saltelli.html" /> +</head> + +<body class="wy-body-for-nav"> + <div class="wy-grid-for-nav"> + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + <a href="../../index.html" class="icon icon-home"> psimpy + </a> + <div class="version"> + 0.1.2 + </div> +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> + <ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../../index.html">Home</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../quickstart.html">Getting Started</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../api.html">API & Theory</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../../examples.html">Example Gallery</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="../emulator/index.html">Emulator</a></li> +<li class="toctree-l2"><a class="reference internal" href="../inference/index.html">Inference</a></li> +<li class="toctree-l2 current"><a class="reference internal" href="index.html">Sampler</a><ul class="current"> +<li class="toctree-l3"><a class="reference internal" href="plot_saltelli.html">Saltelli sampling</a></li> +<li class="toctree-l3 current"><a class="current reference internal" href="#">Latin hypercube sampling</a></li> +<li class="toctree-l3"><a class="reference internal" href="plot_metropolis_hastings.html">Metropolis Hastings sampling</a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="../sensitivity/index.html">Sensitivity</a></li> +<li class="toctree-l2"><a class="reference internal" href="../simulator/index.html">Simulator</a></li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="../../changelog.html">Changes</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../refs.html">References</a></li> +</ul> + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">psimpy</a> + </nav> + + <div class="wy-nav-content"> + <div class="rst-content"> + <div role="navigation" aria-label="Page navigation"> + <ul class="wy-breadcrumbs"> + <li><a href="../../index.html" class="icon icon-home"></a></li> + <li class="breadcrumb-item"><a href="../../examples.html">Example Gallery</a></li> + <li class="breadcrumb-item"><a href="index.html">Sampler</a></li> + <li class="breadcrumb-item active">Latin hypercube sampling</li> + <li class="wy-breadcrumbs-aside"> + <a href="../../_sources/auto_examples/sampler/plot_latin.rst.txt" rel="nofollow"> View page source</a> + </li> + </ul> + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="sphx-glr-download-link-note admonition note"> +<p class="admonition-title">Note</p> +<p>Click <a class="reference internal" href="#sphx-glr-download-auto-examples-sampler-plot-latin-py"><span class="std std-ref">here</span></a> +to download the full example code</p> +</div> +<section class="sphx-glr-example-title" id="latin-hypercube-sampling"> +<span id="sphx-glr-auto-examples-sampler-plot-latin-py"></span><h1>Latin hypercube sampling<a class="headerlink" href="#latin-hypercube-sampling" title="Permalink to this heading"></a></h1> +<p>This example shows how to draw samples using Latin hypercube sampling.</p> +<p>For the illustration purpose, let’s have a look at a two-dimensional example +where we have two random variables X and Y. Each is uniformly distributed in its +range.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span> + +<span class="n">ndim</span> <span class="o">=</span> <span class="mi">2</span> +<span class="c1"># range of X is 10 to 20, range of Y is -10 to 0</span> +<span class="n">bounds</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([[</span><span class="mi">10</span><span class="p">,</span><span class="mi">20</span><span class="p">],</span> <span class="p">[</span><span class="o">-</span><span class="mi">10</span><span class="p">,</span><span class="mi">0</span><span class="p">]])</span> +</pre></div> +</div> +<p>Given this setting, we can import <code class="xref py py-class docutils literal notranslate"><span class="pre">Latin</span></code>, create an instance, and +call the <code class="xref py py-meth docutils literal notranslate"><span class="pre">Latin.sample()</span></code> method to draw required number of samples</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">psimpy.sampler</span> <span class="kn">import</span> <span class="n">LHS</span> + +<span class="c1"># setting seed leads to same samples every time when the codes are run</span> +<span class="n">lhs_sampler</span> <span class="o">=</span> <span class="n">LHS</span><span class="p">(</span><span class="n">ndim</span><span class="p">,</span> <span class="n">bounds</span><span class="p">,</span> <span class="n">seed</span><span class="o">=</span><span class="mi">10</span><span class="p">)</span> +<span class="n">lhs_samples</span> <span class="o">=</span> <span class="n">lhs_sampler</span><span class="o">.</span><span class="n">sample</span><span class="p">(</span><span class="n">nsamples</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span> +</pre></div> +</div> +<p>The samples are plotted in the following figure.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span> + +<span class="n">fig</span> <span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">6</span><span class="p">,</span><span class="mi">4</span><span class="p">))</span> + +<span class="n">ax</span><span class="o">.</span><span class="n">scatter</span><span class="p">(</span><span class="n">lhs_samples</span><span class="p">[:,</span><span class="mi">0</span><span class="p">],</span> <span class="n">lhs_samples</span><span class="p">[:,</span><span class="mi">1</span><span class="p">],</span> <span class="n">s</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">c</span><span class="o">=</span><span class="s1">'blue'</span><span class="p">,</span> <span class="n">marker</span><span class="o">=</span><span class="s1">'o'</span><span class="p">)</span> + +<span class="n">ax</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="s1">'X'</span><span class="p">)</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s1">'Y'</span><span class="p">)</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">(</span><span class="n">bounds</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_ylim</span><span class="p">(</span><span class="n">bounds</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="s2">"Latin hypercube samples (criterion='random')"</span><span class="p">)</span> +<span class="n">_</span> <span class="o">=</span> <span class="n">ax</span><span class="o">.</span><span class="n">grid</span><span class="p">(</span><span class="n">visible</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">which</span><span class="o">=</span><span class="s1">'major'</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="s1">'both'</span><span class="p">)</span> +</pre></div> +</div> +<img src="../../_images/sphx_glr_plot_latin_001.png" srcset="../../_images/sphx_glr_plot_latin_001.png" alt="Latin hypercube samples (criterion='random')" class = "sphx-glr-single-img"/><p>There are different criterions to pick samples in each hypercube. The default +is <cite>random</cite>, as used above. Other options are <cite>center</cite> and <cite>maximin</cite>. For instance, +we can use the <cite>center</cite> criterion to draw <span class="math notranslate nohighlight">\(5\)</span> samples as follows:</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">lhs_sampler</span> <span class="o">=</span> <span class="n">LHS</span><span class="p">(</span><span class="n">ndim</span><span class="p">,</span> <span class="n">bounds</span><span class="p">,</span> <span class="n">criterion</span><span class="o">=</span><span class="s1">'center'</span><span class="p">,</span> <span class="n">seed</span><span class="o">=</span><span class="mi">10</span><span class="p">)</span> +<span class="n">lhs_samples</span> <span class="o">=</span> <span class="n">lhs_sampler</span><span class="o">.</span><span class="n">sample</span><span class="p">(</span><span class="n">nsamples</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span> + +<span class="n">fig</span> <span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">6</span><span class="p">,</span><span class="mi">4</span><span class="p">))</span> + +<span class="n">ax</span><span class="o">.</span><span class="n">scatter</span><span class="p">(</span><span class="n">lhs_samples</span><span class="p">[:,</span><span class="mi">0</span><span class="p">],</span> <span class="n">lhs_samples</span><span class="p">[:,</span><span class="mi">1</span><span class="p">],</span> <span class="n">s</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">c</span><span class="o">=</span><span class="s1">'blue'</span><span class="p">,</span> <span class="n">marker</span><span class="o">=</span><span class="s1">'o'</span><span class="p">)</span> + +<span class="n">ax</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="s1">'X'</span><span class="p">)</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s1">'Y'</span><span class="p">)</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">(</span><span class="n">bounds</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_ylim</span><span class="p">(</span><span class="n">bounds</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="s2">"Latin hypercube samples (criterion='center')"</span><span class="p">)</span> +<span class="n">_</span> <span class="o">=</span> <span class="n">ax</span><span class="o">.</span><span class="n">grid</span><span class="p">(</span><span class="n">visible</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">which</span><span class="o">=</span><span class="s1">'major'</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="s1">'both'</span><span class="p">)</span> +</pre></div> +</div> +<img src="../../_images/sphx_glr_plot_latin_002.png" srcset="../../_images/sphx_glr_plot_latin_002.png" alt="Latin hypercube samples (criterion='center')" class = "sphx-glr-single-img"/><p>And we can use the <cite>maximin</cite> criterion as follows:</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">lhs_sampler</span> <span class="o">=</span> <span class="n">LHS</span><span class="p">(</span><span class="n">ndim</span><span class="p">,</span> <span class="n">bounds</span><span class="p">,</span> <span class="n">criterion</span><span class="o">=</span><span class="s1">'maximin'</span><span class="p">,</span> <span class="n">seed</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">iteration</span><span class="o">=</span><span class="mi">500</span><span class="p">)</span> +<span class="n">lhs_samples</span> <span class="o">=</span> <span class="n">lhs_sampler</span><span class="o">.</span><span class="n">sample</span><span class="p">(</span><span class="n">nsamples</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span> + +<span class="n">fig</span> <span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">6</span><span class="p">,</span><span class="mi">4</span><span class="p">))</span> + +<span class="n">ax</span><span class="o">.</span><span class="n">scatter</span><span class="p">(</span><span class="n">lhs_samples</span><span class="p">[:,</span><span class="mi">0</span><span class="p">],</span> <span class="n">lhs_samples</span><span class="p">[:,</span><span class="mi">1</span><span class="p">],</span> <span class="n">s</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">c</span><span class="o">=</span><span class="s1">'blue'</span><span class="p">,</span> <span class="n">marker</span><span class="o">=</span><span class="s1">'o'</span><span class="p">)</span> + +<span class="n">ax</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="s1">'X'</span><span class="p">)</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s1">'Y'</span><span class="p">)</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">(</span><span class="n">bounds</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_ylim</span><span class="p">(</span><span class="n">bounds</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="s2">"Latin hypercube samples (criterion='maximin')"</span><span class="p">)</span> +<span class="n">_</span> <span class="o">=</span> <span class="n">ax</span><span class="o">.</span><span class="n">grid</span><span class="p">(</span><span class="n">visible</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">which</span><span class="o">=</span><span class="s1">'major'</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="s1">'both'</span><span class="p">)</span> +</pre></div> +</div> +<img src="../../_images/sphx_glr_plot_latin_003.png" srcset="../../_images/sphx_glr_plot_latin_003.png" alt="Latin hypercube samples (criterion='maximin')" class = "sphx-glr-single-img"/><p class="sphx-glr-timing"><strong>Total running time of the script:</strong> ( 0 minutes 0.270 seconds)</p> +<div class="sphx-glr-footer sphx-glr-footer-example docutils container" id="sphx-glr-download-auto-examples-sampler-plot-latin-py"> +<div class="sphx-glr-download sphx-glr-download-python docutils container"> +<p><a class="reference download internal" download="" href="../../_downloads/213f7cd5e82a62f8d1da8c3af9caab35/plot_latin.py"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">Python</span> <span class="pre">source</span> <span class="pre">code:</span> <span class="pre">plot_latin.py</span></code></a></p> +</div> +<div class="sphx-glr-download sphx-glr-download-jupyter docutils container"> +<p><a class="reference download internal" download="" href="../../_downloads/3072e3885ecdb1bbb3b34893dcfd8def/plot_latin.ipynb"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">Jupyter</span> <span class="pre">notebook:</span> <span class="pre">plot_latin.ipynb</span></code></a></p> +</div> +</div> +<p class="sphx-glr-signature"><a class="reference external" href="https://sphinx-gallery.github.io">Gallery generated by Sphinx-Gallery</a></p> +</section> + + + </div> + </div> + <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer"> + <a href="plot_saltelli.html" class="btn btn-neutral float-left" title="Saltelli sampling" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> + <a href="plot_metropolis_hastings.html" class="btn btn-neutral float-right" title="Metropolis Hastings sampling" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a> + </div> + + <hr/> + + <div role="contentinfo"> + <p>© Copyright 2023, Hu Zhao.</p> + </div> + + Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a + <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> + provided by <a href="https://readthedocs.org">Read the Docs</a>. + + +</footer> + </div> + </div> + </section> + </div> + <script> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + +</body> +</html> \ No newline at end of file diff --git a/docs/source/_build/html/auto_examples/sampler/plot_metropolis_hastings.html b/docs/source/_build/html/auto_examples/sampler/plot_metropolis_hastings.html new file mode 100644 index 0000000..516f10a --- /dev/null +++ b/docs/source/_build/html/auto_examples/sampler/plot_metropolis_hastings.html @@ -0,0 +1,239 @@ +<!DOCTYPE html> +<html class="writer-html5" lang="en" > +<head> + <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>Metropolis Hastings sampling — PSimPy's documentation</title> + <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-binder.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-dataframe.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-rendered-html.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" /> + <!--[if lt IE 9]> + <script src="../../_static/js/html5shiv.min.js"></script> + <![endif]--> + + <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> + <script src="../../_static/jquery.js"></script> + <script src="../../_static/underscore.js"></script> + <script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script> + <script src="../../_static/doctools.js"></script> + <script src="../../_static/sphinx_highlight.js"></script> + <script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script> + <script src="../../_static/js/theme.js"></script> + <link rel="index" title="Index" href="../../genindex.html" /> + <link rel="search" title="Search" href="../../search.html" /> + <link rel="next" title="Sensitivity" href="../sensitivity/index.html" /> + <link rel="prev" title="Latin hypercube sampling" href="plot_latin.html" /> +</head> + +<body class="wy-body-for-nav"> + <div class="wy-grid-for-nav"> + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + <a href="../../index.html" class="icon icon-home"> psimpy + </a> + <div class="version"> + 0.1.2 + </div> +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> + <ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../../index.html">Home</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../quickstart.html">Getting Started</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../api.html">API & Theory</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../../examples.html">Example Gallery</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="../emulator/index.html">Emulator</a></li> +<li class="toctree-l2"><a class="reference internal" href="../inference/index.html">Inference</a></li> +<li class="toctree-l2 current"><a class="reference internal" href="index.html">Sampler</a><ul class="current"> +<li class="toctree-l3"><a class="reference internal" href="plot_saltelli.html">Saltelli sampling</a></li> +<li class="toctree-l3"><a class="reference internal" href="plot_latin.html">Latin hypercube sampling</a></li> +<li class="toctree-l3 current"><a class="current reference internal" href="#">Metropolis Hastings sampling</a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="../sensitivity/index.html">Sensitivity</a></li> +<li class="toctree-l2"><a class="reference internal" href="../simulator/index.html">Simulator</a></li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="../../changelog.html">Changes</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../refs.html">References</a></li> +</ul> + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">psimpy</a> + </nav> + + <div class="wy-nav-content"> + <div class="rst-content"> + <div role="navigation" aria-label="Page navigation"> + <ul class="wy-breadcrumbs"> + <li><a href="../../index.html" class="icon icon-home"></a></li> + <li class="breadcrumb-item"><a href="../../examples.html">Example Gallery</a></li> + <li class="breadcrumb-item"><a href="index.html">Sampler</a></li> + <li class="breadcrumb-item active">Metropolis Hastings sampling</li> + <li class="wy-breadcrumbs-aside"> + <a href="../../_sources/auto_examples/sampler/plot_metropolis_hastings.rst.txt" rel="nofollow"> View page source</a> + </li> + </ul> + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="sphx-glr-download-link-note admonition note"> +<p class="admonition-title">Note</p> +<p>Click <a class="reference internal" href="#sphx-glr-download-auto-examples-sampler-plot-metropolis-hastings-py"><span class="std std-ref">here</span></a> +to download the full example code</p> +</div> +<section class="sphx-glr-example-title" id="metropolis-hastings-sampling"> +<span id="sphx-glr-auto-examples-sampler-plot-metropolis-hastings-py"></span><h1>Metropolis Hastings sampling<a class="headerlink" href="#metropolis-hastings-sampling" title="Permalink to this heading"></a></h1> +<p>This example shows how to draw samples using Metropolis Hastings sampling. +The target probability distribution is</p> +<p><span class="math notranslate nohighlight">\(p(\mathbf{x})=p(x_1, x_2) \propto \exp \left(-\frac{1}{100}\left(x_1-1\right)^2-\left(x_1^2-x_2\right)^2\right)\)</span></p> +<p>where <span class="math notranslate nohighlight">\(x_1 \in [-5,5]\)</span> and <span class="math notranslate nohighlight">\(x_2 \in [-5,5]\)</span>.</p> +<p>It should be noted that the right hand side of the equation is an unnormalized +probability density function since its integral is not equal to <span class="math notranslate nohighlight">\(1\)</span>. +This can happen, for example, when the normalization constant is unknown or difficult +to compute.</p> +<p>We can define the target probability distribution in Python as follows:</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span> + +<span class="k">def</span> <span class="nf">target_dist</span><span class="p">(</span><span class="n">x</span><span class="p">):</span> + <span class="k">if</span> <span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">>=-</span><span class="mi">5</span> <span class="ow">and</span> <span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o"><=</span><span class="mi">5</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">>=-</span><span class="mi">5</span> <span class="ow">and</span> <span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o"><=</span><span class="mi">5</span><span class="p">):</span> + <span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">exp</span><span class="p">(</span><span class="o">-</span><span class="mf">0.01</span><span class="o">*</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span> <span class="o">-</span> <span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">**</span><span class="mi">2</span><span class="o">-</span><span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span><span class="o">**</span><span class="mi">2</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">return</span> <span class="mi">0</span> +</pre></div> +</div> +<p>The figure below shows how the target distribution looks like.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span> +<span class="kn">import</span> <span class="nn">itertools</span> + +<span class="n">x1_values</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="o">-</span><span class="mi">5</span><span class="p">,</span><span class="mf">5.1</span><span class="p">,</span><span class="mi">100</span><span class="p">)</span> +<span class="n">x2_values</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="o">-</span><span class="mi">5</span><span class="p">,</span><span class="mf">5.1</span><span class="p">,</span><span class="mi">100</span><span class="p">)</span> + +<span class="n">target_values</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="mi">100</span><span class="p">,</span> <span class="mi">100</span><span class="p">))</span> +<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">itertools</span><span class="o">.</span><span class="n">product</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="mi">100</span><span class="p">),</span> <span class="nb">range</span><span class="p">(</span><span class="mi">100</span><span class="p">)):</span> + <span class="n">x1</span> <span class="o">=</span> <span class="n">x1_values</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> + <span class="n">x2</span> <span class="o">=</span> <span class="n">x2_values</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> + <span class="n">target_values</span><span class="p">[</span><span class="n">i</span><span class="p">,</span><span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="n">target_dist</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">x1</span><span class="p">,</span> <span class="n">x2</span><span class="p">]))</span> + +<span class="n">fig</span> <span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span><span class="mi">4</span><span class="p">))</span> + +<span class="n">ax</span><span class="o">.</span><span class="n">contourf</span><span class="p">(</span><span class="n">x1_values</span><span class="p">,</span> <span class="n">x2_values</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">transpose</span><span class="p">(</span><span class="n">target_values</span><span class="p">),</span> <span class="n">levels</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">cmap</span><span class="o">=</span><span class="s1">'Blues'</span><span class="p">)</span> + +<span class="n">ax</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="s1">'(unnormalized) target distribution'</span><span class="p">)</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="sa">r</span><span class="s1">'$x_1$'</span><span class="p">)</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="sa">r</span><span class="s1">'$x_2$'</span><span class="p">)</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">(</span><span class="o">-</span><span class="mi">5</span><span class="p">,</span><span class="mi">5</span><span class="p">)</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_ylim</span><span class="p">(</span><span class="o">-</span><span class="mi">5</span><span class="p">,</span><span class="mi">5</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">tight_layout</span><span class="p">()</span> +</pre></div> +</div> +<img src="../../_images/sphx_glr_plot_metropolis_hastings_001.png" srcset="../../_images/sphx_glr_plot_metropolis_hastings_001.png" alt="(unnormalized) target distribution" class = "sphx-glr-single-img"/><p>To perform Metropolis Hastings sampling, we need to choose a proposal distribution +which can be used to determine a new state <code class="docutils literal notranslate"><span class="pre">x'</span></code> given a current state <code class="docutils literal notranslate"><span class="pre">x</span></code> at +each iteration. This is defined by the parameter <code class="docutils literal notranslate"><span class="pre">f_sample</span></code> which should be a +function. A usual choice is to choose the new state from a Gaussian distribution +centered at the current state.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">scipy.stats</span> <span class="kn">import</span> <span class="n">multivariate_normal</span> + +<span class="n">f_sample</span> <span class="o">=</span> <span class="n">multivariate_normal</span><span class="o">.</span><span class="n">rvs</span> +<span class="c1"># make the samples reproducible</span> +<span class="n">kwgs_f_sample</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'random_state'</span><span class="p">:</span> <span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">default_rng</span><span class="p">(</span><span class="n">seed</span><span class="o">=</span><span class="mi">1</span><span class="p">)}</span> +</pre></div> +</div> +<p>Then, we create an instance of <a class="reference internal" href="../../sampler/metropolis_hastings.html#psimpy.sampler.metropolis_hastings.MetropolisHastings" title="psimpy.sampler.metropolis_hastings.MetropolisHastings"><code class="xref py py-class docutils literal notranslate"><span class="pre">MetropolisHastings</span></code></a> class.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">psimpy.sampler.metropolis_hastings</span> <span class="kn">import</span> <span class="n">MetropolisHastings</span> + +<span class="n">mh_sampler</span> <span class="o">=</span> <span class="n">MetropolisHastings</span><span class="p">(</span><span class="n">ndim</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">init_state</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="o">-</span><span class="mi">4</span><span class="p">,</span><span class="o">-</span><span class="mi">4</span><span class="p">]),</span> + <span class="n">f_sample</span><span class="o">=</span><span class="n">f_sample</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="n">target_dist</span><span class="p">,</span> <span class="n">nburn</span><span class="o">=</span><span class="mi">1000</span><span class="p">,</span> <span class="n">nthin</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> + <span class="n">seed</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">kwgs_f_sample</span><span class="o">=</span><span class="n">kwgs_f_sample</span><span class="p">)</span> +</pre></div> +</div> +<p>Next, we call the <a class="reference internal" href="../../sampler/metropolis_hastings.html#psimpy.sampler.metropolis_hastings.MetropolisHastings.sample" title="psimpy.sampler.metropolis_hastings.MetropolisHastings.sample"><code class="xref py py-meth docutils literal notranslate"><span class="pre">MetropolisHastings.sample()</span></code></a> method to draw required +number of samples.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">mh_samples</span><span class="p">,</span> <span class="n">mh_accept</span> <span class="o">=</span> <span class="n">mh_sampler</span><span class="o">.</span><span class="n">sample</span><span class="p">(</span><span class="n">nsamples</span><span class="o">=</span><span class="mi">5000</span><span class="p">)</span> + +<span class="nb">print</span><span class="p">(</span><span class="s2">"Acceptance ratio: "</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">mh_accept</span><span class="p">))</span> +</pre></div> +</div> +<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>Acceptance ratio: 0.3712 +</pre></div> +</div> +<p>The following figure shows how the samples look like.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span> +<span class="kn">import</span> <span class="nn">itertools</span> + +<span class="c1"># sphinx_gallery_thumbnail_number = 2</span> +<span class="n">fig</span> <span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span><span class="mi">4</span><span class="p">))</span> + +<span class="n">ax</span><span class="o">.</span><span class="n">contourf</span><span class="p">(</span><span class="n">x1_values</span><span class="p">,</span> <span class="n">x2_values</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">transpose</span><span class="p">(</span><span class="n">target_values</span><span class="p">),</span> <span class="n">levels</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">cmap</span><span class="o">=</span><span class="s1">'Blues'</span><span class="p">)</span> +<span class="n">ax</span><span class="o">.</span><span class="n">scatter</span><span class="p">(</span><span class="n">mh_samples</span><span class="p">[:,</span><span class="mi">0</span><span class="p">],</span> <span class="n">mh_samples</span><span class="p">[:,</span><span class="mi">1</span><span class="p">],</span> <span class="n">s</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> <span class="n">c</span><span class="o">=</span><span class="s1">'r'</span><span class="p">,</span> <span class="n">marker</span><span class="o">=</span><span class="s1">'o'</span><span class="p">,</span><span class="n">alpha</span><span class="o">=</span><span class="mf">0.05</span><span class="p">)</span> + +<span class="n">ax</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="s1">'Metropolis Hastings samples'</span><span class="p">)</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="sa">r</span><span class="s1">'$x_1$'</span><span class="p">)</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="sa">r</span><span class="s1">'$x_2$'</span><span class="p">)</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">(</span><span class="o">-</span><span class="mi">5</span><span class="p">,</span><span class="mi">5</span><span class="p">)</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_ylim</span><span class="p">(</span><span class="o">-</span><span class="mi">5</span><span class="p">,</span><span class="mi">5</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">tight_layout</span><span class="p">()</span> +</pre></div> +</div> +<img src="../../_images/sphx_glr_plot_metropolis_hastings_002.png" srcset="../../_images/sphx_glr_plot_metropolis_hastings_002.png" alt="Metropolis Hastings samples" class = "sphx-glr-single-img"/><p class="sphx-glr-timing"><strong>Total running time of the script:</strong> ( 0 minutes 4.769 seconds)</p> +<div class="sphx-glr-footer sphx-glr-footer-example docutils container" id="sphx-glr-download-auto-examples-sampler-plot-metropolis-hastings-py"> +<div class="sphx-glr-download sphx-glr-download-python docutils container"> +<p><a class="reference download internal" download="" href="../../_downloads/50d02379952730d4e961434a77e23a62/plot_metropolis_hastings.py"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">Python</span> <span class="pre">source</span> <span class="pre">code:</span> <span class="pre">plot_metropolis_hastings.py</span></code></a></p> +</div> +<div class="sphx-glr-download sphx-glr-download-jupyter docutils container"> +<p><a class="reference download internal" download="" href="../../_downloads/72c9aa931cd2028d7edb96ceb292a4a2/plot_metropolis_hastings.ipynb"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">Jupyter</span> <span class="pre">notebook:</span> <span class="pre">plot_metropolis_hastings.ipynb</span></code></a></p> +</div> +</div> +<p class="sphx-glr-signature"><a class="reference external" href="https://sphinx-gallery.github.io">Gallery generated by Sphinx-Gallery</a></p> +</section> + + + </div> + </div> + <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer"> + <a href="plot_latin.html" class="btn btn-neutral float-left" title="Latin hypercube sampling" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> + <a href="../sensitivity/index.html" class="btn btn-neutral float-right" title="Sensitivity" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a> + </div> + + <hr/> + + <div role="contentinfo"> + <p>© Copyright 2023, Hu Zhao.</p> + </div> + + Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a + <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> + provided by <a href="https://readthedocs.org">Read the Docs</a>. + + +</footer> + </div> + </div> + </section> + </div> + <script> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + +</body> +</html> \ No newline at end of file diff --git a/docs/source/_build/html/auto_examples/sampler/plot_saltelli.html b/docs/source/_build/html/auto_examples/sampler/plot_saltelli.html new file mode 100644 index 0000000..617eaaa --- /dev/null +++ b/docs/source/_build/html/auto_examples/sampler/plot_saltelli.html @@ -0,0 +1,217 @@ +<!DOCTYPE html> +<html class="writer-html5" lang="en" > +<head> + <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>Saltelli sampling — PSimPy's documentation</title> + <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-binder.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-dataframe.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-rendered-html.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" /> + <!--[if lt IE 9]> + <script src="../../_static/js/html5shiv.min.js"></script> + <![endif]--> + + <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> + <script src="../../_static/jquery.js"></script> + <script src="../../_static/underscore.js"></script> + <script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script> + <script src="../../_static/doctools.js"></script> + <script src="../../_static/sphinx_highlight.js"></script> + <script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script> + <script src="../../_static/js/theme.js"></script> + <link rel="index" title="Index" href="../../genindex.html" /> + <link rel="search" title="Search" href="../../search.html" /> + <link rel="next" title="Latin hypercube sampling" href="plot_latin.html" /> + <link rel="prev" title="Sampler" href="index.html" /> +</head> + +<body class="wy-body-for-nav"> + <div class="wy-grid-for-nav"> + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + <a href="../../index.html" class="icon icon-home"> psimpy + </a> + <div class="version"> + 0.1.2 + </div> +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> + <ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../../index.html">Home</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../quickstart.html">Getting Started</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../api.html">API & Theory</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../../examples.html">Example Gallery</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="../emulator/index.html">Emulator</a></li> +<li class="toctree-l2"><a class="reference internal" href="../inference/index.html">Inference</a></li> +<li class="toctree-l2 current"><a class="reference internal" href="index.html">Sampler</a><ul class="current"> +<li class="toctree-l3 current"><a class="current reference internal" href="#">Saltelli sampling</a></li> +<li class="toctree-l3"><a class="reference internal" href="plot_latin.html">Latin hypercube sampling</a></li> +<li class="toctree-l3"><a class="reference internal" href="plot_metropolis_hastings.html">Metropolis Hastings sampling</a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="../sensitivity/index.html">Sensitivity</a></li> +<li class="toctree-l2"><a class="reference internal" href="../simulator/index.html">Simulator</a></li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="../../changelog.html">Changes</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../refs.html">References</a></li> +</ul> + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">psimpy</a> + </nav> + + <div class="wy-nav-content"> + <div class="rst-content"> + <div role="navigation" aria-label="Page navigation"> + <ul class="wy-breadcrumbs"> + <li><a href="../../index.html" class="icon icon-home"></a></li> + <li class="breadcrumb-item"><a href="../../examples.html">Example Gallery</a></li> + <li class="breadcrumb-item"><a href="index.html">Sampler</a></li> + <li class="breadcrumb-item active">Saltelli sampling</li> + <li class="wy-breadcrumbs-aside"> + <a href="../../_sources/auto_examples/sampler/plot_saltelli.rst.txt" rel="nofollow"> View page source</a> + </li> + </ul> + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="sphx-glr-download-link-note admonition note"> +<p class="admonition-title">Note</p> +<p>Click <a class="reference internal" href="#sphx-glr-download-auto-examples-sampler-plot-saltelli-py"><span class="std std-ref">here</span></a> +to download the full example code</p> +</div> +<section class="sphx-glr-example-title" id="saltelli-sampling"> +<span id="sphx-glr-auto-examples-sampler-plot-saltelli-py"></span><h1>Saltelli sampling<a class="headerlink" href="#saltelli-sampling" title="Permalink to this heading"></a></h1> +<p>This example shows how to draw samples using Saltelli sampling. +Assume that there is a three-dimensional problem where X, Y, and Z are the +three random variables.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span> + +<span class="n">ndim</span> <span class="o">=</span> <span class="mi">3</span> +<span class="c1"># range of X is 10 to 20, range of Y is 100 to 200, range of Z is 1000 to 2000</span> +<span class="n">bounds</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([[</span><span class="mi">10</span><span class="p">,</span><span class="mi">20</span><span class="p">],</span> <span class="p">[</span><span class="mi">100</span><span class="p">,</span><span class="mi">200</span><span class="p">],</span> <span class="p">[</span><span class="mi">1000</span><span class="p">,</span><span class="mi">2000</span><span class="p">]])</span> +</pre></div> +</div> +<p>Given this setting, we can import <a class="reference internal" href="../../sampler/saltelli.html#psimpy.sampler.saltelli.Saltelli" title="psimpy.sampler.saltelli.Saltelli"><code class="xref py py-class docutils literal notranslate"><span class="pre">Saltelli</span></code></a>, create an instance, and +call the <a class="reference internal" href="../../sampler/saltelli.html#psimpy.sampler.saltelli.Saltelli.sample" title="psimpy.sampler.saltelli.Saltelli.sample"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Saltelli.sample()</span></code></a> method to draw required number of samples.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">psimpy.sampler</span> <span class="kn">import</span> <span class="n">Saltelli</span> + +<span class="n">saltelli_sampler</span> <span class="o">=</span> <span class="n">Saltelli</span><span class="p">(</span><span class="n">ndim</span><span class="p">,</span> <span class="n">bounds</span><span class="p">,</span> <span class="n">calc_second_order</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> +<span class="n">saltelli_samples</span> <span class="o">=</span> <span class="n">saltelli_sampler</span><span class="o">.</span><span class="n">sample</span><span class="p">(</span><span class="n">nbase</span><span class="o">=</span><span class="mi">128</span><span class="p">)</span> +</pre></div> +</div> +<p>In above codes, we set <code class="docutils literal notranslate"><span class="pre">calc_second_order</span></code> to <cite>False</cite>. It means that picked +samples can be used in following Sobol’ analysis to compute first-order and +total-effect Sobol’ indices but not second-order Sobol’ indices. It leads to +<span class="math notranslate nohighlight">\(nbase*(ndim+2)\)</span> samples as shown below</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span> + +<span class="n">fig</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">()</span> +<span class="n">ax</span> <span class="o">=</span> <span class="n">fig</span><span class="o">.</span><span class="n">add_subplot</span><span class="p">(</span><span class="n">projection</span><span class="o">=</span><span class="s1">'3d'</span><span class="p">)</span> + +<span class="n">ax</span><span class="o">.</span><span class="n">scatter</span><span class="p">(</span><span class="n">saltelli_samples</span><span class="p">[:,</span><span class="mi">0</span><span class="p">],</span> <span class="n">saltelli_samples</span><span class="p">[:,</span><span class="mi">1</span><span class="p">],</span> <span class="n">saltelli_samples</span><span class="p">[:,</span><span class="mi">2</span><span class="p">],</span> <span class="n">marker</span><span class="o">=</span><span class="s1">'o'</span><span class="p">)</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="s1">'X'</span><span class="p">)</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s1">'Y'</span><span class="p">)</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_zlabel</span><span class="p">(</span><span class="s1">'Z'</span><span class="p">)</span> + +<span class="n">plt</span><span class="o">.</span><span class="n">tight_layout</span><span class="p">()</span> + +<span class="nb">print</span><span class="p">(</span><span class="s1">'Number of samples: '</span><span class="p">,</span> <span class="sa">f</span><span class="s1">'</span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">saltelli_samples</span><span class="p">)</span><span class="si">}</span><span class="s1">'</span><span class="p">)</span> +</pre></div> +</div> +<img src="../../_images/sphx_glr_plot_saltelli_001.png" srcset="../../_images/sphx_glr_plot_saltelli_001.png" alt="plot saltelli" class = "sphx-glr-single-img"/><div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>Number of samples: 640 +</pre></div> +</div> +<p>If we want to draw samples which can also be used to compute second-order +Sobol’ indices, we need to set <code class="docutils literal notranslate"><span class="pre">calc_second_order</span></code> to <cite>True</cite>. +It leads to <span class="math notranslate nohighlight">\(nbase*(2*ndim+2)\)</span> samples.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">saltelli_sampler</span> <span class="o">=</span> <span class="n">Saltelli</span><span class="p">(</span><span class="n">ndim</span><span class="p">,</span> <span class="n">bounds</span><span class="p">,</span> <span class="n">calc_second_order</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> +<span class="n">saltelli_samples</span> <span class="o">=</span> <span class="n">saltelli_sampler</span><span class="o">.</span><span class="n">sample</span><span class="p">(</span><span class="n">nbase</span><span class="o">=</span><span class="mi">128</span><span class="p">)</span> + +<span class="n">fig</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">()</span> +<span class="n">ax</span> <span class="o">=</span> <span class="n">fig</span><span class="o">.</span><span class="n">add_subplot</span><span class="p">(</span><span class="n">projection</span><span class="o">=</span><span class="s1">'3d'</span><span class="p">)</span> + +<span class="n">ax</span><span class="o">.</span><span class="n">scatter</span><span class="p">(</span><span class="n">saltelli_samples</span><span class="p">[:,</span><span class="mi">0</span><span class="p">],</span> <span class="n">saltelli_samples</span><span class="p">[:,</span><span class="mi">1</span><span class="p">],</span> <span class="n">saltelli_samples</span><span class="p">[:,</span><span class="mi">2</span><span class="p">],</span> <span class="n">marker</span><span class="o">=</span><span class="s1">'o'</span><span class="p">)</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="s1">'X'</span><span class="p">)</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s1">'Y'</span><span class="p">)</span> +<span class="n">ax</span><span class="o">.</span><span class="n">set_zlabel</span><span class="p">(</span><span class="s1">'Z'</span><span class="p">)</span> + +<span class="n">plt</span><span class="o">.</span><span class="n">tight_layout</span><span class="p">()</span> + +<span class="nb">print</span><span class="p">(</span><span class="s1">'Number of samples: '</span><span class="p">,</span> <span class="sa">f</span><span class="s1">'</span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">saltelli_samples</span><span class="p">)</span><span class="si">}</span><span class="s1">'</span><span class="p">)</span> +</pre></div> +</div> +<img src="../../_images/sphx_glr_plot_saltelli_002.png" srcset="../../_images/sphx_glr_plot_saltelli_002.png" alt="plot saltelli" class = "sphx-glr-single-img"/><div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>Number of samples: 1024 +</pre></div> +</div> +<div class="admonition note"> +<p class="admonition-title">Note</p> +<p>If one has a two-dimensional problem, there is no need to set +<code class="docutils literal notranslate"><span class="pre">calc_second_order</span></code> to <cite>True</cite>. The reason is that the second-order Sobol’ +index can be directly computed based on the first-order and total-effect +Sobol’ index in that case.</p> +</div> +<p class="sphx-glr-timing"><strong>Total running time of the script:</strong> ( 0 minutes 0.309 seconds)</p> +<div class="sphx-glr-footer sphx-glr-footer-example docutils container" id="sphx-glr-download-auto-examples-sampler-plot-saltelli-py"> +<div class="sphx-glr-download sphx-glr-download-python docutils container"> +<p><a class="reference download internal" download="" href="../../_downloads/6dd07bf8f59ed369971c33b38f420079/plot_saltelli.py"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">Python</span> <span class="pre">source</span> <span class="pre">code:</span> <span class="pre">plot_saltelli.py</span></code></a></p> +</div> +<div class="sphx-glr-download sphx-glr-download-jupyter docutils container"> +<p><a class="reference download internal" download="" href="../../_downloads/e0b3048771af654ea83c8bb3f5bf6c0c/plot_saltelli.ipynb"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">Jupyter</span> <span class="pre">notebook:</span> <span class="pre">plot_saltelli.ipynb</span></code></a></p> +</div> +</div> +<p class="sphx-glr-signature"><a class="reference external" href="https://sphinx-gallery.github.io">Gallery generated by Sphinx-Gallery</a></p> +</section> + + + </div> + </div> + <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer"> + <a href="index.html" class="btn btn-neutral float-left" title="Sampler" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> + <a href="plot_latin.html" class="btn btn-neutral float-right" title="Latin hypercube sampling" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a> + </div> + + <hr/> + + <div role="contentinfo"> + <p>© Copyright 2023, Hu Zhao.</p> + </div> + + Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a + <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> + provided by <a href="https://readthedocs.org">Read the Docs</a>. + + +</footer> + </div> + </div> + </section> + </div> + <script> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + +</body> +</html> \ No newline at end of file diff --git a/docs/source/_build/html/auto_examples/sampler/sg_execution_times.html b/docs/source/_build/html/auto_examples/sampler/sg_execution_times.html new file mode 100644 index 0000000..1b6bcef --- /dev/null +++ b/docs/source/_build/html/auto_examples/sampler/sg_execution_times.html @@ -0,0 +1,135 @@ +<!DOCTYPE html> +<html class="writer-html5" lang="en" > +<head> + <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>Computation times — PSimPy's documentation</title> + <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-binder.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-dataframe.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-rendered-html.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" /> + <!--[if lt IE 9]> + <script src="../../_static/js/html5shiv.min.js"></script> + <![endif]--> + + <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> + <script src="../../_static/jquery.js"></script> + <script src="../../_static/underscore.js"></script> + <script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script> + <script src="../../_static/doctools.js"></script> + <script src="../../_static/sphinx_highlight.js"></script> + <script src="../../_static/js/theme.js"></script> + <link rel="index" title="Index" href="../../genindex.html" /> + <link rel="search" title="Search" href="../../search.html" /> +</head> + +<body class="wy-body-for-nav"> + <div class="wy-grid-for-nav"> + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + <a href="../../index.html" class="icon icon-home"> psimpy + </a> + <div class="version"> + 0.1.2 + </div> +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> + <ul> +<li class="toctree-l1"><a class="reference internal" href="../../index.html">Home</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../quickstart.html">Getting Started</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../api.html">API & Theory</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../examples.html">Example Gallery</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../changelog.html">Changes</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../refs.html">References</a></li> +</ul> + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">psimpy</a> + </nav> + + <div class="wy-nav-content"> + <div class="rst-content"> + <div role="navigation" aria-label="Page navigation"> + <ul class="wy-breadcrumbs"> + <li><a href="../../index.html" class="icon icon-home"></a></li> + <li class="breadcrumb-item active">Computation times</li> + <li class="wy-breadcrumbs-aside"> + <a href="../../_sources/auto_examples/sampler/sg_execution_times.rst.txt" rel="nofollow"> View page source</a> + </li> + </ul> + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <section id="computation-times"> +<span id="sphx-glr-auto-examples-sampler-sg-execution-times"></span><h1>Computation times<a class="headerlink" href="#computation-times" title="Permalink to this heading"></a></h1> +<p><strong>00:05.348</strong> total execution time for <strong>auto_examples_sampler</strong> files:</p> +<table class="docutils align-default"> +<colgroup> +<col style="width: 84%" /> +<col style="width: 9%" /> +<col style="width: 7%" /> +</colgroup> +<tbody> +<tr class="row-odd"><td><p><a class="reference internal" href="plot_metropolis_hastings.html#sphx-glr-auto-examples-sampler-plot-metropolis-hastings-py"><span class="std std-ref">Metropolis Hastings sampling</span></a> (<code class="docutils literal notranslate"><span class="pre">plot_metropolis_hastings.py</span></code>)</p></td> +<td><p>00:04.769</p></td> +<td><p>0.0 MB</p></td> +</tr> +<tr class="row-even"><td><p><a class="reference internal" href="plot_saltelli.html#sphx-glr-auto-examples-sampler-plot-saltelli-py"><span class="std std-ref">Saltelli sampling</span></a> (<code class="docutils literal notranslate"><span class="pre">plot_saltelli.py</span></code>)</p></td> +<td><p>00:00.309</p></td> +<td><p>0.0 MB</p></td> +</tr> +<tr class="row-odd"><td><p><a class="reference internal" href="plot_latin.html#sphx-glr-auto-examples-sampler-plot-latin-py"><span class="std std-ref">Latin hypercube sampling</span></a> (<code class="docutils literal notranslate"><span class="pre">plot_latin.py</span></code>)</p></td> +<td><p>00:00.270</p></td> +<td><p>0.0 MB</p></td> +</tr> +</tbody> +</table> +</section> + + + </div> + </div> + <footer> + + <hr/> + + <div role="contentinfo"> + <p>© Copyright 2023, Hu Zhao.</p> + </div> + + Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a + <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> + provided by <a href="https://readthedocs.org">Read the Docs</a>. + + +</footer> + </div> + </div> + </section> + </div> + <script> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + +</body> +</html> \ No newline at end of file diff --git a/docs/source/_build/html/auto_examples/sensitivity/index.html b/docs/source/_build/html/auto_examples/sensitivity/index.html new file mode 100644 index 0000000..3ef3a6d --- /dev/null +++ b/docs/source/_build/html/auto_examples/sensitivity/index.html @@ -0,0 +1,143 @@ +<!DOCTYPE html> +<html class="writer-html5" lang="en" > +<head> + <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>Sensitivity — PSimPy's documentation</title> + <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-binder.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-dataframe.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-rendered-html.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" /> + <!--[if lt IE 9]> + <script src="../../_static/js/html5shiv.min.js"></script> + <![endif]--> + + <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> + <script src="../../_static/jquery.js"></script> + <script src="../../_static/underscore.js"></script> + <script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script> + <script src="../../_static/doctools.js"></script> + <script src="../../_static/sphinx_highlight.js"></script> + <script src="../../_static/js/theme.js"></script> + <link rel="index" title="Index" href="../../genindex.html" /> + <link rel="search" title="Search" href="../../search.html" /> + <link rel="next" title="Sobol’ analysis" href="plot_sobol_analyze.html" /> + <link rel="prev" title="Metropolis Hastings sampling" href="../sampler/plot_metropolis_hastings.html" /> +</head> + +<body class="wy-body-for-nav"> + <div class="wy-grid-for-nav"> + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + <a href="../../index.html" class="icon icon-home"> psimpy + </a> + <div class="version"> + 0.1.2 + </div> +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> + <ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../../index.html">Home</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../quickstart.html">Getting Started</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../api.html">API & Theory</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../../examples.html">Example Gallery</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="../emulator/index.html">Emulator</a></li> +<li class="toctree-l2"><a class="reference internal" href="../inference/index.html">Inference</a></li> +<li class="toctree-l2"><a class="reference internal" href="../sampler/index.html">Sampler</a></li> +<li class="toctree-l2 current"><a class="current reference internal" href="#">Sensitivity</a><ul> +<li class="toctree-l3"><a class="reference internal" href="plot_sobol_analyze.html">Sobol’ analysis</a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="../simulator/index.html">Simulator</a></li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="../../changelog.html">Changes</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../refs.html">References</a></li> +</ul> + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">psimpy</a> + </nav> + + <div class="wy-nav-content"> + <div class="rst-content"> + <div role="navigation" aria-label="Page navigation"> + <ul class="wy-breadcrumbs"> + <li><a href="../../index.html" class="icon icon-home"></a></li> + <li class="breadcrumb-item"><a href="../../examples.html">Example Gallery</a></li> + <li class="breadcrumb-item active">Sensitivity</li> + <li class="wy-breadcrumbs-aside"> + <a href="../../_sources/auto_examples/sensitivity/index.rst.txt" rel="nofollow"> View page source</a> + </li> + </ul> + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <section id="sensitivity"> +<h1>Sensitivity<a class="headerlink" href="#sensitivity" title="Permalink to this heading"></a></h1> +<div class="sphx-glr-thumbnails"><div class="sphx-glr-thumbcontainer" tooltip="Sobol' analysis"><img alt="Sobol' analysis" src="../../_images/sphx_glr_plot_sobol_analyze_thumb.png" /> +<p><a class="reference internal" href="plot_sobol_analyze.html#sphx-glr-auto-examples-sensitivity-plot-sobol-analyze-py"><span class="std std-ref">Sobol’ analysis</span></a></p> + <div class="sphx-glr-thumbnail-title">Sobol' analysis</div> +</div></div><div class="toctree-wrapper compound"> +</div> +<div class="sphx-glr-footer sphx-glr-footer-gallery docutils container"> +<div class="sphx-glr-download sphx-glr-download-python docutils container"> +<p><a class="reference download internal" download="" href="../../_downloads/b20b8a8616a1c41193e9b38a6dd88919/sensitivity_python.zip"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">all</span> <span class="pre">examples</span> <span class="pre">in</span> <span class="pre">Python</span> <span class="pre">source</span> <span class="pre">code:</span> <span class="pre">sensitivity_python.zip</span></code></a></p> +</div> +<div class="sphx-glr-download sphx-glr-download-jupyter docutils container"> +<p><a class="reference download internal" download="" href="../../_downloads/ffaeb9b8df9af697043ca5a2a8c636a3/sensitivity_jupyter.zip"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">all</span> <span class="pre">examples</span> <span class="pre">in</span> <span class="pre">Jupyter</span> <span class="pre">notebooks:</span> <span class="pre">sensitivity_jupyter.zip</span></code></a></p> +</div> +</div> +<p class="sphx-glr-signature"><a class="reference external" href="https://sphinx-gallery.github.io">Gallery generated by Sphinx-Gallery</a></p> +</section> + + + </div> + </div> + <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer"> + <a href="../sampler/plot_metropolis_hastings.html" class="btn btn-neutral float-left" title="Metropolis Hastings sampling" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> + <a href="plot_sobol_analyze.html" class="btn btn-neutral float-right" title="Sobol’ analysis" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a> + </div> + + <hr/> + + <div role="contentinfo"> + <p>© Copyright 2023, Hu Zhao.</p> + </div> + + Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a + <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> + provided by <a href="https://readthedocs.org">Read the Docs</a>. + + +</footer> + </div> + </div> + </section> + </div> + <script> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + +</body> +</html> \ No newline at end of file diff --git a/docs/source/_build/html/auto_examples/sensitivity/plot_sobol_analyze.html b/docs/source/_build/html/auto_examples/sensitivity/plot_sobol_analyze.html new file mode 100644 index 0000000..b8970fd --- /dev/null +++ b/docs/source/_build/html/auto_examples/sensitivity/plot_sobol_analyze.html @@ -0,0 +1,363 @@ +<!DOCTYPE html> +<html class="writer-html5" lang="en" > +<head> + <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>Sobol’ analysis — PSimPy's documentation</title> + <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-binder.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-dataframe.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-rendered-html.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" /> + <!--[if lt IE 9]> + <script src="../../_static/js/html5shiv.min.js"></script> + <![endif]--> + + <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> + <script src="../../_static/jquery.js"></script> + <script src="../../_static/underscore.js"></script> + <script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script> + <script src="../../_static/doctools.js"></script> + <script src="../../_static/sphinx_highlight.js"></script> + <script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script> + <script src="../../_static/js/theme.js"></script> + <link rel="index" title="Index" href="../../genindex.html" /> + <link rel="search" title="Search" href="../../search.html" /> + <link rel="next" title="Simulator" href="../simulator/index.html" /> + <link rel="prev" title="Sensitivity" href="index.html" /> +</head> + +<body class="wy-body-for-nav"> + <div class="wy-grid-for-nav"> + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + <a href="../../index.html" class="icon icon-home"> psimpy + </a> + <div class="version"> + 0.1.2 + </div> +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> + <ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../../index.html">Home</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../quickstart.html">Getting Started</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../api.html">API & Theory</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../../examples.html">Example Gallery</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="../emulator/index.html">Emulator</a></li> +<li class="toctree-l2"><a class="reference internal" href="../inference/index.html">Inference</a></li> +<li class="toctree-l2"><a class="reference internal" href="../sampler/index.html">Sampler</a></li> +<li class="toctree-l2 current"><a class="reference internal" href="index.html">Sensitivity</a><ul class="current"> +<li class="toctree-l3 current"><a class="current reference internal" href="#">Sobol’ analysis</a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="../simulator/index.html">Simulator</a></li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="../../changelog.html">Changes</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../refs.html">References</a></li> +</ul> + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">psimpy</a> + </nav> + + <div class="wy-nav-content"> + <div class="rst-content"> + <div role="navigation" aria-label="Page navigation"> + <ul class="wy-breadcrumbs"> + <li><a href="../../index.html" class="icon icon-home"></a></li> + <li class="breadcrumb-item"><a href="../../examples.html">Example Gallery</a></li> + <li class="breadcrumb-item"><a href="index.html">Sensitivity</a></li> + <li class="breadcrumb-item active">Sobol’ analysis</li> + <li class="wy-breadcrumbs-aside"> + <a href="../../_sources/auto_examples/sensitivity/plot_sobol_analyze.rst.txt" rel="nofollow"> View page source</a> + </li> + </ul> + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="sphx-glr-download-link-note admonition note"> +<p class="admonition-title">Note</p> +<p>Click <a class="reference internal" href="#sphx-glr-download-auto-examples-sensitivity-plot-sobol-analyze-py"><span class="std std-ref">here</span></a> +to download the full example code</p> +</div> +<section class="sphx-glr-example-title" id="sobol-analysis"> +<span id="sphx-glr-auto-examples-sensitivity-plot-sobol-analyze-py"></span><h1>Sobol’ analysis<a class="headerlink" href="#sobol-analysis" title="Permalink to this heading"></a></h1> +<p>This example shows how to compute Sobol’ sensitivity indices using +the <a class="reference internal" href="../../sensitivity/sobol.html#psimpy.sensitivity.sobol.SobolAnalyze" title="psimpy.sensitivity.sobol.SobolAnalyze"><code class="xref py py-class docutils literal notranslate"><span class="pre">SobolAnalyze</span></code></a> class.</p> +<p>Let us consider the Ishigami function <span id="id1">[<a class="reference internal" href="../../refs.html#id9" title="Loic Le Gratiet, Claire Cannamela, and Bertrand Iooss. A Bayesian approach for global sensitivity analysis of (multifidelity) computer codes. SIAM/ASA Journal on Uncertainty Quantification, 2(1):336–363, 2014. doi:10.1137/130926869.">Le Gratiet <em>et al.</em>, 2014</a>]</span></p> +<p><span class="math notranslate nohighlight">\(y=f\left(x_1, x_2, x_3\right)=\sin \left(x_1\right)+7 \sin \left(\mathrm{x}_2\right)^2+0.1 x_3^4 \sin \left(x_1\right)\)</span></p> +<p>where <span class="math notranslate nohighlight">\(x_i\)</span> is uniformly distributed on <span class="math notranslate nohighlight">\([-\pi, \pi]\)</span> for <span class="math notranslate nohighlight">\(i \in [1,2,3]\)</span>. We define the function as follows:</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span> + +<span class="k">def</span> <span class="nf">f</span><span class="p">(</span><span class="n">x1</span><span class="p">,</span><span class="n">x2</span><span class="p">,</span><span class="n">x3</span><span class="p">):</span> + <span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">x1</span><span class="p">)</span> <span class="o">+</span> <span class="mi">7</span><span class="o">*</span><span class="n">np</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">x2</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span> <span class="o">+</span> <span class="mf">0.1</span><span class="o">*</span><span class="n">x3</span><span class="o">**</span><span class="mi">4</span><span class="o">*</span><span class="n">np</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">x1</span><span class="p">)</span> +</pre></div> +</div> +<p>The variation of each <span class="math notranslate nohighlight">\(x_i\)</span> leads to the variation of <span class="math notranslate nohighlight">\(y\)</span>. Sobol’ analysis is used to quantify the contribution +of each <span class="math notranslate nohighlight">\(x_i\)</span> and their interactions to the variation of <span class="math notranslate nohighlight">\(y\)</span>. Steps of a Sobol’ analysis are:</p> +<blockquote> +<div><ol class="arabic simple"> +<li><p>Draw samples of input.</p></li> +<li><p>Evaluate the model at each input sample to obtain model output.</p></li> +<li><p>Compute Sobol’ indices based on model outputs.</p></li> +</ol> +</div></blockquote> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">psimpy.sampler</span> <span class="kn">import</span> <span class="n">Saltelli</span> +<span class="kn">from</span> <span class="nn">psimpy.sensitivity</span> <span class="kn">import</span> <span class="n">SobolAnalyze</span> + +<span class="n">ndim</span> <span class="o">=</span> <span class="mi">3</span> +<span class="n">bounds</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([[</span><span class="o">-</span><span class="n">np</span><span class="o">.</span><span class="n">pi</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">pi</span><span class="p">],</span> <span class="p">[</span><span class="o">-</span><span class="n">np</span><span class="o">.</span><span class="n">pi</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">pi</span><span class="p">],</span> <span class="p">[</span><span class="o">-</span><span class="n">np</span><span class="o">.</span><span class="n">pi</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">pi</span><span class="p">]])</span> +<span class="n">calc_second_order</span> <span class="o">=</span> <span class="kc">False</span> +<span class="n">nbase</span> <span class="o">=</span> <span class="mi">1024</span> + +<span class="c1"># draw Saltelli samples</span> +<span class="n">saltelli_sampler</span> <span class="o">=</span> <span class="n">Saltelli</span><span class="p">(</span><span class="n">ndim</span><span class="p">,</span> <span class="n">bounds</span><span class="p">,</span> <span class="n">calc_second_order</span><span class="p">)</span> +<span class="n">saltelli_samples</span> <span class="o">=</span> <span class="n">saltelli_sampler</span><span class="o">.</span><span class="n">sample</span><span class="p">(</span><span class="n">nbase</span><span class="p">)</span> + +<span class="c1"># Evaluate the model to obtain model outputs</span> +<span class="n">Y</span> <span class="o">=</span> <span class="n">f</span><span class="p">(</span><span class="n">saltelli_samples</span><span class="p">[:,</span><span class="mi">0</span><span class="p">],</span> <span class="n">saltelli_samples</span><span class="p">[:,</span><span class="mi">1</span><span class="p">],</span> <span class="n">saltelli_samples</span><span class="p">[:,</span> <span class="mi">2</span><span class="p">])</span> + +<span class="c1"># Compute Sobol' indices</span> +<span class="n">sobol_analyzer</span> <span class="o">=</span> <span class="n">SobolAnalyze</span><span class="p">(</span><span class="n">ndim</span><span class="p">,</span> <span class="n">Y</span><span class="p">,</span> <span class="n">calc_second_order</span><span class="p">,</span> <span class="n">seed</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span> +<span class="n">S_res</span> <span class="o">=</span> <span class="n">sobol_analyzer</span><span class="o">.</span><span class="n">run</span><span class="p">()</span> + +<span class="nb">print</span><span class="p">(</span><span class="s2">"Estimated first-order Sobol' index: "</span><span class="p">,</span> <span class="n">S_res</span><span class="p">[</span><span class="s1">'S1'</span><span class="p">][:,</span><span class="mi">0</span><span class="p">])</span> +<span class="nb">print</span><span class="p">(</span><span class="s2">"Analytical solution: [0.314, 0.442, 0]"</span><span class="p">)</span> +</pre></div> +</div> +<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>Estimated first-order Sobol' index: [0.31430871 0.44545644 0.01325799] +Analytical solution: [0.314, 0.442, 0] +</pre></div> +</div> +<p>Figure below shows the results. The bar plots represent estimated first-order +and total-effect Sobol’ indices, as well as their 95% confidence interval. The +red stars represent true values of the first-order Sobol’ indices.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span> + +<span class="n">name_vars</span> <span class="o">=</span> <span class="p">[</span><span class="sa">r</span><span class="s1">'$x_1$'</span><span class="p">,</span><span class="sa">r</span><span class="s1">'$x_2$'</span><span class="p">,</span><span class="sa">r</span><span class="s1">'$x_3$'</span><span class="p">]</span> +<span class="n">x</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'S1'</span><span class="p">:[</span><span class="mi">1</span><span class="p">,</span><span class="mi">4</span><span class="p">,</span><span class="mi">7</span><span class="p">],</span> <span class="s1">'ST'</span><span class="p">:[</span><span class="mi">2</span><span class="p">,</span><span class="mi">5</span><span class="p">,</span><span class="mi">8</span><span class="p">]}</span> +<span class="n">color</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'S1'</span><span class="p">:</span><span class="s1">'#69b3a2'</span><span class="p">,</span> <span class="s1">'ST'</span><span class="p">:</span><span class="s1">'#3399e6'</span><span class="p">}</span> +<span class="n">width</span><span class="o">=</span><span class="mf">0.8</span> +<span class="n">capsize</span><span class="o">=</span><span class="mi">3</span> + +<span class="n">fig</span><span class="p">,</span> <span class="n">ax1</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span><span class="mi">3</span><span class="p">))</span> + +<span class="c1"># estimated first-order Sobol' indices and their confidence interval</span> +<span class="n">ax1</span><span class="o">.</span><span class="n">bar</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="s1">'S1'</span><span class="p">],</span> <span class="n">S_res</span><span class="p">[</span><span class="s1">'S1'</span><span class="p">][:,</span><span class="mi">0</span><span class="p">],</span> <span class="n">width</span><span class="o">=</span><span class="n">width</span><span class="p">,</span> <span class="n">yerr</span><span class="o">=</span><span class="n">S_res</span><span class="p">[</span><span class="s1">'S1'</span><span class="p">][:,</span><span class="mi">2</span><span class="p">],</span> <span class="n">color</span><span class="o">=</span><span class="n">color</span><span class="p">[</span><span class="s1">'S1'</span><span class="p">],</span> <span class="n">capsize</span><span class="o">=</span><span class="n">capsize</span><span class="p">)</span> + +<span class="n">ax1</span><span class="o">.</span><span class="n">axis</span><span class="p">([</span><span class="mi">0</span><span class="p">,</span><span class="mi">9</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mf">0.7</span><span class="p">])</span> +<span class="n">ax1</span><span class="o">.</span><span class="n">set_xticks</span><span class="p">([</span><span class="mf">1.5</span><span class="p">,</span><span class="mf">4.5</span><span class="p">,</span><span class="mf">7.5</span><span class="p">])</span> +<span class="n">ax1</span><span class="o">.</span><span class="n">set_xticklabels</span><span class="p">(</span><span class="n">name_vars</span><span class="p">)</span> +<span class="n">ax1</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="s1">'both'</span><span class="p">,</span><span class="n">bottom</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> +<span class="n">ax1</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="s2">"y"</span><span class="p">,</span> <span class="n">labelcolor</span><span class="o">=</span><span class="n">color</span><span class="p">[</span><span class="s1">'S1'</span><span class="p">])</span> +<span class="n">ax1</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">grid</span><span class="p">(</span><span class="kc">True</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s1">'--'</span><span class="p">,</span> <span class="n">which</span><span class="o">=</span><span class="s1">'major'</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s1">'grey'</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mf">.25</span><span class="p">)</span> +<span class="n">ax1</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s1">'First-order index'</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="n">color</span><span class="p">[</span><span class="s1">'S1'</span><span class="p">])</span> + +<span class="c1"># analytical solution for first-order indices</span> +<span class="n">ax1</span><span class="o">.</span><span class="n">scatter</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="s1">'S1'</span><span class="p">],</span> <span class="p">[</span><span class="mf">0.314</span><span class="p">,</span> <span class="mf">0.442</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="n">s</span><span class="o">=</span><span class="mi">30</span><span class="p">,</span> <span class="n">c</span><span class="o">=</span><span class="s1">'red'</span><span class="p">,</span> <span class="n">marker</span><span class="o">=</span><span class="s1">'*'</span><span class="p">)</span> + + +<span class="c1"># estimated total-effect Sobol' indices and their confidence interval</span> +<span class="n">ax2</span> <span class="o">=</span> <span class="n">ax1</span><span class="o">.</span><span class="n">twinx</span><span class="p">()</span> +<span class="n">ax2</span><span class="o">.</span><span class="n">bar</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="s1">'ST'</span><span class="p">],</span> <span class="n">S_res</span><span class="p">[</span><span class="s1">'ST'</span><span class="p">][:,</span><span class="mi">0</span><span class="p">],</span> <span class="n">width</span><span class="o">=</span><span class="n">width</span><span class="p">,</span> <span class="n">yerr</span><span class="o">=</span><span class="n">S_res</span><span class="p">[</span><span class="s1">'ST'</span><span class="p">][:,</span><span class="mi">2</span><span class="p">],</span> <span class="n">color</span><span class="o">=</span><span class="n">color</span><span class="p">[</span><span class="s1">'ST'</span><span class="p">],</span> <span class="n">capsize</span><span class="o">=</span><span class="n">capsize</span><span class="p">)</span> + +<span class="n">ax2</span><span class="o">.</span><span class="n">axis</span><span class="p">([</span><span class="mi">0</span><span class="p">,</span><span class="mi">9</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mf">0.7</span><span class="p">])</span> +<span class="n">ax2</span><span class="o">.</span><span class="n">set_xticks</span><span class="p">([</span><span class="mf">1.5</span><span class="p">,</span><span class="mf">4.5</span><span class="p">,</span><span class="mf">7.5</span><span class="p">])</span> +<span class="n">ax2</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="s1">'both'</span><span class="p">,</span><span class="n">bottom</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> +<span class="n">ax2</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="s2">"y"</span><span class="p">,</span> <span class="n">labelcolor</span><span class="o">=</span><span class="n">color</span><span class="p">[</span><span class="s1">'ST'</span><span class="p">])</span> +<span class="n">ax2</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">grid</span><span class="p">(</span><span class="kc">True</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s1">'--'</span><span class="p">,</span> <span class="n">which</span><span class="o">=</span><span class="s1">'major'</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s1">'grey'</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mf">.25</span><span class="p">)</span> +<span class="n">ax2</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s1">'Total-effect index'</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="n">color</span><span class="p">[</span><span class="s1">'ST'</span><span class="p">])</span> + +<span class="n">plt</span><span class="o">.</span><span class="n">tight_layout</span><span class="p">()</span> +</pre></div> +</div> +<img src="../../_images/sphx_glr_plot_sobol_analyze_001.png" srcset="../../_images/sphx_glr_plot_sobol_analyze_001.png" alt="plot sobol analyze" class = "sphx-glr-single-img"/><div class="admonition note"> +<p class="admonition-title">Note</p> +<p>The interaction between one parameter and all other parameters can be +quantified by the difference between its first-order and total-effet Sobol’ +indices. If detailed information on interaction between any two parameters +is needed, one can set <code class="docutils literal notranslate"><span class="pre">calc_second_order</span></code> to <cite>True</cite>.</p> +</div> +<p><strong>Many models of interest in real-world applications are very computationally +expensive. In that case, we resort to emulation techniques in order to efficiently +conduct Sobol’ analysis.</strong> See <span id="id2">Zhao <em>et al.</em> [<a class="reference internal" href="../../refs.html#id14" title="H. Zhao, F. Amann, and J. Kowalski. Emulator-based global sensitivity analysis for flow-like landslide run-out models. Landslides, ():, 2021. doi:https://doi.org/10.1007/s10346-021-01690-w.">2021</a>]</span> for the detailed theory.</p> +<p>Steps of such an analysis are:</p> +<blockquote> +<div><ol class="arabic simple"> +<li><p>Draw input samples for emulator training.</p></li> +<li><p>Evaluate the model at each training input point to obtain training data.</p></li> +<li><p>Train an emulator for the computationally expensive model of interest.</p></li> +<li><p>Draw samples of input for Sobol’ analysis.</p></li> +<li><p>Evaluate the emulator at each input sample at step 3 to obtain approximated model outputs.</p></li> +<li><p>Compute Sobol’ indices based on approximated model outputs.</p></li> +</ol> +</div></blockquote> +<p>Assume that the above Ishigami function is computationally expensive, an emulator-based +Sobol’ analysis can be conducted as follows:</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span> +<span class="kn">from</span> <span class="nn">psimpy.sampler</span> <span class="kn">import</span> <span class="n">LHS</span> +<span class="kn">from</span> <span class="nn">psimpy.emulator</span> <span class="kn">import</span> <span class="n">ScalarGaSP</span> +<span class="kn">from</span> <span class="nn">psimpy.sampler</span> <span class="kn">import</span> <span class="n">Saltelli</span> +<span class="kn">from</span> <span class="nn">psimpy.sensitivity</span> <span class="kn">import</span> <span class="n">SobolAnalyze</span> + +<span class="c1"># define the model</span> +<span class="k">def</span> <span class="nf">f</span><span class="p">(</span><span class="n">x1</span><span class="p">,</span><span class="n">x2</span><span class="p">,</span><span class="n">x3</span><span class="p">):</span> + <span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">x1</span><span class="p">)</span> <span class="o">+</span> <span class="mi">7</span><span class="o">*</span><span class="n">np</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">x2</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span> <span class="o">+</span> <span class="mf">0.1</span><span class="o">*</span><span class="n">x3</span><span class="o">**</span><span class="mi">4</span><span class="o">*</span><span class="n">np</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">x1</span><span class="p">)</span> + +<span class="n">ndim</span> <span class="o">=</span> <span class="mi">3</span> +<span class="n">bounds</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([[</span><span class="o">-</span><span class="n">np</span><span class="o">.</span><span class="n">pi</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">pi</span><span class="p">],</span> <span class="p">[</span><span class="o">-</span><span class="n">np</span><span class="o">.</span><span class="n">pi</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">pi</span><span class="p">],</span> <span class="p">[</span><span class="o">-</span><span class="n">np</span><span class="o">.</span><span class="n">pi</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">pi</span><span class="p">]])</span> +<span class="n">seed</span> <span class="o">=</span> <span class="mi">2</span> + +<span class="c1"># draw 100 input samples for emulator training using Latin hypercube sampling</span> +<span class="n">lhs_sampler</span> <span class="o">=</span> <span class="n">LHS</span><span class="p">(</span><span class="n">ndim</span><span class="p">,</span> <span class="n">bounds</span><span class="p">,</span> <span class="n">seed</span><span class="p">,</span> <span class="n">criterion</span><span class="o">=</span><span class="s1">'maximin'</span><span class="p">,</span> <span class="n">iteration</span><span class="o">=</span><span class="mi">200</span><span class="p">)</span> +<span class="n">design</span> <span class="o">=</span> <span class="n">lhs_sampler</span><span class="o">.</span><span class="n">sample</span><span class="p">(</span><span class="n">nsamples</span><span class="o">=</span><span class="mi">100</span><span class="p">)</span> + +<span class="c1"># evaluate the model at each training input point</span> +<span class="n">response</span> <span class="o">=</span> <span class="n">f</span><span class="p">(</span><span class="n">design</span><span class="p">[:,</span><span class="mi">0</span><span class="p">],</span> <span class="n">design</span><span class="p">[:,</span><span class="mi">1</span><span class="p">],</span> <span class="n">design</span><span class="p">[:,</span><span class="mi">2</span><span class="p">])</span> + +<span class="c1"># train an emulator</span> +<span class="n">scalar_gasp</span> <span class="o">=</span> <span class="n">ScalarGaSP</span><span class="p">(</span><span class="n">ndim</span><span class="p">)</span> +<span class="n">scalar_gasp</span><span class="o">.</span><span class="n">train</span><span class="p">(</span><span class="n">design</span><span class="p">,</span> <span class="n">response</span><span class="p">)</span> + +<span class="c1"># the trained emulator needs to be validated before moving on</span> +<span class="c1"># here we leave out this step for simplicity...</span> + +<span class="c1"># draw samples of input for Sobol' analysis</span> +<span class="n">calc_second_order</span> <span class="o">=</span> <span class="kc">False</span> +<span class="n">nbase</span> <span class="o">=</span> <span class="mi">1024</span> + +<span class="n">saltelli_sampler</span> <span class="o">=</span> <span class="n">Saltelli</span><span class="p">(</span><span class="n">ndim</span><span class="p">,</span> <span class="n">bounds</span><span class="p">,</span> <span class="n">calc_second_order</span><span class="p">)</span> +<span class="n">saltelli_samples</span> <span class="o">=</span> <span class="n">saltelli_sampler</span><span class="o">.</span><span class="n">sample</span><span class="p">(</span><span class="n">nbase</span><span class="p">)</span> + +<span class="c1"># evaluate the emulator to obtain approximated model output.</span> +<span class="c1"># in order to take emulator-induced uncertainty into account, we draw 50 realizations</span> +<span class="c1"># from the emulator</span> +<span class="n">Y</span> <span class="o">=</span> <span class="n">scalar_gasp</span><span class="o">.</span><span class="n">sample</span><span class="p">(</span><span class="n">saltelli_samples</span><span class="p">,</span> <span class="mi">50</span><span class="p">)</span> + +<span class="c1"># Compute Sobol' indices based on approximated model outputs</span> +<span class="n">sobol_analyzer</span> <span class="o">=</span> <span class="n">SobolAnalyze</span><span class="p">(</span><span class="n">ndim</span><span class="p">,</span> <span class="n">Y</span><span class="p">,</span> <span class="n">calc_second_order</span><span class="p">,</span> <span class="n">seed</span><span class="o">=</span><span class="n">seed</span><span class="p">)</span> +<span class="n">S_res</span> <span class="o">=</span> <span class="n">sobol_analyzer</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">mode</span><span class="o">=</span><span class="s1">'parallel'</span><span class="p">,</span> <span class="n">max_workers</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span> + +<span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span> +<span class="nb">print</span><span class="p">(</span><span class="s2">"Emulator-based first-order Sobol' index: "</span><span class="p">,</span> <span class="n">S_res</span><span class="p">[</span><span class="s1">'S1'</span><span class="p">][:,</span><span class="mi">0</span><span class="p">])</span> +<span class="nb">print</span><span class="p">(</span><span class="s2">"Analytical solution: [0.314, 0.442, 0]"</span><span class="p">)</span> +</pre></div> +</div> +<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>The upper bounds of the range parameters are 173,6849 174,6991 174,3157 +The initial values of range parameters are 3,473697 3,493981 3,486314 +Start of the optimization 1 : +The number of iterations is 14 + The value of the marginal posterior function is -284,0714 + Optimized range parameters are 3,183999 2,786247 4,315419 + Optimized nugget parameter is 0 + Convergence: TRUE +The initial values of range parameters are 1,721972 1,732027 1,728226 +Start of the optimization 2 : +The number of iterations is 14 + The value of the marginal posterior function is -284,0714 + Optimized range parameters are 3,183999 2,786247 4,315419 + Optimized nugget parameter is 0 + Convergence: TRUE + + +Emulator-based first-order Sobol' index: [0.29064086 0.46853437 0.01096656] +Analytical solution: [0.314, 0.442, 0] +</pre></div> +</div> +<p>The following figure shows how the results of emulator-based Sobol’ analysis +look like.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span> + +<span class="n">name_vars</span> <span class="o">=</span> <span class="p">[</span><span class="sa">r</span><span class="s1">'$x_1$'</span><span class="p">,</span><span class="sa">r</span><span class="s1">'$x_2$'</span><span class="p">,</span><span class="sa">r</span><span class="s1">'$x_3$'</span><span class="p">]</span> +<span class="n">x</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'S1'</span><span class="p">:[</span><span class="mi">1</span><span class="p">,</span><span class="mi">4</span><span class="p">,</span><span class="mi">7</span><span class="p">],</span> <span class="s1">'ST'</span><span class="p">:[</span><span class="mi">2</span><span class="p">,</span><span class="mi">5</span><span class="p">,</span><span class="mi">8</span><span class="p">]}</span> +<span class="n">color</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'S1'</span><span class="p">:</span><span class="s1">'#69b3a2'</span><span class="p">,</span> <span class="s1">'ST'</span><span class="p">:</span><span class="s1">'#3399e6'</span><span class="p">}</span> +<span class="n">width</span><span class="o">=</span><span class="mf">0.8</span> +<span class="n">capsize</span><span class="o">=</span><span class="mi">3</span> + +<span class="n">fig</span><span class="p">,</span> <span class="n">ax1</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span><span class="mi">3</span><span class="p">))</span> + +<span class="n">ax1</span><span class="o">.</span><span class="n">bar</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="s1">'S1'</span><span class="p">],</span> <span class="n">S_res</span><span class="p">[</span><span class="s1">'S1'</span><span class="p">][:,</span><span class="mi">0</span><span class="p">],</span> <span class="n">width</span><span class="o">=</span><span class="n">width</span><span class="p">,</span> <span class="n">yerr</span><span class="o">=</span><span class="n">S_res</span><span class="p">[</span><span class="s1">'S1'</span><span class="p">][:,</span><span class="mi">2</span><span class="p">],</span> <span class="n">color</span><span class="o">=</span><span class="n">color</span><span class="p">[</span><span class="s1">'S1'</span><span class="p">],</span> <span class="n">capsize</span><span class="o">=</span><span class="n">capsize</span><span class="p">)</span> +<span class="n">ax1</span><span class="o">.</span><span class="n">axis</span><span class="p">([</span><span class="mi">0</span><span class="p">,</span><span class="mi">9</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mf">0.7</span><span class="p">])</span> +<span class="n">ax1</span><span class="o">.</span><span class="n">set_xticks</span><span class="p">([</span><span class="mf">1.5</span><span class="p">,</span><span class="mf">4.5</span><span class="p">,</span><span class="mf">7.5</span><span class="p">])</span> +<span class="n">ax1</span><span class="o">.</span><span class="n">set_xticklabels</span><span class="p">(</span><span class="n">name_vars</span><span class="p">)</span> +<span class="n">ax1</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="s1">'both'</span><span class="p">,</span><span class="n">bottom</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> +<span class="n">ax1</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="s2">"y"</span><span class="p">,</span> <span class="n">labelcolor</span><span class="o">=</span><span class="n">color</span><span class="p">[</span><span class="s1">'S1'</span><span class="p">])</span> +<span class="n">ax1</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">grid</span><span class="p">(</span><span class="kc">True</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s1">'--'</span><span class="p">,</span> <span class="n">which</span><span class="o">=</span><span class="s1">'major'</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s1">'grey'</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mf">.25</span><span class="p">)</span> +<span class="n">ax1</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s1">'First-order index'</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="n">color</span><span class="p">[</span><span class="s1">'S1'</span><span class="p">])</span> + +<span class="n">ax1</span><span class="o">.</span><span class="n">scatter</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="s1">'S1'</span><span class="p">],</span> <span class="p">[</span><span class="mf">0.314</span><span class="p">,</span> <span class="mf">0.442</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="n">s</span><span class="o">=</span><span class="mi">30</span><span class="p">,</span> <span class="n">c</span><span class="o">=</span><span class="s1">'red'</span><span class="p">,</span> <span class="n">marker</span><span class="o">=</span><span class="s1">'*'</span><span class="p">)</span> + +<span class="n">ax2</span> <span class="o">=</span> <span class="n">ax1</span><span class="o">.</span><span class="n">twinx</span><span class="p">()</span> +<span class="n">ax2</span><span class="o">.</span><span class="n">bar</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="s1">'ST'</span><span class="p">],</span> <span class="n">S_res</span><span class="p">[</span><span class="s1">'ST'</span><span class="p">][:,</span><span class="mi">0</span><span class="p">],</span> <span class="n">width</span><span class="o">=</span><span class="n">width</span><span class="p">,</span> <span class="n">yerr</span><span class="o">=</span><span class="n">S_res</span><span class="p">[</span><span class="s1">'ST'</span><span class="p">][:,</span><span class="mi">2</span><span class="p">],</span> <span class="n">color</span><span class="o">=</span><span class="n">color</span><span class="p">[</span><span class="s1">'ST'</span><span class="p">],</span> <span class="n">capsize</span><span class="o">=</span><span class="n">capsize</span><span class="p">)</span> +<span class="n">ax2</span><span class="o">.</span><span class="n">axis</span><span class="p">([</span><span class="mi">0</span><span class="p">,</span><span class="mi">9</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mf">0.7</span><span class="p">])</span> +<span class="n">ax2</span><span class="o">.</span><span class="n">set_xticks</span><span class="p">([</span><span class="mf">1.5</span><span class="p">,</span><span class="mf">4.5</span><span class="p">,</span><span class="mf">7.5</span><span class="p">])</span> +<span class="n">ax2</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="s1">'both'</span><span class="p">,</span><span class="n">bottom</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> +<span class="n">ax2</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="s2">"y"</span><span class="p">,</span> <span class="n">labelcolor</span><span class="o">=</span><span class="n">color</span><span class="p">[</span><span class="s1">'ST'</span><span class="p">])</span> +<span class="n">ax2</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">grid</span><span class="p">(</span><span class="kc">True</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s1">'--'</span><span class="p">,</span> <span class="n">which</span><span class="o">=</span><span class="s1">'major'</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s1">'grey'</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mf">.25</span><span class="p">)</span> +<span class="n">ax2</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s1">'Total-effect index'</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="n">color</span><span class="p">[</span><span class="s1">'ST'</span><span class="p">])</span> + +<span class="n">plt</span><span class="o">.</span><span class="n">tight_layout</span><span class="p">()</span> +</pre></div> +</div> +<img src="../../_images/sphx_glr_plot_sobol_analyze_002.png" srcset="../../_images/sphx_glr_plot_sobol_analyze_002.png" alt="plot sobol analyze" class = "sphx-glr-single-img"/><p class="sphx-glr-timing"><strong>Total running time of the script:</strong> ( 0 minutes 16.499 seconds)</p> +<div class="sphx-glr-footer sphx-glr-footer-example docutils container" id="sphx-glr-download-auto-examples-sensitivity-plot-sobol-analyze-py"> +<div class="sphx-glr-download sphx-glr-download-python docutils container"> +<p><a class="reference download internal" download="" href="../../_downloads/d3e17d759872695d3b37be8319e77dbf/plot_sobol_analyze.py"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">Python</span> <span class="pre">source</span> <span class="pre">code:</span> <span class="pre">plot_sobol_analyze.py</span></code></a></p> +</div> +<div class="sphx-glr-download sphx-glr-download-jupyter docutils container"> +<p><a class="reference download internal" download="" href="../../_downloads/e6e32deb84b9140224f7120b34bdafda/plot_sobol_analyze.ipynb"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">Jupyter</span> <span class="pre">notebook:</span> <span class="pre">plot_sobol_analyze.ipynb</span></code></a></p> +</div> +</div> +<p class="sphx-glr-signature"><a class="reference external" href="https://sphinx-gallery.github.io">Gallery generated by Sphinx-Gallery</a></p> +</section> + + + </div> + </div> + <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer"> + <a href="index.html" class="btn btn-neutral float-left" title="Sensitivity" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> + <a href="../simulator/index.html" class="btn btn-neutral float-right" title="Simulator" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a> + </div> + + <hr/> + + <div role="contentinfo"> + <p>© Copyright 2023, Hu Zhao.</p> + </div> + + Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a + <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> + provided by <a href="https://readthedocs.org">Read the Docs</a>. + + +</footer> + </div> + </div> + </section> + </div> + <script> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + +</body> +</html> \ No newline at end of file diff --git a/docs/source/_build/html/auto_examples/sensitivity/sg_execution_times.html b/docs/source/_build/html/auto_examples/sensitivity/sg_execution_times.html new file mode 100644 index 0000000..125fa53 --- /dev/null +++ b/docs/source/_build/html/auto_examples/sensitivity/sg_execution_times.html @@ -0,0 +1,127 @@ +<!DOCTYPE html> +<html class="writer-html5" lang="en" > +<head> + <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>Computation times — PSimPy's documentation</title> + <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-binder.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-dataframe.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-rendered-html.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" /> + <!--[if lt IE 9]> + <script src="../../_static/js/html5shiv.min.js"></script> + <![endif]--> + + <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> + <script src="../../_static/jquery.js"></script> + <script src="../../_static/underscore.js"></script> + <script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script> + <script src="../../_static/doctools.js"></script> + <script src="../../_static/sphinx_highlight.js"></script> + <script src="../../_static/js/theme.js"></script> + <link rel="index" title="Index" href="../../genindex.html" /> + <link rel="search" title="Search" href="../../search.html" /> +</head> + +<body class="wy-body-for-nav"> + <div class="wy-grid-for-nav"> + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + <a href="../../index.html" class="icon icon-home"> psimpy + </a> + <div class="version"> + 0.1.2 + </div> +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> + <ul> +<li class="toctree-l1"><a class="reference internal" href="../../index.html">Home</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../quickstart.html">Getting Started</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../api.html">API & Theory</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../examples.html">Example Gallery</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../changelog.html">Changes</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../refs.html">References</a></li> +</ul> + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">psimpy</a> + </nav> + + <div class="wy-nav-content"> + <div class="rst-content"> + <div role="navigation" aria-label="Page navigation"> + <ul class="wy-breadcrumbs"> + <li><a href="../../index.html" class="icon icon-home"></a></li> + <li class="breadcrumb-item active">Computation times</li> + <li class="wy-breadcrumbs-aside"> + <a href="../../_sources/auto_examples/sensitivity/sg_execution_times.rst.txt" rel="nofollow"> View page source</a> + </li> + </ul> + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <section id="computation-times"> +<span id="sphx-glr-auto-examples-sensitivity-sg-execution-times"></span><h1>Computation times<a class="headerlink" href="#computation-times" title="Permalink to this heading"></a></h1> +<p><strong>00:16.499</strong> total execution time for <strong>auto_examples_sensitivity</strong> files:</p> +<table class="docutils align-default"> +<colgroup> +<col style="width: 83%" /> +<col style="width: 10%" /> +<col style="width: 7%" /> +</colgroup> +<tbody> +<tr class="row-odd"><td><p><a class="reference internal" href="plot_sobol_analyze.html#sphx-glr-auto-examples-sensitivity-plot-sobol-analyze-py"><span class="std std-ref">Sobol’ analysis</span></a> (<code class="docutils literal notranslate"><span class="pre">plot_sobol_analyze.py</span></code>)</p></td> +<td><p>00:16.499</p></td> +<td><p>0.0 MB</p></td> +</tr> +</tbody> +</table> +</section> + + + </div> + </div> + <footer> + + <hr/> + + <div role="contentinfo"> + <p>© Copyright 2023, Hu Zhao.</p> + </div> + + Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a + <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> + provided by <a href="https://readthedocs.org">Read the Docs</a>. + + +</footer> + </div> + </div> + </section> + </div> + <script> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + +</body> +</html> \ No newline at end of file diff --git a/docs/source/_build/html/auto_examples/simulator/index.html b/docs/source/_build/html/auto_examples/simulator/index.html new file mode 100644 index 0000000..f58554f --- /dev/null +++ b/docs/source/_build/html/auto_examples/simulator/index.html @@ -0,0 +1,155 @@ +<!DOCTYPE html> +<html class="writer-html5" lang="en" > +<head> + <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>Simulator — PSimPy's documentation</title> + <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-binder.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-dataframe.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-rendered-html.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" /> + <!--[if lt IE 9]> + <script src="../../_static/js/html5shiv.min.js"></script> + <![endif]--> + + <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> + <script src="../../_static/jquery.js"></script> + <script src="../../_static/underscore.js"></script> + <script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script> + <script src="../../_static/doctools.js"></script> + <script src="../../_static/sphinx_highlight.js"></script> + <script src="../../_static/js/theme.js"></script> + <link rel="index" title="Index" href="../../genindex.html" /> + <link rel="search" title="Search" href="../../search.html" /> + <link rel="next" title="Mass Point Model" href="plot_mass_point_model.html" /> + <link rel="prev" title="Sobol’ analysis" href="../sensitivity/plot_sobol_analyze.html" /> +</head> + +<body class="wy-body-for-nav"> + <div class="wy-grid-for-nav"> + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + <a href="../../index.html" class="icon icon-home"> psimpy + </a> + <div class="version"> + 0.1.2 + </div> +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> + <ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../../index.html">Home</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../quickstart.html">Getting Started</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../api.html">API & Theory</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../../examples.html">Example Gallery</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="../emulator/index.html">Emulator</a></li> +<li class="toctree-l2"><a class="reference internal" href="../inference/index.html">Inference</a></li> +<li class="toctree-l2"><a class="reference internal" href="../sampler/index.html">Sampler</a></li> +<li class="toctree-l2"><a class="reference internal" href="../sensitivity/index.html">Sensitivity</a></li> +<li class="toctree-l2 current"><a class="current reference internal" href="#">Simulator</a><ul> +<li class="toctree-l3"><a class="reference internal" href="plot_mass_point_model.html">Mass Point Model</a></li> +<li class="toctree-l3"><a class="reference internal" href="plot_run_mass_point_model.html">RunSimulator: Mass Point Model</a></li> +<li class="toctree-l3"><a class="reference internal" href="plot_ravaflow24.html">Ravaflow24 Mixture Model</a></li> +<li class="toctree-l3"><a class="reference internal" href="plot_run_ravaflow24.html">RunSimulator: Ravaflow24 Mixture Model</a></li> +</ul> +</li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="../../changelog.html">Changes</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../refs.html">References</a></li> +</ul> + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">psimpy</a> + </nav> + + <div class="wy-nav-content"> + <div class="rst-content"> + <div role="navigation" aria-label="Page navigation"> + <ul class="wy-breadcrumbs"> + <li><a href="../../index.html" class="icon icon-home"></a></li> + <li class="breadcrumb-item"><a href="../../examples.html">Example Gallery</a></li> + <li class="breadcrumb-item active">Simulator</li> + <li class="wy-breadcrumbs-aside"> + <a href="../../_sources/auto_examples/simulator/index.rst.txt" rel="nofollow"> View page source</a> + </li> + </ul> + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <section id="simulator"> +<h1>Simulator<a class="headerlink" href="#simulator" title="Permalink to this heading"></a></h1> +<div class="sphx-glr-thumbnails"><div class="sphx-glr-thumbcontainer" tooltip="Mass Point Model"><img alt="Mass Point Model" src="../../_images/sphx_glr_plot_mass_point_model_thumb.png" /> +<p><a class="reference internal" href="plot_mass_point_model.html#sphx-glr-auto-examples-simulator-plot-mass-point-model-py"><span class="std std-ref">Mass Point Model</span></a></p> + <div class="sphx-glr-thumbnail-title">Mass Point Model</div> +</div><div class="sphx-glr-thumbcontainer" tooltip="RunSimulator: Mass Point Model"><img alt="RunSimulator: Mass Point Model" src="../../_images/sphx_glr_plot_run_mass_point_model_thumb.png" /> +<p><a class="reference internal" href="plot_run_mass_point_model.html#sphx-glr-auto-examples-simulator-plot-run-mass-point-model-py"><span class="std std-ref">RunSimulator: Mass Point Model</span></a></p> + <div class="sphx-glr-thumbnail-title">RunSimulator: Mass Point Model</div> +</div><div class="sphx-glr-thumbcontainer" tooltip="Ravaflow24 Mixture Model"><img alt="Ravaflow24 Mixture Model" src="../../_images/sphx_glr_plot_ravaflow24_thumb.png" /> +<p><a class="reference internal" href="plot_ravaflow24.html#sphx-glr-auto-examples-simulator-plot-ravaflow24-py"><span class="std std-ref">Ravaflow24 Mixture Model</span></a></p> + <div class="sphx-glr-thumbnail-title">Ravaflow24 Mixture Model</div> +</div><div class="sphx-glr-thumbcontainer" tooltip="RunSimulator: Ravaflow24 Mixture Model"><img alt="RunSimulator: Ravaflow24 Mixture Model" src="../../_images/sphx_glr_plot_run_ravaflow24_thumb.png" /> +<p><a class="reference internal" href="plot_run_ravaflow24.html#sphx-glr-auto-examples-simulator-plot-run-ravaflow24-py"><span class="std std-ref">RunSimulator: Ravaflow24 Mixture Model</span></a></p> + <div class="sphx-glr-thumbnail-title">RunSimulator: Ravaflow24 Mixture Model</div> +</div></div><div class="toctree-wrapper compound"> +</div> +<div class="sphx-glr-footer sphx-glr-footer-gallery docutils container"> +<div class="sphx-glr-download sphx-glr-download-python docutils container"> +<p><a class="reference download internal" download="" href="../../_downloads/31c796c77470b56d8b117051a799e0b5/simulator_python.zip"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">all</span> <span class="pre">examples</span> <span class="pre">in</span> <span class="pre">Python</span> <span class="pre">source</span> <span class="pre">code:</span> <span class="pre">simulator_python.zip</span></code></a></p> +</div> +<div class="sphx-glr-download sphx-glr-download-jupyter docutils container"> +<p><a class="reference download internal" download="" href="../../_downloads/6601ba25871fd56fd9acfef62ca40570/simulator_jupyter.zip"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">all</span> <span class="pre">examples</span> <span class="pre">in</span> <span class="pre">Jupyter</span> <span class="pre">notebooks:</span> <span class="pre">simulator_jupyter.zip</span></code></a></p> +</div> +</div> +<p class="sphx-glr-signature"><a class="reference external" href="https://sphinx-gallery.github.io">Gallery generated by Sphinx-Gallery</a></p> +</section> + + + </div> + </div> + <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer"> + <a href="../sensitivity/plot_sobol_analyze.html" class="btn btn-neutral float-left" title="Sobol’ analysis" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> + <a href="plot_mass_point_model.html" class="btn btn-neutral float-right" title="Mass Point Model" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a> + </div> + + <hr/> + + <div role="contentinfo"> + <p>© Copyright 2023, Hu Zhao.</p> + </div> + + Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a + <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> + provided by <a href="https://readthedocs.org">Read the Docs</a>. + + +</footer> + </div> + </div> + </section> + </div> + <script> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + +</body> +</html> \ No newline at end of file diff --git a/docs/source/_build/html/auto_examples/simulator/plot_mass_point_model.html b/docs/source/_build/html/auto_examples/simulator/plot_mass_point_model.html new file mode 100644 index 0000000..df8c3e6 --- /dev/null +++ b/docs/source/_build/html/auto_examples/simulator/plot_mass_point_model.html @@ -0,0 +1,261 @@ +<!DOCTYPE html> +<html class="writer-html5" lang="en" > +<head> + <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>Mass Point Model — PSimPy's documentation</title> + <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-binder.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-dataframe.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-rendered-html.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" /> + <!--[if lt IE 9]> + <script src="../../_static/js/html5shiv.min.js"></script> + <![endif]--> + + <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> + <script src="../../_static/jquery.js"></script> + <script src="../../_static/underscore.js"></script> + <script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script> + <script src="../../_static/doctools.js"></script> + <script src="../../_static/sphinx_highlight.js"></script> + <script src="../../_static/js/theme.js"></script> + <link rel="index" title="Index" href="../../genindex.html" /> + <link rel="search" title="Search" href="../../search.html" /> + <link rel="next" title="RunSimulator: Mass Point Model" href="plot_run_mass_point_model.html" /> + <link rel="prev" title="Simulator" href="index.html" /> +</head> + +<body class="wy-body-for-nav"> + <div class="wy-grid-for-nav"> + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + <a href="../../index.html" class="icon icon-home"> psimpy + </a> + <div class="version"> + 0.1.2 + </div> +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> + <ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../../index.html">Home</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../quickstart.html">Getting Started</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../api.html">API & Theory</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../../examples.html">Example Gallery</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="../emulator/index.html">Emulator</a></li> +<li class="toctree-l2"><a class="reference internal" href="../inference/index.html">Inference</a></li> +<li class="toctree-l2"><a class="reference internal" href="../sampler/index.html">Sampler</a></li> +<li class="toctree-l2"><a class="reference internal" href="../sensitivity/index.html">Sensitivity</a></li> +<li class="toctree-l2 current"><a class="reference internal" href="index.html">Simulator</a><ul class="current"> +<li class="toctree-l3 current"><a class="current reference internal" href="#">Mass Point Model</a></li> +<li class="toctree-l3"><a class="reference internal" href="plot_run_mass_point_model.html">RunSimulator: Mass Point Model</a></li> +<li class="toctree-l3"><a class="reference internal" href="plot_ravaflow24.html">Ravaflow24 Mixture Model</a></li> +<li class="toctree-l3"><a class="reference internal" href="plot_run_ravaflow24.html">RunSimulator: Ravaflow24 Mixture Model</a></li> +</ul> +</li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="../../changelog.html">Changes</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../refs.html">References</a></li> +</ul> + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">psimpy</a> + </nav> + + <div class="wy-nav-content"> + <div class="rst-content"> + <div role="navigation" aria-label="Page navigation"> + <ul class="wy-breadcrumbs"> + <li><a href="../../index.html" class="icon icon-home"></a></li> + <li class="breadcrumb-item"><a href="../../examples.html">Example Gallery</a></li> + <li class="breadcrumb-item"><a href="index.html">Simulator</a></li> + <li class="breadcrumb-item active">Mass Point Model</li> + <li class="wy-breadcrumbs-aside"> + <a href="../../_sources/auto_examples/simulator/plot_mass_point_model.rst.txt" rel="nofollow"> View page source</a> + </li> + </ul> + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="sphx-glr-download-link-note admonition note"> +<p class="admonition-title">Note</p> +<p>Click <a class="reference internal" href="#sphx-glr-download-auto-examples-simulator-plot-mass-point-model-py"><span class="std std-ref">here</span></a> +to download the full example code</p> +</div> +<section class="sphx-glr-example-title" id="mass-point-model"> +<span id="sphx-glr-auto-examples-simulator-plot-mass-point-model-py"></span><h1>Mass Point Model<a class="headerlink" href="#mass-point-model" title="Permalink to this heading"></a></h1> +<p>This example shows how to simulate the movement of a masspoint on a topography +using <a class="reference internal" href="../../simulator/mass_point_model.html#psimpy.simulator.mass_point_model.MassPointModel" title="psimpy.simulator.mass_point_model.MassPointModel"><code class="xref py py-class docutils literal notranslate"><span class="pre">MassPointModel</span></code></a>.</p> +<p>First, import the class <a class="reference internal" href="../../simulator/mass_point_model.html#psimpy.simulator.mass_point_model.MassPointModel" title="psimpy.simulator.mass_point_model.MassPointModel"><code class="xref py py-class docutils literal notranslate"><span class="pre">MassPointModel</span></code></a> and create an instance by</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">psimpy.simulator</span> <span class="kn">import</span> <span class="n">MassPointModel</span> + +<span class="n">mpm</span> <span class="o">=</span> <span class="n">MassPointModel</span><span class="p">()</span> +</pre></div> +</div> +<dl class="simple"> +<dt>Required inputs for a simulation using <a class="reference internal" href="../../simulator/mass_point_model.html#psimpy.simulator.mass_point_model.MassPointModel" title="psimpy.simulator.mass_point_model.MassPointModel"><code class="xref py py-class docutils literal notranslate"><span class="pre">MassPointModel</span></code></a> include:</dt><dd><ol class="arabic simple"> +<li><p>topographic data: digital elevation model (in <cite>ESRI ascii</cite> format)</p></li> +<li><p>friction coefficients: coulomb friction and turbulent friction coefficients</p></li> +<li><p>initial state: initial location and initial velocity of the masspoint</p></li> +<li><p>computational parameters: such as time step, end time, etc.</p></li> +</ol> +</dd> +</dl> +<p>The synthetic topography <code class="docutils literal notranslate"><span class="pre">synthetic_topo.asc</span></code> is used here for illustration. +It is located at the <cite>tests/data/</cite> folder.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">os</span> +<span class="kn">import</span> <span class="nn">linecache</span> +<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span> + +<span class="n">dir_data</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="s1">'../../../tests/data/'</span><span class="p">)</span> +<span class="n">elevation</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">dir_data</span><span class="p">,</span> <span class="s1">'synthetic_topo.asc'</span><span class="p">)</span> +</pre></div> +</div> +<div class="admonition note"> +<p class="admonition-title">Note</p> +<p>You may need to modify <code class="docutils literal notranslate"><span class="pre">dir_data</span></code> according to where you save +<code class="docutils literal notranslate"><span class="pre">synthetic_topo.asc</span></code> on your local machine.</p> +</div> +<p>We can load the elevation data and visulize it. The figure below shows how +the topography looks like, as well as the initial location of the masspoint +(noted by the red dot).</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">header</span> <span class="o">=</span> <span class="p">[</span><span class="n">linecache</span><span class="o">.</span><span class="n">getline</span><span class="p">(</span><span class="n">elevation</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">6</span><span class="p">)]</span> +<span class="n">header_values</span> <span class="o">=</span> <span class="p">[</span><span class="nb">float</span><span class="p">(</span><span class="n">h</span><span class="o">.</span><span class="n">split</span><span class="p">()[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span> <span class="k">for</span> <span class="n">h</span> <span class="ow">in</span> <span class="n">header</span><span class="p">]</span> +<span class="n">ncols</span><span class="p">,</span> <span class="n">nrows</span><span class="p">,</span> <span class="n">xll</span><span class="p">,</span> <span class="n">yll</span><span class="p">,</span> <span class="n">cellsize</span> <span class="o">=</span> <span class="n">header_values</span> +<span class="n">ncols</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">ncols</span><span class="p">)</span> +<span class="n">nrows</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">nrows</span><span class="p">)</span> + +<span class="n">x_values</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">xll</span><span class="p">,</span> <span class="n">xll</span><span class="o">+</span><span class="p">(</span><span class="n">cellsize</span><span class="o">*</span><span class="n">ncols</span><span class="p">),</span> <span class="n">cellsize</span><span class="p">)</span> +<span class="n">y_values</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">yll</span><span class="p">,</span> <span class="n">yll</span><span class="o">+</span><span class="p">(</span><span class="n">cellsize</span><span class="o">*</span><span class="n">nrows</span><span class="p">),</span> <span class="n">cellsize</span><span class="p">)</span> + +<span class="n">z_values</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">loadtxt</span><span class="p">(</span><span class="n">elevation</span><span class="p">,</span> <span class="n">skiprows</span><span class="o">=</span><span class="mi">6</span><span class="p">)</span> +<span class="n">z_values</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">rot90</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">transpose</span><span class="p">(</span><span class="n">z_values</span><span class="p">))</span> + +<span class="c1"># initial location</span> +<span class="n">x0</span> <span class="o">=</span> <span class="mi">200</span> +<span class="n">y0</span> <span class="o">=</span> <span class="mi">2000</span> +<span class="n">z0</span> <span class="o">=</span> <span class="n">z_values</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">x0</span><span class="o">/</span><span class="n">cellsize</span><span class="p">)]</span> + +<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span> + +<span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span><span class="mi">6</span><span class="p">),</span> <span class="n">height_ratios</span><span class="o">=</span><span class="p">[</span><span class="mi">3</span><span class="p">,</span><span class="mi">2</span><span class="p">])</span> + +<span class="n">fig0</span> <span class="o">=</span> <span class="n">ax</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">contourf</span><span class="p">(</span><span class="n">x_values</span><span class="p">,</span> <span class="n">y_values</span><span class="p">,</span> <span class="n">z_values</span><span class="p">,</span> <span class="n">levels</span><span class="o">=</span><span class="mi">20</span><span class="p">)</span> +<span class="n">ax</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="s1">'x'</span><span class="p">)</span> +<span class="n">ax</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s1">'y'</span><span class="p">)</span> +<span class="n">ax</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="s1">'synthetic topography'</span><span class="p">)</span> +<span class="n">ax</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">scatter</span><span class="p">(</span><span class="n">x0</span><span class="p">,</span> <span class="n">y0</span><span class="p">,</span> <span class="n">s</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">c</span><span class="o">=</span><span class="s1">'r'</span><span class="p">,</span> <span class="n">marker</span><span class="o">=</span><span class="s1">'o'</span><span class="p">)</span> +<span class="n">cbar</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">colorbar</span><span class="p">(</span><span class="n">fig0</span><span class="p">,</span> <span class="n">ax</span><span class="o">=</span><span class="n">ax</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="nb">format</span><span class="o">=</span><span class="s1">'</span><span class="si">%d</span><span class="s1">'</span><span class="p">,</span> <span class="n">orientation</span><span class="o">=</span><span class="s1">'horizontal'</span><span class="p">,</span> + <span class="n">fraction</span><span class="o">=</span><span class="mf">0.1</span><span class="p">,</span> <span class="n">pad</span><span class="o">=</span><span class="mf">0.2</span><span class="p">)</span> +<span class="n">cbar</span><span class="o">.</span><span class="n">ax</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s1">'z'</span><span class="p">)</span> + + +<span class="n">ax</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x_values</span><span class="p">,</span> <span class="n">z_values</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="p">:])</span> +<span class="n">ax</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">scatter</span><span class="p">(</span><span class="n">x0</span><span class="p">,</span> <span class="n">z0</span><span class="p">,</span> <span class="n">s</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">c</span><span class="o">=</span><span class="s1">'r'</span><span class="p">,</span> <span class="n">marker</span><span class="o">=</span><span class="s1">'o'</span><span class="p">)</span> +<span class="n">ax</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="s1">'x'</span><span class="p">)</span> +<span class="n">ax</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s1">'z'</span><span class="p">)</span> +<span class="n">ax</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">5000</span><span class="p">)</span> +<span class="n">ax</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="s1">'cross section at any y'</span><span class="p">)</span> + +<span class="n">plt</span><span class="o">.</span><span class="n">tight_layout</span><span class="p">()</span> +</pre></div> +</div> +<img src="../../_images/sphx_glr_plot_mass_point_model_001.png" srcset="../../_images/sphx_glr_plot_mass_point_model_001.png" alt="synthetic topography, cross section at any y" class = "sphx-glr-single-img"/><p>We set the friction coefficients as</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">mu</span> <span class="o">=</span> <span class="mf">0.15</span> +<span class="n">xi</span> <span class="o">=</span> <span class="mi">1000</span> +</pre></div> +</div> +<p>Given above topography, initial location, and friction coefficients, we can +call the <a class="reference internal" href="../../simulator/mass_point_model.html#psimpy.simulator.mass_point_model.MassPointModel.run" title="psimpy.simulator.mass_point_model.MassPointModel.run"><code class="xref py py-meth docutils literal notranslate"><span class="pre">MassPointModel.run()</span></code></a> method to perform a simulation. Other +parameters are set to their default values. (we suppress raised warnings ) +(other parameters are set to their default values).</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">warnings</span> + +<span class="n">warnings</span><span class="o">.</span><span class="n">filterwarnings</span><span class="p">(</span><span class="s2">"ignore"</span><span class="p">)</span> +<span class="n">output</span> <span class="o">=</span> <span class="n">mpm</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">elevation</span><span class="o">=</span><span class="n">elevation</span><span class="p">,</span> <span class="n">coulomb_friction</span><span class="o">=</span><span class="n">mu</span><span class="p">,</span> <span class="n">turbulent_friction</span><span class="o">=</span><span class="n">xi</span><span class="p">,</span> <span class="n">x0</span><span class="o">=</span><span class="n">x0</span><span class="p">,</span> <span class="n">y0</span><span class="o">=</span><span class="n">y0</span><span class="p">)</span> +</pre></div> +</div> +<p>The simulation returns time history of the mass point’s location and velocity. +Following plots show the simulation results.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span><span class="mi">6</span><span class="p">))</span> + +<span class="n">ax</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="s1">'time (s)'</span><span class="p">)</span> +<span class="n">ax</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s1">'x'</span><span class="p">)</span> +<span class="n">ax</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="s2">"x-t plot"</span><span class="p">)</span> +<span class="n">ax</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">output</span><span class="p">[:,</span><span class="mi">0</span><span class="p">],</span> <span class="n">output</span><span class="p">[:,</span><span class="mi">1</span><span class="p">])</span> + +<span class="n">ax</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="s1">'time (s)'</span><span class="p">)</span> +<span class="n">ax</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s1">'velocity'</span><span class="p">)</span> +<span class="n">ax</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="s2">"v-t plot"</span><span class="p">)</span> +<span class="n">ax</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">output</span><span class="p">[:,</span><span class="mi">0</span><span class="p">],</span> <span class="n">output</span><span class="p">[:,</span><span class="mi">5</span><span class="p">])</span> + +<span class="n">ax</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="s1">'x'</span><span class="p">)</span> +<span class="n">ax</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s1">'velocity'</span><span class="p">)</span> +<span class="n">ax</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="s2">"x-v plot"</span><span class="p">)</span> +<span class="n">ax</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">output</span><span class="p">[:,</span><span class="mi">1</span><span class="p">],</span> <span class="n">output</span><span class="p">[:,</span><span class="mi">5</span><span class="p">])</span> + +<span class="n">plt</span><span class="o">.</span><span class="n">tight_layout</span><span class="p">()</span> +</pre></div> +</div> +<img src="../../_images/sphx_glr_plot_mass_point_model_002.png" srcset="../../_images/sphx_glr_plot_mass_point_model_002.png" alt="x-t plot, v-t plot, x-v plot" class = "sphx-glr-single-img"/><p class="sphx-glr-timing"><strong>Total running time of the script:</strong> ( 0 minutes 1.550 seconds)</p> +<div class="sphx-glr-footer sphx-glr-footer-example docutils container" id="sphx-glr-download-auto-examples-simulator-plot-mass-point-model-py"> +<div class="sphx-glr-download sphx-glr-download-python docutils container"> +<p><a class="reference download internal" download="" href="../../_downloads/98a9fafc5e8001527da7060b5766f5b2/plot_mass_point_model.py"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">Python</span> <span class="pre">source</span> <span class="pre">code:</span> <span class="pre">plot_mass_point_model.py</span></code></a></p> +</div> +<div class="sphx-glr-download sphx-glr-download-jupyter docutils container"> +<p><a class="reference download internal" download="" href="../../_downloads/201f9a51be1f2378acae03891235a84e/plot_mass_point_model.ipynb"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">Jupyter</span> <span class="pre">notebook:</span> <span class="pre">plot_mass_point_model.ipynb</span></code></a></p> +</div> +</div> +<p class="sphx-glr-signature"><a class="reference external" href="https://sphinx-gallery.github.io">Gallery generated by Sphinx-Gallery</a></p> +</section> + + + </div> + </div> + <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer"> + <a href="index.html" class="btn btn-neutral float-left" title="Simulator" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> + <a href="plot_run_mass_point_model.html" class="btn btn-neutral float-right" title="RunSimulator: Mass Point Model" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a> + </div> + + <hr/> + + <div role="contentinfo"> + <p>© Copyright 2023, Hu Zhao.</p> + </div> + + Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a + <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> + provided by <a href="https://readthedocs.org">Read the Docs</a>. + + +</footer> + </div> + </div> + </section> + </div> + <script> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + +</body> +</html> \ No newline at end of file diff --git a/docs/source/_build/html/auto_examples/simulator/plot_ravaflow24.html b/docs/source/_build/html/auto_examples/simulator/plot_ravaflow24.html new file mode 100644 index 0000000..a13248c --- /dev/null +++ b/docs/source/_build/html/auto_examples/simulator/plot_ravaflow24.html @@ -0,0 +1,280 @@ +<!DOCTYPE html> +<html class="writer-html5" lang="en" > +<head> + <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>Ravaflow24 Mixture Model — PSimPy's documentation</title> + <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-binder.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-dataframe.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-rendered-html.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" /> + <!--[if lt IE 9]> + <script src="../../_static/js/html5shiv.min.js"></script> + <![endif]--> + + <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> + <script src="../../_static/jquery.js"></script> + <script src="../../_static/underscore.js"></script> + <script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script> + <script src="../../_static/doctools.js"></script> + <script src="../../_static/sphinx_highlight.js"></script> + <script src="../../_static/js/theme.js"></script> + <link rel="index" title="Index" href="../../genindex.html" /> + <link rel="search" title="Search" href="../../search.html" /> + <link rel="next" title="RunSimulator: Ravaflow24 Mixture Model" href="plot_run_ravaflow24.html" /> + <link rel="prev" title="RunSimulator: Mass Point Model" href="plot_run_mass_point_model.html" /> +</head> + +<body class="wy-body-for-nav"> + <div class="wy-grid-for-nav"> + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + <a href="../../index.html" class="icon icon-home"> psimpy + </a> + <div class="version"> + 0.1.2 + </div> +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> + <ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../../index.html">Home</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../quickstart.html">Getting Started</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../api.html">API & Theory</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../../examples.html">Example Gallery</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="../emulator/index.html">Emulator</a></li> +<li class="toctree-l2"><a class="reference internal" href="../inference/index.html">Inference</a></li> +<li class="toctree-l2"><a class="reference internal" href="../sampler/index.html">Sampler</a></li> +<li class="toctree-l2"><a class="reference internal" href="../sensitivity/index.html">Sensitivity</a></li> +<li class="toctree-l2 current"><a class="reference internal" href="index.html">Simulator</a><ul class="current"> +<li class="toctree-l3"><a class="reference internal" href="plot_mass_point_model.html">Mass Point Model</a></li> +<li class="toctree-l3"><a class="reference internal" href="plot_run_mass_point_model.html">RunSimulator: Mass Point Model</a></li> +<li class="toctree-l3 current"><a class="current reference internal" href="#">Ravaflow24 Mixture Model</a></li> +<li class="toctree-l3"><a class="reference internal" href="plot_run_ravaflow24.html">RunSimulator: Ravaflow24 Mixture Model</a></li> +</ul> +</li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="../../changelog.html">Changes</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../refs.html">References</a></li> +</ul> + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">psimpy</a> + </nav> + + <div class="wy-nav-content"> + <div class="rst-content"> + <div role="navigation" aria-label="Page navigation"> + <ul class="wy-breadcrumbs"> + <li><a href="../../index.html" class="icon icon-home"></a></li> + <li class="breadcrumb-item"><a href="../../examples.html">Example Gallery</a></li> + <li class="breadcrumb-item"><a href="index.html">Simulator</a></li> + <li class="breadcrumb-item active">Ravaflow24 Mixture Model</li> + <li class="wy-breadcrumbs-aside"> + <a href="../../_sources/auto_examples/simulator/plot_ravaflow24.rst.txt" rel="nofollow"> View page source</a> + </li> + </ul> + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="sphx-glr-download-link-note admonition note"> +<p class="admonition-title">Note</p> +<p>Click <a class="reference internal" href="#sphx-glr-download-auto-examples-simulator-plot-ravaflow24-py"><span class="std std-ref">here</span></a> +to download the full example code</p> +</div> +<section class="sphx-glr-example-title" id="ravaflow24-mixture-model"> +<span id="sphx-glr-auto-examples-simulator-plot-ravaflow24-py"></span><h1>Ravaflow24 Mixture Model<a class="headerlink" href="#ravaflow24-mixture-model" title="Permalink to this heading"></a></h1> +<p>This example shows how to simulate mass flow on a topography using +<a class="reference internal" href="../../simulator/ravaflow24.html#psimpy.simulator.ravaflow24.Ravaflow24Mixture" title="psimpy.simulator.ravaflow24.Ravaflow24Mixture"><code class="xref py py-class docutils literal notranslate"><span class="pre">Ravaflow24Mixture</span></code></a>.</p> +<p>First, import the class <a class="reference internal" href="../../simulator/ravaflow24.html#psimpy.simulator.ravaflow24.Ravaflow24Mixture" title="psimpy.simulator.ravaflow24.Ravaflow24Mixture"><code class="xref py py-class docutils literal notranslate"><span class="pre">Ravaflow24Mixture</span></code></a> by</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">psimpy.simulator</span> <span class="kn">import</span> <span class="n">Ravaflow24Mixture</span> +</pre></div> +</div> +<p>To create an instance of this class, we must specify the parameter <code class="docutils literal notranslate"><span class="pre">dir_sim</span></code>. +It represents the directory in which output files generated by r.avaflow will be +saved.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">os</span> + +<span class="c1"># Here we create a folder called `temp_Ravaflow24Mixture_example` to save output</span> +<span class="c1"># files generated by r.avaflow</span> +<span class="n">cwd</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getcwd</span><span class="p">()</span> +<span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="s1">'temp_Ravaflow24Mixture_example'</span><span class="p">):</span> + <span class="n">os</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="s1">'temp_Ravaflow24Mixture_example'</span><span class="p">)</span> +<span class="n">dir_sim</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">cwd</span><span class="p">,</span> <span class="s1">'temp_Ravaflow24Mixture_example'</span><span class="p">)</span> +</pre></div> +</div> +<p>Now, we can create an instance of <a class="reference internal" href="../../simulator/ravaflow24.html#psimpy.simulator.ravaflow24.Ravaflow24Mixture" title="psimpy.simulator.ravaflow24.Ravaflow24Mixture"><code class="xref py py-class docutils literal notranslate"><span class="pre">Ravaflow24Mixture</span></code></a> by given +<code class="docutils literal notranslate"><span class="pre">dir_sim</span></code> and leaving other parameters to their default values +(Other parameters include <code class="docutils literal notranslate"><span class="pre">time_step</span></code>, <code class="docutils literal notranslate"><span class="pre">time_end</span></code>, <code class="docutils literal notranslate"><span class="pre">curvature_control</span></code>, +<code class="docutils literal notranslate"><span class="pre">entrainment_control</span></code>, <code class="docutils literal notranslate"><span class="pre">stopping_control</span></code>, etc.)</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">voellmy_model</span> <span class="o">=</span> <span class="n">Ravaflow24Mixture</span><span class="p">(</span><span class="n">dir_sim</span><span class="p">)</span> +</pre></div> +</div> +<dl class="simple"> +<dt>To run a simulation using above <cite>voellmy_model</cite>, one needs to specify</dt><dd><ol class="arabic simple"> +<li><p><code class="docutils literal notranslate"><span class="pre">elevation</span></code> – Name of elevation raster file (including its path).</p></li> +<li><p><code class="docutils literal notranslate"><span class="pre">hrelease</span></code> – Name of release height raster file (including its path).</p></li> +<li><p><code class="docutils literal notranslate"><span class="pre">prefix</span></code> – Prefix required by r.avaflow to name output files.</p></li> +<li><p>If <code class="docutils literal notranslate"><span class="pre">elevation</span></code> is not a georeferenced file which can be used to create +a <cite>GRASS Location</cite>, <code class="docutils literal notranslate"><span class="pre">EPSG</span></code> must be provided.</p></li> +</ol> +</dd> +</dl> +<p>Other optional parameters include <code class="docutils literal notranslate"><span class="pre">internal_friction</span></code>, <code class="docutils literal notranslate"><span class="pre">basal_friction</span></code>, +<code class="docutils literal notranslate"><span class="pre">turbulent_friction</span></code>, <code class="docutils literal notranslate"><span class="pre">entrainment_coef</span></code> etc.</p> +<p>The synthetic topography <code class="docutils literal notranslate"><span class="pre">synthetic_topo.tif</span></code> and release mass <code class="docutils literal notranslate"><span class="pre">synthetic_rel.tif</span></code> +are used here for illustration. They are located at the <cite>/tests/data/</cite> folder.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">dir_data</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="s1">'../../../tests/data/'</span><span class="p">)</span> +<span class="n">elevation</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">dir_data</span><span class="p">,</span> <span class="s1">'synthetic_topo.tif'</span><span class="p">)</span> +<span class="n">hrelease</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">dir_data</span><span class="p">,</span> <span class="s1">'synthetic_rel.tif'</span><span class="p">)</span> +<span class="n">prefix</span> <span class="o">=</span> <span class="s1">'synthetic'</span> +</pre></div> +</div> +<div class="admonition note"> +<p class="admonition-title">Note</p> +<p>You may need to modify <code class="docutils literal notranslate"><span class="pre">dir_data</span></code> according to where you save them +on your local machine.</p> +</div> +<p>Given above inputs, we can create a <cite>GRASS Location</cite> and a shell file by calling +<a class="reference internal" href="../../simulator/ravaflow24.html#psimpy.simulator.ravaflow24.Ravaflow24Mixture.preprocess" title="psimpy.simulator.ravaflow24.Ravaflow24Mixture.preprocess"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Ravaflow24Mixture.preprocess()</span></code></a> method, and run the simulation using +<a class="reference internal" href="../../simulator/ravaflow24.html#psimpy.simulator.ravaflow24.Ravaflow24Mixture.run" title="psimpy.simulator.ravaflow24.Ravaflow24Mixture.run"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Ravaflow24Mixture.run()</span></code></a> method</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">grass_location</span><span class="p">,</span> <span class="n">sh_file</span> <span class="o">=</span> <span class="n">voellmy_model</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span> + <span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">,</span> <span class="n">elevation</span><span class="o">=</span><span class="n">elevation</span><span class="p">,</span> <span class="n">hrelease</span><span class="o">=</span><span class="n">hrelease</span><span class="p">,</span> <span class="n">EPSG</span><span class="o">=</span><span class="s1">'2326'</span><span class="p">)</span> +<span class="n">voellmy_model</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">grass_location</span><span class="p">,</span> <span class="n">sh_file</span><span class="p">)</span> +</pre></div> +</div> +<p>Once the simulation is finished, the results are located in the folder +<cite>/dir_sim/your_prefix_results</cite>. In this case, they are located in +<cite>/temp_Ravaflow24Mixture_example/synthetic_results</cite>. We can extract desired +outputs using respective method and visualize them. +For example, we can extract the overall impact area, maximum flow velocity, or +maximum flow velocity at specific locations:</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span> + +<span class="c1"># overall impact area</span> +<span class="n">impact_area</span> <span class="o">=</span> <span class="n">voellmy_model</span><span class="o">.</span><span class="n">extract_impact_area</span><span class="p">(</span><span class="n">prefix</span><span class="p">)</span> +<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Impact_area is </span><span class="si">{</span><span class="n">impact_area</span><span class="si">}</span><span class="s2"> m^2"</span><span class="p">)</span> + +<span class="c1"># overall maximum flow velocity</span> +<span class="n">v_mmax</span> <span class="o">=</span> <span class="n">voellmy_model</span><span class="o">.</span><span class="n">extract_qoi_max</span><span class="p">(</span><span class="n">prefix</span><span class="p">,</span> <span class="s1">'v'</span><span class="p">,</span> <span class="n">aggregate</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> +<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Maximum flow velocity is </span><span class="si">{</span><span class="n">v_mmax</span><span class="si">}</span><span class="s2"> m/s^2"</span><span class="p">)</span> + +<span class="c1"># maximum flow velocity at specific locations</span> +<span class="n">loc</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([[</span><span class="mi">500</span><span class="p">,</span> <span class="mi">2000</span><span class="p">],</span> <span class="p">[</span><span class="mi">1500</span><span class="p">,</span> <span class="mi">2000</span><span class="p">]])</span> +<span class="n">v_max_loc</span> <span class="o">=</span> <span class="n">voellmy_model</span><span class="o">.</span><span class="n">extract_qoi_max_loc</span><span class="p">(</span><span class="n">prefix</span><span class="p">,</span> <span class="n">loc</span><span class="p">,</span> <span class="s1">'v'</span><span class="p">)</span> +<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Maximum flow velocity at location </span><span class="si">{</span><span class="n">loc</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}</span><span class="s2"> is </span><span class="si">{</span><span class="n">v_max_loc</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}</span><span class="s2"> m/s^2"</span><span class="p">)</span> +<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Maximum flow velocity at location </span><span class="si">{</span><span class="n">loc</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="si">}</span><span class="s2"> is </span><span class="si">{</span><span class="n">v_max_loc</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="si">}</span><span class="s2"> m/s^2"</span><span class="p">)</span> +</pre></div> +</div> +<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>Impact_area is 1394800.0 m^2 +Maximum flow velocity is 41.39 m/s^2 +Maximum flow velocity at location [ 500 2000] is 34.264 m/s^2 +Maximum flow velocity at location [1500 2000] is 36.689 m/s^2 +</pre></div> +</div> +<p>We can visulize point-wise maximum flow height and velocity using heatmaps:</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span> +<span class="kn">import</span> <span class="nn">linecache</span> + +<span class="c1"># extract head information of result ascii files and compute x and y coordinates</span> +<span class="n">hmax_asc</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">dir_sim</span><span class="p">,</span> <span class="sa">f</span><span class="s1">'</span><span class="si">{</span><span class="n">prefix</span><span class="si">}</span><span class="s1">_results'</span><span class="p">,</span> <span class="sa">f</span><span class="s1">'</span><span class="si">{</span><span class="n">prefix</span><span class="si">}</span><span class="s1">_ascii'</span><span class="p">,</span> <span class="sa">f</span><span class="s1">'</span><span class="si">{</span><span class="n">prefix</span><span class="si">}</span><span class="s1">_hflow_max.asc'</span><span class="p">)</span> + +<span class="n">header</span> <span class="o">=</span> <span class="p">[</span><span class="n">linecache</span><span class="o">.</span><span class="n">getline</span><span class="p">(</span><span class="n">hmax_asc</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">6</span><span class="p">)]</span> +<span class="n">header_values</span> <span class="o">=</span> <span class="p">[</span><span class="nb">float</span><span class="p">(</span><span class="n">h</span><span class="o">.</span><span class="n">split</span><span class="p">()[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span> <span class="k">for</span> <span class="n">h</span> <span class="ow">in</span> <span class="n">header</span><span class="p">]</span> +<span class="n">ncols</span><span class="p">,</span> <span class="n">nrows</span><span class="p">,</span> <span class="n">xll</span><span class="p">,</span> <span class="n">yll</span><span class="p">,</span> <span class="n">cellsize</span> <span class="o">=</span> <span class="n">header_values</span> +<span class="n">ncols</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">ncols</span><span class="p">)</span> +<span class="n">nrows</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">nrows</span><span class="p">)</span> + +<span class="n">x</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">xll</span><span class="p">,</span> <span class="n">xll</span><span class="o">+</span><span class="p">(</span><span class="n">cellsize</span><span class="o">*</span><span class="n">ncols</span><span class="p">),</span> <span class="n">cellsize</span><span class="p">)</span> +<span class="n">y</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">yll</span><span class="p">,</span> <span class="n">yll</span><span class="o">+</span><span class="p">(</span><span class="n">cellsize</span><span class="o">*</span><span class="n">nrows</span><span class="p">),</span> <span class="n">cellsize</span><span class="p">)</span> + +<span class="c1"># point-wise maximum flow height</span> +<span class="n">h_max</span> <span class="o">=</span> <span class="n">voellmy_model</span><span class="o">.</span><span class="n">extract_qoi_max</span><span class="p">(</span><span class="n">prefix</span><span class="p">,</span> <span class="s1">'h'</span><span class="p">,</span> <span class="n">aggregate</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> +<span class="c1"># point-wise maximum flow velocity</span> +<span class="n">v_max</span> <span class="o">=</span> <span class="n">voellmy_model</span><span class="o">.</span><span class="n">extract_qoi_max</span><span class="p">(</span><span class="n">prefix</span><span class="p">,</span> <span class="s1">'v'</span><span class="p">,</span> <span class="n">aggregate</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> + +<span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span><span class="mi">6</span><span class="p">))</span> + +<span class="n">fig0</span> <span class="o">=</span> <span class="n">ax</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">contourf</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">h_max</span><span class="p">,</span> <span class="n">levels</span><span class="o">=</span><span class="mi">20</span><span class="p">)</span> +<span class="n">ax</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="s1">'x'</span><span class="p">)</span> +<span class="n">ax</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s1">'y'</span><span class="p">)</span> +<span class="n">ax</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="s1">'maximum flow height'</span> <span class="o">+</span> <span class="sa">r</span><span class="s1">' $(m/s)$'</span><span class="p">)</span> +<span class="n">cbar0</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">colorbar</span><span class="p">(</span><span class="n">fig0</span><span class="p">,</span> <span class="n">ax</span><span class="o">=</span><span class="n">ax</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="nb">format</span><span class="o">=</span><span class="s1">'</span><span class="si">%.1f</span><span class="s1">'</span><span class="p">,</span> <span class="n">orientation</span><span class="o">=</span><span class="s1">'vertical'</span><span class="p">,</span> <span class="n">fraction</span><span class="o">=</span><span class="mf">0.1</span><span class="p">)</span> + +<span class="n">fig1</span> <span class="o">=</span> <span class="n">ax</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">contourf</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">v_max</span><span class="p">,</span> <span class="n">levels</span><span class="o">=</span><span class="mi">20</span><span class="p">)</span> +<span class="n">ax</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="s1">'x'</span><span class="p">)</span> +<span class="n">ax</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s1">'y'</span><span class="p">)</span> +<span class="n">ax</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="s1">'maximum flow velocity'</span> <span class="o">+</span> <span class="sa">r</span><span class="s1">' ($m/s^2$)'</span><span class="p">)</span> +<span class="n">cbar1</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">colorbar</span><span class="p">(</span><span class="n">fig1</span><span class="p">,</span> <span class="n">ax</span><span class="o">=</span><span class="n">ax</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="nb">format</span><span class="o">=</span><span class="s1">'</span><span class="si">%.1f</span><span class="s1">'</span><span class="p">,</span> <span class="n">orientation</span><span class="o">=</span><span class="s1">'vertical'</span><span class="p">,</span> <span class="n">fraction</span><span class="o">=</span><span class="mf">0.1</span><span class="p">)</span> + +<span class="n">plt</span><span class="o">.</span><span class="n">tight_layout</span><span class="p">()</span> +</pre></div> +</div> +<img src="../../_images/sphx_glr_plot_ravaflow24_001.png" srcset="../../_images/sphx_glr_plot_ravaflow24_001.png" alt="maximum flow height $(m/s)$, maximum flow velocity ($m/s^2$)" class = "sphx-glr-single-img"/><p>Here we delete the folder <cite>temp_Ravaflow24Mixture_example</cite> and all files therein.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">shutil</span> + +<span class="n">shutil</span><span class="o">.</span><span class="n">rmtree</span><span class="p">(</span><span class="n">dir_sim</span><span class="p">)</span> +</pre></div> +</div> +<p class="sphx-glr-timing"><strong>Total running time of the script:</strong> ( 5 minutes 56.157 seconds)</p> +<div class="sphx-glr-footer sphx-glr-footer-example docutils container" id="sphx-glr-download-auto-examples-simulator-plot-ravaflow24-py"> +<div class="sphx-glr-download sphx-glr-download-python docutils container"> +<p><a class="reference download internal" download="" href="../../_downloads/70f25099189c12416e6ef5e4aa3ed8b4/plot_ravaflow24.py"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">Python</span> <span class="pre">source</span> <span class="pre">code:</span> <span class="pre">plot_ravaflow24.py</span></code></a></p> +</div> +<div class="sphx-glr-download sphx-glr-download-jupyter docutils container"> +<p><a class="reference download internal" download="" href="../../_downloads/9847b46a66214926039e571c42505921/plot_ravaflow24.ipynb"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">Jupyter</span> <span class="pre">notebook:</span> <span class="pre">plot_ravaflow24.ipynb</span></code></a></p> +</div> +</div> +<p class="sphx-glr-signature"><a class="reference external" href="https://sphinx-gallery.github.io">Gallery generated by Sphinx-Gallery</a></p> +</section> + + + </div> + </div> + <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer"> + <a href="plot_run_mass_point_model.html" class="btn btn-neutral float-left" title="RunSimulator: Mass Point Model" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> + <a href="plot_run_ravaflow24.html" class="btn btn-neutral float-right" title="RunSimulator: Ravaflow24 Mixture Model" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a> + </div> + + <hr/> + + <div role="contentinfo"> + <p>© Copyright 2023, Hu Zhao.</p> + </div> + + Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a + <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> + provided by <a href="https://readthedocs.org">Read the Docs</a>. + + +</footer> + </div> + </div> + </section> + </div> + <script> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + +</body> +</html> \ No newline at end of file diff --git a/docs/source/_build/html/auto_examples/simulator/plot_run_mass_point_model.html b/docs/source/_build/html/auto_examples/simulator/plot_run_mass_point_model.html new file mode 100644 index 0000000..b628dce --- /dev/null +++ b/docs/source/_build/html/auto_examples/simulator/plot_run_mass_point_model.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html class="writer-html5" lang="en" > +<head> + <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>RunSimulator: Mass Point Model — PSimPy's documentation</title> + <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-binder.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-dataframe.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-rendered-html.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" /> + <!--[if lt IE 9]> + <script src="../../_static/js/html5shiv.min.js"></script> + <![endif]--> + + <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> + <script src="../../_static/jquery.js"></script> + <script src="../../_static/underscore.js"></script> + <script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script> + <script src="../../_static/doctools.js"></script> + <script src="../../_static/sphinx_highlight.js"></script> + <script src="../../_static/js/theme.js"></script> + <link rel="index" title="Index" href="../../genindex.html" /> + <link rel="search" title="Search" href="../../search.html" /> + <link rel="next" title="Ravaflow24 Mixture Model" href="plot_ravaflow24.html" /> + <link rel="prev" title="Mass Point Model" href="plot_mass_point_model.html" /> +</head> + +<body class="wy-body-for-nav"> + <div class="wy-grid-for-nav"> + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + <a href="../../index.html" class="icon icon-home"> psimpy + </a> + <div class="version"> + 0.1.2 + </div> +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> + <ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../../index.html">Home</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../quickstart.html">Getting Started</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../api.html">API & Theory</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../../examples.html">Example Gallery</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="../emulator/index.html">Emulator</a></li> +<li class="toctree-l2"><a class="reference internal" href="../inference/index.html">Inference</a></li> +<li class="toctree-l2"><a class="reference internal" href="../sampler/index.html">Sampler</a></li> +<li class="toctree-l2"><a class="reference internal" href="../sensitivity/index.html">Sensitivity</a></li> +<li class="toctree-l2 current"><a class="reference internal" href="index.html">Simulator</a><ul class="current"> +<li class="toctree-l3"><a class="reference internal" href="plot_mass_point_model.html">Mass Point Model</a></li> +<li class="toctree-l3 current"><a class="current reference internal" href="#">RunSimulator: Mass Point Model</a></li> +<li class="toctree-l3"><a class="reference internal" href="plot_ravaflow24.html">Ravaflow24 Mixture Model</a></li> +<li class="toctree-l3"><a class="reference internal" href="plot_run_ravaflow24.html">RunSimulator: Ravaflow24 Mixture Model</a></li> +</ul> +</li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="../../changelog.html">Changes</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../refs.html">References</a></li> +</ul> + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">psimpy</a> + </nav> + + <div class="wy-nav-content"> + <div class="rst-content"> + <div role="navigation" aria-label="Page navigation"> + <ul class="wy-breadcrumbs"> + <li><a href="../../index.html" class="icon icon-home"></a></li> + <li class="breadcrumb-item"><a href="../../examples.html">Example Gallery</a></li> + <li class="breadcrumb-item"><a href="index.html">Simulator</a></li> + <li class="breadcrumb-item active">RunSimulator: Mass Point Model</li> + <li class="wy-breadcrumbs-aside"> + <a href="../../_sources/auto_examples/simulator/plot_run_mass_point_model.rst.txt" rel="nofollow"> View page source</a> + </li> + </ul> + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="sphx-glr-download-link-note admonition note"> +<p class="admonition-title">Note</p> +<p>Click <a class="reference internal" href="#sphx-glr-download-auto-examples-simulator-plot-run-mass-point-model-py"><span class="std std-ref">here</span></a> +to download the full example code</p> +</div> +<section class="sphx-glr-example-title" id="runsimulator-mass-point-model"> +<span id="sphx-glr-auto-examples-simulator-plot-run-mass-point-model-py"></span><h1>RunSimulator: Mass Point Model<a class="headerlink" href="#runsimulator-mass-point-model" title="Permalink to this heading"></a></h1> +<p>This example shows how to run multiple MassPointModel simulations in serial +and parallelly using <a class="reference internal" href="../../simulator/run_simulator.html#psimpy.simulator.run_simulator.RunSimulator" title="psimpy.simulator.run_simulator.RunSimulator"><code class="xref py py-class docutils literal notranslate"><span class="pre">RunSimulator</span></code></a>.</p> +<p>First, we import the class <a class="reference internal" href="../../simulator/mass_point_model.html#psimpy.simulator.mass_point_model.MassPointModel" title="psimpy.simulator.mass_point_model.MassPointModel"><code class="xref py py-class docutils literal notranslate"><span class="pre">MassPointModel</span></code></a> and define a <cite>simulator</cite> +based on <a class="reference internal" href="../../simulator/mass_point_model.html#psimpy.simulator.mass_point_model.MassPointModel.run" title="psimpy.simulator.mass_point_model.MassPointModel.run"><code class="xref py py-meth docutils literal notranslate"><span class="pre">MassPointModel.run()</span></code></a> method.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">psimpy.simulator</span> <span class="kn">import</span> <span class="n">MassPointModel</span> + +<span class="n">mpm</span> <span class="o">=</span> <span class="n">MassPointModel</span><span class="p">()</span> +<span class="n">mpm_simulator</span> <span class="o">=</span> <span class="n">mpm</span><span class="o">.</span><span class="n">run</span> +</pre></div> +</div> +<p>This simulator takes required input data, solves the mass point model, and +returns time history of the mass point’s location and velocity +(see <a class="reference internal" href="../../simulator/mass_point_model.html#psimpy.simulator.mass_point_model.MassPointModel.run" title="psimpy.simulator.mass_point_model.MassPointModel.run"><code class="xref py py-meth docutils literal notranslate"><span class="pre">MassPointModel.run()</span></code></a>).</p> +<dl class="simple"> +<dt>Required inputs for <cite>mpm_simulator</cite> include:</dt><dd><ol class="arabic simple"> +<li><p>topographic data: digital elevation model (in <cite>ESRI ascii</cite> format)</p></li> +<li><p>friction coefficients: coulomb friction and turbulent friction coefficients</p></li> +<li><p>initial state: initial location and initial velocity of the masspoint</p></li> +<li><p>computational parameters: such as time step, end time, etc.</p></li> +</ol> +</dd> +</dl> +<p>The synthetic topography <code class="docutils literal notranslate"><span class="pre">synthetic_topo.asc</span></code> is used here for illustration. +It is located at the <cite>/tests/data/</cite> folder.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">os</span> + +<span class="n">dir_data</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="s1">'../../../tests/data/'</span><span class="p">)</span> +<span class="n">elevation</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">dir_data</span><span class="p">,</span> <span class="s1">'synthetic_topo.asc'</span><span class="p">)</span> +</pre></div> +</div> +<div class="admonition note"> +<p class="admonition-title">Note</p> +<p>You may need to modify <code class="docutils literal notranslate"><span class="pre">dir_data</span></code> according to where you save +<code class="docutils literal notranslate"><span class="pre">synthetic_topo.asc</span></code> on your local machine.</p> +</div> +<p>For this example, we are going to run multiple simulations at different values +of coulomb friction coefficient (<code class="docutils literal notranslate"><span class="pre">coulomb_friction</span></code>) and turbulent friction +coefficient (<code class="docutils literal notranslate"><span class="pre">turbulent_friction</span></code>) while keep other inputs fixed. Namely, +<code class="docutils literal notranslate"><span class="pre">coulomb_friction</span></code> and <code class="docutils literal notranslate"><span class="pre">turbulent_friction</span></code> are variable input parameters. +All other inputs are fixed input parameters.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span> +<span class="kn">import</span> <span class="nn">itertools</span> + +<span class="c1"># Variable iput parameters are defined as a list of strings. Their values will be</span> +<span class="c1"># passed as a numpy array (var_samples) when run simulations.</span> +<span class="n">var_inp_parameter</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'coulomb_friction'</span><span class="p">,</span> <span class="s1">'turbulent_friction'</span><span class="p">]</span> +<span class="n">coulomb_friction</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mf">0.1</span><span class="p">,</span> <span class="mf">0.31</span><span class="p">,</span> <span class="mf">0.1</span><span class="p">)</span> +<span class="n">turbulent_friction</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">500</span><span class="p">,</span> <span class="mi">2001</span><span class="p">,</span> <span class="mi">400</span><span class="p">)</span> +<span class="n">var_samples</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span> + <span class="p">[</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">itertools</span><span class="o">.</span><span class="n">product</span><span class="p">(</span><span class="n">coulomb_friction</span><span class="p">,</span> <span class="n">turbulent_friction</span><span class="p">)])</span> +<span class="nb">print</span><span class="p">(</span><span class="s2">"Number of variable input samples are: "</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">var_samples</span><span class="p">))</span> + +<span class="c1"># Fixed input parameters are defined as a dictionary. Their values are given.</span> +<span class="n">fix_inp</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'elevation'</span><span class="p">:</span> <span class="n">elevation</span><span class="p">,</span> <span class="s1">'x0'</span><span class="p">:</span> <span class="mi">200</span><span class="p">,</span> <span class="s1">'y0'</span><span class="p">:</span> <span class="mi">2000</span><span class="p">,</span> <span class="s1">'tend'</span><span class="p">:</span> <span class="mi">50</span><span class="p">}</span> +</pre></div> +</div> +<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>Number of variable input samples are: 12 +</pre></div> +</div> +<div class="admonition note"> +<p class="admonition-title">Note</p> +<p>Parameters of <cite>mpm_simulator</cite> which are not included in +<code class="docutils literal notranslate"><span class="pre">var_inp_parameter</span></code> and <code class="docutils literal notranslate"><span class="pre">fix_inp</span></code>, such as <code class="docutils literal notranslate"><span class="pre">ux0</span></code>, <code class="docutils literal notranslate"><span class="pre">uy0</span></code> and +<code class="docutils literal notranslate"><span class="pre">curvature</span></code>, will automatically take their default values.</p> +</div> +<p>We may want to save outputs returned by <cite>mpm_simulator</cite> at each simulation for +later inspection or processing. In that case, we need to define <code class="docutils literal notranslate"><span class="pre">dir_out</span></code> and +set <code class="docutils literal notranslate"><span class="pre">save_out</span></code> as <cite>True</cite>.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">os</span> + +<span class="c1"># Here we create a folder called `temp_run_MassPointModel_example` to save outputs</span> +<span class="c1"># returned at each simulation.</span> +<span class="n">cwd</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getcwd</span><span class="p">()</span> +<span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="s1">'temp_run_MassPointModel_example'</span><span class="p">):</span> + <span class="n">os</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="s1">'temp_run_MassPointModel_example'</span><span class="p">)</span> +<span class="n">dir_out</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">cwd</span><span class="p">,</span> <span class="s1">'temp_run_MassPointModel_example'</span><span class="p">)</span> +</pre></div> +</div> +<p>Now we can define an object of <a class="reference internal" href="../../simulator/run_simulator.html#psimpy.simulator.run_simulator.RunSimulator" title="psimpy.simulator.run_simulator.RunSimulator"><code class="xref py py-class docutils literal notranslate"><span class="pre">RunSimulator</span></code></a> by</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">psimpy.simulator</span> <span class="kn">import</span> <span class="n">RunSimulator</span> + +<span class="n">run_mpm_simulator</span> <span class="o">=</span> <span class="n">RunSimulator</span><span class="p">(</span><span class="n">mpm_simulator</span><span class="p">,</span> <span class="n">var_inp_parameter</span><span class="p">,</span> <span class="n">fix_inp</span><span class="p">,</span> + <span class="n">dir_out</span><span class="o">=</span><span class="n">dir_out</span><span class="p">,</span> <span class="n">save_out</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> +</pre></div> +</div> +<div class="admonition note"> +<p class="admonition-title">Note</p> +<p>Since outputs of each simulation are saved in the same folder <code class="docutils literal notranslate"><span class="pre">dir_out</span></code>, +we need to give each file a unique name in order to avoid conflict. This is +realized by defining <code class="docutils literal notranslate"><span class="pre">prefixes</span></code>.</p> +</div> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">serial_prefixes</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"serial"</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">var_samples</span><span class="p">))]</span> +<span class="n">parallel_prefixes</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"parallel"</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">var_samples</span><span class="p">))]</span> +</pre></div> +</div> +<p>Using <a class="reference internal" href="../../simulator/run_simulator.html#psimpy.simulator.run_simulator.RunSimulator.serial_run" title="psimpy.simulator.run_simulator.RunSimulator.serial_run"><code class="xref py py-meth docutils literal notranslate"><span class="pre">RunSimulator.serial_run()</span></code></a> method or +<a class="reference internal" href="../../simulator/run_simulator.html#psimpy.simulator.run_simulator.RunSimulator.parallel_run" title="psimpy.simulator.run_simulator.RunSimulator.parallel_run"><code class="xref py py-meth docutils literal notranslate"><span class="pre">RunSimulator.parallel_run()</span></code></a> method, we can run the simulations +in serial or parallelly.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">time</span> + +<span class="n">start</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> +<span class="n">run_mpm_simulator</span><span class="o">.</span><span class="n">serial_run</span><span class="p">(</span><span class="n">var_samples</span><span class="o">=</span><span class="n">var_samples</span><span class="p">,</span> <span class="n">prefixes</span><span class="o">=</span><span class="n">serial_prefixes</span><span class="p">)</span> +<span class="n">serial_time</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> <span class="o">-</span> <span class="n">start</span> +<span class="n">serial_output</span> <span class="o">=</span> <span class="n">run_mpm_simulator</span><span class="o">.</span><span class="n">outputs</span> + +<span class="n">start</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> +<span class="c1"># max_workers controls maximum number of tasks running in parallel</span> +<span class="n">run_mpm_simulator</span><span class="o">.</span><span class="n">parallel_run</span><span class="p">(</span><span class="n">var_samples</span><span class="p">,</span> <span class="n">prefixes</span><span class="o">=</span><span class="n">parallel_prefixes</span><span class="p">,</span> <span class="n">max_workers</span><span class="o">=</span><span class="mi">4</span><span class="p">)</span> +<span class="n">parallel_time</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> <span class="o">-</span> <span class="n">start</span> +<span class="n">parallel_output</span> <span class="o">=</span> <span class="n">run_mpm_simulator</span><span class="o">.</span><span class="n">outputs</span> + +<span class="nb">print</span><span class="p">(</span><span class="s2">"Serial run time: "</span><span class="p">,</span> <span class="n">serial_time</span><span class="p">)</span> +<span class="nb">print</span><span class="p">(</span><span class="s2">"Parallel run time: "</span><span class="p">,</span> <span class="n">parallel_time</span><span class="p">)</span> +</pre></div> +</div> +<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>Serial run time: 1.1941184997558594 +Parallel run time: 0.4859800338745117 +</pre></div> +</div> +<p>Once a simulation is done, its output is saved to <code class="docutils literal notranslate"><span class="pre">dir_out</span></code>. All output files +generated by above simulations are as follows:</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">os</span><span class="o">.</span><span class="n">listdir</span><span class="p">(</span><span class="n">dir_out</span><span class="p">)</span> +</pre></div> +</div> +<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>['serial0_output.npy', 'serial9_output.npy', 'serial11_output.npy', 'parallel10_output.npy', 'parallel0_output.npy', 'parallel5_output.npy', 'parallel11_output.npy', 'serial1_output.npy', 'serial4_output.npy', 'parallel7_output.npy', 'serial5_output.npy', 'serial8_output.npy', 'parallel6_output.npy', 'parallel4_output.npy', 'parallel2_output.npy', 'serial3_output.npy', 'serial6_output.npy', 'parallel3_output.npy', 'serial2_output.npy', 'parallel9_output.npy', 'serial7_output.npy', 'parallel1_output.npy', 'parallel8_output.npy', 'serial10_output.npy'] +</pre></div> +</div> +<p>Once all simulations are done, their outputs can also be accessed by +<a class="reference internal" href="../../simulator/run_simulator.html#psimpy.simulator.run_simulator.RunSimulator.outputs" title="psimpy.simulator.run_simulator.RunSimulator.outputs"><code class="xref py py-attr docutils literal notranslate"><span class="pre">RunSimulator.outputs</span></code></a> attribute, which is a list.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># Here we print the maximum velocity of each simulation in the parallel run.</span> +<span class="n">max_v</span> <span class="o">=</span> <span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">output</span><span class="p">[:,</span><span class="mi">5</span><span class="p">])</span> <span class="k">for</span> <span class="n">output</span> <span class="ow">in</span> <span class="n">parallel_output</span><span class="p">]</span> +<span class="nb">print</span><span class="p">(</span> + <span class="sa">f</span><span class="s2">"Maximum velocity of </span><span class="si">{</span><span class="n">parallel_prefixes</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}</span><span class="s2"> to </span><span class="si">{</span><span class="n">parallel_prefixes</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="si">}</span><span class="s2"> are: "</span><span class="p">,</span> + <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">,</span> + <span class="n">max_v</span><span class="p">)</span> +</pre></div> +</div> +<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>Maximum velocity of parallel0 to parallel11 are: + [16.55505557211892, 22.014114896121015, 26.245546886730782, 29.78487303612985, 15.34198274528081, 20.371864007499866, 24.249957243412815, 27.485487855011687, 14.031665649204944, 18.589324449452967, 22.092803891476187, 24.99727320816709] +</pre></div> +</div> +<div class="admonition warning"> +<p class="admonition-title">Warning</p> +<p>If one simulation failed due to whatever reason, the error massage +will be printed to the screen but other simulations will continue. In that +case, the output file of failed simulation will not be writted to <code class="docutils literal notranslate"><span class="pre">dir_out</span></code>. +Also, the element of <a class="reference internal" href="../../simulator/run_simulator.html#psimpy.simulator.run_simulator.RunSimulator.outputs" title="psimpy.simulator.run_simulator.RunSimulator.outputs"><code class="xref py py-attr docutils literal notranslate"><span class="pre">RunSimulator.outputs</span></code></a> corresponding to that +simulation will be a string representing the error message, instead of a +numpy array.</p> +</div> +<p>Here we delete the folder <cite>temp_run_MassPointModel_example</cite> and all files therein.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">shutil</span> + +<span class="n">shutil</span><span class="o">.</span><span class="n">rmtree</span><span class="p">(</span><span class="n">dir_out</span><span class="p">)</span> +</pre></div> +</div> +<p class="sphx-glr-timing"><strong>Total running time of the script:</strong> ( 0 minutes 1.687 seconds)</p> +<div class="sphx-glr-footer sphx-glr-footer-example docutils container" id="sphx-glr-download-auto-examples-simulator-plot-run-mass-point-model-py"> +<div class="sphx-glr-download sphx-glr-download-python docutils container"> +<p><a class="reference download internal" download="" href="../../_downloads/4d495ff630306dd98ca342f01931251c/plot_run_mass_point_model.py"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">Python</span> <span class="pre">source</span> <span class="pre">code:</span> <span class="pre">plot_run_mass_point_model.py</span></code></a></p> +</div> +<div class="sphx-glr-download sphx-glr-download-jupyter docutils container"> +<p><a class="reference download internal" download="" href="../../_downloads/39558f3ab53d6f797e2208e7c89063a5/plot_run_mass_point_model.ipynb"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">Jupyter</span> <span class="pre">notebook:</span> <span class="pre">plot_run_mass_point_model.ipynb</span></code></a></p> +</div> +</div> +<p class="sphx-glr-signature"><a class="reference external" href="https://sphinx-gallery.github.io">Gallery generated by Sphinx-Gallery</a></p> +</section> + + + </div> + </div> + <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer"> + <a href="plot_mass_point_model.html" class="btn btn-neutral float-left" title="Mass Point Model" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> + <a href="plot_ravaflow24.html" class="btn btn-neutral float-right" title="Ravaflow24 Mixture Model" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a> + </div> + + <hr/> + + <div role="contentinfo"> + <p>© Copyright 2023, Hu Zhao.</p> + </div> + + Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a + <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> + provided by <a href="https://readthedocs.org">Read the Docs</a>. + + +</footer> + </div> + </div> + </section> + </div> + <script> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + +</body> +</html> \ No newline at end of file diff --git a/docs/source/_build/html/auto_examples/simulator/plot_run_ravaflow24.html b/docs/source/_build/html/auto_examples/simulator/plot_run_ravaflow24.html new file mode 100644 index 0000000..9827818 --- /dev/null +++ b/docs/source/_build/html/auto_examples/simulator/plot_run_ravaflow24.html @@ -0,0 +1,333 @@ +<!DOCTYPE html> +<html class="writer-html5" lang="en" > +<head> + <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>RunSimulator: Ravaflow24 Mixture Model — PSimPy's documentation</title> + <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-binder.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-dataframe.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-rendered-html.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" /> + <!--[if lt IE 9]> + <script src="../../_static/js/html5shiv.min.js"></script> + <![endif]--> + + <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> + <script src="../../_static/jquery.js"></script> + <script src="../../_static/underscore.js"></script> + <script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script> + <script src="../../_static/doctools.js"></script> + <script src="../../_static/sphinx_highlight.js"></script> + <script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script> + <script src="../../_static/js/theme.js"></script> + <link rel="index" title="Index" href="../../genindex.html" /> + <link rel="search" title="Search" href="../../search.html" /> + <link rel="next" title="Changes" href="../../changelog.html" /> + <link rel="prev" title="Ravaflow24 Mixture Model" href="plot_ravaflow24.html" /> +</head> + +<body class="wy-body-for-nav"> + <div class="wy-grid-for-nav"> + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + <a href="../../index.html" class="icon icon-home"> psimpy + </a> + <div class="version"> + 0.1.2 + </div> +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> + <ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../../index.html">Home</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../quickstart.html">Getting Started</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../api.html">API & Theory</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../../examples.html">Example Gallery</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="../emulator/index.html">Emulator</a></li> +<li class="toctree-l2"><a class="reference internal" href="../inference/index.html">Inference</a></li> +<li class="toctree-l2"><a class="reference internal" href="../sampler/index.html">Sampler</a></li> +<li class="toctree-l2"><a class="reference internal" href="../sensitivity/index.html">Sensitivity</a></li> +<li class="toctree-l2 current"><a class="reference internal" href="index.html">Simulator</a><ul class="current"> +<li class="toctree-l3"><a class="reference internal" href="plot_mass_point_model.html">Mass Point Model</a></li> +<li class="toctree-l3"><a class="reference internal" href="plot_run_mass_point_model.html">RunSimulator: Mass Point Model</a></li> +<li class="toctree-l3"><a class="reference internal" href="plot_ravaflow24.html">Ravaflow24 Mixture Model</a></li> +<li class="toctree-l3 current"><a class="current reference internal" href="#">RunSimulator: Ravaflow24 Mixture Model</a></li> +</ul> +</li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="../../changelog.html">Changes</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../refs.html">References</a></li> +</ul> + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">psimpy</a> + </nav> + + <div class="wy-nav-content"> + <div class="rst-content"> + <div role="navigation" aria-label="Page navigation"> + <ul class="wy-breadcrumbs"> + <li><a href="../../index.html" class="icon icon-home"></a></li> + <li class="breadcrumb-item"><a href="../../examples.html">Example Gallery</a></li> + <li class="breadcrumb-item"><a href="index.html">Simulator</a></li> + <li class="breadcrumb-item active">RunSimulator: Ravaflow24 Mixture Model</li> + <li class="wy-breadcrumbs-aside"> + <a href="../../_sources/auto_examples/simulator/plot_run_ravaflow24.rst.txt" rel="nofollow"> View page source</a> + </li> + </ul> + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="sphx-glr-download-link-note admonition note"> +<p class="admonition-title">Note</p> +<p>Click <a class="reference internal" href="#sphx-glr-download-auto-examples-simulator-plot-run-ravaflow24-py"><span class="std std-ref">here</span></a> +to download the full example code</p> +</div> +<section class="sphx-glr-example-title" id="runsimulator-ravaflow24-mixture-model"> +<span id="sphx-glr-auto-examples-simulator-plot-run-ravaflow24-py"></span><h1>RunSimulator: Ravaflow24 Mixture Model<a class="headerlink" href="#runsimulator-ravaflow24-mixture-model" title="Permalink to this heading"></a></h1> +<p>This example shows how to run multiple Ravaflow24Mixture simulations in serial +and parallelly using <a class="reference internal" href="../../simulator/run_simulator.html#psimpy.simulator.run_simulator.RunSimulator" title="psimpy.simulator.run_simulator.RunSimulator"><code class="xref py py-class docutils literal notranslate"><span class="pre">RunSimulator</span></code></a>.</p> +<p>First, we import the class <a class="reference internal" href="../../simulator/ravaflow24.html#psimpy.simulator.ravaflow24.Ravaflow24Mixture" title="psimpy.simulator.ravaflow24.Ravaflow24Mixture"><code class="xref py py-class docutils literal notranslate"><span class="pre">Ravaflow24Mixture</span></code></a>.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">psimpy.simulator</span> <span class="kn">import</span> <span class="n">Ravaflow24Mixture</span> +</pre></div> +</div> +<p>To create an instance of this class, we must specify the parameter <code class="docutils literal notranslate"><span class="pre">dir_sim</span></code>. +It represents the directory in which output files generated by r.avaflow will be +saved.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">os</span> + +<span class="c1"># Here we create a folder called `temp1_run_Ravaflow24Mixture_example` to save</span> +<span class="c1"># output files generated by r.avaflow</span> +<span class="n">cwd</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getcwd</span><span class="p">()</span> +<span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="s1">'temp1_run_Ravaflow24Mixture_example'</span><span class="p">):</span> + <span class="n">os</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="s1">'temp1_run_Ravaflow24Mixture_example'</span><span class="p">)</span> +<span class="n">dir_sim</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">cwd</span><span class="p">,</span> <span class="s1">'temp1_run_Ravaflow24Mixture_example'</span><span class="p">)</span> +</pre></div> +</div> +<p>Given <code class="docutils literal notranslate"><span class="pre">dir_sim</span></code>, we can create an instance of <a class="reference internal" href="../../simulator/ravaflow24.html#psimpy.simulator.ravaflow24.Ravaflow24Mixture" title="psimpy.simulator.ravaflow24.Ravaflow24Mixture"><code class="xref py py-class docutils literal notranslate"><span class="pre">Ravaflow24Mixture</span></code></a>. +To reduce simulation time, we set <code class="docutils literal notranslate"><span class="pre">time_end</span></code> to <span class="math notranslate nohighlight">\(50\)</span>. Other parameters +are set to their default values.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">voellmy_model</span> <span class="o">=</span> <span class="n">Ravaflow24Mixture</span><span class="p">(</span><span class="n">dir_sim</span><span class="p">,</span> <span class="n">time_end</span><span class="o">=</span><span class="mi">50</span><span class="p">)</span> +</pre></div> +</div> +<p>The <cite>simulator</cite> in this example is defined based on <code class="docutils literal notranslate"><span class="pre">voellmy_model</span></code> as follows. +It takes required inputs and returns the overall impact area.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span> + +<span class="k">def</span> <span class="nf">simulator</span><span class="p">(</span><span class="n">prefix</span><span class="p">,</span> <span class="n">elevation</span><span class="p">,</span> <span class="n">hrelease</span><span class="p">,</span> <span class="n">basal_friction</span><span class="p">,</span> <span class="n">turbulent_friction</span><span class="p">,</span> <span class="n">EPSG</span><span class="p">):</span> + <span class="sd">"""Preprocess required inputs, run simulation, and return output as a numpy array."""</span> + <span class="n">grass_location</span><span class="p">,</span> <span class="n">sh_file</span> <span class="o">=</span> <span class="n">voellmy_model</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span><span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">,</span> <span class="n">elevation</span><span class="o">=</span><span class="n">elevation</span><span class="p">,</span> + <span class="n">hrelease</span><span class="o">=</span><span class="n">hrelease</span><span class="p">,</span> <span class="n">basal_friction</span><span class="o">=</span><span class="n">basal_friction</span><span class="p">,</span> <span class="n">turbulent_friction</span><span class="o">=</span><span class="n">turbulent_friction</span><span class="p">,</span> <span class="n">EPSG</span><span class="o">=</span><span class="n">EPSG</span><span class="p">)</span> + <span class="n">voellmy_model</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">grass_location</span><span class="p">,</span> <span class="n">sh_file</span><span class="p">)</span> <span class="c1"># run this line, r.avaflow will write outputs to dir_sim</span> + <span class="n">impact_area</span> <span class="o">=</span> <span class="n">voellmy_model</span><span class="o">.</span><span class="n">extract_impact_area</span><span class="p">(</span><span class="n">prefix</span><span class="p">)</span> + + <span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">impact_area</span><span class="p">])</span> <span class="c1"># define dir_out and set save_out to True, returned numpy array will be saved to dir_out</span> +</pre></div> +</div> +<p>To demonstrate how to run multiple simulations using <a class="reference internal" href="../../simulator/run_simulator.html#psimpy.simulator.run_simulator.RunSimulator" title="psimpy.simulator.run_simulator.RunSimulator"><code class="xref py py-class docutils literal notranslate"><span class="pre">RunSimulator</span></code></a>, +we choose <code class="docutils literal notranslate"><span class="pre">basal_friction</span></code> and <code class="docutils literal notranslate"><span class="pre">turbulent_friction</span></code> as variable input +parameters. Each has two different values, leading to four simulations.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">itertools</span> + +<span class="n">var_inp_parameter</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'basal_friction'</span><span class="p">,</span> <span class="s1">'turbulent_friction'</span><span class="p">]</span> +<span class="n">basal_friction</span> <span class="o">=</span> <span class="p">[</span><span class="mi">20</span><span class="p">,</span> <span class="mi">30</span><span class="p">]</span> +<span class="n">turbulent_friction</span> <span class="o">=</span> <span class="p">[</span><span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">]</span> +<span class="n">var_samples</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span> + <span class="p">[</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">itertools</span><span class="o">.</span><span class="n">product</span><span class="p">(</span><span class="n">basal_friction</span><span class="p">,</span> <span class="n">turbulent_friction</span><span class="p">)])</span> +</pre></div> +</div> +<p>Other parameters of the <cite>simulator</cite>, including <code class="docutils literal notranslate"><span class="pre">elevation</span></code>, <code class="docutils literal notranslate"><span class="pre">hrelease</span></code>, and +<code class="docutils literal notranslate"><span class="pre">EPSG</span></code> are treated as fixed input. It means that their values are the same in +all simulations.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">dir_data</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="s1">'../../../tests/data/'</span><span class="p">)</span> +<span class="n">elevation</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">dir_data</span><span class="p">,</span> <span class="s1">'synthetic_topo.tif'</span><span class="p">)</span> +<span class="n">hrelease</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">dir_data</span><span class="p">,</span> <span class="s1">'synthetic_rel.tif'</span><span class="p">)</span> +<span class="n">fix_inp</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'elevation'</span><span class="p">:</span> <span class="n">elevation</span><span class="p">,</span> <span class="s1">'hrelease'</span><span class="p">:</span> <span class="n">hrelease</span><span class="p">,</span> <span class="s1">'EPSG'</span><span class="p">:</span> <span class="s1">'2326'</span><span class="p">}</span> +</pre></div> +</div> +<p>The parameter <code class="docutils literal notranslate"><span class="pre">prefix</span></code> of the <cite>simulator</cite> is special. It is not involved in +the computational model, but only used to name output files generated by r.avaflow. +Such parameter is not defined in <code class="docutils literal notranslate"><span class="pre">var_inp_parameter</span></code> or <code class="docutils literal notranslate"><span class="pre">fix_inp</span></code> of +<a class="reference internal" href="../../simulator/run_simulator.html#psimpy.simulator.run_simulator.RunSimulator" title="psimpy.simulator.run_simulator.RunSimulator"><code class="xref py py-class docutils literal notranslate"><span class="pre">RunSimulator</span></code></a>. Instead, we use a seperate parameter, called <code class="docutils literal notranslate"><span class="pre">o_parameter</span></code> +for this purpose.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">o_parameter</span> <span class="o">=</span> <span class="s1">'prefix'</span> +</pre></div> +</div> +<p>We may want to save outputs returned by the <cite>simulator</cite> at each simulation for +later inspection or processing. In that case, we need to define <code class="docutils literal notranslate"><span class="pre">dir_out</span></code> and +set <code class="docutils literal notranslate"><span class="pre">save_out</span></code> as <cite>True</cite>.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">os</span> + +<span class="n">cwd</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getcwd</span><span class="p">()</span> +<span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="s1">'temp2_run_Ravaflow24Mixture_example'</span><span class="p">):</span> + <span class="n">os</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="s1">'temp2_run_Ravaflow24Mixture_example'</span><span class="p">)</span> +<span class="n">dir_out</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">cwd</span><span class="p">,</span> <span class="s1">'temp2_run_Ravaflow24Mixture_example'</span><span class="p">)</span> +</pre></div> +</div> +<div class="admonition note"> +<p class="admonition-title">Note</p> +<p>Please note that <code class="docutils literal notranslate"><span class="pre">dir_out</span></code> and <code class="docutils literal notranslate"><span class="pre">dir_sim</span></code> are two different +parameters for different purposes.</p> +<blockquote> +<div><ul class="simple"> +<li><p><code class="docutils literal notranslate"><span class="pre">dir_out</span></code> is a parameter of <a class="reference internal" href="../../simulator/run_simulator.html#psimpy.simulator.run_simulator.RunSimulator" title="psimpy.simulator.run_simulator.RunSimulator"><code class="xref py py-class docutils literal notranslate"><span class="pre">RunSimulator</span></code></a>. The <cite>simulator</cite> +returns output of interest as a numpy array for each simulation. If +we want to save this returned output of interest (here impact area) +to our local machine, we need to specify the value of <code class="docutils literal notranslate"><span class="pre">dir_out</span></code> which +represents the directory in which output of interest will be saved and +set <code class="docutils literal notranslate"><span class="pre">save_out</span></code> to <cite>True</cite>. Otherwise, we do not need <code class="docutils literal notranslate"><span class="pre">dir_out</span></code> and +leave <code class="docutils literal notranslate"><span class="pre">save_out</span></code> to <cite>False</cite>.</p></li> +<li><p><code class="docutils literal notranslate"><span class="pre">dir_sim</span></code> is a parameter of <a class="reference internal" href="../../simulator/ravaflow24.html#psimpy.simulator.ravaflow24.Ravaflow24Mixture" title="psimpy.simulator.ravaflow24.Ravaflow24Mixture"><code class="xref py py-class docutils literal notranslate"><span class="pre">Ravaflow24Mixture</span></code></a>. <a class="reference internal" href="../../simulator/ravaflow24.html#psimpy.simulator.ravaflow24.Ravaflow24Mixture" title="psimpy.simulator.ravaflow24.Ravaflow24Mixture"><code class="xref py py-class docutils literal notranslate"><span class="pre">Ravaflow24Mixture</span></code></a> +relies on the third party software r.avaflow 2.4. When we call +<a class="reference internal" href="../../simulator/ravaflow24.html#psimpy.simulator.ravaflow24.Ravaflow24Mixture.run" title="psimpy.simulator.ravaflow24.Ravaflow24Mixture.run"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Ravaflow24Mixture.run()</span></code></a> in the function body of above <cite>simulator</cite>, +r.avaflow 2.4 will be run and it generates output files. The value of +<code class="docutils literal notranslate"><span class="pre">dir_sim</span></code> specifies the directory in which output files generated by +r.avaflow 2.4 are going to be saved.</p></li> +</ul> +</div></blockquote> +<p>The value of <code class="docutils literal notranslate"><span class="pre">dir_out</span></code> and <code class="docutils literal notranslate"><span class="pre">dir_sim</span></code> can be the same if file names +have no conflict. We recommend to keep them seperate. In addition, if the function +body of the <cite>simulator</cite> does not write files to disk, <code class="docutils literal notranslate"><span class="pre">dir_sim</span></code> is not required. Our +<a class="reference internal" href="../../simulator/mass_point_model.html#psimpy.simulator.mass_point_model.MassPointModel" title="psimpy.simulator.mass_point_model.MassPointModel"><code class="xref py py-class docutils literal notranslate"><span class="pre">MassPointModel</span></code></a> is an example. Similarly, if we do not want to save +returned numpy array of the <cite>simulator</cite>, <code class="docutils literal notranslate"><span class="pre">dir_out</span></code> is not needed.</p> +</div> +<p>Now we can define an object of <a class="reference internal" href="../../simulator/run_simulator.html#psimpy.simulator.run_simulator.RunSimulator" title="psimpy.simulator.run_simulator.RunSimulator"><code class="xref py py-class docutils literal notranslate"><span class="pre">RunSimulator</span></code></a> by</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">psimpy.simulator</span> <span class="kn">import</span> <span class="n">RunSimulator</span> + +<span class="n">run_simulator</span> <span class="o">=</span> <span class="n">RunSimulator</span><span class="p">(</span><span class="n">simulator</span><span class="p">,</span> <span class="n">var_inp_parameter</span><span class="p">,</span> <span class="n">fix_inp</span><span class="p">,</span> <span class="n">o_parameter</span><span class="p">,</span> + <span class="n">dir_out</span><span class="p">,</span> <span class="n">save_out</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> +</pre></div> +</div> +<p>Before running simulations, we need to specify values of <code class="docutils literal notranslate"><span class="pre">prefixes</span></code> which +will be used to name files generated by each r.avaflow simulation and +each returned numpy array of <cite>simulator</cite>.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">serial_prefixes</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"serial"</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">var_samples</span><span class="p">))]</span> +<span class="n">parallel_prefixes</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"parallel"</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">var_samples</span><span class="p">))]</span> +</pre></div> +</div> +<p>Now we can use <a class="reference internal" href="../../simulator/run_simulator.html#psimpy.simulator.run_simulator.RunSimulator.serial_run" title="psimpy.simulator.run_simulator.RunSimulator.serial_run"><code class="xref py py-meth docutils literal notranslate"><span class="pre">RunSimulator.serial_run()</span></code></a> method or +<a class="reference internal" href="../../simulator/run_simulator.html#psimpy.simulator.run_simulator.RunSimulator.parallel_run" title="psimpy.simulator.run_simulator.RunSimulator.parallel_run"><code class="xref py py-meth docutils literal notranslate"><span class="pre">RunSimulator.parallel_run()</span></code></a> method to run the simulations +in serial or parallelly.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">time</span> + +<span class="n">start</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> +<span class="n">run_simulator</span><span class="o">.</span><span class="n">serial_run</span><span class="p">(</span><span class="n">var_samples</span><span class="o">=</span><span class="n">var_samples</span><span class="p">,</span> <span class="n">prefixes</span><span class="o">=</span><span class="n">serial_prefixes</span><span class="p">)</span> +<span class="n">serial_time</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> <span class="o">-</span> <span class="n">start</span> +<span class="n">serial_output</span> <span class="o">=</span> <span class="n">run_simulator</span><span class="o">.</span><span class="n">outputs</span> +<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"serial_output: </span><span class="si">{</span><span class="n">serial_output</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span> + +<span class="n">start</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> +<span class="c1"># append setting to True means that simulation outputs of parallel run will be</span> +<span class="c1"># appended to above serial run outputs</span> +<span class="n">run_simulator</span><span class="o">.</span><span class="n">parallel_run</span><span class="p">(</span><span class="n">var_samples</span><span class="p">,</span> <span class="n">prefixes</span><span class="o">=</span><span class="n">parallel_prefixes</span><span class="p">,</span> + <span class="n">max_workers</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> +<span class="n">parallel_time</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> <span class="o">-</span> <span class="n">start</span> + +<span class="n">parallel_output</span> <span class="o">=</span> <span class="n">run_simulator</span><span class="o">.</span><span class="n">outputs</span><span class="p">[</span><span class="nb">len</span><span class="p">(</span><span class="n">var_samples</span><span class="p">):]</span> +<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"parallel_output: </span><span class="si">{</span><span class="n">parallel_output</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span> + + +<span class="nb">print</span><span class="p">(</span><span class="s2">"Serial run time: "</span><span class="p">,</span> <span class="n">serial_time</span><span class="p">)</span> +<span class="nb">print</span><span class="p">(</span><span class="s2">"Parallel run time: "</span><span class="p">,</span> <span class="n">parallel_time</span><span class="p">)</span> +</pre></div> +</div> +<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>serial_output: [array([1008000.]), array([1520800.]), array([674000.]), array([869600.])] +parallel_output: [array([1008000.]), array([1520800.]), array([674000.]), array([869600.])] +Serial run time: 110.85352993011475 +Parallel run time: 62.39644193649292 +</pre></div> +</div> +<p>All output files returned by the <cite>simulator</cite> are</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">os</span><span class="o">.</span><span class="n">listdir</span><span class="p">(</span><span class="n">dir_out</span><span class="p">)</span> +</pre></div> +</div> +<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>['serial0_output.npy', 'parallel0_output.npy', 'serial1_output.npy', 'parallel2_output.npy', 'serial3_output.npy', 'parallel3_output.npy', 'serial2_output.npy', 'parallel1_output.npy'] +</pre></div> +</div> +<p>All output files/directories generated by r.avaflow simulations +(including files/directories generated during preprocessing) are</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">os</span><span class="o">.</span><span class="n">listdir</span><span class="p">(</span><span class="n">dir_sim</span><span class="p">)</span> +</pre></div> +</div> +<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>['serial0_glocation', 'parallel3_results', 'parallel2_glocation', 'serial3_shell.sh', 'parallel1_results', 'serial3_glocation', 'serial1_shell.sh', 'parallel2_results', 'serial0_shell.sh', 'parallel1_glocation', 'parallel3_shell.sh', 'parallel0_shell.sh', 'serial1_glocation', 'parallel1_shell.sh', 'parallel2_shell.sh', 'serial0_results', 'serial1_results', 'serial2_shell.sh', 'serial2_glocation', 'serial2_results', 'parallel3_glocation', 'parallel0_glocation', 'serial3_results', 'parallel0_results'] +</pre></div> +</div> +<div class="admonition warning"> +<p class="admonition-title">Warning</p> +<p>If one simulation failed due to whatever reason, the error massage +will be printed to the screen but other simulations will continue. In that +case, the output file of failed simulation will not be writted to <code class="docutils literal notranslate"><span class="pre">dir_out</span></code>. +Also, the element of <a class="reference internal" href="../../simulator/run_simulator.html#psimpy.simulator.run_simulator.RunSimulator.outputs" title="psimpy.simulator.run_simulator.RunSimulator.outputs"><code class="xref py py-attr docutils literal notranslate"><span class="pre">RunSimulator.outputs</span></code></a> corresponding to that +simulation will be a string representing the error message, instead of a +numpy array.</p> +</div> +<p>In the end, we delete the folder <cite>temp1_run_Ravaflow24Mixture_example</cite> and +<cite>temp2_run_Ravaflow24Mixture_example</cite> and all files therein.</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">shutil</span> + +<span class="n">shutil</span><span class="o">.</span><span class="n">rmtree</span><span class="p">(</span><span class="n">dir_sim</span><span class="p">)</span> +<span class="n">shutil</span><span class="o">.</span><span class="n">rmtree</span><span class="p">(</span><span class="n">dir_out</span><span class="p">)</span> +</pre></div> +</div> +<p class="sphx-glr-timing"><strong>Total running time of the script:</strong> ( 2 minutes 53.318 seconds)</p> +<div class="sphx-glr-footer sphx-glr-footer-example docutils container" id="sphx-glr-download-auto-examples-simulator-plot-run-ravaflow24-py"> +<div class="sphx-glr-download sphx-glr-download-python docutils container"> +<p><a class="reference download internal" download="" href="../../_downloads/06e1d1c67d64bdd5612e33cffc1295c5/plot_run_ravaflow24.py"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">Python</span> <span class="pre">source</span> <span class="pre">code:</span> <span class="pre">plot_run_ravaflow24.py</span></code></a></p> +</div> +<div class="sphx-glr-download sphx-glr-download-jupyter docutils container"> +<p><a class="reference download internal" download="" href="../../_downloads/ad745ba736a627e1e1bb6fcec00ac417/plot_run_ravaflow24.ipynb"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">Jupyter</span> <span class="pre">notebook:</span> <span class="pre">plot_run_ravaflow24.ipynb</span></code></a></p> +</div> +</div> +<p class="sphx-glr-signature"><a class="reference external" href="https://sphinx-gallery.github.io">Gallery generated by Sphinx-Gallery</a></p> +</section> + + + </div> + </div> + <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer"> + <a href="plot_ravaflow24.html" class="btn btn-neutral float-left" title="Ravaflow24 Mixture Model" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> + <a href="../../changelog.html" class="btn btn-neutral float-right" title="Changes" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a> + </div> + + <hr/> + + <div role="contentinfo"> + <p>© Copyright 2023, Hu Zhao.</p> + </div> + + Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a + <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> + provided by <a href="https://readthedocs.org">Read the Docs</a>. + + +</footer> + </div> + </div> + </section> + </div> + <script> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + +</body> +</html> \ No newline at end of file diff --git a/docs/source/_build/html/auto_examples/simulator/sg_execution_times.html b/docs/source/_build/html/auto_examples/simulator/sg_execution_times.html new file mode 100644 index 0000000..b84b620 --- /dev/null +++ b/docs/source/_build/html/auto_examples/simulator/sg_execution_times.html @@ -0,0 +1,139 @@ +<!DOCTYPE html> +<html class="writer-html5" lang="en" > +<head> + <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>Computation times — PSimPy's documentation</title> + <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-binder.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-dataframe.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/sg_gallery-rendered-html.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" /> + <!--[if lt IE 9]> + <script src="../../_static/js/html5shiv.min.js"></script> + <![endif]--> + + <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> + <script src="../../_static/jquery.js"></script> + <script src="../../_static/underscore.js"></script> + <script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script> + <script src="../../_static/doctools.js"></script> + <script src="../../_static/sphinx_highlight.js"></script> + <script src="../../_static/js/theme.js"></script> + <link rel="index" title="Index" href="../../genindex.html" /> + <link rel="search" title="Search" href="../../search.html" /> +</head> + +<body class="wy-body-for-nav"> + <div class="wy-grid-for-nav"> + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + <a href="../../index.html" class="icon icon-home"> psimpy + </a> + <div class="version"> + 0.1.2 + </div> +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> + <ul> +<li class="toctree-l1"><a class="reference internal" href="../../index.html">Home</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../quickstart.html">Getting Started</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../api.html">API & Theory</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../examples.html">Example Gallery</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../changelog.html">Changes</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../refs.html">References</a></li> +</ul> + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">psimpy</a> + </nav> + + <div class="wy-nav-content"> + <div class="rst-content"> + <div role="navigation" aria-label="Page navigation"> + <ul class="wy-breadcrumbs"> + <li><a href="../../index.html" class="icon icon-home"></a></li> + <li class="breadcrumb-item active">Computation times</li> + <li class="wy-breadcrumbs-aside"> + <a href="../../_sources/auto_examples/simulator/sg_execution_times.rst.txt" rel="nofollow"> View page source</a> + </li> + </ul> + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <section id="computation-times"> +<span id="sphx-glr-auto-examples-simulator-sg-execution-times"></span><h1>Computation times<a class="headerlink" href="#computation-times" title="Permalink to this heading"></a></h1> +<p><strong>08:52.712</strong> total execution time for <strong>auto_examples_simulator</strong> files:</p> +<table class="docutils align-default"> +<colgroup> +<col style="width: 85%" /> +<col style="width: 9%" /> +<col style="width: 6%" /> +</colgroup> +<tbody> +<tr class="row-odd"><td><p><a class="reference internal" href="plot_ravaflow24.html#sphx-glr-auto-examples-simulator-plot-ravaflow24-py"><span class="std std-ref">Ravaflow24 Mixture Model</span></a> (<code class="docutils literal notranslate"><span class="pre">plot_ravaflow24.py</span></code>)</p></td> +<td><p>05:56.157</p></td> +<td><p>0.0 MB</p></td> +</tr> +<tr class="row-even"><td><p><a class="reference internal" href="plot_run_ravaflow24.html#sphx-glr-auto-examples-simulator-plot-run-ravaflow24-py"><span class="std std-ref">RunSimulator: Ravaflow24 Mixture Model</span></a> (<code class="docutils literal notranslate"><span class="pre">plot_run_ravaflow24.py</span></code>)</p></td> +<td><p>02:53.318</p></td> +<td><p>0.0 MB</p></td> +</tr> +<tr class="row-odd"><td><p><a class="reference internal" href="plot_run_mass_point_model.html#sphx-glr-auto-examples-simulator-plot-run-mass-point-model-py"><span class="std std-ref">RunSimulator: Mass Point Model</span></a> (<code class="docutils literal notranslate"><span class="pre">plot_run_mass_point_model.py</span></code>)</p></td> +<td><p>00:01.687</p></td> +<td><p>0.0 MB</p></td> +</tr> +<tr class="row-even"><td><p><a class="reference internal" href="plot_mass_point_model.html#sphx-glr-auto-examples-simulator-plot-mass-point-model-py"><span class="std std-ref">Mass Point Model</span></a> (<code class="docutils literal notranslate"><span class="pre">plot_mass_point_model.py</span></code>)</p></td> +<td><p>00:01.550</p></td> +<td><p>0.0 MB</p></td> +</tr> +</tbody> +</table> +</section> + + + </div> + </div> + <footer> + + <hr/> + + <div role="contentinfo"> + <p>© Copyright 2023, Hu Zhao.</p> + </div> + + Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a + <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> + provided by <a href="https://readthedocs.org">Read the Docs</a>. + + +</footer> + </div> + </div> + </section> + </div> + <script> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + +</body> +</html> \ No newline at end of file -- GitLab