Paretoflow is a Python package for offline multi-objective optimization using Generative Flow Models with Multi Predictors Guidance to approximate the Pareto front.
Project description
ParetoFlow
ParetoFlow is a Python package for offline multi-objective optimization using Generative Flow Models with Multi Predictors Guidance to approximate the Pareto front.
Installation
conda create -n paretoflow python=3.10
conda activate paretoflow
pip install numpy==1.23.2
pip install scipy==1.10.1
pip install torch==2.0.1 --index-url https://download.pytorch.org/whl/cu118
pip install tqdm==4.66.5
pip install paretoflow
Usage
We accept .py files for input features and labels, where the continuous features has shape (n_samples, n_dim), and the discrete features has shape (n_samples, seq_len).
The labels are the objective values, with shape (n_samples, n_obj).
When having discrete features, we need to convert the discrete features to continuous logits, as stated in the ParetoFlow paper. The implementation follows the design-bench.
In our implementation, we support both z-score normalization and min-max normalization. In our paper, we use z-score normalization for training the proxies and flow matching model. Min-max normalization is used for calculating the hypervolume, aligining with offline-moo.
If you have your data as x.npy and y.npy, you can use the following code to train the proxies and flow matching model (continuous features for illustration, see the examples for discrete features):
from paretoflow import train_proxies, train_flow_matching, FlowMatching, MultipleModels, ParetoFlowSampler, VectorFieldNet
from paretoflow import to_integers, to_logits, z_score_denormalize_x, z_score_normalize_x
# Load the data
all_x = np.load("examples/data/x.npy")
all_y = np.load("examples/data/y.npy")
# Normalize the data
all_x_normalized, x_mean, x_std = z_score_normalize_x(all_x)
# Train the proxies model
proxies_model = train_proxies(all_x_normalized, all_y, device="cuda")
# Train the flow matching model
fm_model = train_flow_matching(all_x_normalized, device="cuda")
# Create the sampler
sampler = ParetoFlowSampler(fm_model, proxies_model)
# Sample the data
res_x = sampler.sample(n_samples=1000)
# Denormalize the data
res_x_denormalized = z_score_denormalize_x(res_x, x_mean, x_std)
print(res_x_denormalized)
Citation
If you find ParetoFlow useful in your research, please consider citing:
@misc{yuan2024paretoflowguidedflowsmultiobjective,
title={ParetoFlow: Guided Flows in Multi-Objective Optimization},
author={Ye Yuan and Can Chen and Christopher Pal and Xue Liu},
year={2024},
eprint={2412.03718},
archivePrefix={arXiv},
primaryClass={cs.CE},
url={https://arxiv.org/abs/2412.03718},
}
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file paretoflow-0.1.2.tar.gz.
File metadata
- Download URL: paretoflow-0.1.2.tar.gz
- Upload date:
- Size: 23.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.10.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9d17295e19358dea1e7fd6b68c6fe4660ba7c4f9c8fadff0e2956e6b718e41c3
|
|
| MD5 |
34b5d9ef12de196eda40d3e8f628f432
|
|
| BLAKE2b-256 |
21cedb0c9ac493e4b2350f68a7ba1260316ec7fe42b8e434de5104d7cd9418a6
|