简而言之:如果我可以访问真正的量子计算机,是否有可能使用Q#控制它?
在你将其投入到必杀技之前,因为"现在还没有量子计算机可用":我是一名物理学家,我们的团队能够在现实世界的量子比特上做真正的大门.我也有一些编程背景(主要是C++).
因此,为了这个问题,让我们假装某人可以访问能够在多个量子位上执行某些量子操作的真实世界设备.显然,量子比特的数量可能是有限的,因此可能是可能的操作.我们还要说有人对Q#足够熟练,如果需要C#.是否有可能将计算从内置模拟器"重定向"到某个真实世界的设备?或者是否必须基本上重写整个Q#库?有没有办法定义我自己的QuantumSimulator
,我将如何开始这样做?
刚刚安装了Microsoft Quantum Development Kit,创建一个新的Q#项目失败,并显示一条晦涩的消息:
参数不能为null:参数名称:node.
(我正在使用Visual Studio 2017社区的全新安装,并应用了最新的更新.)
并产生错误消息:
有谁知道导致此错误的原因,以及如何解决?
This is my first Q# program and i'm following this getting started link.https://docs.microsoft.com/en-us/quantum/quantum-writeaquantumprogram?view=qsharp-preview
Error is
The name 'BellTest' does not exist in the current context but its defined in the Bell.cs
I followed the steps and when building its having errors. I'm not sure how to import the operations from .qs file
to driver c# file
as this error looks like it can't find that operation.
Any help is really appreciated
Here is the code
Driver.cs
using Microsoft.Quantum.Simulation.Core;
using …
Run Code Online (Sandbox Code Playgroud) 当我遇到病情时,我怎么能摆脱循环?例如:
for (i in 0..10){
if (i==3){
// equivalent of break
}
}
Run Code Online (Sandbox Code Playgroud) 我在Q#中有一个用例,其中有一个量子位寄存器qs
,需要将CNOT
除第一个量子位之外的每个量子位都应用门,并使用第一个作为控制。使用for
循环,我可以做到以下几点:
for (i in 1..Length(qs)-1) {
CNOT(qs[0], qs[i]);
}
Run Code Online (Sandbox Code Playgroud)
现在,我想给它一个更实用的味道,并尝试做类似的事情:
ApplyToEach(q => CNOT(qs[0], q), qs[1..Length(qs)-1]);
Run Code Online (Sandbox Code Playgroud)
Q#编译器不接受这样的表达式,通知我它遇到了意外的代码片段。就我的口味而言,这还不太丰富。一些文档声称Q#支持匿名功能a'la C#,因此是上面的尝试。有人可以指出我在Q#中正确使用lambda还是消除我的错误信念?
Q#是Microsoft专门用于执行量子计算的一种有趣的新语言。
是否可以编译为可以从c#或任何其他.net语言.Net Framework和/或.Net Core Framework(可能是.Net标准)引用的.net库?
如果不是,那么如何将其合并到经典应用程序中?
如果可以,那么量子计算机将是什么样?它是否允许运行完整的.net架构以及Quantum作为协处理器(某种程度上类似于GPU编程),否则它将看起来如何?
如标题所述,如何在Q#中实现Grover扩散算子?我知道它的定义是任意数量的qubit的统一状态2 ?s|s? - I
在哪里|s?
。这可以进一步用夹在一对H门之间的Z0(称为U0)门来定义。我无法在量子图元和佳能文档中找到任何以可能的名称(例如Grover,diff等)开头的函数。
我不想使用该函数,AmpAmpByOracle
因为它是非常高级的实现,并且不清楚我的理解。我想实现一个函数,它采用一个oracle Uf(我不知道是我想知道的)和它所需要的qubit数(N),并通过简单遵循Grover's Algorithm |中给出的电路来执行Grover算法。Wikipedia并通过在r = rox(2 ^(N / 2))迭代结束时测量所有N个量子位来测量所需状态。
我尝试用Q#编写算法。在某些情况下,该算法无法计算出成功的结果,因为用户传递了一些错误的参数。在这种情况下,我想引发异常,现在我想知道:是否可以在Q#中引发和捕获异常?
如果是,我该怎么做?Q#中异常处理的正确方法是什么?
如果没有:为什么?有什么解决方法吗?
我有一个新的Microsoft Quantum Development Kit的简单Q#示例的编译错误:
namespace Quantum.Bell
{
open Microsoft.Quantum.Primitive;
open Microsoft.Quantum.Canon;
operation Set (desired: Result, q1: Qubit) : Unit
{
let current = M(q1);
if (desired != current)
{
X(q1);
}
}
operation BellTest (count : Int, initial: Result) : (Int, Int)
{
mutable numOnes = 0;
using (qubit = Qubit())
{
for (test in 1..count)
{
Set (initial, qubit);
let res = M (qubit);
// Count the number of ones we saw:
if (res == One)
{
set numOnes …
Run Code Online (Sandbox Code Playgroud) $ dotnet new console -lang Q# --output Bell
Error: Invalid parameter(s):
-lang Q#
'Q#' is not a valid value for -lang (language).
Run Code Online (Sandbox Code Playgroud)
运行dotnet新控制台--help以获得使用信息。请参阅https://aka.ms/dotnet-install-templates以了解如何安装其他模板包。
我也尝试运行:
dotnet new -i Microsoft.DotNet.Common.ProjectTemplates.2.x::2.0.0-*
Run Code Online (Sandbox Code Playgroud)
但是,即使此命令也无法为项目添加任何想法,我该如何获取此模板。