-
Notifications
You must be signed in to change notification settings - Fork 64
Open
Description
dwave-system/dwave/embedding/transforms.py
Lines 274 to 278 in b233941
| target_bqm.add_quadratic_from((p, q, -strength) for p, q in self.chain_edges(v)) | |
| offset += strength * len(self._chain_edges[v]) | |
| else: # if smear_vartype is dimod.BINARY | |
| target_bqm.add_variables_from((p, 2 * strength) for p in itertools.chain(*self.chain_edges(v))) | |
| target_bqm.add_quadratic_from((p, q, -4 * strength) for p, q in self.chain_edges(v)) |
embed_bqm assumes a positive sign for chain_strength:
import networkx as nx
from dwave.embedding import embed_bqm
import dimod
g = nx.Graph()
g.add_edge(100, 101)
bqm = dimod.BQM.from_ising({1: 0}, {})
emb = {1: [100, 101]}
for chain_strength in [-2, 2]:
print(
embed_bqm(bqm, embedding=emb, target_adjacency=g, chain_strength=chain_strength).quadratic
)Output:
{(101, 100): 2.0}
{(101, 100): -2.0}
The parameter is described as "coupling strength". I would expect that it either
- Applies the sign passed (your sampler could be a maximizer)
- Assumes minimization: It accepts any number and enforces the sign by taking
absof the input.
The current scheme where the sign is flipped is unexpected
Metadata
Metadata
Assignees
Labels
No labels