注釈
このページは 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
同じ概念は VibrationalStructureProblem と LatticeModelProblem にも適用されます。
[5]:
import qiskit.tools.jupyter
%qiskit_version_table
%qiskit_copyright
Version Information
| Qiskit Software | Version |
|---|---|
qiskit-terra | 0.23.0.dev0+fca8db6 |
qiskit-aer | 0.11.0 |
qiskit-ibmq-provider | 0.19.2 |
qiskit-nature | 0.5.0 |
| System information | |
| Python version | 3.9.14 |
| Python compiler | GCC 12.2.1 20220819 (Red Hat 12.2.1-1) |
| Python build | main, Sep 7 2022 00:00:00 |
| OS | Linux |
| CPUs | 8 |
| 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.