Nobisuke
Dekisugi
RAG
Privacy policy
2024/08/11 03:53
大家好,似乎在教育和开发领域经常会遇到没有现有求解器或解决方案的问题。让我们来创建新的工具来解决这些问题吧。
这次,我将讨论2023年通过量子计算进行的肽的晶格折叠模拟:
这是关于蛋白质折叠问题的学生论文。当使用现有的QUBO求解器来解决这一问题时,似乎有必要将HOBO(高级二元优化)方程转换为QUBO(二次无约束二元优化)方程。这一转换过程引入了显著的复杂性和不必要的任务。
在像QAOA这样的量子计算模拟中,时间演化算子的转换使得不需要进行分解。然而,由于过去的限制,许多人仍然认为必须转换为QUBO。我提出了直接以HOBO的形式解决问题的建议。
对于QUBO,成本可以使用QUBO矩阵和向量来解决,如下所示:
[ C = x^T Q x ]
但是,在更高的维度中,这变得难以可视化。与其坚持矩阵表示,不如进行推广。
通过使用张量网络表示法,我们可以轻松地将以前用于QUBO的理论扩展到更高阶。例如,对于高达五阶的项,成本函数为:
[ C = \sum x x x x x H ]
由于HOBO并非严格意义上的矩阵,而是张量,因此我们将其称为HOBO张量。
当在HOBO中使用张量时,未来可以考虑各种发展。首先,让我们来看一个简单的实现方法。我已经在预印本中描述了如何创建HOBO张量。
基于张量网络的HOBO求解器,2024年7月
下面是用PyTorch实现的三阶示例:
import torch
T = torch.tensor([
[[-10., 1, -4], [0, 0, -1], [0, 0, 0]],
[[0, 0, 0], [0, 7, 8], [0, 0, 0]],
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
])
x = torch.tensor([1., 0, 1], dtype=torch.float32)
cost = torch.einsum('i,j,k,ijk->', x, x, x, T)
print(cost.item())
您需要准备张量,准备向量,然后将它们收缩。
在Sympy中实现的三阶示例:
import sympy as sp
# 定义符号变量
x0, x1, x2 = sp.symbols('x0 x1 x2')
# 将张量T定义为符号性三维数组
T = sp.Array([
[[-10, 1, -4], [0, 0, -1], [0, 0, 0]],
[[0, 0, 0], [0, 7, 8], [0, 0, 0]],
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
])
# 定义符号向量x
x = sp.Array([x0, x1, x2])
# 使用爱因斯坦求和计算成本
cost = sp.tensorcontraction(sp.tensorproduct(T, x, x, x), (0, 3), (1, 4), (2, 5))
cost_simplified = sp.simplify(cost)
# 打印结果
print(cost_simplified)
人们可能很容易想象三阶的情况,但要理解更高阶则比较困难。不过,对于更高阶,您也可以使用相同的方法。
下面是用PyTorch实现的四阶示例:
import torch
# 定义四阶张量
T = torch.tensor([
[[[-10., 0., 0.],
[1., 0., 0.],
[-4., 0., 0.]],
[[0., 0., 0.],
[0., 0., 0.],
[-1., 0., 0.]],
[[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]]],
[[[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]],
[[0., 0., 0.],
[7., 0., 0.],
[8., 0., 0.]],
[[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]]],
[[[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]],
[[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]],
[[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]]]])
# 定义向量x
x = torch.tensor([1., 0, 1], dtype=torch.float32)
# 执行爱因斯坦求和操作
cost = torch.einsum('i,j,k,l,ijkl->', x, x, x, x, T)
# 打印成本
print(cost.item())
虽然调整QUBO的上三角矩阵和对角元素相对简单,但HOBO张量要复杂得多。尽管我在预印本中写了如何构建它,但社区需要提出更高效的创建和实现方法。
HOBO张量包含大量冗余。研究是否可以使用各种张量网络技术来实现高效计算,似乎很有前途。
我正在考虑在Torch Tytan中实现这个功能:
© 2024, blueqat Inc. All rights reserved