moospread 0.1.1__tar.gz → 0.1.3__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.
- {moospread-0.1.1/moospread.egg-info → moospread-0.1.3}/PKG-INFO +31 -24
- {moospread-0.1.1 → moospread-0.1.3}/README.md +22 -27
- {moospread-0.1.1 → moospread-0.1.3}/README_PYPI.md +3 -19
- {moospread-0.1.1 → moospread-0.1.3}/moospread/core.py +272 -88
- {moospread-0.1.1 → moospread-0.1.3}/moospread/tasks/__init__.py +2 -1
- moospread-0.1.3/moospread/tasks/bo_torch.py +300 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/tasks/re_torch.py +36 -14
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/offline_utils/handle_task.py +24 -7
- {moospread-0.1.1 → moospread-0.1.3/moospread.egg-info}/PKG-INFO +31 -24
- {moospread-0.1.1 → moospread-0.1.3}/moospread.egg-info/SOURCES.txt +1 -0
- moospread-0.1.3/moospread.egg-info/requires.txt +34 -0
- {moospread-0.1.1 → moospread-0.1.3}/pyproject.toml +30 -9
- moospread-0.1.1/moospread.egg-info/requires.txt +0 -8
- {moospread-0.1.1 → moospread-0.1.3}/LICENSE +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/__init__.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/problem.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/tasks/dtlz_torch.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/tasks/mw_torch.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/tasks/zdt_torch.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/__init__.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/constraint_utils/__init__.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/constraint_utils/gradient.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/constraint_utils/mgda_core.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/constraint_utils/pmgda_solver.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/constraint_utils/prefs.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/ditmoo.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/lhs.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/misc.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/mobo_utils/__init__.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/mobo_utils/evolution/__init__.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/mobo_utils/evolution/dom.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/mobo_utils/evolution/norm.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/mobo_utils/evolution/utils.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/mobo_utils/learning/__init__.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/mobo_utils/learning/model.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/mobo_utils/learning/model_init.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/mobo_utils/learning/model_update.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/mobo_utils/learning/prediction.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/mobo_utils/learning/utils.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/mobo_utils/lhs_for_mobo.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/__init__.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/acquisition.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/algorithms.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/factory.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/mobo.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/selection.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/solver/__init__.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/solver/moead.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/solver/nsga2.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/solver/parego/__init__.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/solver/parego/parego.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/solver/parego/utils.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/solver/pareto_discovery/__init__.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/solver/pareto_discovery/buffer.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/solver/pareto_discovery/pareto_discovery.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/solver/pareto_discovery/utils.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/solver/solver.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/surrogate_model/__init__.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/surrogate_model/base.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/surrogate_model/gaussian_process.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/surrogate_model/thompson_sampling.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/surrogate_problem.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/transformation.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/utils.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/mobo_utils/spread_mobo_utils.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/offline_utils/__init__.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/offline_utils/proxies.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread/utils/spread_utils.py +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread.egg-info/dependency_links.txt +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/moospread.egg-info/top_level.txt +0 -0
- {moospread-0.1.1 → moospread-0.1.3}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: moospread
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.3
|
|
4
4
|
Summary: Sampling-based Pareto front Refinement via Efficient Adaptive Diffusion
|
|
5
5
|
Author-email: Sedjro Salomon Hotegni <salomon.hotegni@aims.ac.rw>
|
|
6
6
|
Maintainer-email: Sedjro Salomon Hotegni <salomon.hotegni@tu-dortmund.de>
|
|
@@ -21,13 +21,36 @@ Project-URL: Homepage, https://github.com/safe-autonomous-systems/moo-spread
|
|
|
21
21
|
Requires-Python: >=3.8
|
|
22
22
|
Description-Content-Type: text/markdown
|
|
23
23
|
License-File: LICENSE
|
|
24
|
-
Requires-Dist: numpy
|
|
25
|
-
Requires-Dist:
|
|
24
|
+
Requires-Dist: numpy>=1.24
|
|
25
|
+
Requires-Dist: scipy>=1.10
|
|
26
|
+
Requires-Dist: scikit-learn>=1.3
|
|
27
|
+
Requires-Dist: matplotlib>=3.7
|
|
28
|
+
Requires-Dist: pandas>=2.0
|
|
29
|
+
Requires-Dist: importlib
|
|
30
|
+
Requires-Dist: opencv-python-headless
|
|
31
|
+
Requires-Dist: pytz
|
|
32
|
+
Requires-Dist: PyYAML>=6.0
|
|
33
|
+
Requires-Dist: tqdm>=4.66
|
|
34
|
+
Requires-Dist: cvxopt>=1.3.2
|
|
35
|
+
Requires-Dist: pymoo>=0.5
|
|
36
|
+
Requires-Dist: torch>=2.2
|
|
37
|
+
Requires-Dist: torchvision
|
|
38
|
+
Requires-Dist: torchaudio
|
|
39
|
+
Requires-Dist: gpytorch>=1.10
|
|
40
|
+
Requires-Dist: botorch>=0.8.5
|
|
41
|
+
Requires-Dist: pyro-ppl>=1.9.1
|
|
26
42
|
Provides-Extra: dev
|
|
27
|
-
Requires-Dist: coverage; extra == "dev"
|
|
28
|
-
Requires-Dist: mypy; extra == "dev"
|
|
29
43
|
Requires-Dist: pytest; extra == "dev"
|
|
30
44
|
Requires-Dist: ruff; extra == "dev"
|
|
45
|
+
Requires-Dist: build; extra == "dev"
|
|
46
|
+
Requires-Dist: twine; extra == "dev"
|
|
47
|
+
Provides-Extra: plot
|
|
48
|
+
Requires-Dist: seaborn>=0.13; extra == "plot"
|
|
49
|
+
Provides-Extra: config
|
|
50
|
+
Requires-Dist: hydra-core>=1.3.2; extra == "config"
|
|
51
|
+
Requires-Dist: omegaconf>=2.3.0; extra == "config"
|
|
52
|
+
Provides-Extra: tracking
|
|
53
|
+
Requires-Dist: wandb>=0.20; extra == "tracking"
|
|
31
54
|
Dynamic: license-file
|
|
32
55
|
|
|
33
56
|
<p align="center">
|
|
@@ -52,8 +75,6 @@ Dynamic: license-file
|
|
|
52
75
|
conda create -n moospread python=3.11
|
|
53
76
|
conda activate moospread
|
|
54
77
|
pip install moospread
|
|
55
|
-
# To install CUDA‐enabled PyTorch, run (or visit: https://pytorch.org/get-started/locally/):
|
|
56
|
-
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
|
|
57
78
|
```
|
|
58
79
|
Or, to install the latest code from GitHub:
|
|
59
80
|
```python
|
|
@@ -62,8 +83,6 @@ conda activate moospread
|
|
|
62
83
|
git clone https://github.com/safe-autonomous-systems/moo-spread.git
|
|
63
84
|
cd moo-spread
|
|
64
85
|
pip install -e .
|
|
65
|
-
# To install CUDA‐enabled PyTorch, run (or visit: https://pytorch.org/get-started/locally/):
|
|
66
|
-
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
|
|
67
86
|
```
|
|
68
87
|
### Basic usage
|
|
69
88
|
This example shows how to solve a standard multi-objective optimization benchmark (ZDT2) using the **SPREAD** solver.
|
|
@@ -79,35 +98,23 @@ from moospread import SPREAD
|
|
|
79
98
|
from moospread.tasks import ZDT2
|
|
80
99
|
|
|
81
100
|
# Define the problem
|
|
82
|
-
|
|
83
|
-
problem = ZDT2(n_var=n_var)
|
|
101
|
+
problem = ZDT2(n_var=30)
|
|
84
102
|
|
|
85
103
|
# Initialize the SPREAD solver
|
|
86
104
|
solver = SPREAD(
|
|
87
105
|
problem,
|
|
88
106
|
data_size=10000,
|
|
89
|
-
timesteps=
|
|
107
|
+
timesteps=1000,
|
|
90
108
|
num_epochs=1000,
|
|
91
109
|
train_tol=100,
|
|
92
|
-
num_blocks=3,
|
|
93
|
-
validation_split=0.1,
|
|
94
110
|
mode="online",
|
|
95
111
|
seed=2026,
|
|
96
112
|
verbose=True
|
|
97
113
|
)
|
|
98
114
|
|
|
99
115
|
# Solve the problem
|
|
100
|
-
|
|
116
|
+
res_x, res_y = solver.solve(
|
|
101
117
|
num_points_sample=200,
|
|
102
|
-
strict_guidance=False,
|
|
103
|
-
rho_scale_gamma=0.9,
|
|
104
|
-
nu_t=10.0,
|
|
105
|
-
eta_init=0.9,
|
|
106
|
-
num_inner_steps=10,
|
|
107
|
-
lr_inner=0.9,
|
|
108
|
-
free_initial_h=True,
|
|
109
|
-
use_sigma_rep=False,
|
|
110
|
-
kernel_sigma_rep=0.01,
|
|
111
118
|
iterative_plot=True,
|
|
112
119
|
plot_period=10,
|
|
113
120
|
max_backtracks=25,
|
|
@@ -1,16 +1,28 @@
|
|
|
1
1
|
<p align="center">
|
|
2
2
|
<img src="/images/logo_well_spread.png" style="width: 30%; height: auto;">
|
|
3
3
|
</p>
|
|
4
|
-
<a href="https://pypi.org/project/moospread/"><img src="https://img.shields.io/pypi/v/advermorel.svg" alt="PyPI version"></a>
|
|
5
|
-
|
|
6
|
-
# [ICLR 2026] SPREAD: Sampling-based Pareto front Refinement via Efficient Adaptive Diffusion
|
|
7
|
-
|
|
8
4
|
<!--
|
|
5
|
+
[](https://badge.fury.io/py/moospread)
|
|
6
|
+
-->
|
|
9
7
|
<p align="center">
|
|
10
|
-
<a href="https://pypi.org/project/moospread/"><img src="https://img.shields.io/pypi/v/
|
|
8
|
+
<a href="https://pypi.org/project/moospread/"><img src="https://img.shields.io/pypi/v/moospread.svg" alt="PyPI version"></a>
|
|
9
|
+
<a href="https://moospread.readthedocs.io">
|
|
10
|
+
<img src="https://img.shields.io/badge/docs-online-brightgreen.svg" alt="Documentation">
|
|
11
|
+
</a>
|
|
11
12
|
</p>
|
|
13
|
+
<div align="center">
|
|
14
|
+
<h3>
|
|
15
|
+
<a href="https://pypi.org/project/moospread/">Installation</a> |
|
|
16
|
+
<a href="https://moospread.readthedocs.io/en/latest/">Documentation</a> |
|
|
17
|
+
<a href="https://arxiv.org/pdf/2509.21058">Paper</a>
|
|
18
|
+
</h3>
|
|
19
|
+
</div>
|
|
20
|
+
<!--
|
|
21
|
+
<a href="https://pypi.org/project/moospread/"><img src="https://img.shields.io/pypi/v/advermorel.svg" alt="PyPI version"></a>
|
|
12
22
|
-->
|
|
13
23
|
|
|
24
|
+
# [ICLR 2026] SPREAD: Sampling-based Pareto front Refinement via Efficient Adaptive Diffusion
|
|
25
|
+
|
|
14
26
|
> SPREAD is a novel sampling-based approach for multi-objective optimization that leverages diffusion models to efficiently refine and generate well-spread Pareto front approximations. It combines the expressiveness of diffusion models with multi-objective optimization principles to achieve both high convergence to the Pareto front and excellent diversity across the objective space. SPREAD demonstrates competitive performance against state-of-the-art methods while providing a flexible framework for different optimization contexts.
|
|
15
27
|
|
|
16
28
|
## 🚀 Getting Started
|
|
@@ -21,8 +33,6 @@
|
|
|
21
33
|
conda create -n moospread python=3.11
|
|
22
34
|
conda activate moospread
|
|
23
35
|
pip install moospread
|
|
24
|
-
# To install CUDA‐enabled PyTorch, run (or visit: https://pytorch.org/get-started/locally/):
|
|
25
|
-
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
|
|
26
36
|
```
|
|
27
37
|
Or, to install the latest code from GitHub:
|
|
28
38
|
```python
|
|
@@ -31,8 +41,6 @@ conda activate moospread
|
|
|
31
41
|
git clone https://github.com/safe-autonomous-systems/moo-spread.git
|
|
32
42
|
cd moo-spread
|
|
33
43
|
pip install -e .
|
|
34
|
-
# To install CUDA‐enabled PyTorch, run (or visit: https://pytorch.org/get-started/locally/):
|
|
35
|
-
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
|
|
36
44
|
```
|
|
37
45
|
### Basic usage
|
|
38
46
|
This example shows how to solve a standard multi-objective optimization benchmark (ZDT2) using the **SPREAD** solver.
|
|
@@ -48,35 +56,23 @@ from moospread import SPREAD
|
|
|
48
56
|
from moospread.tasks import ZDT2
|
|
49
57
|
|
|
50
58
|
# Define the problem
|
|
51
|
-
|
|
52
|
-
problem = ZDT2(n_var=n_var)
|
|
59
|
+
problem = ZDT2(n_var=30)
|
|
53
60
|
|
|
54
61
|
# Initialize the SPREAD solver
|
|
55
62
|
solver = SPREAD(
|
|
56
63
|
problem,
|
|
57
64
|
data_size=10000,
|
|
58
|
-
timesteps=
|
|
65
|
+
timesteps=1000,
|
|
59
66
|
num_epochs=1000,
|
|
60
67
|
train_tol=100,
|
|
61
|
-
num_blocks=3,
|
|
62
|
-
validation_split=0.1,
|
|
63
68
|
mode="online",
|
|
64
69
|
seed=2026,
|
|
65
70
|
verbose=True
|
|
66
71
|
)
|
|
67
72
|
|
|
68
73
|
# Solve the problem
|
|
69
|
-
|
|
74
|
+
res_x, res_y = solver.solve(
|
|
70
75
|
num_points_sample=200,
|
|
71
|
-
strict_guidance=False,
|
|
72
|
-
rho_scale_gamma=0.9,
|
|
73
|
-
nu_t=10.0,
|
|
74
|
-
eta_init=0.9,
|
|
75
|
-
num_inner_steps=10,
|
|
76
|
-
lr_inner=0.9,
|
|
77
|
-
free_initial_h=True,
|
|
78
|
-
use_sigma_rep=False,
|
|
79
|
-
kernel_sigma_rep=0.01,
|
|
80
76
|
iterative_plot=True,
|
|
81
77
|
plot_period=10,
|
|
82
78
|
max_backtracks=25,
|
|
@@ -90,11 +86,10 @@ This will train a diffusion-based multi-objective solver, approximate the Pareto
|
|
|
90
86
|
|
|
91
87
|
---
|
|
92
88
|
|
|
93
|
-
|
|
89
|
+
|
|
94
90
|
### 📚 Next steps
|
|
95
91
|
|
|
96
|
-
For more advanced examples (offline mode,
|
|
97
|
-
-->
|
|
92
|
+
For more advanced examples (offline mode, mobo mode, tutorials), see the full [documentation](https://moospread.readthedocs.io/en/latest/).
|
|
98
93
|
|
|
99
94
|
## 🔬 Experiments
|
|
100
95
|
|
|
@@ -20,8 +20,6 @@
|
|
|
20
20
|
conda create -n moospread python=3.11
|
|
21
21
|
conda activate moospread
|
|
22
22
|
pip install moospread
|
|
23
|
-
# To install CUDA‐enabled PyTorch, run (or visit: https://pytorch.org/get-started/locally/):
|
|
24
|
-
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
|
|
25
23
|
```
|
|
26
24
|
Or, to install the latest code from GitHub:
|
|
27
25
|
```python
|
|
@@ -30,8 +28,6 @@ conda activate moospread
|
|
|
30
28
|
git clone https://github.com/safe-autonomous-systems/moo-spread.git
|
|
31
29
|
cd moo-spread
|
|
32
30
|
pip install -e .
|
|
33
|
-
# To install CUDA‐enabled PyTorch, run (or visit: https://pytorch.org/get-started/locally/):
|
|
34
|
-
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
|
|
35
31
|
```
|
|
36
32
|
### Basic usage
|
|
37
33
|
This example shows how to solve a standard multi-objective optimization benchmark (ZDT2) using the **SPREAD** solver.
|
|
@@ -47,35 +43,23 @@ from moospread import SPREAD
|
|
|
47
43
|
from moospread.tasks import ZDT2
|
|
48
44
|
|
|
49
45
|
# Define the problem
|
|
50
|
-
|
|
51
|
-
problem = ZDT2(n_var=n_var)
|
|
46
|
+
problem = ZDT2(n_var=30)
|
|
52
47
|
|
|
53
48
|
# Initialize the SPREAD solver
|
|
54
49
|
solver = SPREAD(
|
|
55
50
|
problem,
|
|
56
51
|
data_size=10000,
|
|
57
|
-
timesteps=
|
|
52
|
+
timesteps=1000,
|
|
58
53
|
num_epochs=1000,
|
|
59
54
|
train_tol=100,
|
|
60
|
-
num_blocks=3,
|
|
61
|
-
validation_split=0.1,
|
|
62
55
|
mode="online",
|
|
63
56
|
seed=2026,
|
|
64
57
|
verbose=True
|
|
65
58
|
)
|
|
66
59
|
|
|
67
60
|
# Solve the problem
|
|
68
|
-
|
|
61
|
+
res_x, res_y = solver.solve(
|
|
69
62
|
num_points_sample=200,
|
|
70
|
-
strict_guidance=False,
|
|
71
|
-
rho_scale_gamma=0.9,
|
|
72
|
-
nu_t=10.0,
|
|
73
|
-
eta_init=0.9,
|
|
74
|
-
num_inner_steps=10,
|
|
75
|
-
lr_inner=0.9,
|
|
76
|
-
free_initial_h=True,
|
|
77
|
-
use_sigma_rep=False,
|
|
78
|
-
kernel_sigma_rep=0.01,
|
|
79
63
|
iterative_plot=True,
|
|
80
64
|
plot_period=10,
|
|
81
65
|
max_backtracks=25,
|