Términos, Mapas y Comparaciones
Términos
Las Variables se pueden combinar algebraicamente para formar expresiones conocidas como Términos. Por ejemplo:
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)
Salida:
t1: (2) * x + (3)
t2: (3) * (x^2) + (2) * x + (4)
t3: (2) * x + b + (-1)
t4: (-1.0) + (-3.0) * (x^2)
Los términos se pueden evaluar proporcionando valores para las variables implicadas:
t3.evaluate({
x: 1.5,
b: 0
})
Salida:
2.0
Advertencia
Para evaluar un término, a todas las variables participantes se les deben asignar valores válidos dentro de sus dominios y límites respectivos.
Mapas Matemáticos
Utilice los helpers MathematicalMap para aplicar funciones comunes a un parámetro o término manteniendo las expresiones simbólicas. Sin y Cos envuelven un Parameter, Term, o cualquier otra variable base y difieren la evaluación hasta que se proporcionan valores.
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}))
Estos mapas se componen de forma natural con otros términos, por lo que se pueden incluir en restricciones u objetivos y se rigen por las mismas reglas de evaluación y codificación que otras expresiones simbólicas.
Términos de Comparación
Cada ComparisonTerm define una restricción mediante comparaciones matemáticas. Use los siguientes operadores para construirlos:
Operación de Comparación |
Método QiliSDK |
Alias |
|---|---|---|
Igualdad |
||
Distinto de |
||
Menor que |
||
Menor o igual que |
||
Mayor que |
||
Mayor o igual que |
Nota: lhs y rhs hacen referencia a las expresiones del lado izquierdo y del lado derecho, respectivamente.
Ejemplo:
from qilisdk.core.variables import BinaryVariable, LT
x = BinaryVariable("x")
LT(2 * x - 1, 1)
Salida:
(2) * x < (2.0)
Cuando se crea un término de comparación, las constantes se mueven automáticamente al lado derecho y los términos con variables al lado izquierdo.