Termes, mapes i comparacions

Termes

Les Variables es poden combinar algebraicament per formar expressions conegudes com a Termes. Per exemple:

from qilisdk.core.variables import BinaryVariable, Bitwise, Domain, SpinVariable, Variable
x = Variable("x", domain=Domain.REAL, bounds=(1, 2), encoding=Bitwise, precision=1e-1)
s = SpinVariable("s")
b = BinaryVariable("b")

t1 = 2 * x + 3
print("t1:", t1)
t2 = 3 * x**2 + 2 * x + 4
print("t2:", t2)
t3 = 2 * x + b - 1
print("t3:", t3)
t4 = t1 - t2
print("t4:", t4)

Sortida:

t1: (2) * x + (3)
t2: (3) * (x^2) + (2) * x + (4)
t3: (2) * x + b + (-1)
t4: (-1.0) + (-3.0) * (x^2)

Els termes es poden avaluar proporcionant valors per a les variables implicades:

t3.evaluate({
    x: 1.5,
    b: 0
})

Sortida:

2.0

Avís

Per avaluar un terme, a totes les variables participants se’ls han d’assignar valors vàlids dins dels seus dominis i límits respectius.

Mapes matemàtics

Utilitzeu els auxiliars MathematicalMap per aplicar funcions habituals a un paràmetre o terme mantenint les expressions simbòliques. Sin i Cos embolicen un Parameter, un Term, o qualsevol altra variable base i difereixen l’avaluació fins que es proporcionin valors.

from qilisdk.core.variables import Parameter, Sin, Cos

theta = Parameter("theta", 0.5)
expr = Sin(theta) + Cos(2 * theta)

print(expr)                # sin[theta] + cos[(2) * theta]
print(expr.evaluate({}))   # uses theta.value automatically

# You can also supply a different value at evaluation time:
print(expr.evaluate({theta: 1.0}))

Aquests mapes es composen de forma natural amb altres termes, de manera que podeu incloure’ls en restriccions o objectius i confiar en les mateixes regles d’avaluació i codificació que les altres expressions simbòliques.

Termes de comparació

Cada ComparisonTerm defineix una restricció mitjançant comparacions matemàtiques. Useu els operadors següents per construir-los:

Operació de comparació

Mètode QiliSDK

Àlies

Igualtat

Equal(lhs, rhs)

EQ(lhs, rhs)

Diferent de

NotEqual(lhs, rhs)

NEQ(lhs, rhs)

Menor que

LessThan(lhs, rhs)

LT(lhs, rhs)

Menor o igual que

LessThanOrEqual(lhs, rhs)

LEQ(lhs, rhs)

Major que

GreaterThan(lhs, rhs)

GT(lhs, rhs)

Major o igual que

GreaterThanOrEqual(lhs, rhs)

GEQ(lhs, rhs)

Nota: lhs i rhs fan referència a les expressions del costat esquerre i del costat dret, respectivament.

Exemple:

from qilisdk.core.variables import BinaryVariable, LT
x = BinaryVariable("x")
LT(2 * x - 1, 1)

Sortida:

(2) * x < (2.0)

Quan es crea un terme de comparació, les constants es mouen automàticament al costat dret i els termes amb variables al costat esquerre.