eqc-models 0.9.8__tar.gz → 0.9.9__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {eqc_models-0.9.8/eqc_models.egg-info → eqc_models-0.9.9}/PKG-INFO +2 -2
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/assignment/setpartition.py +8 -29
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/base/polyeval.c +123 -123
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/base/polynomial.py +84 -1
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/sequence/tsp.py +38 -34
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/solvers/qciclient.py +46 -11
- {eqc_models-0.9.8 → eqc_models-0.9.9/eqc_models.egg-info}/PKG-INFO +2 -2
- eqc_models-0.9.9/test/testpolynomialmodel.py +87 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/test/testqciclientsolver.py +17 -2
- {eqc_models-0.9.8 → eqc_models-0.9.9}/test/testsetpartitionmodel.py +20 -6
- eqc_models-0.9.8/test/testpolynomialmodel.py +0 -32
- {eqc_models-0.9.8 → eqc_models-0.9.9}/.gitlab-ci.yml +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/LICENSE.txt +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/MANIFEST.in +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/README.md +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/compile_extensions.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/docs/Makefile +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/docs/build/html/_static/basic.css +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/docs/build/html/_static/css/badge_only.css +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/docs/build/html/_static/css/theme.css +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/docs/build/html/_static/custom.css +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/docs/build/html/_static/file.png +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/docs/build/html/_static/minus.png +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/docs/build/html/_static/plus.png +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/docs/build/html/_static/pygments.css +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/docs/build/html/_static/white_logo.png +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/docs/make.bat +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/docs/source/_static/custom.css +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/docs/source/_static/white_logo.png +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/docs/source/conf.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/docs/source/dependencies.rst +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/docs/source/eqc_models.rst +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/docs/source/index.rst +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/docs/source/modules.rst +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/docs/source/usage.rst +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/__init__.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/algorithms/__init__.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/algorithms/base.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/algorithms/penaltymultiplier.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/allocation/__init__.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/allocation/allocation.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/allocation/portbase.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/allocation/portmomentum.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/assignment/__init__.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/assignment/qap.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/base/__init__.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/base/base.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/base/constraints.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/base/operators.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/base/polyeval.pyx +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/base/quadratic.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/decoding.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/graph/__init__.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/graph/base.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/graph/hypergraph.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/graph/maxcut.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/graph/maxkcut.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/ml/__init__.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/ml/classifierbase.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/ml/classifierqboost.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/ml/classifierqsvm.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/ml/clustering.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/ml/clusteringbase.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/ml/decomposition.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/ml/forecast.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/ml/forecastbase.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/ml/regressor.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/ml/regressorbase.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/ml/reservoir.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/sequence/__init__.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/solvers/__init__.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/utilities/__init__.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/utilities/fileio.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/utilities/polynomial.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models/utilities/qplib.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models.egg-info/SOURCES.txt +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models.egg-info/dependency_links.txt +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models.egg-info/requires.txt +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/eqc_models.egg-info/top_level.txt +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/pyproject.toml +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/scripts/binary_job_example.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/scripts/c6h6_graph_clustering.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/scripts/clustering.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/scripts/continuous_job_example.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/scripts/duality_example.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/scripts/graph_clustering.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/scripts/hamiltonian_to_polynomial.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/scripts/hypergraph.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/scripts/integer_job_example.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/scripts/karate_graph_clustering.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/scripts/lin_reg_dirac3.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/scripts/mackey_glass_cell_production_series.csv +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/scripts/pca_iris_dirac3.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/scripts/port_opt_dirac3.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/scripts/qboost_iris_dirac3.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/scripts/qplib_benchmark_config.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/scripts/qplib_reader.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/scripts/qplib_runner.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/scripts/qsvm_iris_dirac3.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/scripts/reservoir_forecast.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/scripts/rundoctests.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/scripts/utils.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/setup.cfg +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/test/doctest_base.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/test/testallocationmodel.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/test/testconstraint.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/test/testeqcdirectsolver.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/test/testhypergraphmodel.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/test/testmaxcutmodel.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/test/testqapmodel.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/test/testquadraticmodel.py +0 -0
- {eqc_models-0.9.8 → eqc_models-0.9.9}/test/testtsp.py +0 -0
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
from typing import List, Tuple, Dict, Union
|
|
2
2
|
import numpy as np
|
|
3
3
|
from eqc_models.base import ConstraintsMixIn, PolynomialModel
|
|
4
|
+
from eqc_models.base.polynomial import ConstrainedPolynomialModel
|
|
4
5
|
|
|
5
|
-
class SetPartitionModel(
|
|
6
|
+
class SetPartitionModel(ConstrainedPolynomialModel):
|
|
6
7
|
"""
|
|
7
8
|
This class represents a set partitioning model for optimization problems that require selecting subsets
|
|
8
9
|
to partition a universal set while minimizing an objective function defined by weights. Given a collection
|
|
@@ -83,24 +84,15 @@ class SetPartitionModel(ConstraintsMixIn, PolynomialModel):
|
|
|
83
84
|
A.append(row)
|
|
84
85
|
A = np.array(A)
|
|
85
86
|
b = np.ones((A.shape[0],))
|
|
86
|
-
|
|
87
|
-
# Define penalty terms
|
|
88
|
-
J = A.T @ A
|
|
89
|
-
h = -2 * b.T @ A
|
|
90
|
-
n = h.shape[0]
|
|
91
|
-
h = h.reshape((n, 1))
|
|
92
|
-
offset = b.T @ b
|
|
93
|
-
|
|
94
|
-
# Assign the constraints to the mixin's properties
|
|
95
|
-
self.constraints = (A, b)
|
|
96
|
-
|
|
97
|
-
# Initialize PolynomialModel with J and h, properly formatted as indices and coefficients
|
|
98
|
-
indices, coefficients = self._construct_polynomial_terms(h, J)
|
|
99
|
-
super().__init__(coefficients, indices)
|
|
87
|
+
n = A.shape[1]
|
|
100
88
|
|
|
101
89
|
# Define the linear objective function based on subset weights
|
|
102
90
|
self.linear_objective = np.array(weights).reshape((n, 1))
|
|
103
|
-
self.quad_objective = np.zeros_like(J)
|
|
91
|
+
self.quad_objective = np.zeros((n, n)) #np.zeros_like(J)
|
|
92
|
+
|
|
93
|
+
# Initialize PolynomialModel with J and h, properly formatted as indices and coefficients
|
|
94
|
+
indices, coefficients = self._construct_polynomial_terms(self.linear_objective, self.quad_objective)
|
|
95
|
+
super().__init__(coefficients, indices, A, b)
|
|
104
96
|
|
|
105
97
|
def _construct_polynomial_terms(self, h: np.ndarray, J: np.ndarray) -> Tuple[List[List[int]], List[np.ndarray]]:
|
|
106
98
|
"""
|
|
@@ -140,19 +132,6 @@ class SetPartitionModel(ConstraintsMixIn, PolynomialModel):
|
|
|
140
132
|
|
|
141
133
|
return indices, coefficients
|
|
142
134
|
|
|
143
|
-
@property
|
|
144
|
-
def H(self) -> Tuple[np.ndarray, np.ndarray]:
|
|
145
|
-
"""
|
|
146
|
-
Hamiltonian representation as a polynomial, returning the coefficients and indices.
|
|
147
|
-
|
|
148
|
-
Returns
|
|
149
|
-
-------
|
|
150
|
-
Tuple[np.ndarray, np.ndarray]
|
|
151
|
-
Tuple where the first element is an array of coefficients, and the second element
|
|
152
|
-
is an array of indices, each representing polynomial terms for the Hamiltonian.
|
|
153
|
-
"""
|
|
154
|
-
return self.coefficients, self.indices
|
|
155
|
-
|
|
156
135
|
def evaluateObjective(self, solution: np.ndarray) -> float:
|
|
157
136
|
"""
|
|
158
137
|
Evaluate the objective function by calculating the weighted sum of selected subsets.
|