desdeo 2.1.0__py3-none-any.whl → 2.1.1__py3-none-any.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.
- desdeo/problem/__init__.py +12 -11
- desdeo/problem/evaluator.py +4 -5
- desdeo/problem/gurobipy_evaluator.py +37 -12
- desdeo/problem/infix_parser.py +1 -16
- desdeo/problem/json_parser.py +7 -11
- desdeo/problem/schema.py +6 -9
- desdeo/problem/utils.py +1 -1
- desdeo/tools/pyomo_solver_interfaces.py +1 -1
- {desdeo-2.1.0.dist-info → desdeo-2.1.1.dist-info}/METADATA +3 -4
- {desdeo-2.1.0.dist-info → desdeo-2.1.1.dist-info}/RECORD +12 -12
- {desdeo-2.1.0.dist-info → desdeo-2.1.1.dist-info}/WHEEL +0 -0
- {desdeo-2.1.0.dist-info → desdeo-2.1.1.dist-info}/licenses/LICENSE +0 -0
desdeo/problem/__init__.py
CHANGED
|
@@ -7,35 +7,36 @@ __all__ = [
|
|
|
7
7
|
"DiscreteRepresentation",
|
|
8
8
|
"Evaluator",
|
|
9
9
|
"ExtraFunction",
|
|
10
|
-
"flatten_variable_dict",
|
|
11
10
|
"FormatEnum",
|
|
12
11
|
"GurobipyEvaluator",
|
|
13
|
-
"get_nadir_dict",
|
|
14
|
-
"get_ideal_dict",
|
|
15
12
|
"InfixExpressionParser",
|
|
16
13
|
"MathParser",
|
|
17
|
-
"numpy_array_to_objective_dict",
|
|
18
|
-
"objective_dict_to_numpy_array",
|
|
19
14
|
"Objective",
|
|
20
15
|
"ObjectiveTypeEnum",
|
|
21
|
-
"Problem",
|
|
22
|
-
"PyomoEvaluator",
|
|
23
|
-
"SympyEvaluator",
|
|
24
|
-
"tensor_constant_from_dataframe",
|
|
25
16
|
"PolarsEvaluator",
|
|
26
17
|
"PolarsEvaluatorModesEnum",
|
|
18
|
+
"Problem",
|
|
19
|
+
"PyomoEvaluator",
|
|
27
20
|
"ScalarizationFunction",
|
|
28
21
|
"Simulator",
|
|
22
|
+
"SimulatorEvaluator",
|
|
23
|
+
"SympyEvaluator",
|
|
24
|
+
"Tensor",
|
|
29
25
|
"TensorConstant",
|
|
30
26
|
"TensorVariable",
|
|
31
27
|
"Url",
|
|
32
|
-
"unflatten_variable_array",
|
|
33
28
|
"Variable",
|
|
34
29
|
"VariableDimensionEnum",
|
|
35
30
|
"VariableDomainTypeEnum",
|
|
36
31
|
"VariableType",
|
|
37
|
-
"Tensor",
|
|
38
32
|
"VariableTypeEnum",
|
|
33
|
+
"flatten_variable_dict",
|
|
34
|
+
"get_ideal_dict",
|
|
35
|
+
"get_nadir_dict",
|
|
36
|
+
"numpy_array_to_objective_dict",
|
|
37
|
+
"objective_dict_to_numpy_array",
|
|
38
|
+
"tensor_constant_from_dataframe",
|
|
39
|
+
"unflatten_variable_array",
|
|
39
40
|
"variable_dimension_enumerate",
|
|
40
41
|
]
|
|
41
42
|
|
desdeo/problem/evaluator.py
CHANGED
|
@@ -33,7 +33,7 @@ class PolarsEvaluatorModesEnum(str, Enum):
|
|
|
33
33
|
mixed = "mixed"
|
|
34
34
|
"""Indicates that the problem has analytical and simulator and/or surrogate
|
|
35
35
|
based objectives, constraints and extra functions. In this mode, the evaluator
|
|
36
|
-
only handles data-based and analytical functions. For data-
|
|
36
|
+
only handles data-based and analytical functions. For data-based objectives,
|
|
37
37
|
it assumes that the variables are to be evaluated by finding the closest
|
|
38
38
|
variables values in the data compare to the input, and evaluating the result
|
|
39
39
|
to be the matching objective function values that match to the closest
|
|
@@ -74,7 +74,7 @@ def variable_dimension_enumerate(problem: Problem) -> VariableDimensionEnum:
|
|
|
74
74
|
enum = VariableDimensionEnum.scalar
|
|
75
75
|
for var in problem.variables:
|
|
76
76
|
if isinstance(var, TensorVariable):
|
|
77
|
-
if len(var.shape) == 1 or len(var.shape) == 2 and not (var.shape[0] > 1 and var.shape[1] > 1): # noqa: PLR2004
|
|
77
|
+
if len(var.shape) == 1 or (len(var.shape) == 2 and not (var.shape[0] > 1 and var.shape[1] > 1)): # noqa: PLR2004
|
|
78
78
|
enum = VariableDimensionEnum.vector
|
|
79
79
|
else:
|
|
80
80
|
return VariableDimensionEnum.tensor
|
|
@@ -187,7 +187,7 @@ class PolarsEvaluator:
|
|
|
187
187
|
f"Provided 'evaluator_mode' {evaluator_mode} not supported. Must be one of {PolarsEvaluatorModesEnum}."
|
|
188
188
|
)
|
|
189
189
|
|
|
190
|
-
def _polars_init(self): # noqa: C901
|
|
190
|
+
def _polars_init(self): # noqa: C901
|
|
191
191
|
"""Initialization of the evaluator for parser type 'polars'."""
|
|
192
192
|
# If any constants are defined in problem, replace their symbol with the defined numerical
|
|
193
193
|
# value in all the function expressions found in the Problem.
|
|
@@ -211,8 +211,7 @@ class PolarsEvaluator:
|
|
|
211
211
|
parsed_obj_funcs[f"{obj.symbol}"] = None
|
|
212
212
|
else:
|
|
213
213
|
msg = (
|
|
214
|
-
f"Incorrect objective-type {obj.objective_type} encountered. "
|
|
215
|
-
f"Must be one of {ObjectiveTypeEnum}"
|
|
214
|
+
f"Incorrect objective-type {obj.objective_type} encountered. Must be one of {ObjectiveTypeEnum}"
|
|
216
215
|
)
|
|
217
216
|
raise PolarsEvaluatorError(msg)
|
|
218
217
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"""Defines an evaluator compatible with the Problem JSON format and transforms it into a GurobipyModel."""
|
|
2
2
|
|
|
3
|
+
import warnings
|
|
3
4
|
from operator import eq as _eq
|
|
4
5
|
from operator import le as _le
|
|
5
|
-
import warnings
|
|
6
6
|
|
|
7
7
|
import gurobipy as gp
|
|
8
8
|
import numpy as np
|
|
@@ -18,8 +18,7 @@ from desdeo.problem.schema import (
|
|
|
18
18
|
TensorConstant,
|
|
19
19
|
TensorVariable,
|
|
20
20
|
Variable,
|
|
21
|
-
VariableTypeEnum
|
|
22
|
-
|
|
21
|
+
VariableTypeEnum,
|
|
23
22
|
)
|
|
24
23
|
|
|
25
24
|
|
|
@@ -125,8 +124,16 @@ class GurobipyEvaluator:
|
|
|
125
124
|
|
|
126
125
|
elif isinstance(var, TensorVariable):
|
|
127
126
|
# handle tensor variables, i.e., vectors etc..
|
|
128
|
-
lowerbounds =
|
|
129
|
-
|
|
127
|
+
lowerbounds = (
|
|
128
|
+
var.get_lowerbound_values()
|
|
129
|
+
if var.lowerbounds is not None
|
|
130
|
+
else np.full(var.shape, float("-inf")).tolist()
|
|
131
|
+
)
|
|
132
|
+
upperbounds = (
|
|
133
|
+
var.get_upperbound_values()
|
|
134
|
+
if var.upperbounds is not None
|
|
135
|
+
else np.full(var.shape, float("inf")).tolist()
|
|
136
|
+
)
|
|
130
137
|
|
|
131
138
|
# figure out the variable type
|
|
132
139
|
match var.variable_type:
|
|
@@ -143,13 +150,18 @@ class GurobipyEvaluator:
|
|
|
143
150
|
raise GurobipyEvaluatorError(msg)
|
|
144
151
|
|
|
145
152
|
# add the variable to the model
|
|
146
|
-
gvar = self.model.addMVar(
|
|
153
|
+
gvar = self.model.addMVar(
|
|
154
|
+
shape=tuple(var.shape),
|
|
155
|
+
lb=np.array(lowerbounds),
|
|
156
|
+
ub=np.array(upperbounds),
|
|
157
|
+
vtype=domain,
|
|
158
|
+
name=var.symbol,
|
|
159
|
+
)
|
|
147
160
|
# set the initial value, if one has been defined
|
|
148
161
|
if var.initial_values is not None:
|
|
149
162
|
gvar.setAttr("Start", np.array(var.get_initial_values()))
|
|
150
163
|
self.mvars[var.symbol] = gvar
|
|
151
164
|
|
|
152
|
-
|
|
153
165
|
# update the model before returning, so that other expressions can reference the variables
|
|
154
166
|
self.model.update()
|
|
155
167
|
|
|
@@ -413,8 +425,16 @@ class GurobipyEvaluator:
|
|
|
413
425
|
gvar.setAttr("Start", var.initial_value)
|
|
414
426
|
elif isinstance(var, TensorVariable):
|
|
415
427
|
# handle tensor variables, i.e., vectors etc..
|
|
416
|
-
lowerbounds =
|
|
417
|
-
|
|
428
|
+
lowerbounds = (
|
|
429
|
+
var.get_lowerbound_values()
|
|
430
|
+
if var.lowerbounds is not None
|
|
431
|
+
else np.full(var.shape, float("-inf")).tolist()
|
|
432
|
+
)
|
|
433
|
+
upperbounds = (
|
|
434
|
+
var.get_upperbound_values()
|
|
435
|
+
if var.upperbounds is not None
|
|
436
|
+
else np.full(var.shape, float("inf")).tolist()
|
|
437
|
+
)
|
|
418
438
|
|
|
419
439
|
# figure out the variable type
|
|
420
440
|
match var.variable_type:
|
|
@@ -431,7 +451,13 @@ class GurobipyEvaluator:
|
|
|
431
451
|
raise GurobipyEvaluatorError(msg)
|
|
432
452
|
|
|
433
453
|
# add the variable to the model
|
|
434
|
-
gvar = self.model.addMVar(
|
|
454
|
+
gvar = self.model.addMVar(
|
|
455
|
+
shape=tuple(var.shape),
|
|
456
|
+
lb=np.array(lowerbounds),
|
|
457
|
+
ub=np.array(upperbounds),
|
|
458
|
+
vtype=domain,
|
|
459
|
+
name=var.symbol,
|
|
460
|
+
)
|
|
435
461
|
# set the initial value, if one has been defined
|
|
436
462
|
if var.initial_values is not None:
|
|
437
463
|
gvar.setAttr("Start", np.array(var.get_initial_values()))
|
|
@@ -470,8 +496,7 @@ class GurobipyEvaluator:
|
|
|
470
496
|
expression = self.constants[name]
|
|
471
497
|
return expression
|
|
472
498
|
|
|
473
|
-
|
|
474
|
-
def get_values(self) -> dict[str, float | int | bool | list[float] | list[int]]: # noqa: C901
|
|
499
|
+
def get_values(self) -> dict[str, float | int | bool | list[float] | list[int]]:
|
|
475
500
|
"""Get the values from the Gurobipy Model in a dict.
|
|
476
501
|
|
|
477
502
|
The keys of the dict will be the symbols defined in the problem utilized to initialize the evaluator.
|
desdeo/problem/infix_parser.py
CHANGED
|
@@ -193,7 +193,7 @@ class InfixExpressionParser:
|
|
|
193
193
|
def _is_number_or_variable(self, c):
|
|
194
194
|
return isinstance(c, int | float) or (isinstance(c, str) and c not in self.reserved_symbols)
|
|
195
195
|
|
|
196
|
-
def _to_math_json(self, parsed: list | str) -> list:
|
|
196
|
+
def _to_math_json(self, parsed: list | str) -> list:
|
|
197
197
|
"""Converts a list of expressions into a MathJSON compliant format.
|
|
198
198
|
|
|
199
199
|
The conversion happens recursively. Each list of recursed until a terminal character is reached.
|
|
@@ -324,18 +324,3 @@ class InfixExpressionParser:
|
|
|
324
324
|
# simple expressions, like 'x_1', are parsed into just a string after removing any extra
|
|
325
325
|
# brackets, so we add them back there in case it is needed
|
|
326
326
|
return expr if isinstance(expr, list) else [expr]
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
if __name__ == "__main__":
|
|
330
|
-
# Parse and convert
|
|
331
|
-
test = "(x_1 - c_2) ** 2 + x_2 ** 2 - 25"
|
|
332
|
-
|
|
333
|
-
ohh_no = "['Add', ['Negate', ['Square', ['Subtract', 'x_1', 8]]], ['Negate', ['Square', ['Add', 'x_2', 3]]], 7.7]"
|
|
334
|
-
|
|
335
|
-
to_json_parser = InfixExpressionParser(target="MathJSON")
|
|
336
|
-
|
|
337
|
-
parsed_expression = to_json_parser.parse(test)
|
|
338
|
-
|
|
339
|
-
print(f"Expresion:\n{test}")
|
|
340
|
-
print(f"Parsed:\n{to_json_parser._pre_parse(test)}")
|
|
341
|
-
print(f"MathJSON:\n{parsed_expression}")
|
desdeo/problem/json_parser.py
CHANGED
|
@@ -35,7 +35,7 @@ class MathParser:
|
|
|
35
35
|
Currently only parses MathJSON to polars expressions. Pyomo WIP.
|
|
36
36
|
"""
|
|
37
37
|
|
|
38
|
-
def __init__(self, to_format: FormatEnum = "polars"):
|
|
38
|
+
def __init__(self, to_format: FormatEnum = "polars"): # noqa: C901
|
|
39
39
|
"""Create a parser instance for parsing MathJSON notation into polars expressions.
|
|
40
40
|
|
|
41
41
|
Args:
|
|
@@ -135,7 +135,7 @@ class MathParser:
|
|
|
135
135
|
acc = acc.to_numpy()
|
|
136
136
|
x = x.to_numpy()
|
|
137
137
|
|
|
138
|
-
if len(acc.shape) == 2 and len(x.shape) == 2:
|
|
138
|
+
if len(acc.shape) == 2 and len(x.shape) == 2: # noqa: PLR2004
|
|
139
139
|
# Row vectors, just return the dot product, polars does not handle
|
|
140
140
|
# "column" vectors anyway
|
|
141
141
|
return pl.Series(values=np.einsum("ij,ij->i", acc, x, optimize=True))
|
|
@@ -373,7 +373,7 @@ class MathParser:
|
|
|
373
373
|
hasattr(x, "is_indexed")
|
|
374
374
|
and x.is_indexed()
|
|
375
375
|
and x.dim() > 0
|
|
376
|
-
and (not hasattr(y, "is_indexed") or not y.is_indexed() or y.is_indexed() and y.dim() == 0)
|
|
376
|
+
and (not hasattr(y, "is_indexed") or not y.is_indexed() or (y.is_indexed() and y.dim() == 0))
|
|
377
377
|
):
|
|
378
378
|
# x is a tensor, y is scalar
|
|
379
379
|
expr = pyomo.Expression(
|
|
@@ -385,7 +385,7 @@ class MathParser:
|
|
|
385
385
|
hasattr(y, "is_indexed")
|
|
386
386
|
and y.is_indexed()
|
|
387
387
|
and y.dim() > 0
|
|
388
|
-
and (not hasattr(x, "is_indexed") or not x.is_indexed() or x.is_indexed() and x.dim() == 0)
|
|
388
|
+
and (not hasattr(x, "is_indexed") or not x.is_indexed() or (x.is_indexed() and x.dim() == 0))
|
|
389
389
|
):
|
|
390
390
|
# y is a tensor, x is scalar
|
|
391
391
|
expr = pyomo.Expression(
|
|
@@ -534,16 +534,13 @@ class MathParser:
|
|
|
534
534
|
def _sympy_matmul(*args):
|
|
535
535
|
"""Sympy matrix multiplication."""
|
|
536
536
|
msg = (
|
|
537
|
-
"Matrix multiplication '@' has not been implemented for the Sympy parser yet."
|
|
538
|
-
" Feel free to contribute!"
|
|
537
|
+
"Matrix multiplication '@' has not been implemented for the Sympy parser yet. Feel free to contribute!"
|
|
539
538
|
)
|
|
540
539
|
raise NotImplementedError(msg)
|
|
541
540
|
|
|
542
541
|
def _sympy_summation(summand):
|
|
543
542
|
"""Sympy matrix summation."""
|
|
544
|
-
msg =
|
|
545
|
-
"Matrix summation 'Sum' has not been implemented for the Sympy parser yet." " Feel free to contribute!"
|
|
546
|
-
)
|
|
543
|
+
msg = "Matrix summation 'Sum' has not been implemented for the Sympy parser yet. Feel free to contribute!"
|
|
547
544
|
raise NotImplementedError(msg)
|
|
548
545
|
|
|
549
546
|
def _sympy_random_access(*args):
|
|
@@ -627,8 +624,7 @@ class MathParser:
|
|
|
627
624
|
|
|
628
625
|
return _sum(summand)
|
|
629
626
|
msg = (
|
|
630
|
-
"Matrix summation 'Sum' has not been implemented for the Gurobipy parser yet."
|
|
631
|
-
" Feel free to contribute!"
|
|
627
|
+
"Matrix summation 'Sum' has not been implemented for the Gurobipy parser yet. Feel free to contribute!"
|
|
632
628
|
)
|
|
633
629
|
raise NotImplementedError(msg)
|
|
634
630
|
|
desdeo/problem/schema.py
CHANGED
|
@@ -16,7 +16,7 @@ from collections.abc import Iterable
|
|
|
16
16
|
from enum import Enum
|
|
17
17
|
from itertools import product
|
|
18
18
|
from pathlib import Path
|
|
19
|
-
from typing import TYPE_CHECKING, Annotated, Any, Literal, Self
|
|
19
|
+
from typing import TYPE_CHECKING, Annotated, Any, Literal, Self
|
|
20
20
|
|
|
21
21
|
import numpy as np
|
|
22
22
|
from pydantic import (
|
|
@@ -61,13 +61,10 @@ def tensor_custom_error_validator(value: Any, handler: ValidatorFunctionWrapHand
|
|
|
61
61
|
raise PydanticCustomError("invalid tensor", "Input is not a valid tensor") from exc
|
|
62
62
|
|
|
63
63
|
|
|
64
|
-
Tensor =
|
|
65
|
-
"Tensor",
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
WrapValidator(tensor_custom_error_validator),
|
|
69
|
-
],
|
|
70
|
-
)
|
|
64
|
+
type Tensor = Annotated[
|
|
65
|
+
list["Tensor"] | list[VariableType] | VariableType | Literal["List"] | None,
|
|
66
|
+
WrapValidator(tensor_custom_error_validator),
|
|
67
|
+
]
|
|
71
68
|
|
|
72
69
|
|
|
73
70
|
def parse_infix_to_func(cls: "Problem", v: str | list) -> list:
|
|
@@ -756,7 +753,7 @@ class Simulator(BaseModel):
|
|
|
756
753
|
"""Path to a python file with the connection to simulators."""
|
|
757
754
|
url: Url | None = Field(
|
|
758
755
|
description=(
|
|
759
|
-
"Optional.
|
|
756
|
+
"Optional. URL to the simulator. A GET request to this URL should be used to evaluate solutions in batches."
|
|
760
757
|
),
|
|
761
758
|
default=None,
|
|
762
759
|
)
|
desdeo/problem/utils.py
CHANGED
|
@@ -115,7 +115,7 @@ def unflatten_variable_array(problem: Problem, var_array: np.ndarray) -> dict[st
|
|
|
115
115
|
# check if values remain in var_array
|
|
116
116
|
if array_i < len(var_array):
|
|
117
117
|
# some values remain, warn user, but do not raise an error
|
|
118
|
-
msg = f"Warning, the variable array had some values that were not unflattened: f{[
|
|
118
|
+
msg = f"Warning, the variable array had some values that were not unflattened: f{['...', *var_array[array_i:]]}"
|
|
119
119
|
warnings.warn(msg, stacklevel=2)
|
|
120
120
|
|
|
121
121
|
# return the variable dict
|
|
@@ -99,7 +99,7 @@ class CbcOptions(BaseModel):
|
|
|
99
99
|
|
|
100
100
|
model_config = ConfigDict(frozen=True, populate_by_name=True)
|
|
101
101
|
|
|
102
|
-
|
|
102
|
+
seconds: int = Field(
|
|
103
103
|
description="The maximum amount of time (in seconds) the solver should run. Defaults to 600.", default=600
|
|
104
104
|
)
|
|
105
105
|
"""The maximum amount of time (in seconds) the solver should run. Defaults to 600."""
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: desdeo
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.1
|
|
4
4
|
Summary: DESDEO is a modular and open source framework for interactive multiobjective optimization.
|
|
5
5
|
License-Expression: MIT
|
|
6
6
|
License-File: LICENSE
|
|
@@ -40,10 +40,9 @@ Project-URL: Homepage, https://github.com/industrial-optimization-group/DESDEO
|
|
|
40
40
|
Project-URL: Repository, https://github.com/industrial-optimization-group/DESDEO
|
|
41
41
|
Description-Content-Type: text/markdown
|
|
42
42
|
|
|
43
|
+
[](https://discord.gg/uGCEgQTJyY) [](https://desdeo.readthedocs.io/en/latest/) 
|
|
44
|
+
|
|
43
45
|
# DESDEO: the open-source software framework for interactive multiobjective optimization
|
|
44
|
-
|
|
45
|
-
[](https://discord.gg/uGCEgQTJyY) [](https://desdeo.readthedocs.io/en/latest/) 
|
|
46
|
-
|
|
47
46
|
## Introduction
|
|
48
47
|
|
|
49
48
|
DESDEO is an open-source framework for interactive multiobjective optimization
|
|
@@ -103,17 +103,17 @@ desdeo/mcdm/nautilus_navigator.py,sha256=Vl-BES3JRI0Yquey7gdMJ1p1NIwC2HN3qwfBKvP
|
|
|
103
103
|
desdeo/mcdm/nimbus.py,sha256=Qww2Exl5phEdidj1XjgN7gsUO_GL7WfXmiyPkBwZq6Y,19045
|
|
104
104
|
desdeo/mcdm/pareto_navigator.py,sha256=ob-b19Lkzeef4Q2MzrBI9J6X-aiMIC4wBkiOVd_9Ne8,9987
|
|
105
105
|
desdeo/mcdm/reference_point_method.py,sha256=Cz5AE7haPofcJHn3ooyxnFNkAyLrZ5QNHtmFix3DfRU,8307
|
|
106
|
-
desdeo/problem/__init__.py,sha256=
|
|
107
|
-
desdeo/problem/evaluator.py,sha256=
|
|
106
|
+
desdeo/problem/__init__.py,sha256=UJp1bKzQv88t_C6iOwHmzTXfHvxmSCloDrz5Feaf85M,1973
|
|
107
|
+
desdeo/problem/evaluator.py,sha256=ZII8dW92hMOo4EoritYLdEbX4DLR6f30PPxmxGwRwm4,26340
|
|
108
108
|
desdeo/problem/external/__init__.py,sha256=1EB8NMYOerUDw4S-yS5l9J9EETSe8yaJA3Ox2_AUwIs,501
|
|
109
109
|
desdeo/problem/external/core.py,sha256=cd3rETrz3JJE7xVcRW1B0_daCbRyfPqnBOwF7LeEgpQ,13099
|
|
110
110
|
desdeo/problem/external/pymoo_provider.py,sha256=aleBP0gGeHQ9tQNpkLhwr8VIuVbqojE85QllxUvs9DE,10430
|
|
111
111
|
desdeo/problem/external/runtime.py,sha256=nvIRH3gQjfc1g_-ErgyxxeBN0-OitO5lKg4BbeDoKDw,1476
|
|
112
|
-
desdeo/problem/gurobipy_evaluator.py,sha256=
|
|
113
|
-
desdeo/problem/infix_parser.py,sha256=
|
|
114
|
-
desdeo/problem/json_parser.py,sha256=
|
|
112
|
+
desdeo/problem/gurobipy_evaluator.py,sha256=hboZEvVbvwJ5er4K1BGGKpOYGCEMyXEQupmBkzFbqZc,25077
|
|
113
|
+
desdeo/problem/infix_parser.py,sha256=XQDiWhD58ik_KdrQk1rcQSxEDRZFeh0VgFcp54YD6Yw,13584
|
|
114
|
+
desdeo/problem/json_parser.py,sha256=ShqtT9iUW8Kx56xS0ApGniau6yQLGwr5jh62VIj2KwQ,40080
|
|
115
115
|
desdeo/problem/pyomo_evaluator.py,sha256=46RP4V9G6ufMnlQkvfOCtLBw8QuNRbTmlLTtqmWmGQU,20254
|
|
116
|
-
desdeo/problem/schema.py,sha256=
|
|
116
|
+
desdeo/problem/schema.py,sha256=S9r-Xe8jz7PFACTZpP5-GhixzBx1ZFMDh-4pQXDOnPk,78980
|
|
117
117
|
desdeo/problem/simulator_evaluator.py,sha256=pdv3XD2dUUmnZPa70tEZQ5QeadQGrPsM15P8yhEenq0,19106
|
|
118
118
|
desdeo/problem/sympy_evaluator.py,sha256=nQmNN9Hjr66eoR2k1vAN82o3a-qiYLycOETAHGKBgcw,9479
|
|
119
119
|
desdeo/problem/testproblems/__init__.py,sha256=ii9qc2k1ym_qnzE-BXJbMbCe_068Q35zBCbOZ0g_f_U,2800
|
|
@@ -138,7 +138,7 @@ desdeo/problem/testproblems/simulator_problem.py,sha256=1Kf9VetifS5oWNJnrinBRiWx
|
|
|
138
138
|
desdeo/problem/testproblems/single_objective.py,sha256=gP8eqLNCbY_D2lX2JYIMotqbNWQINXo16HfYUtnHFZI,7547
|
|
139
139
|
desdeo/problem/testproblems/spanish_sustainability_problem.py,sha256=peB2jirtmwno_02G_43YZUukZPkfpc8Q14wn6KIsnRU,27120
|
|
140
140
|
desdeo/problem/testproblems/zdt_problem.py,sha256=dRDqMkc6YovVdthmChTfSgzGkXwQprsJ-1_1uG0OQQs,7659
|
|
141
|
-
desdeo/problem/utils.py,sha256=
|
|
141
|
+
desdeo/problem/utils.py,sha256=2X_g53W5hZhGdl0sM3jz9WFbQTlSa33Fe6RnaYwaISg,10661
|
|
142
142
|
desdeo/tools/GenerateReferencePoints.py,sha256=b4ykSPi0kM-FHFYmCNUDkpgiuvTxZc2EWMsylAliDYs,7353
|
|
143
143
|
desdeo/tools/__init__.py,sha256=ErDhU15t852ZftdLKGpTmoxZoqgzYjJ6GQzJNHFUo0U,3210
|
|
144
144
|
desdeo/tools/desc_gen.py,sha256=ge5Q0L86i-jR8PYiM9LOY8kKeXZu4egzg7cfY-8tLLY,910
|
|
@@ -155,7 +155,7 @@ desdeo/tools/ng_solver_interfaces.py,sha256=sTp1pph7xvXlY8ZpeytALQUBrTKTl3iuDmrJ
|
|
|
155
155
|
desdeo/tools/non_dominated_sorting.py,sha256=CMEcnB4WCUwWgIFwaBrsQ1dEqAGlta-PUh7fFHJeHtg,4969
|
|
156
156
|
desdeo/tools/patterns.py,sha256=KUyfRS40jztW9SvujBHWRs0jSGuO3Tjdp-VQxBunVFc,13156
|
|
157
157
|
desdeo/tools/proximal_solver.py,sha256=wMTer37m4NemBnwCJYFclymVjmrrfT7QIytnHZm3S74,4279
|
|
158
|
-
desdeo/tools/pyomo_solver_interfaces.py,sha256=
|
|
158
|
+
desdeo/tools/pyomo_solver_interfaces.py,sha256=ItS70JyLBqPYa4Nj5n8OAODF4swBD1LWbJ-EletPuvw,18192
|
|
159
159
|
desdeo/tools/reference_vectors.py,sha256=nk6Ef4lZVardyY1MfzhRZ-_HL-0QujNsNw-qw3KEPrk,7517
|
|
160
160
|
desdeo/tools/scalarization.py,sha256=PmKkqrdg4uUvzpBzZPVgrmfnreYehbRSVCv_YXbSsvM,87116
|
|
161
161
|
desdeo/tools/scipy_solver_interfaces.py,sha256=ysuemSClFWgK40Y0tlc3kjt253GWIWKaG8yBHkBf8RM,18525
|
|
@@ -174,7 +174,7 @@ desdeo/utopia_stuff/utopia_db_init.py,sha256=BlvJNxZE5Pgtr_aEUNBuCjPONi19FT4-73k
|
|
|
174
174
|
desdeo/utopia_stuff/utopia_problem.py,sha256=ZIoYDqvlspfcK0IFBZ3XgBB5qCB0BSSYRU5KmOwWZEM,15190
|
|
175
175
|
desdeo/utopia_stuff/utopia_problem_old.py,sha256=G-Qtrmg7Uip2M0QEEXKbIHlCBcM4WfWDvM1Rut5LzMU,16201
|
|
176
176
|
desdeo/utopia_stuff/utopia_reference_solutions.py,sha256=uU1FTOATg9Mx19ENidoSJF0hAzWvud4zCzR54qW_GO4,2536
|
|
177
|
-
desdeo-2.1.
|
|
178
|
-
desdeo-2.1.
|
|
179
|
-
desdeo-2.1.
|
|
180
|
-
desdeo-2.1.
|
|
177
|
+
desdeo-2.1.1.dist-info/METADATA,sha256=hqstpdAnUsV4Ad6PyM8baCwlbR3Wy2tQsiciPLJt6ao,8710
|
|
178
|
+
desdeo-2.1.1.dist-info/WHEEL,sha256=3ny-bZhpXrU6vSQ1UPG34FoxZBp3lVcvK0LkgUz6VLk,88
|
|
179
|
+
desdeo-2.1.1.dist-info/licenses/LICENSE,sha256=OWc9n9JaYCMc9dTTdOUv042049jOjm1cmQyJ0nkRbJk,1129
|
|
180
|
+
desdeo-2.1.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|