iam-git / WellMet (public) (License: MIT) (since 2021-08-31) (hash sha1)
WellMet is pure Python framework for spatial structural reliability analysis. Or, more specifically, for "failure probability estimation and detection of failure surfaces by adaptive sequential decomposition of the design domain".
List of commits:
Subject Hash Author Date (UTC)
voronoi: WIP baff3c5ccaf857f60194917fe5d6e33c40b01265 I am 2022-10-19 09:28:33
voronoi.ConvexSpline: little fix of np.sign() for better sleep 968f649e54d97abd596cd60749872fa3ef788c06 I am 2022-10-19 06:28:46
implement even more optimized Convex.. now ConvexSpline class c08511aecb32b880e73c9f10d07feff4dc588e8b I am 2022-10-19 04:11:13
voronoi: WIP cbb61d4544367a67c9a5c3fe6d64a9dc284eb364 I am 2022-10-18 05:05:44
voronoi: WIP e9c247fef30cfb678bad9b955d6f6a94a0ff61e7 I am 2022-10-18 01:02:30
candynodex: hotfix to support numpy masking indexing f359123b72a3d998d5eed4b9e611a5e402a18c8d I am 2022-10-17 09:02:33
add new lightweight candynodes module to replace old heavy ugly candybox ca97509f47c100df90e1e06d82ed7c759627bfd0 I am 2022-10-17 06:31:33
qt_gui: move CandyBox creating to the individual DiceBox widgets 29253625129219b5e550f82cae3da0e53ef5bd47 I am 2022-10-16 03:17:55
voronoi: WIP 4855190869e06df740cc05c64e8b27b2c3c5a88d I am 2022-10-15 22:46:51
voronoi: WIP 0298b3a0563587ea4fc24fa99b51d2e01d517203 I am 2022-10-15 20:00:25
voronoi: WIP 4b80757fa26e3d40dceac888480ec3d814f6abc9 I am 2022-10-15 17:30:11
voronoi: WIP 7cadd1d01d7f4bc3f51e785fe6ebf8cae6ff839a I am 2022-10-15 03:12:54
voronoi: clean up and comment out ContactSolver 543f8482a925ff6cf8485b9be616b5bd3c714d13 I am 2022-10-14 04:24:40
qt_gui.qt_gui: use ConvexSolver instead of ContactSolver (which did not work correctly) c1e49a9b2c3cc13886d317b460d7598f661cf216 I am 2022-10-14 04:01:06
voronoi: add fantastic ConvexSolver 2853826e5ef1abc79d3ac2fb8289b13c45211a31 I am 2022-10-14 04:00:14
qt_gui.qt_plot: add (finally!) Numbers class 4cdc658c0fcc857c23c0e39e91e7a1ce5e1b30a1 I am 2022-10-13 06:23:46
qt_gui.qt_gui: show contacts in distance matrix. Based on ContactSolver for now 21bd6101888d9f06d7d6a7c6ba2732ff30fdd68d I am 2022-10-13 04:16:41
voronoi: ContactSolver is ready. Ale je to na nic. Pomalá, potvora 28e2442b0101eac2407ed4a69c6f757ffd579cf1 I am 2022-10-13 04:14:59
voronoi: add some preliminary lines of ContactSolver. WIP 6a203b278c9fa6de7da75c402c80f78d40164fdf I am 2022-10-12 23:38:59
voronoi: přídat pár těžkých smyček. WIP 7b0ffb602ae00ab2f12dc98d34c35ec20afa3cc4 I am 2022-10-12 00:13:36
Commit baff3c5ccaf857f60194917fe5d6e33c40b01265 - voronoi: WIP
Author: I am
Author date (UTC): 2022-10-19 09:28
Committer name: I am
Committer date (UTC): 2022-10-19 09:28
Parent(s): 968f649e54d97abd596cd60749872fa3ef788c06
Signer:
Signing key:
Signing status: N
Tree: e053708b5f7f39f699bd1acd99c502184dce9417
File Lines added Lines deleted
wellmet/voronoi.py 81 4
File wellmet/voronoi.py changed (mode: 100644) (index fbb8d26..f642ead)
... ... class ContactVoronoi:
397 397
398 398 č co máme zadavat jako aweight u np.cov? č co máme zadavat jako aweight u np.cov?
399 399 č pdf bodíku? Nebo jejich vahy? č pdf bodíku? Nebo jejich vahy?
400 č Vahy.
401 č Rozepíšu zde dětailněji, protože to není na první pohled zřejmný
402 č a myslím si, že i kontrintuitivní
403 č 1. Uvaha číslo jedna: když se snažíme odhadnout rozptyl vzorků,
404 č výbraných z normálního rozdělení, tak jich hustotami nepřevažíme
405 č 2. Uvaha číslo dva: máme sadu IS a chceme odhadnout rozptyl skutečného
406 rozdělení. Chce se tu použit váhy, že ano?
407 č 3. Uvaha číslo tří: Jak bychom počítali těžiště a momenty setrvačnosti
408 rovinného obrazce s odlíšnou tloušťkou t? (označme "m" jako mass)
409
410 sum[y_i * A_i * t_i] Int y*t dA
411 y_c = ---------------------- = ----------
412 sum(A_i*t_i) Int t dA
413
414 sum[y_i * m_i] Int y dm
415 y_c = ---------------- = ----------
416 sum(m_i) Int dm
417
418 I = sum[(y_i - y_c)**2 * A_i * t_i] = Int (y-y_c)**2 * t dA
419
420 I = sum[(y_i - y_c)**2 * m_i] = Int (y-y_c)**2 dm
421
422 f_i je jako tloušťka t
423 1/h_i je jako integrovační ploška dA
424 w = f_i / h_i vahy jsou jako hmotnosti
425 Monte Carlo - integrovaní dělením na kusy stejné hmotnosti
426 IS - kusy mají odlíšnou hmotnost
427
428
429
430
400 431
401 č jak počítat skore? čím máme dělit pravděpodobnostní obsah?
402 č 1. sum((w_i - w_mean)**2) / n To je rozptyl w
403 č 2. sum((w_i - w_mean)**2) / n**2 To je rozptyl odhadu w_mean
404 č 3. sqrt(sum((w_i - w_mean)**2)) / n Směrodatná odhylka odhadu w_mean
432 č Score počítáme jako pravděpodobnostní obsah buňky dělený
433 č směrodatnou odchylkou odhadu (3.) Není to ale jediná možnost
434 č 1. sum((w_i - w_mean)**2) / n To je rozptyl w
435 č 2. sum((w_i - w_mean)**2) / n**2 To je rozptyl odhadu w_mean
436 č 3. sqrt(sum((w_i - w_mean)**2)) / n Směrodatná odchylka odhadu w_mean
405 437 """ """
406 438 def __init__(self, sample_box, hull, model_space='G', \ def __init__(self, sample_box, hull, model_space='G', \
407 439 p_norm=2, ns=1000, p_base=0.5, auto_update=True, \ p_norm=2, ns=1000, p_base=0.5, auto_update=True, \
 
... ... class ContactVoronoi:
666 698 #č p_couple není finální pravděpodobnost #č p_couple není finální pravděpodobnost
667 699 #č bodíky ještě musejí projít konvexní obálkou #č bodíky ještě musejí projít konvexní obálkou
668 700 nodes.p_couple = np.sum(w[mask]) nodes.p_couple = np.sum(w[mask])
701 nodes.score = nodes.p_couple / np.sqrt(np.var(nodes.w)/len(nodes))
669 702 #č a doporučíme (dočasně) k integraci #č a doporučíme (dočasně) k integraci
670 703 self._recommend_to_integration(idx) self._recommend_to_integration(idx)
671 704
 
... ... class ContactVoronoi:
956 989
957 990
958 991
992 # for simplex: d = nvar+2
993 # for cell: d = base_r**2
994 def IS_like(f_plan, sampling_space='G', weights=None, nis=1000, d=1, design=None):
995 """
996 takes sample and returns sampling plan with the same cov (in case d=1)
997 covariance matrix we'll divide by d
998 """
999
1000 plan = getattr(f_plan, sampling_space)
1001
1002
1003 S_bc = np.cov(plan, rowvar=False, bias=True, aweights=weights)
1004 barycenter = np.average(plan, axis=0, weights=weights)
1005
1006
1007 #č matika
1008 w, v = np.linalg.eig(S_bc)
1009
1010 # use IS sampling density with center equal to the simplex's barycenter
1011 # set the minimum distance as the standard deviation of IS densisty
1012 #č u stats.norm zadáváme směrodatnou odchylku, to je asi správné
1013 sigmas = np.sqrt(w/d)
1014 mean = 0
1015 h_plan_N, pdf_N = get_norm_plan(nis, f_plan.nvar, mean, sigmas, design)
1016
1017 #ёӵ здесь уже так легко не отделаемся. Трансформовать кароно.
1018 h_plan_bc = (v @ h_plan_N.T).T
1019 h_plan_sing = h_plan_bc + barycenter
1020
1021
1022
1023 #č sice to má nazev h_plan, ale nese rozdělení a hustoty v f-ku
1024 #
1025 #č jelikož výtvaříme nový vzorek z "čístých" souřadnic
1026 #č máme zaručeno, že h_plan vždy bude f_modelem (podle současného kódu CandyBox)
1027 h_plan = f_plan.new_sample(h_plan_sing, sampling_space)
1028 ## desired: w = h_plan.pdf(sampling_space) / pdf_N # snad je to správně
1029 w = np.divide(h_plan.pdf(sampling_space), pdf_N, out=pdf_N); del(pdf_N)
1030
1031 #č vahy máme
1032 #č zabalme do boxu
1033 #č zbytek už nejsou naši starosti
1034 return CandyBox(h_plan, w=w)
1035
959 1036
960 1037 def sample_alike(self, nodes): def sample_alike(self, nodes):
961 1038 """ """
Hints:
Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://rocketgit.com/user/iam-git/WellMet

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@ssh.rocketgit.com/user/iam-git/WellMet

Clone this repository using git:
git clone git://git.rocketgit.com/user/iam-git/WellMet

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a merge request:
... clone the repository ...
... make some changes and some commits ...
git push origin main