项目
Agent 参与分解流程小型实验
实验设置:
固定 QSD 流程与 Agent 驱动的工具编排流程; (Agent依然可以用 QSD)
baseline
QSD;
当前 baseline QSD 已经输出量子门线路,但这些门可能是 U、CX、RZ、H;本项目规定最终只能用 RX、RZ、SX、X、CZ。其中 U、CX、H ,需要进一步等价转换。
实验参数设置:config.yaml
固定门集: RX RZ SX X CZ
拓扑关系:3 个 qubit线性连接;
比较指标:酉矩阵相似度、CX 数量、电路深度、总门数;
Agent 负责哪些
可调用的工具有什么? AQC、diagonal、Clifford、Qserach、KAK、QSD;
Agent 的决策请求包括:
目标矩阵的 ID、矩阵特征,不发送完整复数矩阵。
优化目标:正确性优先,然后比较 CZ 数、深度、总门数。
QSD Baseline 的指标:将 baseline 已经完成的分解指标给 Agent。CZ 数量、深度等等;
当前合法、可用的工具及参数定义。
已尝试的候选、上一次评价反馈、剩余预算。
{
"matrix_id": "M01",
"goal": "valid first; minimize (cz_count, depth, total_gates)",
"features": {
"n_qubits": 3,
"diagonal_error": 0.9501224590962994,
"is_clifford": false,
"tensor_separable": false,
"identity_overlap": 0.021563491596844595,
"unitarity_error": 4.922122155816044e-16,
"subproblem_id": null,
"available_tools": ["QSD", "AQC"]
},
"baseline_metrics": {
"similarity": 0.9999999999999996,
"cz_count": 31,
"depth": 89,
"total_gates": 143,
"basis_ok": true,
"topology_ok": true,
"valid": true
},
"candidate_history": [],
"remaining_budget": {
"tool_calls": 3,
"decisions": 5
},
"last_feedback": null
}
任务决策器、特征提取器、评价器、执行器等每一个部分的输入输出到底是什么需要讲清楚;
特征提取器提供哪些特征:
重要。决定 Agent 能得到什么特征。
| 特征 | 含义 | 能影响什么决策 |
|---|---|---|
n_qubits | 输入矩阵对应的比特数量 | 能否使用 KAK、AQC |
diagonal_error | 矩阵偏离对角矩阵的程度 | 是否使用 Diagonal Synthesis |
is_clifford | 是否属于 Clifford 酉矩阵 | 是否使用 Clifford Synthesis |
tensor_separable | 是否能够写为小矩阵的张量积 | 是否先拆分子问题 |
identity_overlap | 与单位矩阵的接近程度(忽略全局相位) | 是否值得尝试低深度近似电路 |
unitarity_error | 是否满足酉性条件 | 输入是否合法 |
baseline_cx | QSD 的 CX 门数量 | 其他候选需要改善的指标 |
baseline_depth | QSD 的电路深度 | 其他候选需要改善的指标 |
任务决策器(核心):
项目结构
unitary-agent-demo/
├── demo.ipynb # 主操作入口,逐步运行与展示实验
├── README.md # 项目介绍
├── VALIDATION.md # 验收结果、已处理问题与已知限制
├── config.yaml # 门集、拓扑、精度门槛及 Agent 预算
├── environment.yml # Conda 环境定义
├── requirements.txt # 项目直接依赖及固定版本
├── requirements-server.lock.txt # 服务器完整 Python 依赖快照
├── .gitignore # Git 忽略规则
│
├── src/ # 核心实现
│ ├── __init__.py # Python 包入口
│ ├── matrices.py # 生成、校验和保存目标酉矩阵
│ ├── baseline.py # 运行固定配置的 QSD Baseline
│ ├── features.py # 提取矩阵特征及 KAK 子问题
│ ├── tools.py # 注册综合工具、校验参数和控制超时
│ ├── normalizer.py # 统一门集并映射到线性拓扑
│ ├── evaluator.py # 检查正确性并计算四项指标
│ ├── agent.py # DeepSeek 工具调用与评价反馈
│ └── experiment.py # 编排实验流程、保存状态和汇总结果
│
├── scripts/ # 环境与运行辅助脚本
│ ├── setup-server.sh # 创建服务器环境、安装依赖与内核
│ ├── start-jupyter.sh # 启动 JupyterLab
│ └── validate-notebook.py # 执行完整 Notebook 并保存验收结果
│
├── tests/ # 离线测试
│ └── test_pipeline.py # 验证综合流程、评价及调用约束
│
└── results/ # 实验输出,每次运行使用独立目录
├── .gitkeep # 保留空目录的占位文件
└── validation-20261102/ # 服务器上的本次验收产物
├── config.json # 本次运行的配置快照
├── demo.executed.ipynb # 已执行并保留输出的 Notebook
├── summary.csv # Baseline 与 Agent 指标对比
├── matrices/ # 目标矩阵、种子与 KAK 分解因子
├── circuits/ # 原始及最终线路、布局与逻辑算符
└── traces/ # 每轮决策、执行反馈和最终选择
文件位置
-
准备测试、提前生成的矩阵:unitary-agent-demo/results/exploration-validation-20261102/matrices样本类别是:M01 M02 … M04; 想生成不同的M01,改随机种子即可;
-
评估:先检查准确性(相似度)、然后检查是否满足硬性要求、最后剩下来的按照CZ 数量、深度、总门数量的顺序选最优;
相似度:
这个函数是Qiskit提供的 酉矩阵相似保真度,有文献。A simple formula for the average gate fidelity of a quantum dynamical operation。
-
特征提取器:unitary-agent-demo/src/features.py
QA
预算请求会不会太少?
两种分解的比较在哪里?
在发送给模型的上下文中,模型怎么知道这些个字段代表什么?
unitary-agent-demo/src/agent.py:里面放了系统提示词,模型的角色、任务;还有函数定义;
unitary-agent-demo/src/experiment.py 告诉模型具体的矩阵特征、Baseline 指标、历史结果和预算;
当前没用 langchain,如果用了 langchain,当前项目会有什么变化?简化在哪里?
当前程序生成一个候选方案,只通过一种方法生成到底;然后再 Transpile 成硬件约束路线;不涉及自主设计组合路线
流派:自顶向下分解,or,自底向上搜索;