Models
Aquest exemple mínim presenta un model d’optimització binària, el converteix a una forma de penalització QUBO i exporta el Hamiltonian corresponent:
from qilisdk.core import BinaryVariable, LEQ, Model, ObjectiveSense
from qilisdk.core.model import QUBO
x0, x1 = BinaryVariable("x0"), BinaryVariable("x1")
model = Model("toy")
model.set_objective(-2 * x0 - 3 * x1 + 4 * x0 * x1,
label="energy",
sense=ObjectiveSense.MINIMIZE)
model.add_constraint("budget", LEQ(x0 + x1, 1), lagrange_multiplier=5)
qubo = model.to_qubo()
print(qubo.qubo_objective)
ham = qubo.to_hamiltonian()
print(ham)
Objectius i restriccions
Cada Model consta de:
Un únic
ObjectiveZero o més instàncies de
Constraint
Objectiu
El Objective defineix la funció que el model pretén minimitzar o maximitzar. Exemple:
from qilisdk.core.model import Model, ObjectiveSense
from qilisdk.core.variables import Variable, Domain, Bitwise
model = Model("example_model")
x = Variable("x", domain=Domain.REAL, bounds=(1, 2), encoding=Bitwise, precision=1e-1)
model.set_objective(2*x + 3, label="obj", sense=ObjectiveSense.MINIMIZE)
print(model)
Sortida:
Model name: example_model
objective (obj):
minimize :
(2) * x + (3)
subject to the encoding constraint/s:
x_upper_bound_constraint: x <= (2)
x_lower_bound_constraint: x >= (1)
With Lagrange Multiplier/s:
x_upper_bound_constraint : 100
x_lower_bound_constraint : 100
Les restriccions de codificació s’afegeixen automàticament per a les variables contínues acotades. Cada restricció té un multiplicador de Lagrange associat, que determina la penalització per violar-la.
Podeu actualitzar el multiplicador de la manera següent:
model.set_lagrange_multiplier("x_upper_bound_constraint", 1)
print(model)
Sortida:
Model name: example_model
objective (obj):
minimize :
(2) * x + (3)
subject to the encoding constraint/s:
x_upper_bound_constraint: x <= (2)
x_lower_bound_constraint: x >= (1)
With Lagrange Multiplier/s:
x_upper_bound_constraint : 1
x_lower_bound_constraint : 100
Restriccions
Es poden afegir Restriccions addicionals per limitar l’espai de solucions:
from qilisdk.core import LT
model.add_constraint("test_constraint", LT(x, 1.5), lagrange_multiplier=10)
print(model)
Sortida:
Model name: example_model
objective (obj):
minimize :
(2) * x + (3)
subject to the constraint/s:
test_constraint: x < (1.5)
subject to the encoding constraint/s:
x_upper_bound_constraint: x <= (2)
x_lower_bound_constraint: x >= (1)
With Lagrange Multiplier/s:
x_upper_bound_constraint : 1
x_lower_bound_constraint : 100
test_constraint : 10
Avaluar un model
Per avaluar un Model, proporcioneu valors per a totes les variables implicades:
model.evaluate({
x: 1.4
})
Sortida:
{'obj': 5.8, 'test_constraint': 0.0}
L’avaluació retorna un diccionari amb valors per a l’objectiu i les restriccions. Una restricció retorna 0.0 si es satisfà, o el seu multiplicador de Lagrange si es viola.
Per exemple:
model.evaluate({
x: 2
})
Sortida:
{'obj': 7.0, 'test_constraint': 10.0}