V0.5 の格子モデルの問題#

今回のQiskit Natureのリリースでは、格子モデルは若干のアップデートを行ったのみです。

重要な 変更点として、すべての格子モデルは古い Property から新しい Hamiltonian インターフェースを実装しているため、実際の演算子は second_q_ops() (末尾の s に注意してください) の代わりに second_q_op() メソッドで取得することができます。

概要#

最も注目すべきは、 import が以下のように変更されたことです。

従来の場所

新しい場所

qiskit_nature.problems.second_quantization.lattice.models

qiskit_nature.second_q.hamiltonians

qiskit_nature.problems.second_quantization.lattice.lattices

qiskit_nature.second_q.hamiltonians.lattices

qiskit_nature.problems.second_quantization.lattice.LatticeModelProblem

qiskit_nature.second_q.problems.LatticeModelProblem

さらに、LatticeModel クラスで定義されている Lattice オブジェクトのファクトリーメソッドは、以下のように移行されました。

従来のメソッド

新しいメソッド

FermiHubbardModel.uniform_parameters

Lattice.uniform_parameters

FermiHubbardModel.from_parameters

Lattice.from_adjacency_matrix

IsingModel.uniform_parameters

Lattice.uniform_parameters

IsingModel.from_parameters

Lattice.from_adjacency_matrix

その他のリソース#

新しいコードの使用方法については、以下のチュートリアルを必ずご確認ください。

FermiHubbardModel.uniform_parameters#

以前#

from qiskit_nature.problems.second_quantization.lattice.lattices import LineLattice
from qiskit_nature.problems.second_quantization.lattice.models import FermiHubbardModel

line = LineLattice(2)
fermi = FermiHubbardModel.uniform_parameters(line, 2.0, 4.0, 3.0)
print(fermi.second_q_ops())  # Note: the trailing `s`
Fermionic Operator
register length=4, number terms=10
  (2+0j) * ( +_0 -_2 )
+ (-2+0j) * ( -_0 +_2 )
+ (4+0j) * ( +_0 -_0 )
+ (4+0j) * ( +_2 -_2 )
+ (2+0j) * ( +_1 -_3 )
+ (-2+0j) * ( -_1 +_3 )
+ (4+0j) * ( +_1 -_1 )
+ (4+0j) * ( +_3 -_3 )
+ (3+0j) * ...

新規#

from qiskit_nature.second_q.hamiltonians.lattices import LineLattice
from qiskit_nature.second_q.hamiltonians import FermiHubbardModel

line = LineLattice(2)
fermi = FermiHubbardModel(line.uniform_parameters(2.0, 4.0), 3.0)
print(fermi.second_q_op())  # Note: NO trailing `s`
Fermionic Operator
number spin orbitals=4, number terms=10
  2.0 * ( +_0 -_2 )
+ -2.0 * ( -_0 +_2 )
+ 4.0 * ( +_0 -_0 )
+ 4.0 * ( +_2 -_2 )
+ 2.0 * ( +_1 -_3 )
+ -2.0 * ( -_1 +_3 )
+ 4.0 * ( +_1 -_1 )
+ 4.0 * ( +_3 -_3 )
+ 3.0 * ( +_0 -_0 +_1 -_1 )
+ 3.0 * ( +_2 -_2 +_3 -_3 )

FermiHubbardModel.from_parameters#

以前#

import numpy as np
from qiskit_nature.problems.second_quantization.lattice.models import FermiHubbardModel

interaction = np.array([[4.0, 2.0], [2.0, 4.0]])

fermi = FermiHubbardModel.from_parameters(interaction, 3.0)
print(fermi.second_q_ops())  # Note: the trailing `s`
Fermionic Operator
register length=4, number terms=10
  (4+0j) * ( +_0 -_0 )
+ (2+0j) * ( +_0 -_2 )
+ (-2+0j) * ( -_0 +_2 )
+ (4+0j) * ( +_2 -_2 )
+ (4+0j) * ( +_1 -_1 )
+ (2+0j) * ( +_1 -_3 )
+ (-2+0j) * ( -_1 +_3 )
+ (4+0j) * ( +_3 -_3 )
+ (3+0j) * ...

新規#

import numpy as np
from qiskit_nature.second_q.hamiltonians.lattices import Lattice
from qiskit_nature.second_q.hamiltonians import FermiHubbardModel

interaction = np.array([[4.0, 2.0], [2.0, 4.0]])

lattice = Lattice.from_adjacency_matrix(interaction)
fermi = FermiHubbardModel(lattice, 3.0)
print(fermi.second_q_op())  # Note: NO trailing `s`
Fermionic Operator
number spin orbitals=4, number terms=10
  4.0 * ( +_0 -_0 )
+ 2.0 * ( +_0 -_2 )
+ -2.0 * ( -_0 +_2 )
+ 4.0 * ( +_2 -_2 )
+ 4.0 * ( +_1 -_1 )
+ 2.0 * ( +_1 -_3 )
+ -2.0 * ( -_1 +_3 )
+ 4.0 * ( +_3 -_3 )
+ 3.0 * ( +_0 -_0 +_1 -_1 )
+ 3.0 * ( +_2 -_2 +_3 -_3 )

IsingModel.uniform_parameters#

以前#

from qiskit_nature.problems.second_quantization.lattice.lattices import LineLattice
from qiskit_nature.problems.second_quantization.lattice.models import IsingModel

line = LineLattice(2)
ising = IsingModel.uniform_parameters(line, 2.0, 4.0)
print(ising.second_q_ops())  # Note: the trailing `s`
  Z_0 Z_1 * (2+0j)
+ X_0 * (4+0j)
+ X_1 * (4+0j)

新規#

from qiskit_nature.second_q.hamiltonians.lattices import LineLattice
from qiskit_nature.second_q.hamiltonians import IsingModel

line = LineLattice(2)
ising = IsingModel(line.uniform_parameters(2.0, 4.0))
print(ising.second_q_op())  # Note: NO trailing `s`
Spin Operator
spin=1/2, number spins=2, number terms=3
  2.0 * ( Z_0 Z_1 )
+ 4.0 * ( X_0 )
+ 4.0 * ( X_1 )

IsingModel.from_parameters#

以前#

import numpy as np
from qiskit_nature.problems.second_quantization.lattice.models import IsingModel

interaction = np.array([[4.0, 2.0], [2.0, 4.0]])

ising = IsingModel.from_parameters(interaction)
print(ising.second_q_ops())  # Note: the trailing `s`
  X_0 * (4+0j)
+ Z_0 Z_1 * (2+0j)
+ X_1 * (4+0j)

新規#

import numpy as np
from qiskit_nature.second_q.hamiltonians.lattices import Lattice
from qiskit_nature.second_q.hamiltonians import IsingModel

interaction = np.array([[4.0, 2.0], [2.0, 4.0]])

lattice = Lattice.from_adjacency_matrix(interaction)
ising = IsingModel(lattice)
print(ising.second_q_op())  # Note: NO trailing `s`
Spin Operator
spin=1/2, number spins=2, number terms=3
  4.0 * ( X_0 )
+ 2.0 * ( Z_0 Z_1 )
+ 4.0 * ( X_1 )