Solve continuous non-convex optimization problems with CCVM architectures and simulators
Project description
Coherent Continous-Variable Machine Simulators
This software package includes solvers for continuous optimization problems. The solvers are simulators of coherent continuous-variable machines (CCVM), which are novel coherent network computing architectures based on NTT Research’s coherent Ising machines (CIM). In CCVMs, the physical properties of optical pulses (e.g., mean-field quadrature amplitudes and phase) represent the continuous variables of a given optimization problem. Various features of CCVMs can be used along with programming techniques to implement the constraints imposed by such an optimization problem. Included are methods for solving box-constrained quadratic programming (BoxQP) problems using CCVM simulators by mapping the variables of the problems into the random variables of CCVMs.
Table of Contents
Requirements
- Python (supported version: 3.10)
Supported operating systems
- macOS (Monterey, Big Sur)
- Ubuntu (20.04)
Quickstart
- Once you have cloned the repository, install the package using
pip
.
pip install ccvm-simulators
-
Go into
examples/
and run the demo scripts.ccvm_boxqp.py
: Solve a BoxQP problem using a CCVM simulator, w/o plottingccvm_boxqp_plot.py
: Solve a BoxQP problem using a CCVM simulator, w/ time-to-solution (TTS) plotting
-
View the generated plot.
- The
ccvm_boxqp_plot.py
script solves a single problem instance, and will create an image of the resulting TTS plot in aplots/
directory. The resulting output image,DL-CCVM_TTS_cpu_plot.png
, will look something like this:
- The
Extending the Example
- Plotting larger datasets
- The
ccvm_boxqp_plot.py
script is a toy example that plots the TTS for only a single problem instance. - It can be extended to solve multiple problems over a range of problem sizes.
- When solution metadata is saved for multiple problems, the graph becomes more informative, for example:
- The
- Other types of plots
ccvmplotlib
can also plot the success probability data, for example:
Usage
Solving a BoxQP Problem
1. Import Modules
from ccvm_simulators.problem_classes.boxqp import ProblemInstance
from ccvm_simulators.solvers import DLSolver
2. Define a Solver
solver = DLSolver(device="cpu", batch_size=100) # or "cuda"
solver.parameter_key = {
20: {"pump": 2.0, "lr": 0.005, "iterations": 15000, "noise_ratio": 10},
}
3. Load a Problem Instance
boxqp_instance = ProblemInstance(
instance_type="test",
file_path="./examples/test_instances/test020-100-10.in",
device=solver.device,
)
4. Scale the Coefficients
The BoxQP problem matrix Q and vector V are normalized to obtain a uniform
performance across different problem sizes and densities. The ideal range depends on the
solver. For best results, Q should be passed to the solver's get_scaling_factor()
method to determine the best scaling value for the problem–solver combination.
boxqp_instance.scale_coefs(solver.get_scaling_factor(boxqp_instance.q_matrix))
5. Solve the Problem Instance
solution = solver.solve(
instance=boxqp_instance,
post_processor=None,
)
print(f"The best known solution to this problem is {solution.optimal_value}")
# The best known solution to this problem is 799.560976
print(f"The best objective value found by the solver was {solution.best_objective_value}")
# The best objective value found by the solver was 798.1630859375
print(f"The solving process took {solution.solve_time} seconds")
# The solving process took 8.949262142181396 seconds
Documentation
The package documentation can be found here.
- TODO: Update with public link
Additional links:
- Problem definition: BoxQP problem class
- Plotting library: ccvmplotlib
Contributing
We appreciate your pull requests and welcome opportunities to discuss new ideas. Check out our contribution guide and feel free to improve the ccvm_simulators
package. For major changes, please open an issue first to discuss any suggestions for changes you might have.
Thank you for considering making a contribution to our project! We appreciate your help and support.
References
This repository contains architectures and simulators presented in the paper "Non-convex Quadratic Programming Using Coherent Optical Networks" by Farhad Khosravi, Ugur Yildiz, Artur Scherer, and Pooya Ronagh.
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Hashes for ccvm_simulators-0.1.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b6c25fd385a5c4181fbf8353d3a67148cb1f57f04ab67491d0029e7b56f7ca63 |
|
MD5 | 55c3174305287ad7c48edce1fd97ec0e |
|
BLAKE2b-256 | 1c5d4774af29051d0767240e3c3141581681005edb62d7fc788b4a8d6d4ea7cb |