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.circumtri: use mixed facet outside nodes as candidates only. 03c1c974dafa8ff041f032c89149da7fc5b90b39 I am 2023-01-03 15:55:57
shell: use query() method of the convex hull 321a3fab33684cb9bef3c2344200c6519b595bb0 I am 2023-01-03 15:54:45
convex_hull.QHull: implement query() method. Use myshovskych sheme as fallback bc79a6fbee4d488211bf55c88702f39a0126be1b I am 2023-01-03 15:53:00
dicebox.circumtri: handle singular matrix error of CircumCenter 8207789777268039e7a866a594191063c6429c04 I am 2023-01-02 23:56:40
simplex.CubatureIntegration: check for non-finite simplex volumes 3a1473c7452c7dc3a9299ed88520412eb31924c1 I am 2023-01-02 22:51:14
dicebox.circumtri: return to psi potential 9db1f5b0e412ae871ae5f5fbb5ff214a8ddd7f45 I am 2023-01-02 22:20:28
dicebox.circumtri: bughunting 5f9d2b9e4d8077c9e4552d47bf1da789d8cfbcf8 I am 2022-12-29 15:02:14
dicebox.circumtri: process filtered integration nodes as candidates too 315e2f9700d93f1379985dafa818b44df53422a2 I am 2022-12-29 13:51:52
dicebox.circumtri: return back weighted entropy 0424243e29a600ecb1d046631badbc9797e11369 I am 2022-12-28 19:11:30
qt_gui.qt_graph_widgets: reflect renewed simplex estimators 90c83c7c7e6e58d6b9044db1a5e55f9a8a7dd7cd I am 2022-12-28 16:15:40
dicebox: rework CircumTri e360b2f092c11a42b5ac1081061f2891bff3d8de I am 2022-12-28 15:52:28
simplex: make _Triangulation more clean; rework CubatureIntegration fb7dd9fef8592944fbd93a3f07b44c2355d45e20 I am 2022-12-28 15:48:20
introduce shell module, clean version of ghull b13e9b2b15d109770e0c3fbdd5bb7b2a3b5bf5fc I am 2022-12-28 15:45:27
qt_gui.qt_plot.CandidatesWidget: regression fix a75874b5a53e7b420672b582f3ff415b17a32e9b I am 2022-12-23 12:19:51
qt_gui.qt_pairwise.ContactWidget: add mask function 6f88fec7db92e5cd21826a06f42a609a3e03cb6b I am 2022-12-21 15:20:01
qt_gui.qt_pairwise.ContactWidget: add option for mixed pairs only adjacency search. 2f87e8a18908de607b8abc0779448ca3095c134c I am 2022-12-21 14:30:23
qt_gui.qt_dicebox: reflect changes in CircumTri class 9821d389240a383f0b13b7dd92cd501e1c40c537 I am 2022-12-15 09:36:16
dicebox.circumtri: employ _Exploration class. Keep naive CircumTri class in renamed module b8605fb24d55b3296ceac34afba541a5b7ee3070 I am 2022-12-15 09:33:59
convex_hull.QHull.get_exploration_vector: self -> hull fix dae47ef37b5871a98d2ea274cc35aeb2a4eebe1c I am 2022-12-15 09:30:31
qt_gui/qt_dicebox: add DumpExplorationWidget b687895f06c780418a12eea59bd052ad7cd348f3 I am 2022-12-15 01:31:14
Commit 03c1c974dafa8ff041f032c89149da7fc5b90b39 - dicebox.circumtri: use mixed facet outside nodes as candidates only.
Author: I am
Author date (UTC): 2023-01-03 15:55
Committer name: I am
Committer date (UTC): 2023-01-03 15:55
Parent(s): 321a3fab33684cb9bef3c2344200c6519b595bb0
Signer:
Signing key:
Signing status: N
Tree: 9bb051a9f51e1119af4a0010f6bc78bc9af05534
File Lines added Lines deleted
wellmet/dicebox/circumtri.py 67 37
File wellmet/dicebox/circumtri.py changed (mode: 100644) (index f047642..d69f288)
... ... class CircumTri(_Exploration):
315 315 else: else:
316 316 bx._regen_inside() bx._regen_inside()
317 317
318
319 if np.any(bx.convex_hull.is_outside(input_sample)):
318 R2 = np.sum(input_sample.G**2, axis=1)
319 if bx._nsim > 1 and np.any(R2 > bx.shell_stats.R**2):
320 320 bx.to_explore = 0 bx.to_explore = 0
321 321 bx.convex_hull.update() bx.convex_hull.update()
322 322 bx.estimate_outside() bx.estimate_outside()
323 elif np.any(bx.convex_hull.is_outside(input_sample)):
324 bx.to_refine = 0
325 bx.convex_hull.update()
326 bx.estimate_outside()
323 327 else: else:
324 328 bx.to_refine = 0 bx.to_refine = 0
325 329
 
... ... class CircumTri(_Exploration):
328 332
329 333
330 334
335 def is_mixed(bx, simplices=None):
331 336
337 if simplices is None:
338 simplices = bx.tri.simplices
339
340 in_failure = np.isin(simplices, bx.failure_points)
341 has_failure = in_failure.any(axis=1)
342 all_failure = in_failure.all(axis=1)
343 return np.logical_xor(has_failure, all_failure)
332 344
333 345
334 # def _rate_outside_nodes(bx, outside_nodes, d):
335 # #č sice získáme filtrovaný outside,
336 # node_potentials = outside_nodes.pdf(bx.tri_space)**(1 / bx.nvar) * d
337 #
338 # max_node = np.nanargmax(node_potentials)
339 # max_node_potential = node_potentials[max_node]
340 #
341 #
342 # if max_node_potential > bx.potential_index[-1]:
343 # node_rating = 0 #max_node_potential * max_entropy
344 # if bx.store_candidates_metainformation:
345 # outside_node = CandyNodes(outside_nodes[max_node])
346 # outside_node.potential = max_node_potential
347 # outside_node.rating = node_rating
348 # else:
349 # outside_node = outside_nodes[max_node]
350 #
351 # bx.candidates_index[-1] = outside_node
352 # bx.potential_index.pop(-1)
353 # bx.potential_index[-1] = max_node_potential
354 # bx.rating_index.pop(-1, None)
355 # bx.rating_index[-1] = node_rating
346 def _rate_outside_nodes(bx, outside_nodes, d, i):
347 failsi = bx.failsi
348 if np.all(failsi) or not np.any(failsi):
349 return
350
351 try:
352 mask = bx.is_mixed(bx.convex_hull.simplices[i])
353 if not np.any(mask):
354 return
355 outside_nodes = outside_nodes[mask]
356 d = d[mask]
357
358 except:
359 pass
360
361 #č konkretně tato třída je pevně napojena na G prostor
362 #č ale bacha, kbyby se to změnilo...
363 _d1, i1 = bx.tree.query(outside_nodes.G, k=1)
364
365 PDF = bx.pdf(bx.tri_space)
366
367 nodes_pdf = outside_nodes.pdf(bx.tri_space)
368 node_potentials = d**bx.nvar * nodes_pdf**bx.psi_q * PDF[i1]**(1-bx.psi_q)
369
370 max_node = np.argmax(node_potentials)
371 max_node_potential = node_potentials[max_node]
372
373
374 if max_node_potential > bx.potential_index[-1]:
375 if bx.store_candidates_metainformation:
376 outside_node = CandyNodes(outside_nodes[max_node])
377 outside_node.potential = max_node_potential
378 else:
379 outside_node = outside_nodes[max_node]
380
381 bx.candidates_index[-1] = outside_node
382 bx.potential_index.pop(-1)
383 bx.potential_index[-1] = max_node_potential
356 384
357 385
358 386
 
... ... class CircumTri(_Exploration):
364 392 #č Máme 2 úkoly: #č Máme 2 úkoly:
365 393 #č 1. Získat odhady a uložit je, abychom nemuseli opakovaně integrovat, #č 1. Získat odhady a uložit je, abychom nemuseli opakovaně integrovat,
366 394 #č dokud se neobjeví nějaký nový vzorek zvenku. #č dokud se neobjeví nějaký nový vzorek zvenku.
367 # #č 2. Získat kandidaty.
368 # #č a. z mezíkruží (-12)
369 #
370 # #č prace s tečkami v mezikruži se změnila
371 # #č teď tečky dostávám přes kolbek po částech
372 # #č a není předem známo, kolik těch částí bude.
373 # bx.candidates_index.pop(-1, None)
374 # #č těch kastomných slovníků se bojím...
375 # bx.potential_index.pop(-1, None)
376 # #bx.rating_index.pop(-1, None)
377 # bx.potential_index[-1] = 0 #č pro callback
395 #č 2. Získat kandidaty.
396 #č a. z mezíkruží (-12)
397
398 #č prace s tečkami v mezikruži se změnila
399 #č teď tečky dostávám přes kolbek po částech
400 #č a není předem známo, kolik těch částí bude.
401 bx.candidates_index.pop(-1, None)
402 #č těch kastomných slovníků se bojím...
403 bx.potential_index.pop(-1, None)
404 #bx.rating_index.pop(-1, None)
405 bx.potential_index[-1] = 0 #č pro callback
378 406
379 407 bx.shell_stats = bx.ghull.get_shell_estimation() bx.shell_stats = bx.ghull.get_shell_estimation()
380 408
409 bx.tree = KDTree(bx.G, compact_nodes=True, balanced_tree=False)
410
381 411 # get candidates! # get candidates!
382 412 #č explicitně (pokažde) počtem teček zadavám přesnost integrace #č explicitně (pokažde) počtem teček zadavám přesnost integrace
383 413 #č takže změny bx.shell_budget budou při dálším spuštění aplikovány #č takže změny bx.shell_budget budou při dálším spuštění aplikovány
384 bx.shell_estimation = bx.ghull.integrate(bx.shell_budget)
385 #callback_outside=bx._rate_outside_nodes)
414 bx.shell_estimation = bx.ghull.integrate(bx.shell_budget,
415 callback_outside=bx._rate_outside_nodes)
386 416
387 417
388 418
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