问题标签 [cirq]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 如何在 Cirq 电路中获取经典输入
我是量子计算的新手,在阅读Nielsen 和 Chuang 的Quantum Computation 和 Quantum Information时一直在玩Cirq 。文中第一个有趣的电路之一与量子隐形传态有关,我正试图在 Cirq 中实现它。如前所述,构建 EPR 对和大部分电路非常简单。
然而,Bob 需要根据 Alice 的 EPR 量子位和她的另一个量子位(在文本中标记为ψ )的测量值来“修复”他的 EPR 量子位。我不清楚将测量中的经典位合并到电路中的最佳方法。
到目前为止,我所做的是在没有修复的情况下构建电路,运行模拟,然后根据测量的值附加适当的X
和/或门。Z
代码看起来像
印刷电路看起来像
虽然该电路与文本中打印的内容一致,用于 Alice 的 EPR 量子比特测量|0>
和她的其他量子比特测量的情况|1>
,但不能保证用完整的电路再次运行模拟对 Alice 的量子比特产生相同的测量结果,因此修复部分将不正确。
将测量值反馈回电路的最佳方法是什么?
python - \_tfq_simulate_ops.so 导入 tensorflow_quantum 时未找到
尝试导入与 tensorflow_quantum 相关的初始库:
algorithm - 如何在 Qiskit 中做 X 运算的平方根
我正在尝试在 Qiskit 中进行贝尔不等式测试,但要做到这一点,您需要执行 X 操作的受控负平方根。Cirq 中的一个例子是
我试图在 Qiskit 中做类似的事情,但它给了我一个错误
linear-algebra - 在 Cirq 中分解量子电路
我正在研究 Cirq,需要对 qubits 执行某些单一操作。为此,我正在使用MatrixGate()
Cirq 中的函数。与 Qiskit 不同,我找不到像分解或转换这样的函数来将 Unitary 操作简化为基本的 U3 和 CNOT 门。
例如,如果我想执行以下一元运算符,
为此,我在 Qiskit 中使用此代码。在 Cirq 中寻找等效的东西。
在 Qiskit 中使用 Transpile 功能后
我什至尝试制定 Qiskit 用来分解这些单一运算的余弦-正弦分解算法。正如论文中提到的,用于等距的量子电路,但它们不会轻易产生所需的分解。请通过以下任一建议提供帮助:
- Cirq 中的一些代码用于分解电路或
- 将 Qiksit 电路导出到 Cirq 或
- 一种更简单的分解酉操作的算法。
quantum-computing - 如何在 Cirq/Tensorflow Quantum 中实现受控 Rx?
我正在尝试在 Cirq/Tensorflow Quantum 中实现受控旋转门。
https://cirq.readthedocs.io/en/stable/gates.html上的 readthedocs.io声明:
“可以使用 Gate.controlled() 将门转换为受控版本。通常,这会返回 ControlledGate 的实例。但是,对于某些特殊情况,门的受控版本也是已知门,这将返回“
我已经实施
我收到以下错误:
我将量子比特和符号初始化为:
我确实将电路与各种电路一起使用。
我的问题:如何在 Cirq/Tensorflow Quantum 中正确实施受控 Rx?
PS 我找不到 Google Cirq 的标签
追问:这如何推广到 Controlled Ry 和 Controlled Rz 的类似情况?
对于 Rz,我在https://threeplusone.com/pubs/on_gates.pdf找到了一个门分解,涉及 H.on(q1)、CNOT(q0, q1)、H.on(q2),但这还不是CRz 具有任意角度。我会在 H 之前引入角度吗?
对于 Ry,我还没有找到分解,CRy 也没有。
tensorflow - 使用 TensorFlow Quantum 进行多类分类
我正在 TensorFlow Quantum (TFQ) 上运行一些示例和测试,并且正在努力执行多类分类。我将使用 MNIST 分类示例作为基础 ( https://www.tensorflow.org/quantum/tutorials/mnist ),因为这也是我的起点。
对于二元分类,我使用了不同的类示例和不同的门组合,分类结果是通过测量单个读出的 qubit (qR) 结果获得的,因此如果 qR=0,我们将分类为 0 类,如果 qR=1,那么我们有 1 课。
我将它扩展到多类问题,所以我们有 4 个类(0,1,2,3)。为此,我使用 更改类的标签tf.keras.utils.to_categorical(y_train)
,以便将标签从单个值转换为向量 (0 -> (1,0,0,0); 1-> (0,1,0,0);等),tf.keras.losses.CategoricalHinge()
用作模型的损失并创建 4 个读数量子位,每个类别一个(M(qR0, qR1, qR2, qR3) = (0,0,1,0) -> class 2),并且这个作品。
然而,这种方法大大增加了电路的尺寸。所以我想要做的是只将 2 个读出量子位传递给 TFQ,并将组合测量用于 4 类分类(|00> = 0,|10> = 1,|01> = 2,|11> = 3) . 理想情况下,这将允许 2^n 多类分类,其中 n 是量子比特的数量。cirq.measure(qR0, qR1, key='measure')
在 Cirq 中,我可以通过对两个读出量子位执行 a 来实现此输出。但是,我在将此类命令传递给 TFQ 时遇到了困难,因为据我了解,它仅测量以单个量子比特 Pauli 门结尾的量子比特。
那么,我在 TFQ 的功能中是否缺少一些允许在训练过程中进行此类测量的功能?
linear-algebra - 为 cirq 函数设置随机种子
我正在使用 cirq 并使用随机单一用于测试目的:
在哪里可以设置这个函数的随机种子,使用random.seed(a=1)
似乎没有这样做。
python - tensorflow 2.3.1 和 cirq 之间的 protobuf 版本冲突
目前开始学习 TFQ 并一直在尝试做这个tensorflow 作者的教程,但是如果我运行第一行 (!pip install -q tensorflow==2.3.1 --user) 我得到这个错误:
错误:pip 的依赖解析器当前不考虑所有已安装的包。此行为是以下依赖冲突的根源。cirq 0.8.0 需要 protobuf==3.8.0,但您有 protobuf 3.15.7,这是不兼容的。
当我运行第二行(!pip install -q tensorflow-quantum --user)时,我得到了这个:
错误:pip 的依赖解析器当前不考虑所有已安装的包。此行为是以下依赖冲突的根源。tensorflow 2.3.1 需要 protobuf>=3.9.2,但是你有 protobuf 3.8.0 是不兼容的。
Cirq 0.8.0 想要 protobuf 3.8.0;tensorflow 2.3.1 想要 protobuf>=3.9.2 并且中间没有任何东西,当我执行“pip freeze”时,我只看到 protobuf==3.8.0,所以我的 pip freeze 看不到 protobuf 3.15.7 版本错误提到(当我执行“pip show protobuf”时,我得到了与版本 3.8.0 相同的结果)。
我应该怎么做才能防止这种冲突?
注意:Python 版本 = 3.7.9(无法使用 3.8 或 3.9 安装 tf 和/或 tfq);操作系统 = Windows 10
python - 如何找出“*”运算符对某个库(cirq)中的两个对象的作用?
我刚开始使用 python cirq 库,我在教程中遇到了以下代码行:
我只想在代码中找到这个*
操作符对这两个特定的 cirq 对象做了什么。怎么做?