QPanda 2教程资源 | 算法组件之费米子算符类、优化算法
hi~
上篇为大家推送了
泡利算符类
今天小编要介绍的是
费米子算符类、优化算法
跟我们一起来学习吧!
在上一篇文章中,小编为大家介绍了算法组件之泡利算符类。
泡利算符是一组三个2×2的幺正厄米复矩阵,又称酉矩阵。我们一般都以希腊字母σ(西格玛)来表示,记作σx,σy,σz。在QPanda中我们称它们为X门,Y门,Z门。
接下来介绍的是QPanda 2的算法组件之费米子算符类、优化算法。
◆◆费米子算符类
◆◆我们用如下记号标识来表示费米子的两个形态,湮没:X表示ax,创建:X+表示ax†,例如:"1+3 5+1"则代表a1†a3a5†a1。
整理规则如下
1. 不同数字
2. 相同数字
跟PauliOperator类似,FermionOperator类也提供了费米子算符之间加、减和乘的基础的运算操作。通过整理功能可以得到一份有序排列的结果。
◆◆实例◆◆本章节将讲解优化算法的使用,包括Nelder-Mead算法跟Powell算法,它们都是一种直接搜索算法。我们在QPanda中实现了这两个算法,OriginNelderMead和OriginPowell,这两个类都继承自AbstractOptimizer。
◆◆接口介绍◆◆我们可以通过优化器工厂生成指定类型的优化器,例如我们指定它的类型为Nelder-Mead。
using namespace QPanda;
auto optimizer = OptimizerFactory::makeOptimizer(NELDER_MEAD);
我们需要向优化器注册一个计算损失值的函数和待优化参数。
vector_d init_para{0, 0};
optimizer->registerFunc(myFunc, init_para);
然后设置结束条件,我们可以设置变量及函数值的收敛阈值,函数最大可调用次数,和优化迭代次数。只要满足上述结束条件,则优化结束。
optimizer->setXatol(1e-6);
optimizer->setFatol(1e-6);
optimizer->setMaxFCalls(200);
optimizer->setMaxIter(200);
然后通过exec接口执行优化,通过getResult接口获得优化后的结果。
optimizer->exec();
auto result = optimizer->getResult();
◆◆实例◆◆给定一些散列点,我们来拟合一条直线,使得散列点到直线的距离和最小。定义直线的函数的表达式为y=w*x+b,接下来我们将通过使用优化算法得到w和b的优化值。首先定义求期望的函数。
我们使用Nelder-Mead算法进行优化。
我们将散列点和拟合的直线进行绘图。
★以上即为QPanda 2费米子算符类、优化算法部分的详细内容介绍。
★感兴趣的欢迎加入"QPanda 2开发交流群"。(关注“本源量子”公众号,回复“加群”,联系小编即可)
★PC端学习量子计算请登录learn-quantum.com
★掌上学习请下载"本源溯知APP"
★如有疑问可上量子互动论坛,与我们的大神进行交流讨论。
往期精彩回顾
量子程序序列化以及解析量子程序的二进制文件
逻辑门以及量子程序时钟周期统计
量子门的有效性及判断方法
量子比特的测量方法:量子测量和概率测量
QPanda 2最常用的量子计算模型——量子线路
嗨玩本源QPanda 2,从量子逻辑门实例开始学起!