注釈
このページは 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.