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 |
||
Diferent de |
||
Menor que |
||
Menor o igual que |
||
Major que |
||
Major o igual que |
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.