{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 量子启发式算法结合自动调参工具\n",
"\n",
"[](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/notebook/r2.7.0rc1/mindquantum/zh_cn/case_library/mindspore_qaia_automatic_parameter_adjustment.ipynb) \n",
"[](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/notebook/r2.7.0rc1/mindquantum/zh_cn/case_library/mindspore_qaia_automatic_parameter_adjustment.py) \n",
"[](https://gitee.com/mindspore/docs/blob/r2.7.0rc1/docs/mindquantum/docs/source_zh_cn/case_library/qaia_automatic_parameter_adjustment.ipynb)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 量子启发式算法\n",
"\n",
"量子启发式算法是一类基于**量子力学原理**的计算方法衍生或启发的经典力学方法,旨在利用量子力学的独特性质(叠加态、量子纠缠和量子并行性)来改进传统算法的性能。比较有名的是Ewin tang受HHL启发提出的算法,但目前没有实用场景。为了便于区分,我们把受量子退火或者模拟量子Ising机,称为量子退火启发式算法。研究这类算法的意义在于不断探索经典算法的上界;其次可以对现实问题进行建模,使其能够被量子算法或者量子启发式算法进行求解,并且后续可以用QPU来代替启发式算法进行加速。\n",
"\n",
"常见的**量子启发式算法**包括:\n",
"\n",
"- ASB(Adiabatic Simulated bifurcation/绝热模拟分叉算法)\n",
"- BSB(Ballistic Simulated bifurcation/弹道模拟分叉算法)\n",
"- DSB(Discrete Simulated bifurcation/离散模拟分叉算法)\n",
"- SimCIM(Simulated Coherent Ising Machine/模拟相干伊辛机算法)\n",
"- LQA(Local Quantum Annealing/局部量子退火算法)\n",
"\n",
"**MindQuantum**是基于昇思MindSpore开源深度学习平台开发的新一代通用量子计算框架,聚焦于NISQ阶段的算法实现与落地。结合HiQ高性能量子计算模拟器和昇思MindSpore并行自动微分能力,提供极简的开发模式和极致的性能体验。\n",
"\n",
"MindQuantum已经[集成量子启发式算法模块](https://www.mindspore.cn/mindquantum/docs/zh-CN/r0.11/algorithm/mindquantum.algorithm.qaia.html),并提供**CPU、GPU、NUP/昇腾**版本,适配多种硬件设备,并提供极致性能。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[BSB/绝热模拟分叉算法](https://www.mindspore.cn/mindquantum/docs/zh-CN/r0.11/algorithm/qaia/mindquantum.algorithm.qaia.BSB.html#mindquantum.algorithm.qaia.BSB)为例,介绍量子启发式算法中参数定义:\n",
"\n",
"- J (Union[numpy.array, scipy.sparse.spmatrix]) - 耦合矩阵,维度为(N*N);与求解的图、ising或qubo问题相关。\n",
"- h (numpy.array) - 外场强度,维度为(N,)。\n",
"- x (numpy.array) - 自旋初始化配置,维度为(N*batch_size)。会在优化过程中被修改。如果不提供(None),将被初始化为在 [-0.01, 0.01] 范围内均匀分布的随机值。默认值:None。\n",
"- n_iter (int) - 迭代步数。默认值: 1000。\n",
"- batch_size (int) - 样本个数。默认值: 1。\n",
"- dt (float) - 迭代步长。默认值: 1。\n",
"- xi (float) - 频率维数,正的常数。默认值: None。\n",
"- backend (str) - 计算后端和精度:'cpu-float32'、'gpu-float16'或'gpu-int8',默认值: 'cpu-float32',适配CPU/GPU不同的硬件设备。\n",
"\n",
"可优化参数:\n",
"\n",
"- n_iter迭代步数表示迭代计算的步数,根据具体问题来设置,迭代步数越大,越容易收敛,求解效果越好,但是计算时间越长,可调参数。\n",
"- batch_size样本个数,MindQuantum.qaia模块通过矩阵升维,提供并行化能力,样本个数越大,解的规模越大,计算时间越长,可调参数。\n",
"- dt迭代步长,控制每次动力学演化的步长距离,迭代步长直接影响到算法收敛的速度和稳定性;如果dt太大,可能会导致算法发散或不稳定;如果dt太小,则算法收敛速度会较慢,可调参数。\n",
"- xi频率维数,用于调整算法在频率空间上的特性,可调参数。\n",
"\n",
"综合考虑算法的稳定性、收敛速度、问题特性以及算法背景等因素,选择合适的参数(n_iter、batch_size、dt、xi)。\n",
"\n",
"通常选取一组较好的参数组合需要大规模运行实验,耗费大量时间和人力,自动化调参工具便应运而生。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 自动调参工具Optuna和Hyperopt\n",
"\n",
"目前业界使用最广泛的python调参工具是Optuna和Hyperopt,可以使用网格搜索等方法自动化得到目标函数的最佳结果。\n",
"\n",
"### Optuna\n",
"\n",
"Optuna 是一个开源超参数优化框架,由Preferred Networks开发,适合机器学习和深度学习,并逐步适配LLM大模型。相比传统的网格搜索Grid Search,Optuna使用贝叶斯优化等算法,能够更高效地找到最优参数组合\n",
"\n",
"主要特点\n",
"\n",
"- 大规模搜索空间,支持多种参数类型(连续、离散、分类)\n",
"- 先进高效的参数搜索算法\n",
"- 提供可视化和并行优化能力\n",
"- 支持对接PyTorch和TensorFlow等深度学习框架\n",
"\n",
"常用API\n",
"\n",
"- Trial: 目标函数的单次调用\n",
"- Study: 一次优化过程,包含一系列的 trials.\n",
"- Parameter: 待优化的参数\n",
"\n",
"Optuna官网:
Software | \n", "Version | \n", "
---|---|
mindquantum | 0.10.0 |
scipy | 1.11.3 |
numpy | 1.26.1 |
System | \n", "Info | \n", "
Python | 3.10.13 |
OS | Linux x86_64 |
Memory | 810.22 GB |
CPU Max Thread | 96 |
Date | Tue Jun 10 14:49:51 2025 |