注釈

このページは docs/tutorials/09_properties.ipynb から生成されました。

プロパティーまたはオペレーター・ファクトリー#

Qiskit Natureには様々な「プロパティー(」properties」)」が組み込まれています。これらのオブジェクトは事実上オペレーター・ファクトリーであり、必要最小限の情報に基づいてオペレーターの設計図をプログラミングすることができます。よく使われる例としては、 ParticleNumber, AngularMomentum, Magnetization プロパティーがあり、これらはすべてシステムサイズのみを入力とし、必要なサイズの SparseLabelOp を生成することができます。

これらのプロパティーは problem インスタンスに登録することができ、その問題の基底状態や励起状態が見つかると、それらが評価されるようになります。以下では、これがどのように機能するかの一般的な概念を説明します。

ベースクラスの BaseProblem は、すべての problem インスタンスに .properties 属性を持たせることを規定しています。この属性は PropertiesContainer 型で、任意の SparseLabelOpsFactory (またはproperty クラス) のインスタンスを最大1つまで保持できるオブジェクトです。

[1]:
from qiskit_nature.second_q.problems import BaseProblem

dummy_hamiltonian = None

base_problem = BaseProblem(dummy_hamiltonian)
print(base_problem.properties)
<qiskit_nature.second_q.problems.properties_container.PropertiesContainer object at 0x14c01089daf0>

PropertiesContainer の内容を以下のように変更できます。

[2]:
from qiskit_nature.second_q.properties import AngularMomentum

print("AngularMomentum is in problem.properties:", AngularMomentum in base_problem.properties)

print("Adding AngularMomentum to problem.properties...")
base_problem.properties.add(AngularMomentum(2))

print("AngularMomentum is in problem.properties:", AngularMomentum in base_problem.properties)

print("Discarding AngularMomentum from problem.properties...")
base_problem.properties.discard(AngularMomentum)

print("AngularMomentum is in problem.properties:", AngularMomentum in base_problem.properties)
AngularMomentum is in problem.properties: False
Adding AngularMomentum to problem.properties...
AngularMomentum is in problem.properties: True
Discarding AngularMomentum from problem.properties...
AngularMomentum is in problem.properties: False

電子構造, 振動構造 または 格子モデル などの様々なスタックのための BaseProblem の特定のサブクラスは、Qiskit Nature の組み込みproperty を直接提供するので、物事をさらに簡単にします。

[3]:
from qiskit_nature.second_q.drivers import PySCFDriver

es_problem = PySCFDriver().run()

print(es_problem.properties.particle_number)
print(es_problem.properties.angular_momentum)
print(es_problem.properties.magnetization)
print(es_problem.properties.electronic_dipole_moment)
print(es_problem.properties.electronic_density)
<qiskit_nature.second_q.properties.particle_number.ParticleNumber object at 0x14bfa1aa5b80>
<qiskit_nature.second_q.properties.angular_momentum.AngularMomentum object at 0x14bfa1aa5a60>
<qiskit_nature.second_q.properties.magnetization.Magnetization object at 0x14bfa1aa5ac0>
<qiskit_nature.second_q.properties.dipole_moment.ElectronicDipoleMoment object at 0x14bfa1aa5f70>
None

デフォルトでは、ElectronicDipoleMoment が設定されています。 除外するには、ドライバーの to_problem() メソッドを使用し、include_dipole=False キーワード引数を指定します。詳細はドライバーのドキュメントを参照してください。

ElectronicDensity 以外のすべてのプロパティが事前に設定されていますが、これは簡単に追加できます。

[4]:
from qiskit_nature.second_q.properties import ElectronicDensity

density = ElectronicDensity.from_orbital_occupation(
    es_problem.orbital_occupations,
    es_problem.orbital_occupations_b,
)

es_problem.properties.electronic_density = density

同じ概念は VibrationalStructureProblemLatticeModelProblem にも適用されます。

[5]:
import qiskit.tools.jupyter

%qiskit_version_table
%qiskit_copyright

Version Information

Qiskit SoftwareVersion
qiskit-terra0.23.0.dev0+fca8db6
qiskit-aer0.11.0
qiskit-ibmq-provider0.19.2
qiskit-nature0.5.0
System information
Python version3.9.14
Python compilerGCC 12.2.1 20220819 (Red Hat 12.2.1-1)
Python buildmain, Sep 7 2022 00:00:00
OSLinux
CPUs8
Memory (Gb)62.501182556152344
Fri Oct 21 16:22:12 2022 CEST

This code is a part of Qiskit

© Copyright IBM 2017, 2022.

This code is licensed under the Apache License, Version 2.0. You may
obtain a copy of this license in the LICENSE.txt file in the root directory
of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.

Any modifications or derivative works of this code must retain this
copyright notice, and modified files need to carry a notice indicating
that they have been altered from the originals.