本文整理汇总了Python中ncpol2sdpa.SdpRelaxation类的典型用法代码示例。如果您正苦于以下问题:Python SdpRelaxation类的具体用法?Python SdpRelaxation怎么用?Python SdpRelaxation使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了SdpRelaxation类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: test_ground_state
def test_ground_state(self):
length, n, h, U, t = 2, 0.8, 3.8, -6, 1
fu = generate_operators('fu', length)
fd = generate_operators('fd', length)
_b = flatten([fu, fd])
monomials = [[ci for ci in _b]]
monomials[-1].extend([Dagger(ci) for ci in _b])
monomials.append([cj*ci for ci in _b for cj in _b])
monomials.append([Dagger(cj)*ci for ci in _b for cj in _b])
monomials[-1].extend([cj*Dagger(ci)
for ci in _b for cj in _b])
monomials.append([Dagger(cj)*Dagger(ci)
for ci in _b for cj in _b])
hamiltonian = 0
for j in range(length):
hamiltonian += U * (Dagger(fu[j])*Dagger(fd[j]) * fd[j]*fu[j])
hamiltonian += -h/2*(Dagger(fu[j])*fu[j] - Dagger(fd[j])*fd[j])
for k in get_neighbors(j, len(fu), width=1):
hamiltonian += -t*Dagger(fu[j])*fu[k]-t*Dagger(fu[k])*fu[j]
hamiltonian += -t*Dagger(fd[j])*fd[k]-t*Dagger(fd[k])*fd[j]
momentequalities = [n-sum(Dagger(br)*br for br in _b)]
sdpRelaxation = SdpRelaxation(_b, verbose=0)
sdpRelaxation.get_relaxation(-1,
objective=hamiltonian,
momentequalities=momentequalities,
substitutions=fermionic_constraints(_b),
extramonomials=monomials)
sdpRelaxation.solve()
s = 0.5*(sum((Dagger(u)*u) for u in fu) -
sum((Dagger(d)*d) for d in fd))
magnetization = sdpRelaxation[s]
self.assertTrue(abs(magnetization-0.021325317328560453) < 10e-5)
示例2: __main__
def __main__():
# chsh quantum bound : 4
# mermin quantum bound : 4
# svetlichny quantum bound 4sqrt(2) ~ 5.65
P = Probability([2, 2], [2, 2], [2, 2])
Chsh = chsh(P)
Mermin = mermin(P)
Svetlichny = svetlichny(P)
dx = 0
div = 1.0
step = 0.4
lim = 5.6
x = []
y = []
while dx <= lim :
print (dx)
ineq = []
ineq.append(Svetlichny - dx)
ineq.append(-1*Svetlichny + dx)
sdpRelaxation = SdpRelaxation(P.get_all_operators(), verbose=0)
sdpRelaxation.get_relaxation(2, substitutions = P.substitutions,inequalities = ineq)
sdpRelaxation.set_objective(-Chsh)
solve_sdp(sdpRelaxation, solver="cvxopt")
x.append(dx)
y.append(abs(sdpRelaxation.primal)/div)
dx = dx + step
plt.plot(x,y,'k')
plt.show()
示例3: test_maximum_violation
def test_maximum_violation(self):
def expectation_values(measurement, outcomes):
exp_values = []
for k in range(len(measurement)):
exp_value = 0
for j in range(len(measurement[k])):
exp_value += outcomes[k][j] * measurement[k][j]
exp_values.append(exp_value)
return exp_values
E = generate_operators('E', 8, hermitian=True)
M, outcomes = [], []
for i in range(4):
M.append([E[2 * i], E[2 * i + 1]])
outcomes.append([1, -1])
A = [M[0], M[1]]
B = [M[2], M[3]]
substitutions = projective_measurement_constraints(A, B)
C = expectation_values(M, outcomes)
chsh = -(C[0] * C[2] + C[0] * C[3] + C[1] * C[2] - C[1] * C[3])
sdpRelaxation = SdpRelaxation(E, verbose=0)
sdpRelaxation.get_relaxation(1, objective=chsh,
substitutions=substitutions)
sdpRelaxation.solve()
self.assertTrue(abs(sdpRelaxation.primal + 2*np.sqrt(2)) < 10e-5)
示例4: ExampleNoncommutative
class ExampleNoncommutative(unittest.TestCase):
def setUp(self):
X = generate_operators('x', 2, hermitian=True)
self.sdpRelaxation = SdpRelaxation(X)
self.sdpRelaxation.get_relaxation(2, objective=X[0]*X[1] + X[1]*X[0],
inequalities=[-X[1]**2 + X[1] + 0.5],
substitutions={X[0]**2: X[0]})
def tearDown(self):
clear_cache()
def test_solving_with_sdpa(self):
self.sdpRelaxation.solve(solver="sdpa")
self.assertTrue(abs(self.sdpRelaxation.primal + 0.75) < 10e-5)
def test_solving_with_mosek(self):
self.sdpRelaxation.solve(solver="mosek")
self.assertTrue(abs(self.sdpRelaxation.primal + 0.75) < 10e-5)
def test_solving_with_cvxopt(self):
self.sdpRelaxation.solve(solver="cvxopt")
self.assertTrue(abs(self.sdpRelaxation.primal + 0.75) < 10e-5)
def test_solving_with_cvxpy(self):
self.sdpRelaxation.solve(solver="cvxpy")
self.assertTrue(abs(self.sdpRelaxation.primal + 0.75) < 10e-5)
示例5: test_solving
def test_solving(self):
x = generate_variables(2, commutative=True)
g0 = 4 * x[0] ** 2 + x[0] * x[1] - 4 * x[1] ** 2 - 2.1 * x[0] ** 4 + 4 * x[1] ** 4 + x[0] ** 6 / 3
sdpRelaxation = SdpRelaxation(x)
sdpRelaxation.get_relaxation(3, objective=g0)
sdpRelaxation.solve()
self.assertTrue(abs(sdpRelaxation.primal + 1.0316282672706911) < 10e-5)
示例6: test_solving_with_sdpa
def test_solving_with_sdpa(self):
x = generate_variables('x', 2, commutative=True)
sdpRelaxation = SdpRelaxation(x)
sdpRelaxation.get_relaxation(2, objective=x[0]*x[1] + x[1]*x[0],
inequalities=[-x[1]**2 + x[1] + 0.5],
substitutions={x[0]**2: x[0]})
sdpRelaxation.solve(solver="sdpa")
self.assertTrue(abs(sdpRelaxation.primal + 0.7320505301965234) < 10e-5)
示例7: test_ground_state_energy
def test_ground_state_energy(self):
N = 3
a = generate_variables(N, name="a")
substitutions = bosonic_constraints(a)
hamiltonian = sum(Dagger(a[i]) * a[i] for i in range(N))
sdpRelaxation = SdpRelaxation(a, verbose=0)
sdpRelaxation.get_relaxation(1, objective=hamiltonian, substitutions=substitutions)
sdpRelaxation.solve()
self.assertTrue(abs(sdpRelaxation.primal) < 10e-5)
示例8: test_chordal_extension
def test_chordal_extension(self):
X = generate_variables(3, commutative=True)
inequalities = [1 - X[0] ** 2 - X[1] ** 2, 1 - X[1] ** 2 - X[2] ** 2]
sdpRelaxation = SdpRelaxation(X)
sdpRelaxation.get_relaxation(
2, objective=X[1] - 2 * X[0] * X[1] + X[1] * X[2], inequalities=inequalities, chordal_extension=True
)
sdpRelaxation.solve()
self.assertTrue(abs(sdpRelaxation.primal + 2.2443690631722637) < 10e-5)
示例9: test_max_cut
def test_max_cut(self):
W = np.diag(np.ones(8), 1) + np.diag(np.ones(7), 2) + np.diag([1, 1], 7) + np.diag([1], 8)
W = W + W.T
Q = (np.diag(np.dot(np.ones(len(W)).T, W)) - W) / 4
x = generate_variables(len(W), commutative=True)
equalities = [xi ** 2 - 1 for xi in x]
objective = -np.dot(x, np.dot(Q, np.transpose(x)))
sdpRelaxation = SdpRelaxation(x)
sdpRelaxation.get_relaxation(1, objective=objective, equalities=equalities, removeequalities=True)
sdpRelaxation.solve()
self.assertTrue(abs(sdpRelaxation.primal + 4.5) < 10e-5)
示例10: setUp
def setUp(self):
X = generate_variables(2, hermitian=True)
self.sdpRelaxation = SdpRelaxation(X)
self.sdpRelaxation.get_relaxation(
2,
objective=X[0] * X[1] + X[1] * X[0],
inequalities=[-X[1] ** 2 + X[1] + 0.5],
substitutions={X[0] ** 2: X[0]},
)
示例11: test_guessing_probability
def test_guessing_probability(self):
p = [0.5, 0.5, 0.5, 0.5, 0.4267766952966368, 0.4267766952966368, 0.4267766952966368, 0.07322330470336313]
P = Probability([2, 2], [2, 2])
behaviour_constraint = [
P([0], [0], "A") - p[0],
P([0], [1], "A") - p[1],
P([0], [0], "B") - p[2],
P([0], [1], "B") - p[3],
P([0, 0], [0, 0]) - p[4],
P([0, 0], [0, 1]) - p[5],
P([0, 0], [1, 0]) - p[6],
P([0, 0], [1, 1]) - p[7],
]
behaviour_constraint.append("-0[0,0]+1.0")
sdpRelaxation = SdpRelaxation(P.get_all_operators(), normalized=False, verbose=0)
sdpRelaxation.get_relaxation(
1, objective=-P([0], [0], "A"), momentequalities=behaviour_constraint, substitutions=P.substitutions
)
sdpRelaxation.solve()
self.assertTrue(abs(sdpRelaxation.primal + 0.5) < 10e-5)
示例12: generate_variables
write_to_sdpa, bosonic_constraints
# Level of relaxation
level = 1
# Number of variables
N = 3
# Parameters for the Hamiltonian
hbar, omega = 1, 1
# Define ladder operators
a = generate_variables(N, name='a')
substitutions = bosonic_constraints(a)
hamiltonian = 0
for i in range(N):
hamiltonian += hbar * omega * (Dagger(a[i]) * a[i])
time0 = time.time()
# Obtain SDP relaxation
print("Obtaining SDP relaxation...")
sdpRelaxation = SdpRelaxation(a, verbose=1)
sdpRelaxation.get_relaxation(level, objective=hamiltonian,
substitutions=substitutions)
# Export relaxation to SDPA format
write_to_sdpa(sdpRelaxation, 'harmonic_oscillator.dat-s')
print('%0.2f s' % ((time.time() - time0)))
示例13: generate_variables
"""
import time
from sympy.physics.quantum.dagger import Dagger
from ncpol2sdpa import generate_variables, SdpRelaxation,\
bosonic_constraints
# Level of relaxation
level = 1
# Number of variables
N = 3
# Parameters for the Hamiltonian
hbar, omega = 1, 1
# Define ladder operators
a = generate_variables(N, name='a')
substitutions = bosonic_constraints(a)
hamiltonian = sum(hbar * omega * (Dagger(a[i]) * a[i]) for i in range(N))
time0 = time.time()
# Obtain SDP relaxation
sdpRelaxation = SdpRelaxation(a, verbose=1)
sdpRelaxation.get_relaxation(level, objective=hamiltonian,
substitutions=substitutions)
# Export relaxation to SDPA format
sdpRelaxation.write_to_file("harmonic_oscillator.dat-s")
print('%0.2f s' % ((time.time() - time0)))
示例14: generate_measurements
This example calculates the maximum quantum violation of the CHSH inequality in
the probability picture with a mixed-level relaxation of 1+AB.
Created on Mon Dec 1 14:19:08 2014
@author: Peter Wittek
"""
from ncpol2sdpa import generate_measurements, \
projective_measurement_constraints, flatten, \
SdpRelaxation, define_objective_with_I, solve_sdp
level = 1
A_configuration = [2, 2]
B_configuration = [2, 2]
I = [[ 0, -1, 0 ],
[-1, 1, 1 ],
[ 0, 1, -1 ]]
A = generate_measurements(A_configuration, 'A')
B = generate_measurements(B_configuration, 'B')
monomial_substitutions = projective_measurement_constraints(
A, B)
objective = define_objective_with_I(I, A, B)
AB = [Ai*Bj for Ai in flatten(A) for Bj in flatten(B)]
sdpRelaxation = SdpRelaxation(flatten([A, B]))
sdpRelaxation.get_relaxation(level, objective=objective,
substitutions=monomial_substitutions,
extramonomials=AB)
print(solve_sdp(sdpRelaxation))
示例15: generate_variables
@author: Peter Wittek
"""
from ncpol2sdpa import generate_variables, SdpRelaxation, convert_to_picos
# Number of Hermitian variables
n_vars = 2
# Level of relaxation
level = 2
# Get Hermitian variables
X = generate_variables(n_vars, hermitian=True)
# Define the objective function
obj = X[0] * X[1] + X[1] * X[0]
# Inequality constraints
inequalities = [-X[1] ** 2 + X[1] + 0.5]
# Equality constraints
equalities = []
equalities.append(X[0] ** 2 - X[0])
# Obtain SDP relaxation
sdpRelaxation = SdpRelaxation(X)
sdpRelaxation.get_relaxation(level, objective=obj,
inequalities=inequalities,
equalities=equalities)
P = convert_to_picos(sdpRelaxation)
P.solve()