kaiwu.core._ising 源代码

# -*- coding: utf-8 -*-
"""
模块: cim

功能: ising模型及其转化
"""

from kaiwu.core._expression import Expression


def _dict_variables(var_dict):
    var_list = [0] * len(var_dict)
    for var in var_dict:
        var_list[var_dict[var]] = var
    return str(tuple(var_list)).replace("'", "")[1:-1]


[文档] class IsingModel(dict): """ising模型""" def __init__(self, variables, ising_matrix, bias): super().__init__() self.variables = variables self.matrix = ising_matrix self.bias = bias def __repr__(self): return f"{self.__class__.__name__}({vars(self)!r})" def __str__(self): """返回ising模型的细节信息. Returns: 序列化后的模型(字符串形式) """ print_data = "" print_data += "Ising Details:\n" print_data += " Ising Matrix:\n" print_data += " " + str(self.matrix).replace("\n", "\n ") + "\n" print_data += " Ising Bias: " + str(self.bias) + "\n" print_data += ( " Ising Variables" + ": " + _dict_variables(self.variables) + "\n" ) return print_data
[文档] def get_variables(self): """获取模型中的变量""" return dict(zip((key for key in self.variables), self.variables.values()))
[文档] def get_matrix(self): """获取Ising矩阵""" return self.matrix
[文档] def get_bias(self): """获取QUBO转化时得到的常数偏置""" return self.bias
[文档] class IsingExpression(Expression): """Ising 表达式基类,直接继承 Expression,保留扩展点。""" def __init__(self, variables=None, quadratic=None, linear=None, bias=0): if quadratic is None: quadratic = {} if linear is None: linear = {} super().__init__({**quadratic, **linear}, bias) self.variables = variables self.quadratics = quadratic self.linear = linear self.bias = bias
[文档] class Spin(IsingExpression): """自旋变量, 可能的取值只有-1,1. Args: name (str): 变量的唯一标识. Returns: dict: 名称为name的自旋变量. Examples: >>> import kaiwu as kw >>> s = kw.core.Spin("s") >>> s 2*s-1 """ def __init__(self, name: str = ""): super().__init__(linear={tuple({name}): 2}, bias=-1) self.name = name
if __name__ == "__main__": import doctest doctest.testmod()