我们的口号是:没有实力全靠浪
承蒙晓东大佬抬爱,在此抛砖引玉,分享一下我们小组对第三题的想法。
为了查阅方便,把题目再这里贴一下:给定一个含有一系列参数的量子电路,规模为14个量子比特,已知此电路由基本量子门X,Y,Z,H,S,T,CX,CZ,和单量子比特旋转操作Rx,Ry和Rz组成。其中部分旋转操作Rx,Ry,Rz的旋转角theta[i,i=0, … , N]是可变参数。请基于给定的程序,自行设计参数优化算法,找到一组{theta}使量子电路能从全零初态|00000000000000〉制备到出现概率最大的二进制基矢为|00111100000011〉,且其概率值大于1.8%
做过样题的同学就会感觉非常的熟悉,该题目类似于样题的第一题。题目的目的是寻找最优的参数,也就是是一个经典的优化问题。一个最为直接的思路就是带着给定的参数,将初态|00000000000000〉作用上去,看看最后带着参数的表达式,再进行多目标优化。但是,线路代码将近3000行,完全参数化似乎是不可行的(只是猜测,我们小组粗略的估计后放弃了这个思路)。
ProjectQ和HiQ中有函数可以直接输出二进制基矢为|00111100000011〉的概率,我们以此为目标函数,直接对参数优化。但线路及其复杂,我们猜测可能存在很多的局部最优点(由于比赛时间较紧,也没有做充分的验证,如果说的不对,请大家指正)。那么优化的算法必须有一定的跳出局部最优解的能力。 同时,所有的解构成的空间为凸集,当解空间为凸集时,已经证明粒子群算法可以找到全局最优解。我们考虑后使用的算法是蒙特卡洛搜索结合粒子群优化算法,其中蒙卡是为粒子群提供初始集合的,优化的过程是粒子群优化算法,相信很多小伙伴也用了该算法,对于粒子群优化算法的原理可以参考:PSO
优化过程可以概括为以下步骤:
(1) 随机在解空间里面选取一些点,计算对应的基矢的概率,留取当前集合中相应概率最大的几个点构成初始状态集合
(2) 在解空间中选取一些特定的参数,我们按照theta的取值选取一些边界上的点,例如将一个theta固定到最大值,其他的theta为0,或者将两个theta固定到最大值,其他的theta为0。我们这样的选取方式是为了找到尽可能大的凸包包含最优解。
(3) 使用粒子群优化算法寻找最优解,其中比较关键的是设置粒子群移动速度,移动方向沿该点指向当前最优点。我们限制算法的运行时间,找到当前可优化的最好结果。
(4) 将当前最好结果并入初始状态集合,重复步骤(1)(3),直到输出满意的结果
(5) 验证是否满足题目要求,确定最大概率基矢确实为题目给定的基矢,并输出该最大概率值。
我们经过优化后,概率的最大值可以达到2.16%,由于时间关系也没能进一步的继续优化。在这个过程中有两点较为重要,一是初始状态集合的选取,如果完全随机,可能会造成凸包较小,陷入局部最优解;二是粒子群的移动速度和移动方式,我们在算法实现中只是采用了最基本的粒子群的思想,这两点设置的比较简单,或许会有更合理的移动方式和速度的设定可以加快求解。当然还有一些进一步的想法时间紧迫没来得及实现:(1)题目中的线路较为复杂,如果能进行适当地合并,可以在优化的时候加快速度。(2)粒子群算法已经有了很多进一步的改进,或许会有算法之间的融合可以加快求解。
以上是我们小组对问题三的一些想法,比赛之中有很多仓促,未来得及细想,不足之处请批评指正。
现在时间是你的了 :-)
... 查看全部