Skip to main content
IBM Quantum Platform

LinearAmplitudeFunctionGate

class qiskit.circuit.library.LinearAmplitudeFunctionGate(num_state_qubits, slope, offset, domain, image, rescaling_factor=1, breakpoints=None, label='F')

GitHub

ベース: Gate

量子ビットの振幅に対する(区分的)線形関数を実装した回路。

関数 ff の振幅関数 FF は写像である

Fx0=1f^(x)x0+f^(x)x1.F|x\rangle|0\rangle = \sqrt{1 - \hat{f}(x)} |x\rangle|0\rangle + \sqrt{\hat{f}(x)} |x\rangle|1\rangle.

f^:{0,...,2n1}[0,1]\hat{f}: \{ 0, ..., 2^n - 1 \} \rightarrow [0, 1] ここで x|x\ranglenn の量子ビット状態である。

この回路は、区分線形関数 f^\hat{f} に対して FF を実装します。この場合、マッピング FF はテイラー展開と線形制御されたパウリ-Y回転を用いて近似的に実装できます。詳細は [1, 2 を]参照してください。 この近似では、 rescaling_factor を使ってテイラー展開の精度を決定する。

一般に、関心関数 ff は、区間 [a,b][a,b]、区間 domain から区間 [c,d][c,d]、区間 image、区間 {1,...,N}\{ 1, ..., N \} から区間 [0,1][0, 1] の代わりに定義される。アフィン変換を使えば、区間 ff から区間 f^\hat{f} を再スケールすることができる:

f^(x)=f(ϕ(x))cdc\hat{f}(x) = \frac{f(\phi(x)) - c}{d - c}

への

ϕ(x)=a+ba2n1x.\phi(x) = a + \frac{b - a}{2^n - 1} x.

ff が、 mm 間隔 [pi1,pi],i{1,...,m}[p_{i-1}, p_i], i \in \{1, ..., m\} で、傾き αi\alpha_i とオフセット βi\beta_i を持つ区分線形関数である場合、次のように書くことができる

f(x)=i=1m1[pi1,pi](x)(αix+βi)f(x) = \sum_{i=1}^m 1_{[p_{i-1}, p_i]}(x) (\alpha_i x + \beta_i)

ここで、 1[a,b]1_{[a, b]} は、引数が区間 [a,b][a, b] に属する場合に 1 となり、それ以外の場合は 0 となる指示関数である。 pip_i のブレークポイントは、引数 breakpoints で指定できます。

参照資料:

[1] ヴェルナー, S., & エガー, D. J. (2018). 量子リスク分析。 arXiv:1806.06893

[2] ガコン, J., Zoufal, C. および Woerner, S. (2020). 量子技術を活用したシミュレーションベースの最適化。 arXiv:2005.10780

パラメーター

  • num_state_qubits (int) – 変数 xx をエンコードするのに使われる量子ビットの数。
  • slope (float |list[float]) – 一次関数の傾き。 区分線形関数の場合は、傾きのリスト。
  • offset (float |list[float]) – 線形関数のオフセット。 区分線形関数の場合は、オフセットのリストにすることができる。
  • domain (tuple[float, float]) – タプルとしての関数のドメイン (xmin,xmax)(x_{\min}, x_{\max})
  • image (tuple[float, float]) – タプルとしての関数のイメージ (fmin,fmax)(f_{\min}, f_{\max})
  • rescaling_factor (float) – テイラー近似の精度を調整するための再スケーリング係数。
  • breakpoints (list[float] | None) – 関数が区分線形である場合のブレークポイント。 None の場合、関数は区分的でない。
  • label (str) – ゲートのラベル。

属性

base_class

この命令の基本クラスを取得します。 これは self の継承ツリーにあることが保証されている。

命令の "基本クラス "とは、そのオブジェクトが回路アプリケーションのために完全 に互換性があると考えるべき、継承ツリーで最も低いクラスのことである。 これは通常、サブクラスが純粋にベースクラスよりもプログラマーの利便性を向上させるために定義され、ベースクラスが動作の観点から「真の」クラスであることを意味する。 特に、上書きしないでください base_class 代替測定戦略など、ハードウェアによって異なる方法で実装される命令のカスタムバージョンを定義する場合、または特定のパラメータセットを持つパラメータ化されたゲートのバージョンを定義して、それを区別する目的で使用する場合などです。 Target 完全にパラメータ化されたゲートから。

これは、標準ライブラリ命令のシングルトン・インスタンスの場合を除き、 type(obj) と正確に等価であることが多い。 これらのシングルトン・インスタンスはベース・クラスの特別なサブクラスであり、このプロパティはそのベースを返す。 例:

>>> isinstance(XGate(), XGate)
True
>>> type(XGate()) is XGate
False
>>> XGate().base_class is XGate
True

一般的に、命令の正確なクラスは当てにすべきではない。与えられた回路内では、ほとんどの状況で Instruction.name

decompositions

SessionEquivalenceLibrary から命令の分解を取得する。

definition

他の基本ゲートの観点から定義を返す。

label

返品指示ラベル

mutable

このインスタンスはミュータブルなユニークインスタンスかどうか。

この属性が False である場合、ゲートのインスタンスは共有シングルトンであり、ミュータブルではありません。

name

名前を返す。

num_clbits

clbits の数を返す。

num_qubits

量子ビットの数を返す。

params

この Instruction のパラメーターは以下の通りである。 理想はゲートアングルだ。


方法

add_decomposition

add_decomposition(decomposition)

GitHub

SessionEquivalenceLibrary に命令の分解を追加する。

broadcast_arguments

broadcast_arguments(qargs, cargs)

GitHub

引数とその関係の検証と処理。

例えば、 cx([q[0],q[1]], q[2])cx(q[0], q[2]); cx(q[1], q[2]) を意味する。 この方法は、引数を正しいグループ分けで返す。 与えられた例では

in: [[q[0],q[1]], q[2]],[]
outs: [q[0], q[2]], []
      [q[1], q[2]], []

一般的な放送ルールは以下の通り:

  • len(qargs) == 1:

    [q[0], q[1]] -> [q[0]],[q[1]]
  • len(qargs) == 2:

    [[q[0], q[1]], [r[0], r[1]]] -> [q[0], r[0]], [q[1], r[1]]
    [[q[0]], [r[0], r[1]]]       -> [q[0], r[0]], [q[0], r[1]]
    [[q[0], q[1]], [r[0]]]       -> [q[0], r[0]], [q[1], r[0]]
  • len(qargs) >= 3:

    [q[0], q[1]], [r[0], r[1]],  ...] -> [q[0], r[0], ...], [q[1], r[1], ...]

パラメーター

  • qargs (list) – 量子ビット引数のリスト。
  • cargs (list) – 古典的なビット引数のリスト。

戻り値

単一の引数を持つタプル。

レイズ

CircuitError - 入力が有効でない場合。 例えば、引数の数がゲートの予想と一致しない。

戻りの型

Iterable [ tuple [ list, list ]]

control

control(num_ctrl_qubits=1, label=None, ctrl_state=None, annotated=None)

GitHub

それ自身のコントロールされたバージョンを返す。

制御ゲートは、 Falseannotated の場合に ControlledGate として実装され、が annotated の場合に AnnotatedOperation として実装される True

2.3 以降非推奨

qiskit.circuit.gate.Gate.control()’の引数は、Qiskit 2.3annotated 以降で非推奨となっています。 Qiskit では削除されます。 3.0 Gate.control メソッドは、annotated=Noneを受け付けなくなりました。 新しいデフォルトはannotated=Trueであり、これは制御ゲートを AnnotatedOperation として表現します(専用の制御ゲートクラスが既に存在しない場合)。 以前の動作を維持するには、明示的にannotated=Falseを設定できます。 ただし、annotated=Trueの使用が推奨されます。これにより制御回路の構築がトランスパイラに委ねられ、さらに追加の制御ゲート最適化が可能となるためです(通常、より高品質な回路につながります)。

パラメーター

  • num_ctrl_qubits (int) – 追加するコントロールの数。 デフォルトは1です。
  • label (str | None) – オプションのゲートラベル。 デフォルトはNoneです。 制御ゲートがアノテーション付き操作として実装されている場合は無視される。
  • ctrl_state (int |str | None) – ゲートの制御状態。整数またはビット列(例: "110")として指定される。 デフォルトでは None、全ビットが1の状態になります 2**num_ctrl_qubits - 1
  • annotated (bool | None) – 制御ゲートを制御ゲートとして実装するか、注釈付き操作として実装するかを示します。 もし None、として False扱われるなら。

戻り値

このゲートの制御版。

レイズ

QiskitError – 無効 num_ctrl_qubits または ctrl_state

copy

copy(name=None)

GitHub

インストラクションのコピー

パラメーター

name (str) – コピーされた回路に与えられる名前。 None の場合、名前はそのまま。

戻り値

現在の命令のコピーで、名前が与えられていればそれを更新する

戻りの型

qiskit.circuit.Instruction

inverse

inverse(annotated=False)

GitHub

この指示を反転させる。

注釈付きが偽の場合、逆命令は、再帰的に反転された定義を持つ新しい命令として実装される。

アノテーションが True の場合、逆命令は次のように実装されます。 AnnotatedOperationとして実装され、"inverse modifier "でアノテーションされた命令に対応します。

インストラクションを継承する特殊な命令は、それ自身の逆数を実装できる(例:TとTdg、バリアなど) 特に、引数 annotated をどのように扱うかを選択することができる。これには、無視することや、逆ゲートが標準ゲートとして定義されている場合は常に具象ゲートクラスを返すことなどが含まれる。

パラメーター

annotated (bool) – として返される。 AnnotatedOperation.

戻り値

逆の操作。

レイズ

CircuitError - 命令が複合命令でなく、その逆数が実装されていない場合。

is_parameterized

is_parameterized()

GitHub

Instructionコンパイル時のパラメータが含まれているかどうかを返す。

post_processing

post_processing(scaled_value)

GitHub

近似された f^\hat{f} の関数値を ff にマップする。

パラメーター

scaled_value (float) – f^(x)\hat{f}(x) のテイラー展開による関数値。

戻り値

scaled_value 、まずテイラー近似に使用した変換を反転させ、 [0,1][0, 1] から元のドメインにマッピングし直すことで、 ff のドメインにマッピングし直した。

戻りの型

浮動小数点

power

power(exponent, annotated=False)

GitHub

このゲートを exponent のパワーに引き上げる。

ユニタリーゲート(ref. UnitaryGate) または注釈付き操作(ref. AnnotatedOperation). のような複数の標準ゲートの場合、ゲートのべき乗は、直接返される別の標準ゲートで表すことができる。 RXGateゲートのパワーが、直接返される別の標準ゲートで表現できる場合。

パラメーター

  • exponent (float) – に引き上げる力がある
  • annotated (bool) – は、パワーゲートが注釈付き操作として実装できるかどうかを示す。 のような複数の標準ゲートの場合、この引数は無視される。 RXGateゲートのべき乗が別の標準ゲートで表現できる場合、この引数は無視される。

戻り値

を実施するオペレーション。 gate^exponent

レイズ

CircuitError - ゲートがユニタリーでない場合

repeat

repeat(n)

GitHub

nnself を回繰り返す命令を作成します。

パラメーター

n (int) – 命令を繰り返す回数

戻り値

定義を含む。

戻りの型

qiskit.circuit.Instruction

レイズ

CircuitError - もしn<1なら。

reverse_ops

reverse_ops()

GitHub

複合命令の場合は、サブ命令の順序を逆にする。

これは、すべてのサブ命令を再帰的に反転させることによって行われる。 ゲートを反転させることはない。

戻り値

を持つ新しい命令である。

サブ・インストラクションが逆。

戻りの型

qiskit.circuit.Instruction

soft_compare

soft_compare(other)

GitHub

ゲート間のソフトな比較。 それらの名前、量子ビット数、古典的なビット番号は一致していなければならない。 パラメータの数は一致しなければならない。 各パラメーターが比較される。 ParameterExpression、それは考慮されない。

パラメーター

other (instruction) – その他の指導

戻り値

はパラメータ式まで自己と他者が等しい。

戻りの型

bool

to_matrix

to_matrix()

GitHub

ゲートユニタリー行列の Numpy.array を返します。

戻り値

Gate サブクラスに行列定義がある場合。

戻りの型

np.ndarray

レイズ

CircuitError - Gateのサブクラスがこのメソッドを実装していない場合、このベースクラスのメソッドが呼び出されたときに例外が発生します。

to_mutable

to_mutable()

GitHub

このゲートの変更可能なコピーを返す。

このメソッドは、このゲート・インスタンスの新しい変更可能なコピーを返す。 シングルトンインスタンスが使用されている場合、これは新しいユニークなインスタンスとなり、変異させることができる。 インスタンスがすでにミュータブルであれば、そのインスタンスのディープコピーとなる。

validate_parameter

validate_parameter(parameter)

GitHub

ゲートパラメータは、int、float、または ParameterExpression

このページは役に立ちましたか?
バグや誤字の報告、またはコンテンツの要求はGitHubで行ってください。