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)
dicebox: backport assess_candidates() to Chrt 62628b5b5f0f2da1f37c504175e4b7678ff94e8e I am 2022-04-11 05:39:40
dicebox.Goal: add chee and chee2 potentials 1b7e1af9932a9761652b57f2445daa7612f8f09e I am 2022-04-11 00:34:30
ghull.Ghull: fix NaN in get_r() method 654d4d32ebf8d14f88bc78dbee27567e9aa9564e I am 2022-04-10 16:06:24
estimation: nahradit zastaralou hlavičku 00b7aa07abc3072261da2cc7ba775d5228eefdf7 I am 2022-04-04 03:34:36
testcases.testcases_2D: add more nataf ceses ff4873afb1722500e3faed3c7a7f2552496b6e08 I am 2022-04-02 18:48:42
dicebox.Goal._handle_candidates: trigger cache update 80d401d5c4aaab0894d92e6df5390aff12738880 I am 2022-03-30 22:11:24
mplot.mfigs: add G_U_distortion plot 6ed034375dfd042706a91a368c9483270095e75c I am 2022-03-20 14:42:50
mplot.mart: add number_points function dab89bdb9e5190600aa394c9b65cfa24d162be0e I am 2022-03-20 14:42:23
testcases:testcases_nD: add hyperplane_pf3 87176287101b0a15a86c7999ba9626674400d225 I am 2022-03-20 14:41:26
testcases:gaussian_2D: add pf estimation for sinshilds case 889b5aebae164ea3fb1f9375ae58d1afa4687696 I am 2022-03-17 20:42:13
mplot: add rbf_density_plot() 62ce990cb9418418879d0f5e084a26043b5bfdeb I am 2022-03-04 03:00:32
misc: little changes to the rbf class 058a0401db09f4e9e68af72c987c3b879077864d I am 2022-03-03 22:53:48
mplot.maxes: rbf, one more try 8303470585507772e8170504989835f04a7828b9 I am 2022-03-02 22:13:08
mplot.maxes: add rbf_plot 3485da2191b2f64fac76813d072a6b6f6e2fba71 I am 2022-03-02 03:35:27
mplot.maxes: add rbf plot bd5055adced9e0d8887fa213baa0ff9f9e038ba4 I am 2022-03-02 02:17:18
misc: add small class for rbf surrogate model f8beecf63302ceae6d3462ed279b796b54149bdf I am 2022-03-02 02:16:01
testcases: pf_exact fix for suspension 3d case 0f3318cac398c9195e0b21a6f13edc9475156b0d I am 2022-03-02 02:14:55
g_models.CosExp2D: add pf_expression() method 3ebf3098bcff1a73a649059b1539d622d58b7439 I am 2022-02-06 19:38:37
mplot.mfigs.double_diagram(): do not share x axis. User can set up limits itself after all e74145928c028479070af2fe766d55f180828cdf I am 2022-02-06 05:02:59
testcases: add reference solution bounds to the whitebox 3358b3ff7903417f6484a875abb154d3a7c04a06 I am 2022-02-06 05:00:50
Commit 62628b5b5f0f2da1f37c504175e4b7678ff94e8e - dicebox: backport assess_candidates() to Chrt
Author: I am
Author date (UTC): 2022-04-11 05:39
Committer name: I am
Committer date (UTC): 2022-04-11 05:39
Parent(s): 1b7e1af9932a9761652b57f2445daa7612f8f09e
Signer:
Signing key:
Signing status: N
Tree: 961a4069651e6241887bdedb209693a568de9204
File Lines added Lines deleted
dicebox.py 62 127
File dicebox.py changed (mode: 100644) (index e18d534..096af44)
... ... class Chrt(DiceBox):
349 349 #ё без поллитры было не разобраться, что этот слоёный пирог делал #ё без поллитры было не разобраться, что этот слоёный пирог делал
350 350 def __init__(bx, sample_object, tri_space='Rn', tree_space=None,\ def __init__(bx, sample_object, tri_space='Rn', tree_space=None,\
351 351 sampling_space=None, kechato_space='U', potential='psee',\ sampling_space=None, kechato_space='U', potential='psee',\
352 p_norm=2, budget=1000, simplex_budget=100, \
352 p_norm=2, budget=1000, simplex_budget=100, q=0.5,\
353 353 LHS_correction=False, design=None): LHS_correction=False, design=None):
354 354
355 355
 
... ... class Chrt(DiceBox):
369 369 bx.budget = budget bx.budget = budget
370 370 bx.simplex_budget = simplex_budget bx.simplex_budget = simplex_budget
371 371 bx.p_norm = p_norm bx.p_norm = p_norm
372 bx.q = q
372 373 bx.potential = potential bx.potential = potential
373 374 bx.LHS_correction = LHS_correction bx.LHS_correction = LHS_correction
374 375 bx.design = design bx.design = design
 
... ... class Chrt(DiceBox):
715 716
716 717
717 718 # potřebuju nová slovesa # potřebuju nová slovesa
719 #ё пранк вышел из под контроля
720 #č jako, byl to takovej vtipeček označit potenciál dvojitým e
721 #č stala se z toho ale konvence, ne že by všal byla ničím nepodložena
722 #č algorithmus se sestavá ze dvou částí:
723 #č tri - triangulace,
724 #č tree - stromovej cKDTree scipy algorithmus, který hledá nejblížší body
725 #č (nechám bokem otázku, že ten asi hned na začátku nepřepiná do banalního brute force)
726 #č Každopadně, davá smysl, že psee, chee atd. potenciály spadají do tree části.
718 727 def assess_candidates(bx, candidates): def assess_candidates(bx, candidates):
728 #č nikdo to nepouživá, ale se mi nějaký takový parameter libí.
719 729 candidates.nsim_stamp = np.full(len(candidates), bx.nsim) candidates.nsim_stamp = np.full(len(candidates), bx.nsim)
720 730
721 731 candidates_tree = getattr(candidates, bx.tree_space) candidates_tree = getattr(candidates, bx.tree_space)
 
... ... class Chrt(DiceBox):
734 744 dd[mask] = 0 dd[mask] = 0
735 745 bx._logger(msg="cKDTree zlobí", orphan_candidates=candidates[mask], P=candidates[mask].P) bx._logger(msg="cKDTree zlobí", orphan_candidates=candidates[mask], P=candidates[mask].P)
736 746
737
747 # the most agressive potential ever
738 748 candidates.dd = dd candidates.dd = dd
739 candidates.ii = ii
740
741 749
742 750 if bx.potential in ('psee', 'fee', 'fee2'): if bx.potential in ('psee', 'fee', 'fee2'):
743 751 #оӵ кучапи #оӵ кучапи
 
... ... class Chrt(DiceBox):
749 757 PDF = PDFs[ii] PDF = PDFs[ii]
750 758 pdf = candidates.pdf(bx.tree_space) pdf = candidates.pdf(bx.tree_space)
751 759
752 candidates.tree_PDF = PDF
753 candidates.tree_pdf = pdf
754
755 candidates.tree_Pdf_mean = (pdf+PDF)/2
756 candidates.tree_Pdf_gmean = np.sqrt(pdf*PDF)
757 candidates.volume = np.power(dd , bx.nvar)
758 candidates.psee = candidates.tree_Pdf_gmean * candidates.volume
759 candidates.fee = candidates.tree_Pdf_mean * candidates.volume * np.power(pdf/PDF, 1/(bx.nvar+1))
760 candidates.fee2 = candidates.tree_Pdf_mean * candidates.volume * np.power(pdf/PDF, 1/(bx.nvar*2))
760 tree_Pdf_mean = (pdf+PDF)/2
761 tree_Pdf_gmean = np.sqrt(pdf*PDF)
762 volume = np.power(dd, bx.nvar)
763 candidates.psee = tree_Pdf_gmean * volume
764 candidates.fee = tree_Pdf_mean * volume * np.power(pdf/PDF, 1/(bx.nvar+1))
765 candidates.fee2 = tree_Pdf_mean * volume * np.power(pdf/PDF, 1/(bx.nvar*2))
761 766
762 767 elif bx.potential == 'ksee': # ksee elif bx.potential == 'ksee': # ksee
763 768 #оӵ кечато #оӵ кечато
 
... ... class Chrt(DiceBox):
768 773 # doufám, že je to legální # doufám, že je to legální
769 774 ksee[i==ii] = lk.kechato_potential(bx.f_model[i], candidates[i==ii], kechato_space=bx.kechato_space) ksee[i==ii] = lk.kechato_potential(bx.f_model[i], candidates[i==ii], kechato_space=bx.kechato_space)
770 775 candidates.ksee = ksee candidates.ksee = ksee
776
777 elif bx.potential == 'q_psee': #č kup si
778 #оӵ кучапи
779 #č pejskovej potenciál
780 #č psí-kučapí není invariántní vůči lineárním transformácím
781
782 PDFs = bx.sample_box.pdf(bx.tree_space)
783 # teď máme hustoty kandidatů a prislušejicích jím vzorků
784 PDF = PDFs[ii]
785 pdf = candidates.pdf(bx.tree_space)
786
787 volume = np.power(dd, bx.nvar)
788 candidates.psee = np.sqrt(pdf*PDF) * volume
789 candidates.q_psee = pdf**bx.q * PDF**(1-bx.q) * volume
790
791
792 elif bx.potential in ('chee', 'chee2'):
793 PDFs = bx.sample_box.pdf(bx.tree_space)
794 # teď máme hustoty kandidatů a prislušejicích jím vzorků
795 PDF = PDFs[ii]
796 candidates.PDF = PDF
797 pdf = candidates.pdf(bx.tree_space)
798 candidates.Pdf = pdf #č pdf() je funkce f_modelu
799
800
801 tree_Pdf_gmean = np.sqrt(pdf*PDF)
802 volume = np.power(dd, bx.nvar)
803 candidates.psee = tree_Pdf_gmean * volume
804
805 sum_squares = np.sqrt(np.sum(np.square(candidates.G), axis=1))
806 chi2 = stats.chi2.pdf(sum_squares, bx.nvar)
807 candidates.chi2 = chi2
808 candidates.chee2 = np.sqrt(chi2*PDF) * volume
809
810 r = np.sqrt(sum_squares)
811 candidates.r = r
812 chi = stats.chi.pdf(r, bx.nvar)
813 candidates.chi = chi
814 candidates.chee = np.sqrt(chi*PDF) * volume
815
816
771 817
772 818 # prepare to elections # prepare to elections
773 819 bx._nominate(candidates) bx._nominate(candidates)
 
... ... class Razitko(Erjee):
1028 1074 #ё без поллитры было не разобраться, что этот слоёный пирог делал #ё без поллитры было не разобраться, что этот слоёный пирог делал
1029 1075 def __init__(bx, sample_object, scheme, tri_space='Rn', tree_space=None,\ def __init__(bx, sample_object, scheme, tri_space='Rn', tree_space=None,\
1030 1076 sampling_space=None, kechato_space='U', potential='psee',\ sampling_space=None, kechato_space='U', potential='psee',\
1031 p_norm=2, budget=1000, \
1077 p_norm=2, q=0.5, budget=1000, \
1032 1078 LHS_correction=False, design=None): LHS_correction=False, design=None):
1033 1079
1034 1080 bx.scheme = scheme bx.scheme = scheme
 
... ... class Razitko(Erjee):
1047 1093 bx.kechato_space = kechato_space bx.kechato_space = kechato_space
1048 1094 bx.budget = budget bx.budget = budget
1049 1095 bx.p_norm = p_norm bx.p_norm = p_norm
1096 bx.q = q
1050 1097 bx.potential = potential bx.potential = potential
1051 1098 bx.LHS_correction = LHS_correction bx.LHS_correction = LHS_correction
1052 1099 bx.design = design bx.design = design
 
... ... class Goal(DiceBox):
1252 1299 #č a zaroveň je nominuje na soutež. #č a zaroveň je nominuje na soutež.
1253 1300 #č na vstupu assess_candidates musí být CandyBox #č na vstupu assess_candidates musí být CandyBox
1254 1301 #č s jíž nastaveným event_id #č s jíž nastaveným event_id
1255 #assess_candidates = Chrt.assess_candidates
1302 assess_candidates = Chrt.assess_candidates
1256 1303 _nominate = Chrt._nominate _nominate = Chrt._nominate
1257 1304
1258 1305 #č explicitně převezmu některé funkce #č explicitně převezmu některé funkce
 
... ... class Goal(DiceBox):
1439 1486 # bx.judge_candidates(bx.candidates) # bx.judge_candidates(bx.candidates)
1440 1487 # bx.assess_candidates(bx.candidates) # bx.assess_candidates(bx.candidates)
1441 1488
1442 #ё пранк вышел из под контроля
1443 #č jako, byl to takovej vtipeček označit potenciál dvojitým e
1444 #č stala se z toho ale konvence, ne že by všal byla ničím nepodložena
1445 #č algorithmus se sestavá ze dvou částí:
1446 #č tri - triangulace,
1447 #č tree - stromovej cKDTree scipy algorithmus, který hledá nejblížší body
1448 #č (nechám bokem otázku, že ten asi hned na začátku nepřepiná do banalního brute force)
1449 #č Každopadně, davá smysl, že psee, chee atd. potenciály spadají do tree části.
1450 def assess_candidates(bx, candidates):
1451 #č nikdo to nepouživá, ale se mi nějaký takový parameter libí.
1452 candidates.nsim_stamp = np.full(len(candidates), bx.nsim)
1453 1489
1454 candidates_tree = getattr(candidates, bx.tree_space)
1455 dd, ii = bx.tree.query(candidates_tree, k=1, p=bx.p_norm)
1456
1457 # from scipy documentation:
1458 # [dd] Missing neighbors are indicated with infinite distances.
1459 # [ii] Missing neighbors are indicated with self.n
1460
1461 #č mǐ radši budeme předpokladat nulovou vzdálenost a třeba nulového souseda
1462 #č ne, radší posledného souseda
1463 #č pokud ten chytrej strom si myslí, že nějaký kandidat nemá spolubydlu
1464 mask = ii == bx.nsim
1465 if np.any(mask): #č ať mě to neznervozňuje
1466 ii[mask] = bx.nsim - 1
1467 dd[mask] = 0
1468 bx._logger(msg="cKDTree zlobí", orphan_candidates=candidates[mask], P=candidates[mask].P)
1469
1470 # the most agressive potential ever
1471 candidates.dd = dd
1472
1473 if bx.potential in ('psee', 'fee', 'fee2'):
1474 #оӵ кучапи
1475 #č pejskovej potenciál
1476 #č psí-kučapí není invariántní vůči lineárním transformácím
1477
1478 PDFs = bx.sample_box.pdf(bx.tree_space)
1479 # teď máme hustoty kandidatů a prislušejicích jím vzorků
1480 PDF = PDFs[ii]
1481 pdf = candidates.pdf(bx.tree_space)
1482
1483 tree_Pdf_mean = (pdf+PDF)/2
1484 tree_Pdf_gmean = np.sqrt(pdf*PDF)
1485 volume = np.power(dd, bx.nvar)
1486 candidates.psee = tree_Pdf_gmean * volume
1487 candidates.fee = tree_Pdf_mean * volume * np.power(pdf/PDF, 1/(bx.nvar+1))
1488 candidates.fee2 = tree_Pdf_mean * volume * np.power(pdf/PDF, 1/(bx.nvar*2))
1489
1490 elif bx.potential == 'ksee': # ksee
1491 #оӵ кечато
1492 #č koťatko-káčátkovej potenciál
1493 #č ksí-kěčató není invariántní vůčí rotacím
1494 ksee = np.empty(len(candidates))
1495 for i in np.unique(ii):
1496 # doufám, že je to legální
1497 ksee[i==ii] = lk.kechato_potential(bx.f_model[i], candidates[i==ii], kechato_space=bx.kechato_space)
1498 candidates.ksee = ksee
1499
1500 elif bx.potential == 'q_psee': #č kup si
1501 #оӵ кучапи
1502 #č pejskovej potenciál
1503 #č psí-kučapí není invariántní vůči lineárním transformácím
1504
1505 PDFs = bx.sample_box.pdf(bx.tree_space)
1506 # teď máme hustoty kandidatů a prislušejicích jím vzorků
1507 PDF = PDFs[ii]
1508 pdf = candidates.pdf(bx.tree_space)
1509
1510 volume = np.power(dd, bx.nvar)
1511 candidates.psee = np.sqrt(pdf*PDF) * volume
1512 candidates.q_psee = pdf**bx.q * PDF**(1-bx.q) * volume
1513
1514
1515 elif bx.potential in ('chee', 'chee2'):
1516 PDFs = bx.sample_box.pdf(bx.tree_space)
1517 # teď máme hustoty kandidatů a prislušejicích jím vzorků
1518 PDF = PDFs[ii]
1519 candidates.PDF = PDF
1520 pdf = candidates.pdf(bx.tree_space)
1521 candidates.Pdf = pdf #č pdf() je funkce f_modelu
1522
1523
1524 tree_Pdf_gmean = np.sqrt(pdf*PDF)
1525 volume = np.power(dd, bx.nvar)
1526 candidates.psee = tree_Pdf_gmean * volume
1527
1528 sum_squares = np.sqrt(np.sum(np.square(candidates.G), axis=1))
1529 chi2 = stats.chi2.pdf(sum_squares, bx.nvar)
1530 candidates.chi2 = chi2
1531 candidates.chee2 = np.sqrt(chi2*PDF) * volume
1532
1533 r = np.sqrt(sum_squares)
1534 candidates.r = r
1535 chi = stats.chi.pdf(r, bx.nvar)
1536 candidates.chi = chi
1537 candidates.chee = np.sqrt(chi*PDF) * volume
1538
1539
1540
1541 # prepare to elections
1542 bx._nominate(candidates)
1543 1490
1544 1491
1545 1492 def _ghull_outside_callback(bx, outside_nodes): def _ghull_outside_callback(bx, outside_nodes):
 
... ... class Goal(DiceBox):
1760 1707 reader.export_estimation(bx.stm_filename, bx.global_stats) reader.export_estimation(bx.stm_filename, bx.global_stats)
1761 1708
1762 1709
1763 ##č nie treba počítat odhady v každem kroku
1764 ##č ale zas, taky že chceme do článků davat nějaké diagramy
1765 #
1766 ##č
1767 ##č po 2. kroku ghull.fire() nastaví vnější poloměr R a dovnitř už ani nesahne.
1768 ##č Je to v porádku, pokud rozhodování je v G prostoru,
1769 ##č protože v druhem kroku algoritmus nějak zvolil ten nejoptimálnější poloměr
1770 ##č a není v dalším kroku skutečně důvod pod ten poloměr jít.
1771 ##č Pokud rozhodujeme v R prostoru s nějakým divokým rozdělením - už je to trošku problem.
1772 #
1773 ##č Jak poznam, že není dostatek teček, nebo je nějaký problem? Jakou chybu hodí Ghull?
1774
1775 1710
1776 1711
1777 1712
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