Skip to content

Consider adding a method that measures the "frustration" of a BQM #1369

@arcondello

Description

@arcondello

"Frustration" is in some sense a measure of problem hardness. That is, what is the energy contribution of the linear and quadratic biases that are violated by a given solution.

Something like

import dimod

def frustration(bqm, sample):
    frustration = 0

    for v, bias in bqm.linear.items():
        frustration += max(0, sample[v] * bias)

    for (u, v), bias in bqm.quadratic.items():
        frustration += max(0, sample[u] * sample[v] * bias)
    
    return frustration

if __name__ == "__main__":
    bqm = dimod.generators.gnp_random_bqm(10, .5, "SPIN")
    sampleset = dimod.ExactSolver().sample(bqm)
    sample = sampleset.first.sample
    print("energy:", sampleset.first.energy)
    print("frustration:", frustration(bqm, sample))

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions