moospread 0.1.2__tar.gz → 0.1.4__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.2/moospread.egg-info → moospread-0.1.4}/PKG-INFO +22 -19
- {moospread-0.1.2 → moospread-0.1.4}/README.md +22 -27
- {moospread-0.1.2 → moospread-0.1.4}/README_PYPI.md +19 -18
- {moospread-0.1.2 → moospread-0.1.4}/moospread/core.py +272 -88
- {moospread-0.1.2 → moospread-0.1.4}/moospread/tasks/__init__.py +2 -1
- moospread-0.1.4/moospread/tasks/bo_torch.py +300 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/tasks/re_torch.py +36 -14
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/offline_utils/handle_task.py +24 -7
- {moospread-0.1.2 → moospread-0.1.4/moospread.egg-info}/PKG-INFO +22 -19
- {moospread-0.1.2 → moospread-0.1.4}/moospread.egg-info/SOURCES.txt +1 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread.egg-info/requires.txt +2 -0
- {moospread-0.1.2 → moospread-0.1.4}/pyproject.toml +3 -1
- {moospread-0.1.2 → moospread-0.1.4}/LICENSE +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/__init__.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/problem.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/tasks/dtlz_torch.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/tasks/mw_torch.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/tasks/zdt_torch.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/__init__.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/constraint_utils/__init__.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/constraint_utils/gradient.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/constraint_utils/mgda_core.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/constraint_utils/pmgda_solver.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/constraint_utils/prefs.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/ditmoo.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/lhs.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/misc.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/__init__.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/evolution/__init__.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/evolution/dom.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/evolution/norm.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/evolution/utils.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/learning/__init__.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/learning/model.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/learning/model_init.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/learning/model_update.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/learning/prediction.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/learning/utils.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/lhs_for_mobo.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/__init__.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/acquisition.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/algorithms.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/factory.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/mobo.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/selection.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/solver/__init__.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/solver/moead.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/solver/nsga2.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/solver/parego/__init__.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/solver/parego/parego.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/solver/parego/utils.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/solver/pareto_discovery/__init__.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/solver/pareto_discovery/buffer.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/solver/pareto_discovery/pareto_discovery.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/solver/pareto_discovery/utils.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/solver/solver.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/surrogate_model/__init__.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/surrogate_model/base.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/surrogate_model/gaussian_process.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/surrogate_model/thompson_sampling.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/surrogate_problem.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/transformation.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/utils.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/spread_mobo_utils.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/offline_utils/__init__.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/offline_utils/proxies.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/spread_utils.py +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread.egg-info/dependency_links.txt +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/moospread.egg-info/top_level.txt +0 -0
- {moospread-0.1.2 → moospread-0.1.4}/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.4
|
|
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>
|
|
@@ -26,6 +26,8 @@ Requires-Dist: scipy>=1.10
|
|
|
26
26
|
Requires-Dist: scikit-learn>=1.3
|
|
27
27
|
Requires-Dist: matplotlib>=3.7
|
|
28
28
|
Requires-Dist: pandas>=2.0
|
|
29
|
+
Requires-Dist: importlib
|
|
30
|
+
Requires-Dist: opencv-python-headless
|
|
29
31
|
Requires-Dist: pytz
|
|
30
32
|
Requires-Dist: PyYAML>=6.0
|
|
31
33
|
Requires-Dist: tqdm>=4.66
|
|
@@ -61,6 +63,20 @@ Dynamic: license-file
|
|
|
61
63
|
</p>
|
|
62
64
|
-->
|
|
63
65
|
|
|
66
|
+
<p align="center">
|
|
67
|
+
<a href="https://pypi.org/project/moospread/"><img src="https://img.shields.io/pypi/v/moospread.svg" alt="PyPI version"></a>
|
|
68
|
+
<a href="https://moospread.readthedocs.io">
|
|
69
|
+
<img src="https://img.shields.io/badge/docs-online-brightgreen.svg" alt="Documentation">
|
|
70
|
+
</a>
|
|
71
|
+
</p>
|
|
72
|
+
<div align="center">
|
|
73
|
+
<h3>
|
|
74
|
+
<a href="https://pypi.org/project/moospread/">Installation</a> |
|
|
75
|
+
<a href="https://moospread.readthedocs.io/en/latest/">Documentation</a> |
|
|
76
|
+
<a href="https://arxiv.org/pdf/2509.21058">Paper</a>
|
|
77
|
+
</h3>
|
|
78
|
+
</div>
|
|
79
|
+
|
|
64
80
|
# SPREAD: Sampling-based Pareto front Refinement via Efficient Adaptive Diffusion
|
|
65
81
|
|
|
66
82
|
> 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.
|
|
@@ -96,35 +112,23 @@ from moospread import SPREAD
|
|
|
96
112
|
from moospread.tasks import ZDT2
|
|
97
113
|
|
|
98
114
|
# Define the problem
|
|
99
|
-
|
|
100
|
-
problem = ZDT2(n_var=n_var)
|
|
115
|
+
problem = ZDT2(n_var=30)
|
|
101
116
|
|
|
102
117
|
# Initialize the SPREAD solver
|
|
103
118
|
solver = SPREAD(
|
|
104
119
|
problem,
|
|
105
120
|
data_size=10000,
|
|
106
|
-
timesteps=
|
|
121
|
+
timesteps=1000,
|
|
107
122
|
num_epochs=1000,
|
|
108
123
|
train_tol=100,
|
|
109
|
-
num_blocks=3,
|
|
110
|
-
validation_split=0.1,
|
|
111
124
|
mode="online",
|
|
112
125
|
seed=2026,
|
|
113
126
|
verbose=True
|
|
114
127
|
)
|
|
115
128
|
|
|
116
129
|
# Solve the problem
|
|
117
|
-
|
|
130
|
+
res_x, res_y = solver.solve(
|
|
118
131
|
num_points_sample=200,
|
|
119
|
-
strict_guidance=False,
|
|
120
|
-
rho_scale_gamma=0.9,
|
|
121
|
-
nu_t=10.0,
|
|
122
|
-
eta_init=0.9,
|
|
123
|
-
num_inner_steps=10,
|
|
124
|
-
lr_inner=0.9,
|
|
125
|
-
free_initial_h=True,
|
|
126
|
-
use_sigma_rep=False,
|
|
127
|
-
kernel_sigma_rep=0.01,
|
|
128
132
|
iterative_plot=True,
|
|
129
133
|
plot_period=10,
|
|
130
134
|
max_backtracks=25,
|
|
@@ -138,11 +142,10 @@ This will train a diffusion-based multi-objective solver, approximate the Pareto
|
|
|
138
142
|
|
|
139
143
|
---
|
|
140
144
|
|
|
141
|
-
|
|
145
|
+
|
|
142
146
|
### 📚 Next steps
|
|
143
147
|
|
|
144
|
-
For more advanced examples (offline mode,
|
|
145
|
-
-->
|
|
148
|
+
For more advanced examples (offline mode, mobo mode, tutorials), see the full [documentation](https://moospread.readthedocs.io/en/latest/).
|
|
146
149
|
|
|
147
150
|
## Citation
|
|
148
151
|
If you find `moospread` useful in your research, please consider citing:
|
|
@@ -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
|
|
|
@@ -8,6 +8,20 @@
|
|
|
8
8
|
</p>
|
|
9
9
|
-->
|
|
10
10
|
|
|
11
|
+
<p align="center">
|
|
12
|
+
<a href="https://pypi.org/project/moospread/"><img src="https://img.shields.io/pypi/v/moospread.svg" alt="PyPI version"></a>
|
|
13
|
+
<a href="https://moospread.readthedocs.io">
|
|
14
|
+
<img src="https://img.shields.io/badge/docs-online-brightgreen.svg" alt="Documentation">
|
|
15
|
+
</a>
|
|
16
|
+
</p>
|
|
17
|
+
<div align="center">
|
|
18
|
+
<h3>
|
|
19
|
+
<a href="https://pypi.org/project/moospread/">Installation</a> |
|
|
20
|
+
<a href="https://moospread.readthedocs.io/en/latest/">Documentation</a> |
|
|
21
|
+
<a href="https://arxiv.org/pdf/2509.21058">Paper</a>
|
|
22
|
+
</h3>
|
|
23
|
+
</div>
|
|
24
|
+
|
|
11
25
|
# SPREAD: Sampling-based Pareto front Refinement via Efficient Adaptive Diffusion
|
|
12
26
|
|
|
13
27
|
> 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.
|
|
@@ -43,35 +57,23 @@ from moospread import SPREAD
|
|
|
43
57
|
from moospread.tasks import ZDT2
|
|
44
58
|
|
|
45
59
|
# Define the problem
|
|
46
|
-
|
|
47
|
-
problem = ZDT2(n_var=n_var)
|
|
60
|
+
problem = ZDT2(n_var=30)
|
|
48
61
|
|
|
49
62
|
# Initialize the SPREAD solver
|
|
50
63
|
solver = SPREAD(
|
|
51
64
|
problem,
|
|
52
65
|
data_size=10000,
|
|
53
|
-
timesteps=
|
|
66
|
+
timesteps=1000,
|
|
54
67
|
num_epochs=1000,
|
|
55
68
|
train_tol=100,
|
|
56
|
-
num_blocks=3,
|
|
57
|
-
validation_split=0.1,
|
|
58
69
|
mode="online",
|
|
59
70
|
seed=2026,
|
|
60
71
|
verbose=True
|
|
61
72
|
)
|
|
62
73
|
|
|
63
74
|
# Solve the problem
|
|
64
|
-
|
|
75
|
+
res_x, res_y = solver.solve(
|
|
65
76
|
num_points_sample=200,
|
|
66
|
-
strict_guidance=False,
|
|
67
|
-
rho_scale_gamma=0.9,
|
|
68
|
-
nu_t=10.0,
|
|
69
|
-
eta_init=0.9,
|
|
70
|
-
num_inner_steps=10,
|
|
71
|
-
lr_inner=0.9,
|
|
72
|
-
free_initial_h=True,
|
|
73
|
-
use_sigma_rep=False,
|
|
74
|
-
kernel_sigma_rep=0.01,
|
|
75
77
|
iterative_plot=True,
|
|
76
78
|
plot_period=10,
|
|
77
79
|
max_backtracks=25,
|
|
@@ -85,11 +87,10 @@ This will train a diffusion-based multi-objective solver, approximate the Pareto
|
|
|
85
87
|
|
|
86
88
|
---
|
|
87
89
|
|
|
88
|
-
|
|
90
|
+
|
|
89
91
|
### 📚 Next steps
|
|
90
92
|
|
|
91
|
-
For more advanced examples (offline mode,
|
|
92
|
-
-->
|
|
93
|
+
For more advanced examples (offline mode, mobo mode, tutorials), see the full [documentation](https://moospread.readthedocs.io/en/latest/).
|
|
93
94
|
|
|
94
95
|
## Citation
|
|
95
96
|
If you find `moospread` useful in your research, please consider citing:
|