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: 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
add to repo voronoi module. WIP f43768c22d88fac7c7095be02d8c9b5620153976 I am 2022-10-11 03:29:49
convex_hull.Grick: malý puntičkářský fix v get_r() cfa07257b9ebadc21f2bd295d35978072fac19e9 I am 2022-10-10 07:14:26
qt_gui.qt_plot: add Grick to Ghull widget d90b9a87c3ef0989951a45b2a22346381ce16f02 I am 2022-10-10 03:17:24
convex_hull: implement Grick convex hull aproximation d09ca2e6aca41cfc67f3303eb97b97dd9c6f1fba I am 2022-10-10 03:15:52
qt_gui.qt_gui: distance matrix viewer is ready a532e5259c081a1aff193d3b61e0104c42b08f20 I am 2022-10-08 20:52:14
qt_gui.qt_gui: prepare distance matrix window 4eaea3305643c60c35f0b22421a7e57dbe7a7817 I am 2022-10-08 02:59:01
qt_gui.qt_graph_widgets: set up x limits for all graph widgets 413d114f6a4e4b45c6cd44959cc42588bb7c8008 I am 2022-10-07 22:54:46
qt_gui.qt_plot: set up equal aspect by default 11bfe09b3e96881ef6f7c8202a6723b6e8adc03a I am 2022-10-07 21:41:18
qt_gui.qt_gui: hide "connect/disconnect" button. It wasn't really supported d9f195fe0611d6cf9a8154f0175c6c9506d56247 I am 2022-10-07 21:33:07
qt_gui.qt_plot: fix zero r cirkle (off by one error) 681397de6d075b693897d5f64004c0eb481fd36f I am 2022-10-07 20:34:44
qt_gui: replace globally QtGui by QtWidgets 969a659ae31728e75f587f25f54bab1ae5d6bfff I am 2022-10-07 12:45:34
qt_gui: add radia in Gaussian space (GRaph) widget e3f5be57dcdc6bdd06cda0594ffd795ef5bc8ccc I am 2022-10-07 01:15:38
Commit 543f8482a925ff6cf8485b9be616b5bd3c714d13 - voronoi: clean up and comment out ContactSolver
Author: I am
Author date (UTC): 2022-10-14 04:24
Committer name: I am
Committer date (UTC): 2022-10-14 04:24
Parent(s): c1e49a9b2c3cc13886d317b460d7598f661cf216
Signer:
Signing key:
Signing status: N
Tree: 3d80147b8ea38f347dbd8a74620db208ae1a36e8
File Lines added Lines deleted
wellmet/voronoi.py 78 154
File wellmet/voronoi.py changed (mode: 100644) (index 136400c..331b9e2)
... ... from scipy.spatial import KDTree
9 9 from scipy.spatial import Delaunay from scipy.spatial import Delaunay
10 10 from scipy import spatial from scipy import spatial
11 11 from scipy import interpolate from scipy import interpolate
12 from scipy.optimize import linprog
13 12
14 13 import collections # for defaultdict import collections # for defaultdict
15 14
 
... ... class ConvexSolver:
94 93 č jejich Voroného buňky budou mít společnou stěnu (kontakt), č jejich Voroného buňky budou mít společnou stěnu (kontakt),
95 94 č neboli, což je totež, u Delone triangulace by měly společné simplexy č neboli, což je totež, u Delone triangulace by měly společné simplexy
96 95
97 linprog:
98 minimize c @ x
99 such that:
100 A_ub @ x <= b_ub
101 A_eq @ x == b_eq
102 lb <= x <= ub
103
104 č rovnice hyperroviny
105 H = ax + b = a1x1 + a2x2 + ... + b = 0
106 č ačka a bčko jsou pro nás neznamé
107 č takže máme ndim+1 iksů do tamtoho lineárního solveru
108
109 96 č nebudeme puntičkařit a pro jednoduchost předepíšeme, č nebudeme puntičkařit a pro jednoduchost předepíšeme,
110 97 č nechť dva body zájmu leží přímo v hyperrovině č nechť dva body zájmu leží přímo v hyperrovině
111 98 č (bude to hlasít existence rozhraní i v degenerovaných případech č (bude to hlasít existence rozhraní i v degenerovaných případech
112 99 č jako např. tří teček na jedné přímce. Mně to ale nevadí) č jako např. tří teček na jedné přímce. Mně to ale nevadí)
113 č Takže.
114
115 č pro linprog zadáme constrains Ax=b
116 A = [[ x_1i, x_2i, ..., x_ni, 1],
117 [ x_1j, x_2j, ..., x_nj, 1]]
118 b = [0, 0]
119
120
121 č Zbytek musí splňovat nerovnost, tj.
122 "Convex hull inequalities of the form Ax + b <= 0"
123
124 č Neboli Ax <= b v termínech linprog
125 č díky "menší nebo rovno"
126 č nemusíme plnou matici ani maskovat
127
128 č ačka hyperroviny zadavají jednotkový vektor normály,
129 č takže leží v mezích -1 < a < 1
130 č bčko lze omezit poloosou
131 100 """ """
132 101 def __init__(self, points): def __init__(self, points):
133 102 nsim, ndim = points.shape nsim, ndim = points.shape
 
... ... class ConvexSolver:
146 115
147 116
148 117
149 class ContactSolver:
150 """
151 č Hlavní pointa třídy:
152 č pokud dva body zvednuté na povrch convexního paraboloidu
153 č v prostoru ndim+1 (feature space, quadratic kernel)
154 č lze lineárně separovat (hyperrovinou) od ostatních bodů,
155 č znamená to, že v původním prostoru
156 č jejich Voroného buňky budou mít společnou stěnu (kontakt),
157 č neboli, což je totež, u Delone triangulace by měly společné simplexy
158
159 linprog:
160 minimize c @ x
161 such that:
162 A_ub @ x <= b_ub
163 A_eq @ x == b_eq
164 lb <= x <= ub
165
166 č rovnice hyperroviny
167 H = ax + b = a1x1 + a2x2 + ... + b = 0
168 č ačka a bčko jsou pro nás neznamé
169 č takže máme ndim+1 iksů do tamtoho lineárního solveru
170
171 č nebudeme puntičkařit a pro jednoduchost předepíšeme,
172 č nechť dva body zájmu leží přímo v hyperrovině
173 č (bude to hlasít existence rozhraní i v degenerovaných případech
174 č jako např. tří teček na jedné přímce. Mně to ale nevadí)
175 č Takže.
176
177 č pro linprog zadáme constrains Ax=b
178 A = [[ x_1i, x_2i, ..., x_ni, 1],
179 [ x_1j, x_2j, ..., x_nj, 1]]
180 b = [0, 0]
181
182
183 č Zbytek musí splňovat nerovnost, tj.
184 "Convex hull inequalities of the form Ax + b <= 0"
185
186 č Neboli Ax <= b v termínech linprog
187 č díky "menší nebo rovno"
188 č nemusíme plnou matici ani maskovat
189
190 č ačka hyperroviny zadavají jednotkový vektor normály,
191 č takže leží v mezích -1 < a < 1
192 č bčko lze omezit poloosou
193 """
194 def __init__(self, points):
195 nsim, ndim = points.shape
196
197 self.A = A = np.empty((nsim, ndim + 2))
198 A[:, :ndim] = points
199 # kind of datascience. feature space, quadratic kernel...
200 #č dáme to trochu niž (ten "ndim"), abychom se vyhli triviálnímu řešení
201 A[:, -2] = np.sum(np.square(points), axis=1)-1000
202 A[:, -1] = 1
203
204 self.lifted_points = A[:, :ndim+1]
205
206 #č žšmaria, alokovat nuly..
207 self.b_ub = np.atleast_1d(np.zeros(ndim-2))
208 self.c = np.zeros(ndim + 2)
209 self.b_eq = self.c[:2]
210 self.bounds = [(-1, 1) for __ in range(ndim + 1)]
211 #č skoro-nulové b-čko může být legální
212 #č ale musíme vyhnout triviálnímu řešení
213 #č nevím co s tím
214 self.bounds.append((None, -0.2))
215
216 def is_couple(self, couple_indices):
217 i, j = couple_indices
218
219 #č pro linprog zadáme constrains Ax=b
220 # A = [[ x_1i, x_2i, ..., x_ni, 1],
221 # [ x_1j, x_2j, ..., x_nj, 1]]
222 A_eq = self.A[[i, j]]
223
224 mask = np.ones(len(self.A), dtype=np.bool8)
225 mask[[i, j]] = False
226 A_ub = np.atleast_2d(self.A[mask])
227
228 result = linprog(self.c, A_ub=A_ub, b_ub=self.b_ub, A_eq=A_eq,\
229 b_eq=self.b_eq, bounds=self.bounds)
230
231 return result.success
232
233
234
235
236
237 def is_couple(self, couple_indices):
238 i, j = couple_indices
239
240 #č pro linprog zadáme constrains Ax=b
241 # A = [[ x_1i, x_2i, ..., x_ni, 1],
242 # [ x_1j, x_2j, ..., x_nj, 1]]
243 A_eq = self.A[[i, j]]
244
245
246 mask = np.ones(len(self.A), dtype=np.bool8)
247 mask[[i, j]] = False
248 A_ub = np.atleast_2d(self.A[mask])
249
250 result = linprog(self.c, A_ub=A_ub, b_ub=self.b_ub, A_eq=A_eq,\
251 b_eq=self.b_eq, bounds=self.bounds)
252
253 return result.success
254
255
256 # def solve(self, A_eq, couple_indices, constrains=[]):
118 #class ContactSolver:
119 # """
120 # č Hlavní pointa třídy:
121 # č pokud dva body zvednuté na povrch convexního paraboloidu
122 # č v prostoru ndim+1 (feature space, quadratic kernel)
123 # č lze lineárně separovat (hyperrovinou) od ostatních bodů,
124 # č znamená to, že v původním prostoru
125 # č jejich Voroného buňky budou mít společnou stěnu (kontakt),
126 # č neboli, což je totež, u Delone triangulace by měly společné simplexy
127 #
128 # linprog:
129 # minimize c @ x
130 # such that:
131 # A_ub @ x <= b_ub
132 # A_eq @ x == b_eq
133 # lb <= x <= ub
134 #
135 # č rovnice hyperroviny
136 # H = ax + b = a1x1 + a2x2 + ... + b = 0
137 # č ačka a bčko jsou pro nás neznamé
138 # č takže máme ndim+1 iksů do tamtoho lineárního solveru
139 #
140 # č nebudeme puntičkařit a pro jednoduchost předepíšeme,
141 # č nechť dva body zájmu leží přímo v hyperrovině
142 # č (bude to hlasít existence rozhraní i v degenerovaných případech
143 # č jako např. tří teček na jedné přímce. Mně to ale nevadí)
144 # č Takže.
145 #
146 # č pro linprog zadáme constrains Ax=b
147 # A = [[ x_1i, x_2i, ..., x_ni, 1],
148 # [ x_1j, x_2j, ..., x_nj, 1]]
149 # b = [0, 0]
150 #
151 #
152 # č Zbytek musí splňovat nerovnost, tj.
153 # "Convex hull inequalities of the form Ax + b <= 0"
154 #
155 # č Neboli Ax <= b v termínech linprog
156 # č díky "menší nebo rovno"
157 # č nemusíme plnou matici ani maskovat
158 #
159 # č ačka hyperroviny zadavají jednotkový vektor normály,
160 # č takže leží v mezích -1 < a < 1
161 # č bčko lze omezit poloosou
162 # """
163 # def __init__(self, points):
164 # nsim, ndim = points.shape
165 #
166 # self.A = A = np.empty((nsim, ndim + 2))
167 # A[:, :ndim] = points
168 # # kind of datascience. feature space, quadratic kernel...
169 # #č dáme to trochu niž (ten "ndim"), abychom se vyhli triviálnímu řešení
170 # A[:, -2] = np.sum(np.square(points), axis=1)-1000
171 # A[:, -1] = 1
172 #
173 # self.lifted_points = A[:, :ndim+1]
174 #
175 # #č žšmaria, alokovat nuly..
176 # self.b_ub = np.atleast_1d(np.zeros(ndim-2))
177 # self.c = np.zeros(ndim + 2)
178 # self.b_eq = self.c[:2]
179 # self.bounds = [(-1, 1) for __ in range(ndim + 1)]
180 # #č skoro-nulové b-čko může být legální
181 # #č ale musíme vyhnout triviálnímu řešení
182 # #č nevím co s tím
183 # self.bounds.append((None, -0.2))
184 #
185 # def is_couple(self, couple_indices):
257 186 # i, j = couple_indices # i, j = couple_indices
258 187 # #
259 # A_ub = np.atleast_2d(constrains)
260 # b_ub = np.atleast_1d(self.b_ub[:len(constrains)])
188 # #č pro linprog zadáme constrains Ax=b
189 # # A = [[ x_1i, x_2i, ..., x_ni, 1],
190 # # [ x_1j, x_2j, ..., x_nj, 1]]
191 # A_eq = self.A[[i, j]]
261 192 # #
262 # result = linprog(self.c, A_ub=A_ub, b_ub=b_ub, A_eq=A_eq,\
263 # b_eq=self.b_eq, bounds=self.bounds)
193 # mask = np.ones(len(self.A), dtype=np.bool8)
194 # mask[[i, j]] = False
195 # A_ub = np.atleast_2d(self.A[mask])
264 196 # #
265 # if len(constrains) < len(self.b_ub):
266 #
267 #
197 # result = linprog(self.c, A_ub=A_ub, b_ub=self.b_ub, A_eq=A_eq,\
198 # b_eq=self.b_eq, bounds=self.bounds)
268 199 # #
269 # else:
270 # return result.success
271
200 # return result.success
272 201
273 def get_constrain(hyperplane):
274 X = self.lifted_points
275 a = hyperplane[:-1]
276 b = X @ a
277 return np.argmax(b)
278 202
279 203
280 204
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