Closed WATLE closed 2 years ago
Merging #373 (321e482) into dev (24e7aa0) will increase coverage by
1.49%
. The diff coverage is82.53%
.
@@ Coverage Diff @@
## dev #373 +/- ##
==========================================
+ Coverage 70.95% 72.45% +1.49%
==========================================
Files 84 84
Lines 5970 6109 +139
==========================================
+ Hits 4236 4426 +190
+ Misses 1734 1683 -51
Impacted Files | Coverage Δ | |
---|---|---|
src/cppsim/pauli_operator.cpp | 78.82% <ø> (+7.54%) |
:arrow_up: |
src/cppsim/pauli_operator.hpp | 95.00% <ø> (ø) |
|
src/cppsim/gate.hpp | 65.95% <41.66%> (+9.54%) |
:arrow_up: |
src/cppsim/gate_merge.cpp | 86.66% <50.00%> (+4.24%) |
:arrow_up: |
src/cppsim/qubit_info.hpp | 76.47% <50.00%> (+3.13%) |
:arrow_up: |
src/cppsim/gate_noisy_evolution.hpp | 82.92% <86.48%> (+3.34%) |
:arrow_up: |
src/cppsim/gate_factory.cpp | 58.36% <100.00%> (+0.28%) |
:arrow_up: |
src/csim/update_ops_pauli_multi.cpp | 65.00% <0.00%> (+0.62%) |
:arrow_up: |
src/csim/update_ops_pauli_single.cpp | 91.66% <0.00%> (+6.25%) |
:arrow_up: |
... and 6 more |
Help us with your feedback. Take ten seconds to tell us how you rate us.
ベンチマークを取ってみました。かなり速くなっています! 9bitでmesolveに勝ってます。 fast-bench.zip
しかし、以下のグラフでNoisyEvoluitionと比べて変わっている箇所があり、修正が必要かと思います。 bench.py.zip
特にX0X1
で、NoisyEvolution_fast
は横線になっています。
そのグラフ、dt=0.1に問題があり、 _fastのdtは旧版のdtと意味が違うので、 1e-5 ぐらいが推奨されます。 そうしたら正しい値が出るはずです
dtの意味違うし、いっそdtではなくて別の名前に変更したほうが良いですか?
それはそうとして、現状のアルゴリズムではdtの調整がシビアすぎて、 場合によってはいい感じのdtがないこともありうるので、 いろいろ考えます
行列指数関数を理解することによって、誤差が減りました。 dtの調整はもはや不要になりました
ただし、_effective_hamiltonian が対角化可能でなければならず、 実用上どうなるかがわかりません。 対角化不可能な問題がたくさんあったらどうしましょう
よい感じになりました。 前回のグラフのX0Y1/Y0X1/Y0Y1がqutipのグラフが出ていなかったのが、なぜか今回は表示されています。。 NoisyEvolutionと同じ形になったのでよいでしょうか。。
速度も更に速くなりましたね!
ただし、_effective_hamiltonian が対角化可能でなければならず、 実用上どうなるかがわかりません。 対角化不可能な問題がたくさんあったらどうしましょう
_effective_hamiltonian で追加されるのは、PauliOperatorなので、必ず対角化できそうな気がします。
中身は問題ないと思いました。対角化を使っているので高速に動くのは 3, 4 qubit くらいが限界というのも了解です。実際上はメモリが足りる限りは対角化可能だと思うので、普通のノート PC でも 10 qubit 以下は一応動くと思います。そういう意味でハミルトニアンが 10 qubit 以上だったらエラーを出すというのがいいのではないでしょうか?(メモリ足りなくて segfault を出すよりはそっちのほうがいいと思うので)
手元でもformatが動作しないし、CIも落ちるの助けてください
CIが落ちるのは、https://github.com/Qulacs-Osaka/qulacs-docker-images/pull/6 を対応してもらったからです。。 しばらく気にしないでください。。
clang-format の CI の修正を ikanagoさんにマージしてもらいましたので、devをマージしました。
NoisyEvolutionの高速バージョンを実装しました