Hi everyone, we’re excited to announce Strawberry Fields version 0.12.0
This release includes a major new feature: the
apps package, providing an applications layer for using near-term photonic devices to help solve problems of practical interest.
Users can now simulate a near-term photonic algorithm, Gaussian boson sampling, and plug-in samples to help solve the following problems:
Graph and network optimization
- Use heuristics to search for dense regions of a graph with the
from strawberryfields.apps import data, sample, subgraph import networkx as nx s = data.Planted() # load samples from data module g = nx.Graph(data.Planted().adj) # load graph s = sample.postselect(s, 16, 30) # postselect sample sizes s = sample.to_subgraphs(s, g) # convert samples to subgraphs k_min = 8 # smallest subgraph size k_max = 16 # largest subgraph size r = subgraph.search(s, g, k_min, k_max) # implement search algorithm print(r) # densest subgraph of size 10
- Find large subgraphs that are fully connected, helping solve the maximum clique problem with the
from strawberryfields.apps import clique, data, sample import networkx as nx p_hat = data.PHat() # load samples g = nx.Graph(p_hat.adj) # create graph from adjacency matrix s = sample.postselect(p_hat, 16, 20) # postselect samples s = sample.to_subgraphs(s, g) # convert samples to subgraphs # shrink subgraphs to a list of cliques cliques = [clique.shrink(i, g) for i in s] # run local search for all cliques cliques = [clique.search(c, g, 10) for c in cliques] # sort cliques in decreasing size cliques = sorted(cliques, key=len, reverse=True) print(cliques[:3]) # the three largest cliques
- Measure similarity between graphs with the
apps.similaritymodule, which can be useful for training machine learning models to classify graphs.
from strawberryfields.apps import data, similarity events = [8, 10] # event photon numbers max_count = 2 # maximum number of photons per mode datasets = data.Mutag0(), data.Mutag1(), data.Mutag2(), data.Mutag3() f1, f2, f3, f4 = (similarity.feature_vector_sampling(data, events, max_count) for data in datasets) # create feature vectors print(f1, f2, f3, f4)
- Sample subsets of points according to a permanental point process, favouring the selection of similar points.
from strawberryfields.apps import plot, points import numpy as np cluster1 = np.random.normal(2, 0.3, (100, 2)) # generate two clusters of points cluster2 = np.random.normal(4, 0.3, (100, 2)) background = np.random.rand(200, 2) * 6.0 # generate random background points R = np.concatenate((cluster1, cluster2, background)) sigma = 1.0 # kernel parameter K = points.rbf_kernel(R, sigma) # creates kernel matrix n_mean = 50 # mean number of photons n_samples = 10 # number of samples samples = points.sample(K, n_mean, n_samples) # generates samples plot.points(R, samples, point_size=10) # plot a sample from the point process
- Reconstruct the vibronic absorption spectrum of a molecule using the
from strawberryfields.apps import data, plot, sample, vibronic formic = data.Formic() # load data molecule_data = formic.w, formic.wp, formic.Ud, formic.delta # load properties of molecule T = 0 # temperature gbs_params = vibronic.gbs_params(*molecule_data, T) # encode into GBS parameters nr_samples = 2 s = sample.vibronic(*gbs_params, nr_samples) # generate samples e = vibronic.energies(formic, formic.w, formic.wp) # convert samples to energies plot.spectrum(e, xmin=-500, xmax=9000)
Each new addition includes an in-depth tutorial to walk you through solving the problem with a photonic quantum computer. You can also check out our paper at https://arxiv.org/abs/1912.07634 for further details!
We have also carried out an extensive update to our documentation. This includes a new theme and a restructure of the content to make it more accessible. Check out our new look docs at https://strawberryfields.readthedocs.io/.
The full release notes are available at https://github.com/XanaduAI/strawberryfields/releases/tag/v0.12.0.
As always, this release would not have been possible without all the help from our contributors: