关于 dwave-hybrid 详解及使用方法

DWave-Hybrid是一个用于构建混合异步分解求解器的Python框架,专门解决QUBO问题。它结合量子和经典计算资源,通过工作流结构和参数优化应用效果。框架提供了Kerberos等参考采样器,允许用户构建自定义组件。通过分解大问题并并行运行采样器,如D-Wave系统、模拟退火等,实现高效求解。
摘要由CSDN通过智能技术生成

dwave-hybrid

参考链接:https://docs.ocean.dwavesys.com/en/latest/docs_hybrid/sdk_index.html

dwave-hybrid 是一个通用的、最小的 python 框架,用于构建混合异步分解求解器,求解QUBO( quadratic unconstrained binary optimization)问题。

dwave-hybrid 促使了求解发展的三个方面:

  • Hybrid 方法结合了量子和经典计算资源;

  • 评估了算法成分的组合和问题分解策略;

  • 使用工作流(workflow)结构和参数来获取最佳应用结果;

Introduction

Dwave-Hybrid提供了一种框架,用于通过并行求解器迭代任意大小的样本集,以找到最佳解决方案。

对应的代码部分文档参见 Reference Documentation。介绍部分只是 package 的概览。

使用的步骤是:先运行一个混合求解器(hybrid solver)来处理任意大小的QUBOs,然后在框架中开发自己的组件。

  • Overview 展示了框架并解释了关键概念;

  • Using the Framework 展示了如何使用框架。通过使用一个已经提供的参考求解器来建立这个框架,可以快速开始。( Kerberos, 求解一个因为太大而不能 minor-embed 到 D-Wave 系统的问题)

  • 然后,使用框架建立(hybrid)工作流。比如,一个和 qbsolv 相似的求解器,它可以在整个问题使用禁忌搜索,同时提交部分问题到 D-Wave 系统上。

  • Developing New Components 指导大家开发自己的 hybrid components。

  • Reference Examples 描述了一个 workflow 例子,包括代码。

Overview

dwave-hybrid 框架可以快速设计并测试通过采样器迭代的样本集来解决任意 QUBO 的 workflows。分解大问题,而且可以并行运行两个及以上求解技术/策略。

如下的 Schematic Representation图展示了一个例子配置。样本在超过四个平行求解器上迭代。顶部分支表示运行在整个问题上的经典 tabu 搜索,直到其他分支完成后被中断。

这些使用不同的分解器将当前样本集的一部分( iteration i)分配给采样器,例如 D-Wave 系统(第二高的分支)或其他并行结构如模拟退火和禁忌搜索。分支组件(分解器、采样器、组合器)的通用表示如最下面分支。用户定义的标准从当前采样器选择并且求解输出一个样本集用于 i+1次迭代。

img

Schematic Representation

可以使用框架运行一个提供的混合求解器或使用提供的组件(如 tabu 采样器和 energy-based 分解器)配置 workflows。

还可以使用该框架构建自己的组件以合并到 workflows 中。

Using the Framework

该部分展示了使用参考采样器(reference sample)来求解任意大小的问题并说明了如何使用提供的组件(components)创建(hybrid)workflows。

Reference Hybrid Sampler:Kerberos

dwave-hybrid 包括一个使用该框架构建的参考示例采样器:Kerberos 是一个兼容 dimod 的混合异步分解采样器,它能够解决任意结构和大小的问题。 它通过在具有高能量影响的问题变量上并行运行禁忌搜索、模拟退火和 D-Wave 子问题采样来找到最佳样本。

如下是使用 Kerberos 求解大 QUBO 的例子:

import dimod
from hybrid.reference.kerberos import KerberosSampler
with open('../problems/random-chimera/8192.01.qubo') as problem:  
    bqm = dimod.BinaryQuadraticModel.from_coo(problem)
len(bqm)          
8192
solution = KerberosSampler().sample(bqm, max_iter=10, convergence=3)   
solution.first.energy     
-4647.0
Building Workflows

如 Overview 部分所示,通过在 workflows 中安排采样器等组件来构建混合求解器。

Building Blocks

使用的基础 components (Building Blocks)是基于 Runnable类:分解器、采样器、组合器。该 components 输入一组样本 SampleSet,输出更新之后的样本。与 components 迭代相关联的State 包含 problem、sample、以及可选的 additional information。

以下示例演示了仅使用一个Runnable的简单工作流(workflow),代表经典 tabu 搜索算法的采样器,用于解决问题(完全经典,无需分解)。该示例解决了相同耦合(coupled)的节点的三角形图的小问题。全零样本的初始 State作为开始点集。解决方案(new_state)源于TabuProblemSampler Runnable的单个迭代。

import dimod
# Define a problem
bqm = dimod.BinaryQuadraticModel.from_ising({
   }, {
   'ab': 0.5, 'bc': 0.5, 'ca': 0.5})
# Set up the sampler with an initial state
sampler = TabuProblemSampler(tenure=2, timeout=5)
state = State.from_sample({
   'a': 0, 'b': 0, 'c': 0}, bqm)
# Sample the problem
new_state = sampler.run(state).result()
print(new_state.samples)                     
    a   b   c  energy  num_occ.
0  +1  -1  -1    -0.5         1
['SPIN', 1 rows, 1 samples, 3 variables]
Flow Structuring

该框架提供了用于构建使用了“building-block”components 的 workflows,如 Overview 部分所示,可以创建Runnable类的一个分支;例如decomposer | sampler | composer, 它将问题的一部分委托给采样器,例如 D-Wave 系统。

以下示例展示了包含一个分解器(decomposer)、本地 tabu 求解器(sampler)、一个组合器(composer)。一个 10-variable 的二次二元模型通过其变量的能量影响(the energy impact of its variables)分解成 6-variable 的子问题进行两次采样。使用效用函数(utility function)min_sample()设置所有 -1 值的初始状态(initial state)。

import dimod           # Create a binary quadratic model
bqm = dimod.BinaryQuadraticModel({
   t: 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值