five

QCircuitNet

收藏
github2024-10-10 更新2024-10-12 收录
下载链接:
https://github.com/EstelYang/QCircuitNet_Dataset
下载链接
链接失效反馈
官方服务:
资源简介:
QCircuitNet是第一个用于评估AI从编程语言角度设计和实现量子算法能力的基准数据集。它包含了一个全面的框架,涵盖了量子算法设计任务的关键特征,包括问题描述、量子电路代码、经典后处理和验证函数。数据集涵盖了从基本原语到高级应用的广泛量子算法,并具有自动验证和验证功能,允许迭代评估和交互推理而无需人工检查。此外,它还展示了作为训练数据集的潜力。

QCircuitNet is the first benchmark dataset for evaluating the capability of AI to design and implement quantum algorithms from the perspective of programming languages. It includes a comprehensive framework covering the key characteristics of quantum algorithm design tasks, including problem descriptions, quantum circuit code, classical post-processing, and verification functions. The dataset covers a wide range of quantum algorithms spanning from basic primitives to advanced applications, and is equipped with automatic verification and validation functions, enabling iterative evaluation and interactive inference without manual inspection. Additionally, it demonstrates its potential as a training dataset.
创建时间:
2024-10-10
原始信息汇总

QCircuitNet Dataset

QCircuitNet 是一个用于评估人工智能在设计和实现量子算法方面能力的基准数据集,从编程语言的角度出发。

关键特性

  1. 综合框架:提供了一个通用框架,用于表述量子算法设计任务的关键特征,包括问题描述、量子电路代码、经典后处理和验证函数。
  2. 广泛的量子算法:涵盖了从基本原语到高级应用的广泛量子算法,并易于扩展到更多量子算法。
  3. 验证和验证函数:自动验证和验证函数,允许迭代评估和交互推理,无需人工检查。
  4. 训练潜力:通过原语微调结果,显示出作为训练数据集的潜力。

目录结构

📂 QCircuitNet/ │ ├──📂 Oracle Construction/ │ ├──📂 Quantum Logic Synthesis/ │ │ └── 包含教科书级别和高级的Oracle。 │ ├──📂 Problem Encoding/ │ └── Oracle编码应用场景。 │ ├──📂 Algorithm Design/ │ ├──📂 Quantum Computing/ │ │ └── 包含通用量子计算算法。 │ ├──📂 Quantum Information/ │ └── 包含与量子信息协议相关的任务。 │ ├──📂 Random Circuits/ ├──📂 Clifford/ │ └── 包含Clifford门集的随机电路。 ├──📂 Universal/ └── 包含通用门集的随机电路。

示例

问题描述

问题描述以文本文件形式提供,例如 {algorithm_name}_description.txt。以下是Simons Problem的示例模板:

text 给定一个黑盒函数 f: {0,1}^n → {0,1}^n。该函数保证根据一个秘密字符串 s ∈ {0, 1}^n, s ≠ 0^n 进行双射映射,其中给定 x_1 ≠ x_2, f(x_1) = f(x_2) 当且仅当 x_1 ⊕ x_2 = s。

设计一个量子算法来找到秘密字符串 s。该函数作为黑盒Oracle门名为 "Oracle" 提供在 oracle.inc 文件中,操作如下:

O_f |x⟩|y⟩ = |x⟩ |y ⊕ f(x)⟩

输入量子比特 |x⟩ 从 0 到 n-1 索引,输出量子比特 |f(x)⟩ 从 n 到 2n-1 索引。对于算法,提供:

  1. 使用QASM或Qiskit实现的量子电路。
  2. 后处理代码 run_and_analyze(circuit, aer_sim) 在Python中运行,模拟电路并返回基于模拟结果的秘密字符串 s。

生成代码

以下是生成Simons Problem量子电路的Qiskit代码,文件名为 {algorithm_name}_generation.py

python from Qiskit import QuantumCircuit

def simon_algorithm(n, oracle): """生成Simon算法电路。

参数:
- n (int): 量子比特数
- oracle: Oracle函数

返回:
- QuantumCircuit: Simon算法电路
"""
# 创建一个2n量子比特的量子电路
simon_circuit = QuantumCircuit(2 * n, n)

# 初始化第一个寄存器到 |+> 状态
simon_circuit.h(range(n))

# 附加Simon的Oracle
simon_circuit.append(oracle, range(2 * n))

# 对第一个寄存器应用H门
simon_circuit.h(range(n))

# 测量第一个寄存器
simon_circuit.measure(range(n), range(n))

return simon_circuit

算法电路

OpenQASM 3.0文件存储特定设置的量子电路。以下是Simons算法在 n = 3 的示例,文件名为 {algorithm_name}_n{qubit_number}.qasm

qasm OPENQASM 3.0; include "stdgates.inc"; include "oracle.inc"; bit[3] c; qubit[6] q; h q[0]; h q[1]; h q[2]; Oracle q[0], q[1], q[2], q[3], q[4], q[5]; h q[0]; h q[1]; h q[2]; c[0] = measure q[0]; c[1] = measure q[1]; c[2] = measure q[2];

后处理函数

此Python函数模拟电路并推导Simons Problem的最终答案,文件名为 {algorithm_name}_post_processing.py

python from sympy import Matrix import numpy as np from Qiskit import transpile

def mod2(x): return x.as_numer_denom()[0] % 2

def solve_equation(string_list): """解 A^T * X = 0 mod 2 的零空间。""" M = Matrix(string_list).T M_I = Matrix(np.hstack([M, np.eye(M.shape[0], dtype=int)])) M_I_rref = M_I.rref(iszerofunc=lambda x: x % 2 == 0) M_I_final = M_I_rref[0].applyfunc(mod2)

if all(value == 0 for value in M_I_final[-1, :M.shape[1]]):
    result_s = "".join(str(c) for c in M_I_final[-1, M.shape[1]:])
else:
    result_s = "0" * M.shape[0]

return result_s

def run_and_analyze(circuit, aer_sim): n = circuit.num_qubits // 2 circ = transpile(circuit, aer_sim) results = aer_sim.run(circ, shots=n).result() counts = results.get_counts() equations = [list(map(int, result)) for result in counts if result != "0" * n] prediction = solve_equation(equations) if len(equations) > 0 else "0" * n return prediction

Oracle / 门定义

Oracle定义在文件 oracle.inc 中,用于算法设计任务。

qasm gate Oracle q[0], q[1], q[2], q[3], q[4], q[5] { cx q[0], q[3]; cx q[1], q[4]; cx q[2], q[5]; cx q[2], q[5]; x q[3]; }

Oracle信息

此信息存储在 oracle_info.txt 文件中,提供Oracle的附加元数据,例如秘密和密钥字符串。以下是Simons Problem在 n = 3 和测试用例2的示例:

text Secret string: 100 Key string: 001

验证函数

以下函数检查生成的模型的正确性,文件名为 {algorithm_name}_verification.py

python from simon_utils import *

def check_model(qasm_string, code_string, n): """检查Simon模型。""" with open(f"test_oracle/n{n}/trial1/oracle.inc", "r") as file: oracle_def = file.read() full_qasm = plug_in_oracle(qasm_string, oracle_def) circuit = verify_qasm_syntax(full_qasm)

if circuit is None:
    return -1

try:
    exec(code_string, globals())
    aer_sim = AerSimulator()
    total_success, total_fail = 0, 0
    shots = 10

    for t in range(1, 11):
        with open(f"test_oracle/n{n}/trial{t}/oracle_info.txt", "r") as file:
            secret_string = re.search(r"Secret string: ([01]+)", file.read()).group(1)
        circuit = transpile(circuit, aer_sim)
        prediction = run_and_analyze(circuit.copy(), aer_sim)
        if prediction == secret_string:
            total_success += 1
        else:
            total_fail += 1
    return total_success / (total_success + total_fail)

except Exception as e:
    print(f"Error: {e}")
    return -1

数据集创建脚本

此脚本从头开始创建数据集,生成电路,提取门定义,并确保数据集的有效性,文件名为 {algorithm_name}_dataset.py

python import argparse

def main(): parser = argparse.ArgumentParser() parser.add_argument( "-f", "--func", choices=["qasm", "json", "gate", "check"], help="Function to call: generate qasm, json, extract gate, or check dataset." ) args = parser.parse_args()

if args.func == "qasm":
    generate_circuit_qasm()
elif args.func == "json":
    generate_dataset_json()
elif args.func == "gate":
    extract_gate_definition()
elif args.func == "check":
    check_dataset()

数据比例

以下图表提供了QCircuitNet数据集中不同数据类型的比例概览。

算法设计

image

Oracle构建

image

随机电路

image

分层采样

为了提供用户对数据集内容的直观视图,便于在GitHub页面上显示,并遵守GitHub关于文件数量和大小的政策,我们对数据集进行了分层采样。随机采样用于最小化手动选择中的固有偏差,从而保持数据集的多样性和代表性。

采样过程通过名为 hierarchical_sample 的函数实现,该函数处理数据集的根目录并根据其特定结构处理子目录。每个主要目录的采样方法如下:

  1. Algorithm_Design

    • Quantum_Computing:包含 bernstein_vaziranideutsch_jozsageneralized_simon_multigeneralized_simon_ternarygroverphase_estimationquantum_fourier_transformationsimon 子目录。从每个子目录中随机采样 10 个文件
    • Quantum_Information:包含 ghz_statequantum_key_distributionquantum_teleportationrandom_number_generatorsuperdense_codingswap_testw_state 子目录。从每个子目录中随机采样 10 个文件
  2. Oracle_Construction

    • Problem_Encoding:未进行采样,保留所有内容。
    • Quantum_Logic_Synthesis:包含 bernstein_vaziranideutsch_jozsadiffusion_operatorgeneralized_simon_multigeneralized_simon_ternarygroversimon 子目录。从每个子目录中随机采样 5 个子文件夹
  3. Random_Circuits

    • clifford:包含 clifford_n{} 子目录。从每个子目录中随机采样 10 个子文件夹
    • universal:包含 universal_n{} 子目录。从每个子目录中随机采样 10 个子文件夹

下载

我们在GitHub仓库中托管了数据集的演示版本,以展示其结构并提供示例数据。完整数据集请从 Google Drive 下载。

搜集汇总
数据集介绍
main_image_url
构建方式
QCircuitNet数据集的构建基于量子算法设计任务的关键特征,涵盖了问题描述、量子电路代码、经典后处理以及验证函数。该数据集通过系统化的方法,从基础量子原语到高级应用,实现了广泛的量子算法实现。每个算法子目录中包含生成电路的脚本、后处理函数、验证函数以及问题描述,确保了数据集的完整性和可验证性。此外,数据集还采用了层次化采样技术,以确保在减少数据量的情况下,仍能保持数据的多样性和代表性。
特点
QCircuitNet数据集的主要特点在于其全面的框架设计,能够从编程语言的角度评估AI在量子算法设计中的能力。数据集包含了从基础到高级的多种量子算法实现,易于扩展以涵盖更多算法。此外,数据集还提供了自动验证和验证功能,支持迭代评估和交互推理,无需人工干预。数据集还展示了作为训练数据集的潜力,通过原语微调结果展示了其训练价值。
使用方法
使用QCircuitNet数据集时,用户可以访问包含量子电路实现、后处理代码和验证函数的子目录。每个算法子目录中提供了详细的生成代码、验证函数和问题描述,用户可以通过这些资源进行算法设计和验证。数据集还提供了层次化采样后的示例数据,便于用户在GitHub页面上直观查看数据内容。对于完整数据集,用户可以从Google Drive下载。
背景与挑战
背景概述
QCircuitNet数据集是首个针对从编程语言角度评估人工智能在设计和实现量子算法能力的基准数据集。该数据集由一支专注于量子计算和人工智能交叉领域的研究团队创建,旨在为大型语言模型提供一个全面的框架,以解决量子算法设计任务中的关键问题。QCircuitNet不仅涵盖了从基础原语到高级应用的广泛量子算法实现,还提供了自动验证和验证功能,支持迭代评估和交互推理,无需人工检查。该数据集的创建标志着量子计算与人工智能结合研究的一个重要里程碑,为未来相关领域的研究提供了宝贵的资源和基准。
当前挑战
QCircuitNet数据集在构建过程中面临多项挑战。首先,量子算法设计任务的复杂性要求数据集必须具备高度的结构化和标准化,以确保数据的一致性和可重复性。其次,量子算法的多样性和复杂性使得数据集的构建需要涵盖广泛的算法类型和实现细节,这对数据集的规模和质量提出了高要求。此外,自动验证和验证功能的实现需要精确的算法和高效的计算资源,以确保数据集的可靠性和实用性。最后,数据集的层次化采样和存储管理也是一项技术挑战,需要在保证数据多样性和代表性的同时,遵守GitHub的文件大小和数量政策。
常用场景
经典使用场景
QCircuitNet数据集的经典使用场景主要集中在量子算法的设计与实现评估上。该数据集通过提供从基础量子原语到高级应用的广泛量子算法实现,为大型语言模型(LLMs)在量子编程语言视角下的能力评估提供了全面的框架。具体而言,研究者可以利用QCircuitNet中的量子电路代码、经典后处理和验证函数,进行迭代评估和交互推理,从而在不依赖人工检查的情况下验证量子算法的正确性和性能。
解决学术问题
QCircuitNet数据集解决了量子算法设计与实现中的多个关键学术研究问题。首先,它为量子算法设计任务提供了一个通用框架,包括问题描述、量子电路代码、经典后处理和验证函数,这有助于标准化和自动化量子算法的设计与验证过程。其次,通过提供广泛的量子算法实现,QCircuitNet促进了量子计算和量子信息领域的研究,特别是在量子算法的自动生成和验证方面。此外,该数据集的自动验证功能为量子算法的迭代评估提供了基础,推动了量子计算领域的理论与实践结合。
衍生相关工作
QCircuitNet数据集的发布催生了多项相关经典工作。首先,基于该数据集的量子算法设计框架,研究者们开发了多种自动化量子算法生成工具,显著提高了量子算法的设计效率。其次,QCircuitNet的验证和验证功能被广泛应用于量子算法的性能评估和优化研究中,推动了量子计算领域的理论与实践结合。此外,该数据集还激发了关于量子编程语言和量子计算教育的新研究方向,促进了量子计算技术的普及和应用。
以上内容由遇见数据集搜集并总结生成
5,000+
优质数据集
54 个
任务类型
进入经典数据集
二维码
社区交流群

面向社区/商业的数据集话题

二维码
科研交流群

面向高校/科研机构的开源数据集话题

数据驱动未来

携手共赢发展

商业合作