0 votes
asked by (120 points)

Hi,

I am trying to run a DMRG optimizing over product states.
My guess was setting maxm = 1 in the final sweeps.

I used the following setup:

Sweeps sweeps = Sweeps(15);
sweeps.maxm() = 5,10,20,50,100,50,20,10,5,1;
sweeps.cutoff() = 1E-15;
sweeps.niter() = 2,2,2,3,4,3,2,2,1;
sweeps.noise() = 1e-4,1e-5,1e-6,1e-7,1e-8,0;
dmrg(psi0, H, sweeps);

The problem is, once in a while, the DMRG keeps m=0 and I get a segfault, e.g.,

Sweep=9, HS=1, Bond=1/2
I 0 q 8E-13 E -0.1662838484
I 1 q 8E-13 E -0.1662838484
    Truncated to Cutoff=1.0E-15, Min_m=1, Max_m=5
    Trunc. err=0.0E+00, States kept: m=2
Sweep=9, HS=1, Bond=2/2
I 0 q 8E-13 E -0.1662838484
I 1 q 7E-13 E -0.1662838484
    Truncated to Cutoff=1.0E-15, Min_m=1, Max_m=5
    Trunc. err=0.0E+00, States kept: m=2
Sweep=9, HS=2, Bond=2/2
I 0 q 7E-13 E -0.1662838484
I 1 q 7E-13 E -0.1662838484
    Truncated to Cutoff=1.0E-15, Min_m=1, Max_m=5
    Trunc. err=0.0E+00, States kept: m=2
Sweep=9, HS=2, Bond=1/2
I 0 q 7E-13 E -0.1662838484
I 1 q 7E-13 E -0.1662838484
    Truncated to Cutoff=1.0E-15, Min_m=1, Max_m=5
    Trunc. err=0.0E+00, States kept: m=2

    vN Entropy at center bond b=1 = 0.693147179809
    Eigs at center bond b=1: 0.5000 0.5000 
    Largest m during sweep 9/15 was 2
    Largest truncation error: 0
    Energy after sweep 9/15 is -0.166283848350
    Sweep 9/15 CPU time = 0.000961s (Wall time = 0.00123s)
Sweep=10, HS=1, Bond=1/2
I 0 q 7E-13 E -0.1662838484
I 1 q 7E-13 E -0.1662838484
    Truncated to Cutoff=1.0E-15, Min_m=1, Max_m=1
    Trunc. err=5.0E-01, States kept: m=0
Sweep=10, HS=1, Bond=2/2

Intel MKL ERROR: Parameter 14 was incorrect on entry to cblas_dgemm.

Intel MKL ERROR: Parameter 9 was incorrect on entry to cblas_dgemm.

First, i thought it was the MKL, but it also happens with the OSX Accelerate framework. Btw., I am using v2.

I chose such sweeps.maxm() to give it room to escape local minima, but I don't know whether it is the best approach to optimize over product states.

Any thoughts on that?

Thanks in advance,

commented by (590 points)
`niter` must be at least 2, you have it as 1 on sweep 9. [1]


  [1]: http://itensor.org/docs.cgi?page=classes/sweeps&vers=cppv2
commented by (120 points)
I've tried different values (2,3,4), but I am still getting m=0:
    Truncated to Cutoff=1.0E-15, Min_m=1, Max_m=1
    Trunc. err=5.0E-01, States kept: m=0
commented by (120 points)
I tried v3, but I am getting the same issue.
I don't know whethet I should report it in GitHub as well.
commented by (4.8k points)
Hello,

We will look into this to see if there is anything strange going on with the truncation.

However, one suggestion I have is, if you are interested in a product state at the end, is it sufficient to run DMRG at a finite bond dimension (greater than 1), and then after the DMRG run truncate the MPS down to a product state? In theory, I would think this should give you a better product state (i.e. a product state with lower energy).

Cheers,
Matt
commented by (34k points)
I would concur with Matt that you might be much better off not trying to run DMRG with a bond dimension set to 1. Even if our code did not give you an error in this regime (which we will look into) it’s questionable to me whether the DMRG algorithm itself (not just our implementation of it) is suitable for optimizing product states.

Matt’s approach is one good idea for finding a lowest-energy product state.

Another idea would just be to parameterize each of the tensors of the product state with a small number of parameters, then do gradient-descent optimization of the energy over these parameters. Deriving the expressions for the gradients would not be too challenging, and for specialized cases like this it’s best to write custom code I think.

Miles
commented by (120 points)
Hi Matt/Miles,

Yeah, I haven't  thought about truncate it afterwards!
Easy peasy! :)

Thanks!

Thiago
commented by (34k points)
Hi Thiago,
Just wanted to add, though, that as far as I know, this procedure is *not* guaranteed to give the lowest energy product state. It could be, but I don’t know the argument for it in general.

So I would recommend doing further optimization on the product state afterward in order to be sure you have found a minimum.

Best regards,
Miles

Please log in or register to answer this question.

Welcome to ITensor Support Q&A, where you can ask questions and receive answers from other members of the community.

Formatting Tips:
  • To format code, indent by four spaces
  • To format inline LaTeX, surround it by @@ on both sides
  • To format LaTeX on its own line, surround it by $$ above and below
  • For LaTeX, it may be necessary to backslash-escape underscore characters to obtain proper formatting. So for example writing \sum\_i to represent a sum over i.
If you cannot register due to firewall issues (e.g. you cannot see the capcha box) please email Miles Stoudenmire to ask for an account.

To report ITensor bugs, please use the issue tracker.

Categories

...