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.
Files changed (70) hide show
  1. {moospread-0.1.2/moospread.egg-info → moospread-0.1.4}/PKG-INFO +22 -19
  2. {moospread-0.1.2 → moospread-0.1.4}/README.md +22 -27
  3. {moospread-0.1.2 → moospread-0.1.4}/README_PYPI.md +19 -18
  4. {moospread-0.1.2 → moospread-0.1.4}/moospread/core.py +272 -88
  5. {moospread-0.1.2 → moospread-0.1.4}/moospread/tasks/__init__.py +2 -1
  6. moospread-0.1.4/moospread/tasks/bo_torch.py +300 -0
  7. {moospread-0.1.2 → moospread-0.1.4}/moospread/tasks/re_torch.py +36 -14
  8. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/offline_utils/handle_task.py +24 -7
  9. {moospread-0.1.2 → moospread-0.1.4/moospread.egg-info}/PKG-INFO +22 -19
  10. {moospread-0.1.2 → moospread-0.1.4}/moospread.egg-info/SOURCES.txt +1 -0
  11. {moospread-0.1.2 → moospread-0.1.4}/moospread.egg-info/requires.txt +2 -0
  12. {moospread-0.1.2 → moospread-0.1.4}/pyproject.toml +3 -1
  13. {moospread-0.1.2 → moospread-0.1.4}/LICENSE +0 -0
  14. {moospread-0.1.2 → moospread-0.1.4}/moospread/__init__.py +0 -0
  15. {moospread-0.1.2 → moospread-0.1.4}/moospread/problem.py +0 -0
  16. {moospread-0.1.2 → moospread-0.1.4}/moospread/tasks/dtlz_torch.py +0 -0
  17. {moospread-0.1.2 → moospread-0.1.4}/moospread/tasks/mw_torch.py +0 -0
  18. {moospread-0.1.2 → moospread-0.1.4}/moospread/tasks/zdt_torch.py +0 -0
  19. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/__init__.py +0 -0
  20. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/constraint_utils/__init__.py +0 -0
  21. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/constraint_utils/gradient.py +0 -0
  22. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/constraint_utils/mgda_core.py +0 -0
  23. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/constraint_utils/pmgda_solver.py +0 -0
  24. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/constraint_utils/prefs.py +0 -0
  25. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/ditmoo.py +0 -0
  26. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/lhs.py +0 -0
  27. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/misc.py +0 -0
  28. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/__init__.py +0 -0
  29. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/evolution/__init__.py +0 -0
  30. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/evolution/dom.py +0 -0
  31. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/evolution/norm.py +0 -0
  32. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/evolution/utils.py +0 -0
  33. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/learning/__init__.py +0 -0
  34. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/learning/model.py +0 -0
  35. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/learning/model_init.py +0 -0
  36. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/learning/model_update.py +0 -0
  37. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/learning/prediction.py +0 -0
  38. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/learning/utils.py +0 -0
  39. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/lhs_for_mobo.py +0 -0
  40. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/__init__.py +0 -0
  41. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/acquisition.py +0 -0
  42. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/algorithms.py +0 -0
  43. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/factory.py +0 -0
  44. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/mobo.py +0 -0
  45. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/selection.py +0 -0
  46. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/solver/__init__.py +0 -0
  47. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/solver/moead.py +0 -0
  48. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/solver/nsga2.py +0 -0
  49. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/solver/parego/__init__.py +0 -0
  50. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/solver/parego/parego.py +0 -0
  51. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/solver/parego/utils.py +0 -0
  52. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/solver/pareto_discovery/__init__.py +0 -0
  53. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/solver/pareto_discovery/buffer.py +0 -0
  54. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/solver/pareto_discovery/pareto_discovery.py +0 -0
  55. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/solver/pareto_discovery/utils.py +0 -0
  56. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/solver/solver.py +0 -0
  57. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/surrogate_model/__init__.py +0 -0
  58. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/surrogate_model/base.py +0 -0
  59. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/surrogate_model/gaussian_process.py +0 -0
  60. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/surrogate_model/thompson_sampling.py +0 -0
  61. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/surrogate_problem.py +0 -0
  62. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/transformation.py +0 -0
  63. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/mobo/utils.py +0 -0
  64. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/mobo_utils/spread_mobo_utils.py +0 -0
  65. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/offline_utils/__init__.py +0 -0
  66. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/offline_utils/proxies.py +0 -0
  67. {moospread-0.1.2 → moospread-0.1.4}/moospread/utils/spread_utils.py +0 -0
  68. {moospread-0.1.2 → moospread-0.1.4}/moospread.egg-info/dependency_links.txt +0 -0
  69. {moospread-0.1.2 → moospread-0.1.4}/moospread.egg-info/top_level.txt +0 -0
  70. {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.2
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
- n_var = 30
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=5000,
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
- results = solver.solve(
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, Bayesian mode, custom problems), see the full [documentation](https://moospread.readthedocs.io/en/latest/).
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
+ [![PyPI version](https://badge.fury.io/py/moospread.svg)](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/advermorel.svg" alt="PyPI version"></a>
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
- n_var = 30
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=5000,
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
- results = solver.solve(
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, Bayesian mode, custom problems), see the full [documentation](https://moospread.readthedocs.io/en/latest/).
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
- n_var = 30
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=5000,
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
- results = solver.solve(
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, Bayesian mode, custom problems), see the full [documentation](https://moospread.readthedocs.io/en/latest/).
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: