Skip to main content

Moon: A Standardized/Flexible Framework for MultiObjective OptimizatioN

Moon

Moon: A Multiobjective Optimization Framework

Introduction

Moon is a multiobjective optimization framework that spans from single-objective optimization to multiobjective optimization. It aims to enhance the understanding of optimization problems and facilitate fair comparisons between MOO algorithms.

"I raise my cup to invite the moon.
With my shadow we become three from one."
-- Li Bai

Main Contributors

  • Xiaoyuan Zhang (Project Leader)
  • Ji Cheng
  • Liao Zhao
  • Weiduo Liao
  • Zhe Zhao
  • Xi Lin
  • Cheng Gong
  • Longcan Chen
  • YingYing Yu

Advisory Board

  • Prof. Yifan Chen (Hong Kong Baptist University)
  • Prof. Zhichao Lu (City University of Hong Kong)
  • Prof. Ke Shang (Shenzhen University)
  • Prof. Tao Qin (Microsoft Research)
  • Prof. Han Zhao (University of Illinois at Urbana-Champaign)

Correspondence

For any inquiries, please contact Prof. Qingfu Zhang (City University of Hong Kong) at the corresponding address.

Resources

For more information on methodologies, please visit our GitHub repository. Contributions and stars are welcome!

(1) A standardlized gradient based framework.

Optimization Problem Classes

Problem Class Details

For more information on problem specifics, please refer to the Readme_problem.md file.

Synthetic Problems

Here's a list of synthetic problems along with relevant research papers and project/code links:

Problem Paper Project/Code
ZDT Paper Project
DTLZ Paper Project
MAF Paper Project
WFG Paper Code
Fi's Paper Code
RE Paper Code

Multitask Learning Problems

This section details problems related to multitask learning, along with their corresponding papers and project/code references:

Problem Paper Project/Code
MO-MNISTs PMTL COSMOS
Fairness Classification COSMOS COSMOS
Federated Learning Federal MTL COSMOS
Synthetic (DST, FTS...) Envelop Project
Robotics (MO-MuJoCo...) PGMORL Code
  • Gradient-based Solver.

    Method Property #Obj Support Published Complexity
    EPO code Exact solution. Any Y ICML 2020 $O(m^2 n K )$
    COSMOS code Approximated exact solution. Any Y ICDM 2021 $O(m n K )$
    MOO-SVGD code A set of diverse Pareto solution. Any Y NeurIPS 2021 $O(m^2 n K^2 )$
    MGDA code Arbitray Pareto solutions. Location affected highly by initialization. Any Y NeurIPS 2018 $O(m^2 n K )$
    PMTL code Pareto solutions in sectors. 2. 3 is difficult. Y NeurIPS 2019 $O(m^2 n K^2 )$
    PMGDA Pareto solutions satisfying any preference. Any Y Under review $O(m^2 n K )$
    GradienHV WangHao code It is a gradient-based HV method. 2/3 Y CEC 2023 $O(m^2 n K^2 )$
    Aggregation fun. based, e.g. Tche,mTche,LS,PBI,... Pareto solution with aggregations. Any Y

    Here, $m$ is the number of objectives, $K$ is the number of samples, and $n$ is the number of decision variables. For neural network based methods, $n$ is the number of parameters; hence $n$ is very large (>10000), K is also large (e.g., 20-50), while $m$ is small (2.g., 2-4).

    As a result, m^2 is not a big problem. n^2 is a big problem. K^2 is a big problem.

    Time complexity of gradient based methods are as follows, -1 Tier 1. GradAggSolver. -2 Tier 2. MGDASolver, EPOSolver, PMTLSolver. -3 Tier 3. GradHVSolver -4 Tier 4. MOOSVGDSolver

    Current support: GradAggSolver, MGDASolver, EPOSolver, MOOSVGDSolver, GradHVSolver, PMTLSolver.

    Important things to notice: The original code MOO-SVGD does not offer a MTL implement. Our code is the first open source code for MTL MOO-SVGD.

Supported Solvers

Current Support

Libmoon includes a variety of solvers tailored for different needs:

  • GradAggSolver
  • MGDASolver
  • EPOSolver
  • MOOSVGDSolver (*)
  • GradHVSolver
  • PMTLSolver

(*) The original MOO-SVGD code does not include an implementation for Multitask Learning (MTL). Our release of MOO-SVGD is the first open-source code that supports MTL.

PSL (Pareto set learning) Solvers

Libmoon supports various models of PSL solvers, categorized as follows:

  • EPO-based PSL model
  • Agg-based PSL model
  • Hypernetwork-based PSL model
  • ConditionalNet-based PSL model
  • Simple PSL model
  • Generative PSL model

MOEA/D Framework

Currently Supported

Upcoming Releases

ML Pretrained Methods

  • HV Net, a model for handling high-volume data, available here.

Installation

Libmoon is available on PyPI. You can install it using pip:

pip install libmoon==0.1.11


Example code for a synthetic problem,

from libmoon.solver.gradient import GradAggSolver from libmoon.util_global.constant import problem_dict from libmoon.util_global.weight_factor.funs import uniform_pref import torch import numpy as np from matplotlib import pyplot as plt import argparse from libmoon.visulization.view_res import vedio_res

if name == 'main': parser = argparse.ArgumentParser(description='example') parser.add_argument('--n-partition', type=int, default=10) parser.add_argument('--agg', type=str, default='tche') # If solve is agg, then choose a specific agg method. parser.add_argument('--solver', type=str, default='agg') parser.add_argument('--problem-name', type=str, default='VLMOP2') parser.add_argument('--iter', type=int, default=1000) parser.add_argument('--step-size', type=float, default=1e-2) parser.add_argument('--tol', type=float, default=1e-6) args = parser.parse_args()

# Init the solver, problem and prefs. 
solver = GradAggSolver(args.step_size, args.iter, args.tol)
problem = problem_dict[args.problem_name]
prefs = uniform_pref(args.n_partition, problem.n_obj, clip_eps=1e-2)
args.n_prob = len(prefs)

# Initialize the initial solution 
if 'lbound' in dir(problem):
    if args.problem_name == 'VLMOP1':
        x0 = torch.rand(args.n_prob, problem.n_var) * 2 / np.sqrt(problem.n_var) - 1 / np.sqrt(problem.n_var)
    else:
        x0 = torch.rand(args.n_prob, problem.n_var)
else:
    x0 = torch.rand( args.n_prob, problem.n_var )*20 - 10


# Solve results
res = solver.solve(problem, x=x0, prefs=prefs, args=args)

# Visualize results
y_arr = res['y']
plt.scatter(y_arr[:,0], y_arr[:,1], s=50)
plt.xlabel('$f_1$', fontsize=20)
plt.ylabel('$f_2$', fontsize=20)
plt.show()

# If use vedio
use_vedio=True
if use_vedio:
    vedio_res(res, problem, prefs, args)     
        
Example of MTL

    

Release files for libmoon 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for libmoon 0.2.1
File Size Uploaded
libmoon-0.2.1.tar.gz 54.9 kB Details

Release files / libmoon-0.2.1.tar.gz

Download URL libmoon-0.2.1.tar.gz
Size 54.9 kB
Tags Source
SHA-256 checksum
How to use checksums
bd2230c0d3120d8bdc80f03ba7a5910779e20aece6d65f4b802ab3c7fddd4eab
BLAKE2b-256 checksum
How to use checksums
5a75083993d7e5699d95979eeb3596ee9feb16e76da496a0cb82d0488d7051bd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.11.0

Release history Release notifications | RSS feed

This release

0.2.1 This release

1 release file

0.1.11

1 release file

0.1.10

1 release file

0.1.9

1 release file

0.1.8

1 release file

0.1.7

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page