Source code for qlauncher.problems.optimization.jssp_utils.pyqubo_scheduler
1from pyqubo import Array, Binary, Model
2
3from .scheduler import JobShopScheduler, Task
4
5
[docs]
6class PyQuboScheduler(JobShopScheduler):
7 array: Array
8 qubo: Binary
9
10 def __init__(self, job_dict: dict, max_time: int | None = None):
11 super().__init__(job_dict, max_time)
12 self.array = Array.create('x', self.n, vartype='BINARY')
13 self.qubo: Binary = 0
14
15 def _get_variable(self, task: Task, time: int) -> Binary:
16 return self.array[self.assignment_index[(task, time)]]
17
18 def _add_expression(self, var1: Binary, var2: Binary, lagrange_factor: float) -> None:
19 self.qubo += lagrange_factor * var1 * var2
20
21 def _add_expression_one_start(self, variables: list[Binary], lagrange_factor: float) -> None:
22 self.qubo += lagrange_factor * ((1 - sum(variables)) * (1 - sum(variables)))
23
24 def _add_variable(self, var: Binary, bias: float) -> None:
25 self.qubo += var * bias
26
27 def _get_final(self) -> Model:
28 return self.qubo.compile()