查看原文
其他

QPanda 2教程资源 | 算法组件之费米子算符类、优化算法

本源量子 2021-02-13

hi~

上篇为大家推送了

泡利算符类

今天小编要介绍的是

费米子算符类、优化算法

跟我们一起来学习吧!



上一篇文章中,小编为大家介绍了算法组件之泡利算符类。

泡利算符是一组三个2×2的幺正厄米复矩阵,又称酉矩阵。我们一般都以希腊字母σ(西格玛)来表示,记作σx,σy,σz。在QPanda中我们称它们为X门,Y门,Z门。

接下来介绍的是QPanda 2的算法组件之费米子算符类、优化算法

◆◆

费米子算符类

◆◆

我们用如下记号标识来表示费米子的两个形态,湮没:X表示ax,创建:X+表示ax,例如:"1+3 5+1"则代表a1a3a5a1。

整理规则如下

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,从量子逻辑门实例开始学起!

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存