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

Equal(lhs, rhs)

EQ(lhs, rhs)

Distinto 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)

Mayor que

GreaterThan(lhs, rhs)

GT(lhs, rhs)

Mayor o igual que

GreaterThanOrEqual(lhs, rhs)

GEQ(lhs, rhs)

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.