pymoo 0.6.1.1__cp311-cp311-macosx_10_9_universal2.whl → 0.6.1.2__cp311-cp311-macosx_10_9_universal2.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pymoo might be problematic. Click here for more details.

Files changed (36) hide show
  1. pymoo/algorithms/moo/age.py +3 -2
  2. pymoo/algorithms/moo/nsga3.py +1 -2
  3. pymoo/algorithms/moo/sms.py +3 -0
  4. pymoo/algorithms/soo/nonconvex/cmaes.py +1 -1
  5. pymoo/algorithms/soo/nonconvex/es.py +1 -1
  6. pymoo/algorithms/soo/nonconvex/optuna.py +1 -4
  7. pymoo/algorithms/soo/nonconvex/pattern.py +1 -1
  8. pymoo/constraints/adaptive.py +2 -2
  9. pymoo/constraints/eps.py +1 -1
  10. pymoo/core/algorithm.py +1 -0
  11. pymoo/core/individual.py +512 -49
  12. pymoo/core/plot.py +1 -1
  13. pymoo/core/result.py +3 -0
  14. pymoo/core/variable.py +310 -16
  15. pymoo/cython/calc_perpendicular_distance.cpython-311-darwin.so +0 -0
  16. pymoo/cython/decomposition.cpython-311-darwin.so +0 -0
  17. pymoo/cython/hv.cpython-311-darwin.so +0 -0
  18. pymoo/cython/info.cpython-311-darwin.so +0 -0
  19. pymoo/cython/mnn.cpython-311-darwin.so +0 -0
  20. pymoo/cython/non_dominated_sorting.cpython-311-darwin.so +0 -0
  21. pymoo/cython/pruning_cd.cpython-311-darwin.so +0 -0
  22. pymoo/cython/stochastic_ranking.cpython-311-darwin.so +0 -0
  23. pymoo/gradient/__init__.py +3 -1
  24. pymoo/gradient/grad_autograd.py +28 -4
  25. pymoo/util/function_loader.py +31 -21
  26. pymoo/util/nds/dominance_degree_non_dominated_sort.py +159 -0
  27. pymoo/util/ref_dirs/__init__.py +2 -0
  28. pymoo/util/ref_dirs/energy.py +4 -5
  29. pymoo/util/ref_dirs/energy_layer.py +5 -4
  30. pymoo/util/ref_dirs/incremental.py +68 -0
  31. pymoo/version.py +1 -1
  32. {pymoo-0.6.1.1.dist-info → pymoo-0.6.1.2.dist-info}/METADATA +2 -3
  33. {pymoo-0.6.1.1.dist-info → pymoo-0.6.1.2.dist-info}/RECORD +36 -34
  34. {pymoo-0.6.1.1.dist-info → pymoo-0.6.1.2.dist-info}/WHEEL +1 -1
  35. {pymoo-0.6.1.1.dist-info → pymoo-0.6.1.2.dist-info}/LICENSE +0 -0
  36. {pymoo-0.6.1.1.dist-info → pymoo-0.6.1.2.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,159 @@
1
+ """Module which implements Dominance Degree Approaches for Non-dominated Sorting.
2
+
3
+ For the original work see:
4
+ DDA-NS https://ieeexplore.ieee.org/document/7469397
5
+ DDA-ENS https://ieeexplore.ieee.org/document/9282978
6
+
7
+ Adapted from https://github.com/rsenwar/Non-Dominated-Sorting-Algorithms/tree/master
8
+ """
9
+
10
+
11
+ from typing import Literal, List
12
+ import numpy as np
13
+
14
+
15
+ def construct_comp_matrix(vec: np.ndarray, sorted_idx: np.ndarray) -> np.ndarray:
16
+ """
17
+ const_comp_mat construct the comparison matrix from a row-vector vec.
18
+
19
+ Parameters
20
+ ----------
21
+ vec : np.ndarray
22
+ The vector of scores for the population on a single objective
23
+ sorted_idx : np.ndarray
24
+ The indices which would sort `vec`
25
+
26
+ Returns
27
+ -------
28
+ np.ndarray
29
+ The comparison matrix indicating whether each member in the population dominates the other member for the
30
+ objective in `vec`
31
+ """
32
+ n = vec.shape[0]
33
+ c = np.zeros(shape=(n, n), dtype=np.int32)
34
+
35
+ # the elements of the b(0)-th row in C are all set to 1
36
+ c[sorted_idx[0], :] = 1
37
+
38
+ for i in range(1, n):
39
+ if vec[sorted_idx[i]] == vec[sorted_idx[i - 1]]:
40
+ # the rows in C corresponding to the same elements in w are identical
41
+ c[sorted_idx[i]] = c[sorted_idx[i - 1]]
42
+ else:
43
+ c[sorted_idx[i], sorted_idx[i:]] = 1
44
+
45
+ return c
46
+
47
+
48
+ def construct_domination_matrix(f_scores: np.ndarray, **kwargs) -> np.ndarray:
49
+ """
50
+ construct_domination_matrix calculates the dominance degree matrix for a set of vectors.
51
+
52
+ The dominance degree indicate the degree of dominance of a solution, which is the number of
53
+ objectives for which it is the dominating solution.
54
+
55
+ Parameters
56
+ ----------
57
+ f_scores : np.ndarray
58
+ an N x M matrix of N (population size) objective function values for M objectives
59
+ """
60
+ d = np.zeros((f_scores.shape[0], f_scores.shape[0]), dtype=np.int32)
61
+ b = np.apply_over_axes(np.argsort, f_scores, axes=0)
62
+ for vec, srt in zip(f_scores.T, b.T):
63
+ d += construct_comp_matrix(vec, srt)
64
+ d = np.where(
65
+ np.logical_and(d == f_scores.shape[-1], d.T == f_scores.shape[-1]), 0, d
66
+ )
67
+ return d
68
+
69
+
70
+ def dda_ns(f_scores: np.ndarray, **kwargs) -> List[List[int]]:
71
+ """
72
+ dda_ns runs the DDA-NS algorithm.
73
+
74
+ Parameters
75
+ ----------
76
+ f_scores : np.ndarray
77
+ an N x M matrix of N (population size) objective function values for M objectives
78
+
79
+ Returns
80
+ -------
81
+ List[List[int]]
82
+ A list of members of each Pareto front. The index in the outer most list corresponds to the level in the Pareto front
83
+ while the value in the inner-most list is the id of the member of the population belonging to that front.
84
+ """
85
+ d_mx = construct_domination_matrix(f_scores)
86
+ max_d = np.empty((f_scores.shape[0],), dtype=np.int32)
87
+
88
+ fronts = []
89
+ count = 0
90
+ while count < f_scores.shape[0]:
91
+ # Max(D) is the row vector containing the maximum elements from each column of D
92
+ np.max(d_mx, out=max_d, axis=0)
93
+ front = [i for i, m_d in enumerate(max_d) if 0 <= m_d < f_scores.shape[-1]]
94
+ count += len(front)
95
+ d_mx[front] = -1
96
+ d_mx[:, front] = -1
97
+ fronts.append(front)
98
+
99
+ return fronts
100
+
101
+
102
+ def dda_ens(f_scores: np.ndarray, **kwargs) -> List[List[int]]:
103
+ """
104
+ dda_ens runs the DDA-ENS (efficient DDA) algorithm
105
+
106
+ Parameters
107
+ ----------
108
+ f_scores : np.ndarray
109
+ The N x M matrix of N (population size) objective function values for M objectives
110
+
111
+ Returns
112
+ -------
113
+ List[List[int]]
114
+ an N x M matrix of N (population size) objective function values for M objectives
115
+ """
116
+ d_mx = construct_domination_matrix(f_scores)
117
+
118
+ fronts: List[List[int]] = []
119
+ for s in np.lexsort(f_scores.T):
120
+ isinserted = False
121
+ for fk in fronts:
122
+ if not (d_mx[fk, s] == f_scores.shape[1]).any():
123
+ fk.append(s)
124
+ isinserted = True
125
+ break
126
+ if not isinserted:
127
+ fronts.append([s])
128
+ return fronts
129
+
130
+
131
+ def dominance_degree_non_dominated_sort(
132
+ f_scores: np.ndarray, strategy: Literal["efficient", "fast"] = "efficient"
133
+ ) -> List[List[int]]:
134
+ """
135
+ dominance_degree_non_dominated_sort performs the non-dominating sort with the specified algorithm
136
+
137
+ Parameters
138
+ ----------
139
+ f_scores : np.ndarray
140
+ The N x M matrix of N (population size) objective function values for M objectives
141
+ strategy : Literal["efficient", "fast"], optional
142
+ The dominance degree algorithm to use, by default "efficient"
143
+
144
+ Returns
145
+ -------
146
+ List[List[int]]
147
+ A list of members of each Pareto front. The index in the outer most list corresponds to the level in the Pareto front
148
+ while the value in the inner-most list is the id of the member of the population belonging to that front.
149
+
150
+ Raises
151
+ ------
152
+ ValueError
153
+ If an invalid strategy is specified
154
+ """
155
+ if strategy == "efficient":
156
+ return dda_ens(f_scores)
157
+ if strategy == "fast":
158
+ return dda_ns(f_scores)
159
+ raise ValueError("Invalid search strategy")
@@ -1,6 +1,7 @@
1
1
  from pymoo.util.ref_dirs.energy import RieszEnergyReferenceDirectionFactory
2
2
  from pymoo.util.ref_dirs.energy_layer import LayerwiseRieszEnergyReferenceDirectionFactory
3
3
  from pymoo.util.ref_dirs.reduction import ReductionBasedReferenceDirectionFactory
4
+ from pymoo.util.ref_dirs.incremental import IncrementalReferenceDirectionFactory
4
5
  from pymoo.util.reference_direction import MultiLayerReferenceDirectionFactory
5
6
 
6
7
 
@@ -14,6 +15,7 @@ def get_reference_directions(name, *args, **kwargs):
14
15
  "multi-layer": MultiLayerReferenceDirectionFactory,
15
16
  "layer-energy": LayerwiseRieszEnergyReferenceDirectionFactory,
16
17
  "reduction": ReductionBasedReferenceDirectionFactory,
18
+ "incremental": IncrementalReferenceDirectionFactory,
17
19
  }
18
20
 
19
21
  if name not in REF:
@@ -1,7 +1,6 @@
1
1
  import numpy as np
2
- import pymoo.gradient.toolbox as anp
3
-
4
2
 
3
+ from pymoo.gradient.grad_autograd import triu_indices, sqrt, log
5
4
  from pymoo.util.ref_dirs.construction import ConstructionBasedReferenceDirectionFactory
6
5
  from pymoo.util.ref_dirs.misc import project_onto_sum_equals_zero_plane, project_onto_unit_simplex_recursive
7
6
  from pymoo.util.ref_dirs.optimizer import Adam
@@ -280,9 +279,9 @@ def squared_dist(A, B):
280
279
 
281
280
 
282
281
  def calc_potential_energy(A, d):
283
- i, j = anp.triu_indices(len(A), 1)
284
- D = anp.sqrt(squared_dist(A, A)[i, j])
285
- energy = anp.log((1 / D ** d).mean())
282
+ i, j = triu_indices(len(A), 1)
283
+ D = sqrt(squared_dist(A, A)[i, j])
284
+ energy = log((1 / D ** d).mean())
286
285
  return energy
287
286
 
288
287
 
@@ -1,7 +1,8 @@
1
- import autograd.numpy as anp
1
+
2
+
2
3
  import numpy as np
3
- from autograd import value_and_grad
4
4
 
5
+ from pymoo.gradient.grad_autograd import value_and_grad, triu_indices, row_stack
5
6
  from pymoo.util.normalization import normalize
6
7
  from pymoo.util.ref_dirs.energy import squared_dist
7
8
  from pymoo.util.ref_dirs.optimizer import Adam
@@ -102,14 +103,14 @@ def get_points(X, scalings):
102
103
  vals = []
103
104
  for i in range(len(X)):
104
105
  vals.append(scale_reference_directions(X[i], scalings[i]))
105
- X = anp.row_stack(vals)
106
+ X = row_stack(vals)
106
107
  return X
107
108
 
108
109
 
109
110
  def calc_potential_energy(scalings, X):
110
111
  X = get_points(X, scalings)
111
112
 
112
- i, j = anp.triu_indices(len(X), 1)
113
+ i, j = triu_indices(len(X), 1)
113
114
  D = squared_dist(X, X)[i, j]
114
115
 
115
116
  if np.any(D < 1e-12):
@@ -0,0 +1,68 @@
1
+ import numpy as np
2
+
3
+ from pymoo.util.reference_direction import ReferenceDirectionFactory
4
+
5
+ def check_n_points(n_points, n_dim):
6
+ """
7
+ Returns n_partitions or a numeric value associated with the exception message.
8
+ """
9
+
10
+ if n_dim == 1:
11
+ return [0]
12
+
13
+ I = n_dim * np.eye(n_dim)
14
+ W = np.zeros((1, n_dim))
15
+ edgeW = W
16
+ i = 0
17
+
18
+ while len(W) < n_points:
19
+ edgeW = np.tile(edgeW, (n_dim, 1)) + np.repeat(I, edgeW.shape[0], axis=0)
20
+ edgeW = np.unique(edgeW, axis=0)
21
+ edgeW = edgeW [np.any(edgeW == 0, axis=1)]
22
+ W = np.vstack((W + 1, edgeW))
23
+ i += 1
24
+
25
+ if len(W) == n_points:
26
+ return [i]
27
+
28
+ return [len(W) - len(edgeW), i - 1, len(W), i]
29
+
30
+
31
+ def incremental_lattice(n_partitions, n_dim):
32
+ I = n_dim * np.eye(n_dim)
33
+ W = np.zeros((1, n_dim))
34
+ edgeW = W
35
+
36
+ for _ in range(n_partitions):
37
+ edgeW = np.tile(edgeW, (n_dim, 1)) + np.repeat(I, edgeW.shape[0], axis=0)
38
+ edgeW = np.unique(edgeW, axis=0)
39
+ edgeW = edgeW [np.any(edgeW == 0, axis=1)]
40
+ W = np.vstack((W + 1, edgeW))
41
+
42
+ return W / (n_dim * n_partitions)
43
+
44
+ class IncrementalReferenceDirectionFactory(ReferenceDirectionFactory):
45
+
46
+ def __init__(self, n_dim, scaling=None, n_points=None, n_partitions=None, **kwargs) -> None:
47
+ super().__init__(n_dim, scaling=scaling, **kwargs)
48
+
49
+ if n_points is not None:
50
+ results = check_n_points(n_points, n_dim)
51
+
52
+ # the number of points are not matching to any partition number
53
+ if len(results) > 1:
54
+ raise Exception("The number of points (n_points = %s) can not be created uniformly.\n"
55
+ "Either choose n_points = %s (n_partitions = %s) or "
56
+ "n_points = %s (n_partitions = %s)." %
57
+ (n_points, results[0], results[1], results[2], results[3]))
58
+
59
+ self.n_partitions = results[0]
60
+
61
+ elif n_partitions is not None:
62
+ self.n_partitions = n_partitions
63
+
64
+ else:
65
+ raise Exception("Either provide number of partitions or number of points.")
66
+
67
+ def _do(self):
68
+ return incremental_lattice(self.n_partitions, self.n_dim)
pymoo/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "0.6.1.1"
1
+ __version__ = "0.6.1.2"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pymoo
3
- Version: 0.6.1.1
3
+ Version: 0.6.1.2
4
4
  Summary: Multi-Objective Optimization in Python
5
5
  Home-page: https://pymoo.org
6
6
  Author: Julian Blank
@@ -14,11 +14,10 @@ Classifier: Operating System :: OS Independent
14
14
  Classifier: License :: OSI Approved :: Apache Software License
15
15
  Classifier: Programming Language :: Python
16
16
  Classifier: Programming Language :: Python :: 3
17
- Classifier: Programming Language :: Python :: 3.7
18
- Classifier: Programming Language :: Python :: 3.8
19
17
  Classifier: Programming Language :: Python :: 3.9
20
18
  Classifier: Programming Language :: Python :: 3.10
21
19
  Classifier: Programming Language :: Python :: 3.11
20
+ Classifier: Programming Language :: Python :: 3.12
22
21
  Classifier: Topic :: Scientific/Engineering
23
22
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
24
23
  Classifier: Topic :: Scientific/Engineering :: Mathematics
@@ -2,7 +2,7 @@ pymoo/__init__.py,sha256=v67f70WmTZmKmlKYvMrMGQQ5WDnzpOkqsZayAB0wdIw,40
2
2
  pymoo/config.py,sha256=ac6bls9Oz4-NvR7xW_DVWmHaJHwKXGMisKe1NqwX3QE,909
3
3
  pymoo/docs.py,sha256=WvBHBNSuR0MMmyTHIuWuj92ORBH7ZVD9_2hGKdd5v1A,8666
4
4
  pymoo/optimize.py,sha256=g3KLa7vieXaMn_67Mx7UUGPYGt5OgEBI7xNzmVFKnRw,2338
5
- pymoo/version.py,sha256=nwyEh5NE8fNTLjPrE3HxIMYPuJSNdOo3hMzY8gggVng,24
5
+ pymoo/version.py,sha256=6wTzaL7dAPbe2X_tjt03RwRPJPxNjEDtZy-kLuhCYkg,24
6
6
  pymoo/algorithms/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
7
  pymoo/algorithms/hyperparameters.py,sha256=dQgzTXEoMvSgFgRf44DTlALKYzf4pc4OarF5xVIZsKM,2504
8
8
  pymoo/algorithms/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -12,35 +12,35 @@ pymoo/algorithms/base/line.py,sha256=6dVtR-la_dpLqbJajw9eiRHK06SNM3PTIABgDhf-Avs
12
12
  pymoo/algorithms/base/local.py,sha256=_zal3sAId9Huf2s5awBJbKah9lrTwk1q8lpJRKMNmBY,1516
13
13
  pymoo/algorithms/base/meta.py,sha256=B_TkjlK4zgZBErzGYta07CXEoWY6EI3z4LWe9RWBrjY,1904
14
14
  pymoo/algorithms/moo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
- pymoo/algorithms/moo/age.py,sha256=kIYMVnc4SIuw3vnmU891y6RzezGYio3bdCor_8p3dGU,10536
15
+ pymoo/algorithms/moo/age.py,sha256=mbqdIZ3AAmBVgzMtaUsLs8PXb6z8KFFm5ETyE5AlRu8,10540
16
16
  pymoo/algorithms/moo/age2.py,sha256=KErmjMsOg5J6nojcnvtCK-RTgkiaE8nXdPi1lGNtlWM,5037
17
17
  pymoo/algorithms/moo/ctaea.py,sha256=oU00117hb4abs8aOaHhCqZkrqSfM8oddZJsTr9YzUnQ,12144
18
18
  pymoo/algorithms/moo/dnsga2.py,sha256=AraXJEdqVrYr91ugFVoGXGZEQi_SZIHNvJ9OfUa7s9w,2878
19
19
  pymoo/algorithms/moo/kgb.py,sha256=uL37sFL37o9fz2i4-eRJO4uAcNopoHw-3HhgmRYIjRs,16295
20
20
  pymoo/algorithms/moo/moead.py,sha256=NiTephgJSpyDnNV8Ex1U2Z7k8c1zPHTQYduHaJJ-aLk,7307
21
21
  pymoo/algorithms/moo/nsga2.py,sha256=_CWO2xDAxjYlfP78ImWRkRCPuIczphDxOhY00VNeBOg,4422
22
- pymoo/algorithms/moo/nsga3.py,sha256=Duo04Snvvh7fMdGW_KDjiWf1Kl3adJBpYS41wGtJIIo,13340
22
+ pymoo/algorithms/moo/nsga3.py,sha256=sx7nBNRrYyMDvMcBqVSKBybqXPc4Eyj4BmDRCzXj2Sw,13339
23
23
  pymoo/algorithms/moo/rnsga2.py,sha256=8Id1vvOM4_NEDAFuzmqQjBEkNbksU0-SEuv0iTogGGE,7150
24
24
  pymoo/algorithms/moo/rnsga3.py,sha256=Q1bniIdgxk5lP3y-OIKE13jda5KCZatA0148HI9J7wE,9911
25
25
  pymoo/algorithms/moo/rvea.py,sha256=as8f6UY2Gjr6VXlDHhFXLJFou9BtoTNgzFl2Yi_SCb8,7860
26
- pymoo/algorithms/moo/sms.py,sha256=51LDzncG0nAqcn3PgFKqIeuRMzffHRpslR-pCpMk9MA,6948
26
+ pymoo/algorithms/moo/sms.py,sha256=ozZzt0DH0DQdPiV5l1gq6CeleybKDNW19ikqGDXXRNk,6990
27
27
  pymoo/algorithms/moo/spea2.py,sha256=q0kQ3W34zlJuPEXOk7Z2ekO_UYBPFPZxJi4YJLHTw_I,7004
28
28
  pymoo/algorithms/moo/unsga3.py,sha256=KSLVzrDEPaBPMKqE76fo6GhALMLA9ZaAY91Mq9fkgj4,1628
29
29
  pymoo/algorithms/soo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
30
  pymoo/algorithms/soo/convex/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
31
  pymoo/algorithms/soo/nonconvex/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
32
  pymoo/algorithms/soo/nonconvex/brkga.py,sha256=Fy2kyiTmlDH2yS44OQSvNoK5XF48zYmjwT-ETqSucNg,6419
33
- pymoo/algorithms/soo/nonconvex/cmaes.py,sha256=iLO5qj4WVmDJDUx7PDAPXAw13lsymA-Kpes7d7pA9Qg,19710
33
+ pymoo/algorithms/soo/nonconvex/cmaes.py,sha256=YiFwsbIpbYfDWMlg6Dya5eo38-3U61o9B9f66Ue06Qc,19730
34
34
  pymoo/algorithms/soo/nonconvex/de.py,sha256=hlSqzxYv36gvEZ2oIwUdP-WuiP-E2lUlvgdvqYZbe50,10733
35
35
  pymoo/algorithms/soo/nonconvex/direct.py,sha256=GFEpNPTY3JKZsXvbGKYtdtbc2bNoiQfIWFt-NAHZNlQ,5193
36
- pymoo/algorithms/soo/nonconvex/es.py,sha256=WfeocdQNLs9TVTE71g-zSBoEctCSht49OYjMyd9nIj4,7238
36
+ pymoo/algorithms/soo/nonconvex/es.py,sha256=MVT21-FtYDFKdiqFUmayX6IiLYGv278ohzgOsYuHQrw,7234
37
37
  pymoo/algorithms/soo/nonconvex/g3pcx.py,sha256=FBZT_VYhG8maIhY-ko7YeW2giCs29BEJHfiq3tYjIBw,3422
38
38
  pymoo/algorithms/soo/nonconvex/ga.py,sha256=xwAjOfP-NmY4ZI7yjuu2kfLp0a32H6EtTnpQMg7Lhtw,3476
39
39
  pymoo/algorithms/soo/nonconvex/ga_niching.py,sha256=SB9QvOpeqJAKXReHbR7UB9n2C7aBpAuxubxlHYFqbu0,8635
40
40
  pymoo/algorithms/soo/nonconvex/isres.py,sha256=eqS4pbaphcVhR-FBamnkvxi7QPkGkT0p0m6SVSaw1pI,2604
41
41
  pymoo/algorithms/soo/nonconvex/nelder.py,sha256=ta6aZtYl8TH94QOTYC9zYQXh_BLvCZ7UI2RkFwRW-Mc,9057
42
- pymoo/algorithms/soo/nonconvex/optuna.py,sha256=I7BcgfuRTSC-U6PKcuvFlBGDw7JO5AWry-HjHsFFWfs,2599
43
- pymoo/algorithms/soo/nonconvex/pattern.py,sha256=u05P4GRh50kx93Uuzg_k687JA7DPsG9AHlesQUVjrPE,6628
42
+ pymoo/algorithms/soo/nonconvex/optuna.py,sha256=jN6Ax4cA7TvJaabg7tpF7FB853J9KVl05yinPN-1SWs,2586
43
+ pymoo/algorithms/soo/nonconvex/pattern.py,sha256=86IzmcnodjOWix4x-qVthR1ygNp4sxPTQBfvDNDS7Wc,6619
44
44
  pymoo/algorithms/soo/nonconvex/pso.py,sha256=7p4Jbz96erXPApLrg5aq2C5lUOb-0xEdUskymiKxR9k,13399
45
45
  pymoo/algorithms/soo/nonconvex/pso_ep.py,sha256=2blPdKnVDujfUx_Z87k-0-uWTctqptc4_dXe5537xXM,10323
46
46
  pymoo/algorithms/soo/nonconvex/random_search.py,sha256=z5Hkx8PZ7OEdWP8XEOmpqYFUFeIjzQfeefkflPKfbVk,882
@@ -52,13 +52,13 @@ pymoo/algorithms/soo/univariate/golden.py,sha256=gYhnMiGcnA6QYNr5Br27W6prINfBmrc
52
52
  pymoo/algorithms/soo/univariate/quadr_interp.py,sha256=OKJGBfO7WcgOqsB4SZzB0_s7GLT5rswlNLY2_tPrOGs,2285
53
53
  pymoo/algorithms/soo/univariate/wolfe.py,sha256=gajHGGd75XFuVm7TPLleVuZoaoxxNCRT14HZwqTYZnI,5621
54
54
  pymoo/constraints/__init__.py,sha256=ajz1GSNU9xYVrFEDSz6Xwg7amWQ_yvW75tQa1ZvRIWc,3
55
- pymoo/constraints/adaptive.py,sha256=xvzbYc98VUTaSUui7MHrKiKNNpB7zYnF83oZ2ZV61fE,1894
55
+ pymoo/constraints/adaptive.py,sha256=TB1sjWjYdAli_RJ7TcJRObu4uugx535S5giHVA6h48o,1934
56
56
  pymoo/constraints/as_obj.py,sha256=bvV9xE9n9UFiVwAzP2Lo7uIVpUz1CwFb9ZA_a8hhqSw,1533
57
57
  pymoo/constraints/as_penalty.py,sha256=H2w6PhmlVr0jeJJg1Iu_AWenQ4ip-9g3fNBzC3aR6Us,1181
58
- pymoo/constraints/eps.py,sha256=KbSU6jQZ3WFqYzpkVhIQy3xSwAAZvKwpF8NJy0hx1rc,789
58
+ pymoo/constraints/eps.py,sha256=6TOjqBoDxUw5_iBC9BIvlfXrYgkOTjH-SgcVzOjqmJw,809
59
59
  pymoo/constraints/from_bounds.py,sha256=o2BPeM85jqUj5AWlaC7kb8z8tIDRLjlmYQuJTMRGsQQ,1017
60
60
  pymoo/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
61
- pymoo/core/algorithm.py,sha256=u2yq1t1y8ynhqfs-v1vqZot-de5RvdEZMwLYMWutTHM,12144
61
+ pymoo/core/algorithm.py,sha256=hdF6hRTKwH_BpijIoZKYIQQVFBjSJIDDkvHVXVXViBE,12173
62
62
  pymoo/core/callback.py,sha256=9O17q9GajJjnK7zlh2cMegIdWULn878oWQ94A0YJ35Q,806
63
63
  pymoo/core/crossover.py,sha256=2wmj-WdpeYzuSCb9tr1Mi4X3GDM-yBbOPScX8DNCQGg,2713
64
64
  pymoo/core/decision_making.py,sha256=oR3PZpHH0tBcOFH3BiFGVo38nZ9oi050g9PfTMkGvfg,2972
@@ -66,7 +66,7 @@ pymoo/core/decomposition.py,sha256=Zg76SIQUzOZCnlXGQM92fqDmIShy-AzcFC-yD2UTtPw,2
66
66
  pymoo/core/duplicate.py,sha256=zxsE6teplj9T1FxjqZd68BpkwmCb-5s7LDCrwOCD-V4,4006
67
67
  pymoo/core/evaluator.py,sha256=eiEgbZgVBMuxjn8c1HHKOyncptKKr4qWYpjyEzSXByA,4157
68
68
  pymoo/core/indicator.py,sha256=eznhveORg6K6t5OwTk_MLsDv4Rzn0g6zNs2HJa-PibI,882
69
- pymoo/core/individual.py,sha256=Mkp1uUWli5pP9WbrEOVWAzFa9FkZxGFu-cp5Bt2G5pY,7096
69
+ pymoo/core/individual.py,sha256=vLcCdsDnkxyWbO3E_3zfa-ad7en_ADY_UwpCotM_8Vk,20378
70
70
  pymoo/core/infill.py,sha256=jTz-x8m4ehisHt9C7-HfcySvYiaOCzaxC_jQbsyvAiU,2326
71
71
  pymoo/core/initialization.py,sha256=4O7F2R2Dr8DX1rLOLN1THeLw5IQ67jKi2boBvaoFwMA,1459
72
72
  pymoo/core/mating.py,sha256=4fG_iIUgTMrZ1n1sZe5ovGQ0a0SnxTIoCP6KiojOE0Y,1240
@@ -75,28 +75,28 @@ pymoo/core/mixed.py,sha256=ncQFIkdETojRqQN03mrsW_Bec70WSnmoR_W9c2Mc9Vc,5769
75
75
  pymoo/core/mutation.py,sha256=dUB6iUrG46-LIMpDAJYDBf0mqZ_ePEHfgrJp7M3xcnA,1300
76
76
  pymoo/core/operator.py,sha256=yiB5eglD_5HYRFGow_dsdL6G2rrFxbM7Sjaw0MNIIHA,937
77
77
  pymoo/core/parameters.py,sha256=hrGHRo3kMEONP4cVs4yuBcNv6Ba_djxkha0ZqXSyZ3c,3197
78
- pymoo/core/plot.py,sha256=ULu8wiZKxoSfewD10qZlN29yv-42_070Zfhx6p-DlyI,6114
78
+ pymoo/core/plot.py,sha256=ErFe84Yg7Bq-uB94jkgPGyESwezJqthhsNypZHS8-4I,6118
79
79
  pymoo/core/population.py,sha256=pHh2L8dGT3kVNSvK6walPPYsV-On97jdSJFf0Ujt_Tw,4866
80
80
  pymoo/core/problem.py,sha256=4PIUuq2-XTrN-W6OnafdUZzl1RRrQFlq_6zX7dzWfrM,14006
81
81
  pymoo/core/recorder.py,sha256=STi_DNJyipNCyMPnZ5PFpYPJQtI3bd61yFXuV1AucFI,2394
82
82
  pymoo/core/repair.py,sha256=vliu7Nnn0yzxPXgerhvQL32GuLl82-bLAtPLXHeJdEM,431
83
83
  pymoo/core/replacement.py,sha256=bnomp-69ifba-VqP77xYP1V4q355-JmKKew9h-QdDPY,2801
84
- pymoo/core/result.py,sha256=FxBpvqqHQfhHIeOkX_mKdRXkZy5PvU3682F5WfrceDg,1152
84
+ pymoo/core/result.py,sha256=eZ1_cy-oDPKHS0m7YZjJ9QUuUIuGgRxMURjDUZyOui8,1221
85
85
  pymoo/core/sampling.py,sha256=afTaU9nd5vdX-z5-_i6vBU23lBIrGwpI8G7rM83hJDU,1058
86
86
  pymoo/core/selection.py,sha256=cU8LoU-OEJAdeM6dFoqAt9ycbdSfCn3iNsnQFknDWIs,1841
87
87
  pymoo/core/solution.py,sha256=IQx4X2NmuCz-69o3AktLh8lzv0BJ6P21Hn1sm6TVHzE,171
88
88
  pymoo/core/survival.py,sha256=7md44ZBr7z-OcsJSzKg8xD7OHQVw5XVB3etvXPsaq1I,3073
89
89
  pymoo/core/termination.py,sha256=YQ7lIzeFupCdv1AZ509CRPoCEQx9JhEe4Ey8aom2tc0,1715
90
- pymoo/core/variable.py,sha256=zjrnfJ086BhXKB5D8BHqNa4tDA6fmW_SWjP8z1zBbaE,2201
90
+ pymoo/core/variable.py,sha256=m0SFB-ZgnlZDEm9pj3KrBTL2T9J9xvj6qNvU4efeQkQ,10710
91
91
  pymoo/cython/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
92
- pymoo/cython/calc_perpendicular_distance.cpython-311-darwin.so,sha256=zSZdr8yvu9Eu_Lr3oi0KpJmSA4X7PG2IZhNQkGMYuds,448670
93
- pymoo/cython/decomposition.cpython-311-darwin.so,sha256=HixnMFvZItq53nCWfczff9SzAPYG8jYaUZH3DGEaxAk,516112
94
- pymoo/cython/hv.cpython-311-darwin.so,sha256=5OS2VZnFRPU1gOIVWOGoEJlMYzEUWMWNoiMlibMlWJU,505525
95
- pymoo/cython/info.cpython-311-darwin.so,sha256=b17pDDZ-tUhDgZiFLyxROulgZSabfTxA2S9XvqI8CtM,129319
96
- pymoo/cython/mnn.cpython-311-darwin.so,sha256=bkpuSnwYYWUhpHlJ_jmQ3jXC_C-KJ3L27AUpwkDBkes,520278
97
- pymoo/cython/non_dominated_sorting.cpython-311-darwin.so,sha256=WLPvWT4Gu0uQ3YIEryOa0rSVKuoaz2GK7Z2P8iOBiWU,592712
98
- pymoo/cython/pruning_cd.cpython-311-darwin.so,sha256=HXhn2JLcqnwUnV4H0EHbinMKvygU_NdPZnQ-8JaM_ZM,518973
99
- pymoo/cython/stochastic_ranking.cpython-311-darwin.so,sha256=E8GJ-n22BHw-OjUvphlMwuFzb9Ixer_bPgo9bk_p6kg,463637
92
+ pymoo/cython/calc_perpendicular_distance.cpython-311-darwin.so,sha256=chAiHrP0jEIvosfEHeHkA-55cmoNMaCeLYuxuDBfU1A,408456
93
+ pymoo/cython/decomposition.cpython-311-darwin.so,sha256=bCboFjF5l4BH4OGaWAK2XLKGP3hGbE80qSBH99CLn1Q,442296
94
+ pymoo/cython/hv.cpython-311-darwin.so,sha256=NQDgQqv13bitebArS3wmkc1S10z5vuDOwSjunaPx7yY,447056
95
+ pymoo/cython/info.cpython-311-darwin.so,sha256=l-coar2vSkEHp9krDd_KtBkMKd1D_MFwKU0bdRVq6sM,110960
96
+ pymoo/cython/mnn.cpython-311-darwin.so,sha256=HR9lOvr3hZJSn9_9P9emEdKj0hNmCbiYuapVQtF22CA,461056
97
+ pymoo/cython/non_dominated_sorting.cpython-311-darwin.so,sha256=T71WunI3bLF5Tuvf-pzLoZalg-xyrdOliY4OepXL6K8,549968
98
+ pymoo/cython/pruning_cd.cpython-311-darwin.so,sha256=bMydT7Y4IeNUpL0TXzHV_6j09zVEDVAtVZeaAE33cZE,460536
99
+ pymoo/cython/stochastic_ranking.cpython-311-darwin.so,sha256=7yUCuDe7I1D2L9h-VYS0hJ9mQN6-jw8brBDFzONkxYE,406176
100
100
  pymoo/cython/utils.pxd,sha256=55dXTlmQEWXwZlRTvTTkfFFnDFjyLqMCwHmZi5PB11k,2552
101
101
  pymoo/cython/vendor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
102
102
  pymoo/cython/vendor/hypervolume.h,sha256=o5TVeXek-SwZuPnQqZJZf_Uh0iaOOquV7LpM3q5lyLo,2142
@@ -111,9 +111,9 @@ pymoo/decomposition/weighted_sum.py,sha256=HfH4AZ_RVvAgvmJ7_iKMYhvgAo_IGmFOa_mzb
111
111
  pymoo/experimental/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
112
112
  pymoo/experimental/algorithms/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
113
113
  pymoo/experimental/algorithms/gde3.py,sha256=e1vFMJAvQSCN-lhY3uSM8udfDArTKxXPuRZr_EDkqp0,2059
114
- pymoo/gradient/__init__.py,sha256=hRmdkooLzU3Y3k_qq0obi5JbrwO2PMY7WgLOJh1urVc,328
114
+ pymoo/gradient/__init__.py,sha256=JgtqGrcVMwo7fKEynGiobZ3bfZklI7q3la43l3x2eqY,321
115
115
  pymoo/gradient/automatic.py,sha256=NkK0VefclTUeZVFIIK2zATJ5NPBGcXNjdBlylmnatDM,1905
116
- pymoo/gradient/grad_autograd.py,sha256=BC5I5kBkpPsb80GBMicUshqtuOuRaInVPGQHEWZTxGw,2109
116
+ pymoo/gradient/grad_autograd.py,sha256=3M_zELHplj7Nkl36-ZFyoHP2W4bDbWKsUyKv40vGSj4,2596
117
117
  pymoo/gradient/grad_complex.py,sha256=zSdi5e2NC9AddvyylBoUCLKrPW7ZKH_RuzxO3IvP1tQ,1011
118
118
  pymoo/gradient/grad_jax.py,sha256=iKfwdnJWlUpxDxr3TpiMlFBPRj2XvJ1Dzr3jMRV3A6A,1115
119
119
  pymoo/gradient/toolbox/__init__.py,sha256=T0Zk87gXTWvHXTprdvRwtqv2rhjFpqnNjh8OVC2pP5s,122
@@ -245,7 +245,7 @@ pymoo/util/archive.py,sha256=ht1mNM21M9Jt4Hwa_CDbkpmcjzkY-O8sQTgfivIf_6M,4340
245
245
  pymoo/util/cache.py,sha256=CjiTzFd2MYvGFT_oFkmX4g85_nEVFvrSd_ADp5DcuXs,818
246
246
  pymoo/util/clearing.py,sha256=mkJpbk8QaS-3uVxjBYrciuW-O79_RjV6B8M0zwv4HOU,1744
247
247
  pymoo/util/dominator.py,sha256=RYRAXBfRU_8hvu6vd20nwNHYpaYEZhq0rRo518JV7m0,1806
248
- pymoo/util/function_loader.py,sha256=f-qfxc5HKh_O9tTAK3haNcy1We5u0de0t0oxest9FtQ,3965
248
+ pymoo/util/function_loader.py,sha256=lu5V0ADjtAvcufjo2KpyGZKF2OMqg-ARwqD28olnDM8,4399
249
249
  pymoo/util/hv.py,sha256=bfEHFJg_D_wn0vQrkicxSgJn5PksMYcLCB5LD3M2IPw,418
250
250
  pymoo/util/matlab_engine.py,sha256=uF7kNIz5wqMAsbuiYbK2W80V7k28ZAejBiwUfpxbzqQ,1240
251
251
  pymoo/util/misc.py,sha256=XvK85BixGtokHt6YeNGjgUlDdl9P3XscVA62hinLXMQ,11128
@@ -270,17 +270,19 @@ pymoo/util/display/output.py,sha256=y-rp4v6NfgvlVZ3K1WZCBbt5Xv7x2LkgDzre8eR-4lw,
270
270
  pymoo/util/display/progress.py,sha256=vils5LvaRpFHUdr6dGAod2NGX1BM258x7N6mPcrIwM4,1247
271
271
  pymoo/util/display/single.py,sha256=jTm2G1BfV7pmy4fbMlHbAaz8HIXrUbjyfuTi0lsamn0,1773
272
272
  pymoo/util/nds/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
273
+ pymoo/util/nds/dominance_degree_non_dominated_sort.py,sha256=xAO-X_lyy7zPO8USBmTfMqUrnSHE2JP1lfQiHT-0mAA,5149
273
274
  pymoo/util/nds/efficient_non_dominated_sort.py,sha256=z9zEtD8tJSA1jv6d88mVViP_Yh_zO5xnwSjCty5HX-o,3936
274
275
  pymoo/util/nds/fast_non_dominated_sort.py,sha256=scwCebYJWUZsGtn85TErxcxlUfyg34K9ndXkE-X51bs,1681
275
276
  pymoo/util/nds/naive_non_dominated_sort.py,sha256=miypwIaJ3ZrKCO2In-uER98VFB5wohlyPfaMFFxwT4o,822
276
277
  pymoo/util/nds/non_dominated_sorting.py,sha256=c4NwdE6-MUTKhVIC0aPA1yni-yXNna3NzieK7yEeS38,1927
277
278
  pymoo/util/nds/tree_based_non_dominated_sort.py,sha256=7Tl87EPwCzTfzDA-4RAQnI9x50VUZKbloiuZHNhqoSQ,3630
278
- pymoo/util/ref_dirs/__init__.py,sha256=dSNEb62AWsqzOK_jfJW-v-rc6wt5f_jSHmahvebUYHY,973
279
+ pymoo/util/ref_dirs/__init__.py,sha256=h29b8CQJv0qUtXHZKcXNARdGKIHJmDI52sfMWtADdxk,1115
279
280
  pymoo/util/ref_dirs/construction.py,sha256=9PJgJDb1whdouu-mx0e10lyjgTxKA1F5EiNlZ_4DDT8,2729
280
281
  pymoo/util/ref_dirs/das_dennis.py,sha256=iZ2DXUcuetRWCvQ0GXjTqYHP9Zw-ZxenD1MG_V6YYNA,1500
281
- pymoo/util/ref_dirs/energy.py,sha256=gZvUpPjsTXc4cLzxEkjWtmiBfhvdT2uPEsfo-gYa6Hw,11550
282
- pymoo/util/ref_dirs/energy_layer.py,sha256=IxbsK-f2pPAVDVPa7syTiKz4WVo3wPsM2OM0i0CGCYc,3530
282
+ pymoo/util/ref_dirs/energy.py,sha256=ZitTbhpTFn7Pb0m2Q4KakSvhPtEVPCf_pkvT5lhmziQ,11565
283
+ pymoo/util/ref_dirs/energy_layer.py,sha256=AOUlL-gWeUcXpzNHghbjZofYo1LyxoTDmhUBPQnw-cY,3540
283
284
  pymoo/util/ref_dirs/genetic_algorithm.py,sha256=B8rH5guQKQxOtZY1JljACZNqpBA2SmNvjjgcAH_-7Cc,1928
285
+ pymoo/util/ref_dirs/incremental.py,sha256=BDyTNcZICnnKjeoAuL0L_lhhE4mgv5a8TsulaDJDg8M,2218
284
286
  pymoo/util/ref_dirs/misc.py,sha256=NsjLerUPMKyTm1EhccBn8dL59JpEflh8jfG039H5DD0,3198
285
287
  pymoo/util/ref_dirs/optimizer.py,sha256=xSOAZBKDijT4gM9ns8Uf6D9uVN1bvKZ-_kLWmI371bY,1501
286
288
  pymoo/util/ref_dirs/performance.py,sha256=rQSjkXmH-F_lrciK7ugm8dSuzf1WKNqMupDwEDE6r_s,3975
@@ -307,8 +309,8 @@ pymoo/visualization/video/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJW
307
309
  pymoo/visualization/video/callback_video.py,sha256=HWcaOy5b3cwGjotS_SJ0e5n3zpLZnjvs45o9GUkIgCI,2525
308
310
  pymoo/visualization/video/one_var_one_obj.py,sha256=RoanobBbC5g9zao7WIRH4832w2HQUgVpKcAS3F2zNVA,1917
309
311
  pymoo/visualization/video/two_var_one_obj.py,sha256=LN3P_IA36_L72iVFsghX1W_AzbENozrNN-EVzjCCXG0,2189
310
- pymoo-0.6.1.1.dist-info/LICENSE,sha256=LYHqBgglAG_I8_4oql3A_-uA-vMlthLJVSKRV7jBDcA,10765
311
- pymoo-0.6.1.1.dist-info/METADATA,sha256=Lx7k66Jp9Uf0BxarzRWZQM65QbEbDFDo_PU9YCscjQA,5091
312
- pymoo-0.6.1.1.dist-info/WHEEL,sha256=kuTeDis5C91zYs0QG8UUz0GexmuJbmDhtJ5x6uY9yRs,115
313
- pymoo-0.6.1.1.dist-info/top_level.txt,sha256=AQwRb60Qa58G1fn7bUhX8djnZycKvhJP2y8PCaA26Cg,6
314
- pymoo-0.6.1.1.dist-info/RECORD,,
312
+ pymoo-0.6.1.2.dist-info/LICENSE,sha256=LYHqBgglAG_I8_4oql3A_-uA-vMlthLJVSKRV7jBDcA,10765
313
+ pymoo-0.6.1.2.dist-info/METADATA,sha256=oScW_jwFq4f_MwJMOkXGF98uiMkE3k88hwZ33kxRRxM,5042
314
+ pymoo-0.6.1.2.dist-info/WHEEL,sha256=eupBwbXGAhwNAPJSvj5BiShZwdZO8jnQ5yHfv-9aUGw,115
315
+ pymoo-0.6.1.2.dist-info/top_level.txt,sha256=AQwRb60Qa58G1fn7bUhX8djnZycKvhJP2y8PCaA26Cg,6
316
+ pymoo-0.6.1.2.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.41.3)
2
+ Generator: bdist_wheel (0.43.0)
3
3
  Root-Is-Purelib: false
4
4
  Tag: cp311-cp311-macosx_10_9_universal2
5
5