I think the specific operators are ok (though of course, I could definitely be wrong). Though the quantum numbers are not conserved, as can be seen in the last two lines of building the Hamiltonian:
auto sites = Exciton(N,{"on_site_dim", dim});
auto ampo = AutoMPO(sites);
for(int j = 1; j <= N; ++j)
{
ampo += + 4. "nsq", j;
}
for(int j = 1; j <= N - 1; ++j)
{
ampo += + 8. , "n", j, "n", j + 1;
ampo += - 10, "gm", j, "gp", j + 1;
ampo += - 10, "gp", j, "gm", j + 1;
}
ampo += + 8. , "n", 1, "n", N;
ampo += - 10, "gm", 1, "gm", N;
ampo += - 10, "gp", 1, "gp", N;
auto H = toMPO(ampo);
where "gp" and "gm" are raising and lowering operators. You believe this is the issue?