Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How to construct time-dependent MPOs with the general optimal method directly? #164

Open
zhoulq2333 opened this issue Jan 8, 2024 · 2 comments

Comments

@zhoulq2333
Copy link

Sometimes we need to deal with time-dependent Hamiltonian(eg. the effective Hamiltonian in Hierarchy of Matrix Product States). I have tried two methods, but each of them has some drawbacks.

  1. Devide the operators into two groups, the time-independent group and the time-dependent group. The MPO of the former group is generated when the model is initiated, and the MPO of the latter group is generated each time during the evolution. The two MPOs are added directly. Since the time-dependent MPO is much simpler, the construction may be not time-consuming. But the direct adding makes the bond dimension of the total MPO much larger, so the result is not the optimal MPO.
  2. Generate the MPO of the total Hamiltonian from the operator list each time during the evolution. The resulting MPO is optimal, but it is time-consuming to generate the MPO from the total Hamiltonian frequently.
    MPO construction

So can we construct time-dependent numerical MPOs from optimal symbolic MPOs with parameters(time)?

@liwt31
Copy link
Collaborator

liwt31 commented Feb 21, 2024

Thanks for the feedback. I assume the time-dependent part only alters the coefficients and not the operators? I don't think currently we have a better solution for this scenario, e.g., reusing existing MPOs with different coefficients. Maybe in the future we can use sympy to construct the symbolic MPO.

@jiangtong1000
Copy link
Collaborator

@zhoulq2333 I am curious about the timing difference between re-constructing a new mpo and single-step propagation, usually how slow can it be?

hams = []
for p, q in ...:
    hams.append(ops[p,q] * new_coeff[p, q])
new_mpo.append(Mpo(model, terms=hams))

where ops is pre-stored.
Also, sounds like that the model can be reused?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants