moospread 0.1.2__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.
Files changed (70) hide show
  1. {moospread-0.1.2/moospread.egg-info → moospread-0.1.3}/PKG-INFO +6 -16
  2. {moospread-0.1.2 → moospread-0.1.3}/README.md +22 -27
  3. {moospread-0.1.2 → moospread-0.1.3}/README_PYPI.md +3 -15
  4. {moospread-0.1.2 → moospread-0.1.3}/moospread/core.py +272 -88
  5. {moospread-0.1.2 → moospread-0.1.3}/moospread/tasks/__init__.py +2 -1
  6. moospread-0.1.3/moospread/tasks/bo_torch.py +300 -0
  7. {moospread-0.1.2 → moospread-0.1.3}/moospread/tasks/re_torch.py +36 -14
  8. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/offline_utils/handle_task.py +24 -7
  9. {moospread-0.1.2 → moospread-0.1.3/moospread.egg-info}/PKG-INFO +6 -16
  10. {moospread-0.1.2 → moospread-0.1.3}/moospread.egg-info/SOURCES.txt +1 -0
  11. {moospread-0.1.2 → moospread-0.1.3}/moospread.egg-info/requires.txt +2 -0
  12. {moospread-0.1.2 → moospread-0.1.3}/pyproject.toml +3 -1
  13. {moospread-0.1.2 → moospread-0.1.3}/LICENSE +0 -0
  14. {moospread-0.1.2 → moospread-0.1.3}/moospread/__init__.py +0 -0
  15. {moospread-0.1.2 → moospread-0.1.3}/moospread/problem.py +0 -0
  16. {moospread-0.1.2 → moospread-0.1.3}/moospread/tasks/dtlz_torch.py +0 -0
  17. {moospread-0.1.2 → moospread-0.1.3}/moospread/tasks/mw_torch.py +0 -0
  18. {moospread-0.1.2 → moospread-0.1.3}/moospread/tasks/zdt_torch.py +0 -0
  19. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/__init__.py +0 -0
  20. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/constraint_utils/__init__.py +0 -0
  21. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/constraint_utils/gradient.py +0 -0
  22. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/constraint_utils/mgda_core.py +0 -0
  23. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/constraint_utils/pmgda_solver.py +0 -0
  24. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/constraint_utils/prefs.py +0 -0
  25. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/ditmoo.py +0 -0
  26. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/lhs.py +0 -0
  27. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/misc.py +0 -0
  28. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/mobo_utils/__init__.py +0 -0
  29. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/mobo_utils/evolution/__init__.py +0 -0
  30. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/mobo_utils/evolution/dom.py +0 -0
  31. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/mobo_utils/evolution/norm.py +0 -0
  32. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/mobo_utils/evolution/utils.py +0 -0
  33. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/mobo_utils/learning/__init__.py +0 -0
  34. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/mobo_utils/learning/model.py +0 -0
  35. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/mobo_utils/learning/model_init.py +0 -0
  36. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/mobo_utils/learning/model_update.py +0 -0
  37. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/mobo_utils/learning/prediction.py +0 -0
  38. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/mobo_utils/learning/utils.py +0 -0
  39. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/mobo_utils/lhs_for_mobo.py +0 -0
  40. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/__init__.py +0 -0
  41. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/acquisition.py +0 -0
  42. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/algorithms.py +0 -0
  43. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/factory.py +0 -0
  44. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/mobo.py +0 -0
  45. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/selection.py +0 -0
  46. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/solver/__init__.py +0 -0
  47. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/solver/moead.py +0 -0
  48. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/solver/nsga2.py +0 -0
  49. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/solver/parego/__init__.py +0 -0
  50. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/solver/parego/parego.py +0 -0
  51. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/solver/parego/utils.py +0 -0
  52. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/solver/pareto_discovery/__init__.py +0 -0
  53. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/solver/pareto_discovery/buffer.py +0 -0
  54. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/solver/pareto_discovery/pareto_discovery.py +0 -0
  55. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/solver/pareto_discovery/utils.py +0 -0
  56. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/solver/solver.py +0 -0
  57. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/surrogate_model/__init__.py +0 -0
  58. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/surrogate_model/base.py +0 -0
  59. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/surrogate_model/gaussian_process.py +0 -0
  60. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/surrogate_model/thompson_sampling.py +0 -0
  61. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/surrogate_problem.py +0 -0
  62. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/transformation.py +0 -0
  63. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/mobo_utils/mobo/utils.py +0 -0
  64. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/mobo_utils/spread_mobo_utils.py +0 -0
  65. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/offline_utils/__init__.py +0 -0
  66. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/offline_utils/proxies.py +0 -0
  67. {moospread-0.1.2 → moospread-0.1.3}/moospread/utils/spread_utils.py +0 -0
  68. {moospread-0.1.2 → moospread-0.1.3}/moospread.egg-info/dependency_links.txt +0 -0
  69. {moospread-0.1.2 → moospread-0.1.3}/moospread.egg-info/top_level.txt +0 -0
  70. {moospread-0.1.2 → 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.2
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>
@@ -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
@@ -96,35 +98,23 @@ from moospread import SPREAD
96
98
  from moospread.tasks import ZDT2
97
99
 
98
100
  # Define the problem
99
- n_var = 30
100
- problem = ZDT2(n_var=n_var)
101
+ problem = ZDT2(n_var=30)
101
102
 
102
103
  # Initialize the SPREAD solver
103
104
  solver = SPREAD(
104
105
  problem,
105
106
  data_size=10000,
106
- timesteps=5000,
107
+ timesteps=1000,
107
108
  num_epochs=1000,
108
109
  train_tol=100,
109
- num_blocks=3,
110
- validation_split=0.1,
111
110
  mode="online",
112
111
  seed=2026,
113
112
  verbose=True
114
113
  )
115
114
 
116
115
  # Solve the problem
117
- results = solver.solve(
116
+ res_x, res_y = solver.solve(
118
117
  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
118
  iterative_plot=True,
129
119
  plot_period=10,
130
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
+ [![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
 
@@ -43,35 +43,23 @@ from moospread import SPREAD
43
43
  from moospread.tasks import ZDT2
44
44
 
45
45
  # Define the problem
46
- n_var = 30
47
- problem = ZDT2(n_var=n_var)
46
+ problem = ZDT2(n_var=30)
48
47
 
49
48
  # Initialize the SPREAD solver
50
49
  solver = SPREAD(
51
50
  problem,
52
51
  data_size=10000,
53
- timesteps=5000,
52
+ timesteps=1000,
54
53
  num_epochs=1000,
55
54
  train_tol=100,
56
- num_blocks=3,
57
- validation_split=0.1,
58
55
  mode="online",
59
56
  seed=2026,
60
57
  verbose=True
61
58
  )
62
59
 
63
60
  # Solve the problem
64
- results = solver.solve(
61
+ res_x, res_y = solver.solve(
65
62
  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
63
  iterative_plot=True,
76
64
  plot_period=10,
77
65
  max_backtracks=25,