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