关于 DWave dimod 使用详解
dimod
dimod 是采样器的一个共享 API,提供了:
- BQM(binary quadratic model )类,BQM其包含了如使用了 D-Wave 系统的采样器的 Ising 和 QUBO(quadratic unconstrained binary optimization);
- DQM(discrete quadratic model)类和高阶(non-quadratic)模型;
- 采样器和组合采样器的参考例子;
- abstract base classes 用于构建新采样器和组合采样器;
Introduction
关于 Ocean 编程模型(BQM的使用和求解 hard 问题的采样器)参见 Ocean’s Programming Model。
Binary Quadratic Models
dimod 可以用适合不同性能和易用性需求的类来表示 BQM。BQM支持的所有表达参见Binary Quadratic Models。
BQM Generation
如图四个节点的 maximum cut 问题,
Star graph with four nodes.
QUBO矩阵如下表示:
Q = [ − 3 2 2 2 0 − 1 0 0 0 0 − 1 0 0 0 0 − 1 ] Q = \left[ \begin{matrix} -3 & 2 & 2 & 2 \\ 0 & -1 & 0 & 0 \\ 0 & 0 & -1 & 0 \\ 0 & 0 & 0 & -1 \end{matrix} \right] Q=⎣⎢⎢⎡−30002−10020−10200−1⎦⎥⎥⎤
BQM 的 python dict 表示比较方便:
qubo = {(0, 0): -3, (1, 1): -1, (0, 1): 2, (2, 2): -1,(0, 2): 2, (3, 3): -1, (0, 3): 2}
dict_bqm = dimod.BQM.from_qubo(qubo)
大范围且是混合结构的BQMs可以用 AdjArrayBQM 类表示。
import numpy as np
q_array = np.array([[-3.0, 2, 2, 2],[0, -1.0, 0.0, 0.0],[0, 0, -1.0, 0.0],[0, 0, 0, -1.0]])
array_bqm = dimod.AdjArrayBQM(q_array, 'BINARY')
超大范围的BQMs可以利用 methods 从文件中读数据,如 from_file()
或其他,每个类文件中会有描述。
此外,dimod 还提供了多种 BQM 生成器。
map_bqm = dimod.generators.random.ran_r(1, 7, cls=dimod.AdjVectorBQM)
BQM Attributes
dimod 的 BQM 对象提供了对一些属性和视图的访问接口。参见 Binary Quadratic Models 中特定类型的文档。
dict_bqm.shape
(4,3)
list(map_bqm.variables)
[0, 1, 2, 3, 4, 5, 6]
BQM Methods
BQM 支持大量方法,大都很常用,有些是特定于某个类的,在每个类的文档中进行了描述,方便构建和操作 BQM。
map_bqm.num_interactions
21
map_bqm.remove_interaction(5, 6)
map_bqm.num_interactions
20
Samplers and Composites
dimod 包括供参考的采样器和组合器用于处理二元二次模型(或高阶模型)和提炼采样( refining sampling),用来测试开发代码。
采样器和组合器介绍参见 Samplers and Composites。
所有支持的采样器参见 Samplers and Composites。
Using Samplers
利用ExactSolver
测试采样器计算上述 maximum cut 问题所有可能的样本的能量如下:
qubo = {(0, 0): -3, (1, 1): -1, (0, 1): 2, (2, 2): -1,(0, 2): 2, (3, 3): -1, (0, 3): 2}
dict_bqm = dimod.BQM.from_qubo(qubo)
sampler_exact = dimod.ExactSolver()
sampleset = sampler_exact.sample(dict_bqm)
print(sampleset)0 1 2 3 energy num_oc.
1 1 0 0 0 -3.0 1
11 0 1 1 1 -3.0 1
2 1 1 0 0 -2.0 1
...
10 1 1 1 1 0.0 1
['BINARY', 16 rows, 16 samples, 4 variables]
Using Composed Samplers
该例子使用了一个 Boolean NOT Gate 的组合采样器, Getting Started 文档中有具体描述。
FixedVariableComposite
函数在提交给采样器之前,组合设置了值并删除了指定变量。
from dimod import FixedVariableComposite, ExactSolver
Q = {('x', 'x'): -1, ('x', 'z'): 2, ('z', 'x'): 0, ('z', 'z'): -1}
composed_sampler = FixedVariableComposite(ExactSolver())
sampleset = composed_sampler.sample_qubo(Q, fixed_variables={'x': 1})
print(sampleset)x z energy num_oc.
0 1 0 -1.0 1
1 1 1 0.0 1
['BINARY', 2 rows, 2 samples, 2 variables]
Creating Samplers
API for Samplers and Composites 可以创建自己的 dimod 采样器和组合采样器。
该例子通过实现单个方法(如 sample_ising
)创建 dimod 采样器。
class LinearIsingSampler(dimod.Sampler):def sample_ising(self, h, J, **kwargs):kwargs = self.remove_unknown_kwargs(**kwargs)sample = linear_ising(h, J, **kwargs) # Defined elsewhereenergy = dimod.ising_energy(sample, h, J)return dimod.SampleSet.from_samples(sample, vartype=dimod.SPIN, energy=energy)@propertydef properties(self):return dict()@propertydef parameters(self):return dict()
Samples
dimod 提供的SampleSet
类包含了一些采样器。返回的结果和样本在 Solutions 中有介绍。支持的 sampleset 方法在 Samples 中有说明。
以下例子创建了以恶个样本集,然后描述了一些 SampleSet 的参数和方法。
bqm = dimod.generators.random.ran_r(1, 7)
sampler = dimod.ExactSolver()
sampleset = sampler.sample(bqm)
打印最优解的能量:
print(sampleset.first.energy)
-9.0
打印最优解:
print(sampleset.lowest()) 0 1 2 3 4 5 6 energy num_oc.
0 +1 -1 +1 -1 +1 -1 -1 -9.0 1
1 +1 +1 +1 -1 +1 -1 -1 -9.0 1
...
7 -1 +1 -1 +1 -1 -1 +1 -9.0 1
['SPIN', 8 rows, 8 samples, 7 variables]
转换格式
sampleset.to_pandas_dataframe() 0 1 2 3 4 5 6 energy num_occurrences
0 -1 -1 -1 -1 -1 -1 -1 3.0 1
1 1 -1 -1 -1 -1 -1 -1 7.0 1
2 1 1 -1 -1 -1 -1 -1 7.0 1
...
Non-Binary and Non-Quadratic Models
dimod 也提供了DQMs discrete quadratic models 和一些 Higher-Order Composites 以及把高阶多项式转换为 BQMs 的功能。
Discrete Quadratic Models
DQMs 的介绍参见 Discrete Quadratic Models。使用 Leap hybrid DQM 求解器的例子参见 dwave-examples GitHub repository。
Higher-Order Models
该例子使用了 dimod 的 ExactSolver
reference samper 解决了高阶无约束二次优化模型(higher-order unconstrained binary optimization (HUBO) model)。
import dimod
poly = dimod.BinaryPolynomial.from_hubo({('a', 'a'): -1,('a', 'b'): -0.5,('a', 'b', 'c'): -2})
sampler = dimod.HigherOrderComposite(dimod.ExactSolver())
sampleset = sampler.sample_poly(poly)
print(sampleset.first.sample["a"])
1
Reference Documentation
一些例子参见如下文档:https://docs.ocean.dwavesys.com/en/stable/docs_dimod/reference/index.html
关于 DWave dimod 使用详解相关推荐
- 前瞻: 拥抱量子计算时代!详解2020年全球十大杰出量子计算公司
拥抱量子计算时代!详解2020年全球十大杰出量子计算公司 https://blog.csdn.net/Qtumist/article/details/105462463 分类专栏: 新闻资讯 文章标签 ...
- 从命令行到IDE,版本管理工具Git详解(远程仓库创建+命令行讲解+IDEA集成使用)
首先,Git已经并不只是GitHub,而是所有基于Git的平台,只要在你的电脑上面下载了Git,你就可以通过Git去管理"基于Git的平台"上的代码,常用的平台有GitHub.Gi ...
- JVM年轻代,老年代,永久代详解
秉承不重复造轮子的原则,查看印象笔记分享连接↓↓↓↓ 传送门:JVM年轻代,老年代,永久代详解 速读摘要 最近被问到了这个问题,解释的不是很清晰,有一些概念略微模糊,在此进行整理和记录,分享给大家.在 ...
- docker常用命令详解
docker常用命令详解 本文只记录docker命令在大部分情境下的使用,如果想了解每一个选项的细节,请参考官方文档,这里只作为自己以后的备忘记录下来. 根据自己的理解,总的来说分为以下几种: Doc ...
- 通俗易懂word2vec详解词嵌入-深度学习
https://blog.csdn.net/just_so_so_fnc/article/details/103304995 skip-gram 原理没看完 https://blog.csdn.net ...
- 深度学习优化函数详解(5)-- Nesterov accelerated gradient (NAG) 优化算法
深度学习优化函数详解系列目录 深度学习优化函数详解(0)– 线性回归问题 深度学习优化函数详解(1)– Gradient Descent 梯度下降法 深度学习优化函数详解(2)– SGD 随机梯度下降 ...
- CUDA之nvidia-smi命令详解---gpu
nvidia-smi是用来查看GPU使用情况的.我常用这个命令判断哪几块GPU空闲,但是最近的GPU使用状态让我很困惑,于是把nvidia-smi命令显示的GPU使用表中各个内容的具体含义解释一下. ...
- Bert代码详解(一)重点详细
这是bert的pytorch版本(与tensorflow一样的,这个更简单些,这个看懂了,tf也能看懂),地址:https://github.com/huggingface/pytorch-pretr ...
- CRF(条件随机场)与Viterbi(维特比)算法原理详解
摘自:https://mp.weixin.qq.com/s/GXbFxlExDtjtQe-OPwfokA https://www.cnblogs.com/zhibei/p/9391014.html C ...
最新文章
- javascript函数全解
- Linux 管理员手册(2)
- phpStudy for Linux (lnmp+lamp一键安装包)
- mysql输出非零列_如何只提取mysql和php中具有非零值的列?
- stm32编译时报错 ..........ER_IROM1: File exists 的问题
- java md5 密钥_java加密算法--MD5加密和哈希散列带秘钥加密算法源码
- addConditionWaiter
- ShapeNet:超实时人脸特征点检测与形状拟合开源库
- cmd 220 ftp 远程主机关闭连接_下载ftp软件,下载ftp软件需要注意3点
- 学生学籍管理系统页面源代码html_学生信息管理系统-系统源代码
- AD19---彻底解决原理图转PCB时,出现failed to add class member及Unknown Pin的问题
- 树莓派学习2-连接蓝牙音箱进行语音播放
- 分布式定时任务框架---Uncode Schedule
- mysql 破坏索引_mysql表索引被破坏的问题及解决
- Android自定义控件开发入门与实战(7)SVG动画,android底层架构
- input type=file 禁止让用户手动输入
- 将微信聊天记录转成txt文件的最实用方法
- 程序设计课程设计报告(学生成绩管理系统)
- 深度 | 智慧城市背景下的“多规合一”标准探究
- 数据结构魔王语言问题