SearchLibrium 0.0.231__tar.gz → 0.0.232__tar.gz
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.
- {searchlibrium-0.0.231/src/SearchLibrium.egg-info → searchlibrium-0.0.232}/PKG-INFO +1 -1
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/pyproject.toml +1 -1
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/sparseea_agds.py +65 -2
- searchlibrium-0.0.232/src/SearchLibrium/version.txt +1 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232/src/SearchLibrium.egg-info}/PKG-INFO +1 -1
- searchlibrium-0.0.231/src/SearchLibrium/version.txt +0 -1
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/LICENSE +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/MANIFEST.in +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/README.md +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/setup.cfg +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/BEHier.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/Halton.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/MixedLogit.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/MixedLogitGSE.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/Mode_Activity_Nested.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/RandomP.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/SEARCH_SM_MARIO.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/Two_Level_Nest.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/__init__.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/__main__.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/_choice_model.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/_device.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/abm.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/accessibility.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/banditsa.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/boxcox_functions.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/call_meta.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/constraints_builder.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/data/Swissmetro_final.csv +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/data/TravelMode.csv +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/data/electricity.csv +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/harmony.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/hspbil.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/jax_utils.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/larch_compat.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/larch_models.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/latent_class.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/logistic_regression.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/main.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/main_debug.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/mdcev.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/misc.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/mixed_logit.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/mixed_nested.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/mixedrrm.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/multinomial_logit.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/multinomial_nested.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/multinomial_probit.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/ordered_logit.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/ordered_logit_mixed.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/predict.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/regularization.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/rrm.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/sample_data.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/sapbil.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/search.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/selection_models.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/setup.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/siman.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/skims.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/test_lc_de.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/test_mario_searches.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/test_sapbil_vs_banditsa.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/threshold.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/zero_inflated_ordered_probit.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium.egg-info/SOURCES.txt +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium.egg-info/dependency_links.txt +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium.egg-info/entry_points.txt +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium.egg-info/requires.txt +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium.egg-info/top_level.txt +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/tests/test_jax_mask_equivalence.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/tests/test_larch_integration.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/tests/test_lc_smart_init.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/tests/test_per_alternative_random.py +0 -0
- {searchlibrium-0.0.231 → searchlibrium-0.0.232}/tests/test_zero_inflated_ordered_probit.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: SearchLibrium
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.232
|
|
4
4
|
Summary: Automated specification search for discrete choice models (logit, mixed logit, nested logit, RRM and more) using metaheuristic optimisation
|
|
5
5
|
Author: Mario Fernando Taco Morales, Alexander Paz, Prithvi Beeramole, Robert Burdett
|
|
6
6
|
Author-email: Zeke Ahern <z.ahern@qut.edu.au>
|
|
@@ -124,7 +124,7 @@ Documentation = "https://pypi.org/project/SearchLibrium/"
|
|
|
124
124
|
realpython = "SearchLibrium.__main__:main"
|
|
125
125
|
|
|
126
126
|
[tool.bumpver]
|
|
127
|
-
current_version = "0.0.
|
|
127
|
+
current_version = "0.0.232"
|
|
128
128
|
version_pattern = "MAJOR.MINOR.PATCH"
|
|
129
129
|
commit_message = "[skip ci] Bump version {old_version} -> {new_version}"
|
|
130
130
|
commit = true
|
|
@@ -49,6 +49,62 @@ except ImportError: # running as a top-level module
|
|
|
49
49
|
logger = logging.getLogger(__name__)
|
|
50
50
|
|
|
51
51
|
|
|
52
|
+
# ---------------------------------------------------------------------- #
|
|
53
|
+
# Specification-based de-duplication #
|
|
54
|
+
# ---------------------------------------------------------------------- #
|
|
55
|
+
def _agds_spec_key(sol):
|
|
56
|
+
"""Hashable key identifying a solution's model *specification*.
|
|
57
|
+
|
|
58
|
+
Used to de-duplicate populations by spec instead of by objective value.
|
|
59
|
+
(The old ``get_unique(mem, 0)`` dropped every solution sharing an
|
|
60
|
+
objective value; with ``nsig`` as crit 0 that collapses the whole
|
|
61
|
+
population to a handful of distinct integers and stalls the search.)
|
|
62
|
+
"""
|
|
63
|
+
try:
|
|
64
|
+
_get = sol.get if hasattr(sol, 'get') else (
|
|
65
|
+
lambda k, d=None: getattr(sol, k, d))
|
|
66
|
+
|
|
67
|
+
def _norm(v):
|
|
68
|
+
try:
|
|
69
|
+
if isinstance(v, np.ndarray):
|
|
70
|
+
v = v.tolist()
|
|
71
|
+
except Exception:
|
|
72
|
+
pass
|
|
73
|
+
if isinstance(v, dict):
|
|
74
|
+
return tuple(sorted((str(k), str(x)) for k, x in v.items()))
|
|
75
|
+
if isinstance(v, (list, tuple, set, frozenset)):
|
|
76
|
+
return tuple(sorted(str(x) for x in v))
|
|
77
|
+
return str(v)
|
|
78
|
+
|
|
79
|
+
return tuple((k, _norm(_get(k))) for k in (
|
|
80
|
+
'model_n', 'asvars', 'isvars', 'randvars', 'corvars',
|
|
81
|
+
'bcvars', 'transvars', 'trans_asvars', 'asc_ind',
|
|
82
|
+
'class_params_spec', 'member_params_spec'))
|
|
83
|
+
except Exception:
|
|
84
|
+
try:
|
|
85
|
+
return ('__tuple__', tuple(sol.values()))
|
|
86
|
+
except Exception:
|
|
87
|
+
return ('__repr__', repr(sol))
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def get_unique_spec(solutions, key=0):
|
|
91
|
+
"""Like ``get_unique`` but de-duplicates by specification, not objective.
|
|
92
|
+
|
|
93
|
+
Keeps ``get_unique``'s ordering (sorted by objective ``key``) so callers
|
|
94
|
+
see the same ranking with duplicates-by-spec removed.
|
|
95
|
+
"""
|
|
96
|
+
if not solutions:
|
|
97
|
+
return []
|
|
98
|
+
ordered = sorted(solutions, key=lambda sol: sol.obj(key))
|
|
99
|
+
seen, out = set(), []
|
|
100
|
+
for sol in ordered:
|
|
101
|
+
k = _agds_spec_key(sol)
|
|
102
|
+
if k not in seen:
|
|
103
|
+
seen.add(k)
|
|
104
|
+
out.append(sol)
|
|
105
|
+
return out
|
|
106
|
+
|
|
107
|
+
|
|
52
108
|
# ---------------------------------------------------------------------- #
|
|
53
109
|
# NSGA-III reference-point helpers (numpy, self-contained) #
|
|
54
110
|
# ---------------------------------------------------------------------- #
|
|
@@ -273,7 +329,10 @@ class SparseEAAGDS(Search):
|
|
|
273
329
|
return [float(sol.obj(k)) for k in range(self.nb_crit)]
|
|
274
330
|
|
|
275
331
|
def _environmental_selection(self, combined, n_select):
|
|
276
|
-
|
|
332
|
+
# De-duplicate by *specification*: the old get_unique(combined, 0)
|
|
333
|
+
# collapsed everything sharing an obj(0) value (nsig integers),
|
|
334
|
+
# destroying population diversity every generation.
|
|
335
|
+
combined = get_unique_spec(combined, 0)
|
|
277
336
|
if len(combined) <= n_select:
|
|
278
337
|
return combined
|
|
279
338
|
if self.nb_crit <= 1:
|
|
@@ -341,7 +400,11 @@ class SparseEAAGDS(Search):
|
|
|
341
400
|
sol, converged = self.evaluate_solution(sol)
|
|
342
401
|
if converged and abs(sol.obj(0)) < BOUND:
|
|
343
402
|
mem.append(sol)
|
|
344
|
-
|
|
403
|
+
# De-duplicate by *specification*, not obj(0): nsig takes only a
|
|
404
|
+
# handful of integer values, so get_unique(mem, 0) caps the
|
|
405
|
+
# initial population at ~distinct-nsig members and _initialize
|
|
406
|
+
# spins through all 30000 attempts without filling pop_size.
|
|
407
|
+
mem = get_unique_spec(mem, 0)
|
|
345
408
|
if not mem:
|
|
346
409
|
raise RuntimeError(
|
|
347
410
|
"AGDS initial population is empty: none of the candidate "
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.0.232
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: SearchLibrium
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.232
|
|
4
4
|
Summary: Automated specification search for discrete choice models (logit, mixed logit, nested logit, RRM and more) using metaheuristic optimisation
|
|
5
5
|
Author: Mario Fernando Taco Morales, Alexander Paz, Prithvi Beeramole, Robert Burdett
|
|
6
6
|
Author-email: Zeke Ahern <z.ahern@qut.edu.au>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
0.0.231
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/test_sapbil_vs_banditsa.py
RENAMED
|
File without changes
|
|
File without changes
|
{searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium/zero_inflated_ordered_probit.py
RENAMED
|
File without changes
|
|
File without changes
|
{searchlibrium-0.0.231 → searchlibrium-0.0.232}/src/SearchLibrium.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|