kaiwu.core package#
Module contents#
模块: core
功能: 基础类的定义
- class kaiwu.core.OptimizerBase#
Bases:
object
Ising求解器基类
- set_matrix(ising_matrix)#
设置矩阵并更新相关内容
- on_matrix_change()#
更新矩阵相关信息, 继承OptimizerBase时可以实现。当处理的ising矩阵发生变化时,这个函数的实现会被调用,从而有机会做相应动作
- solve(ising_matrix=None)#
求解
- exception kaiwu.core.KaiwuError#
Bases:
Exception
Base class for exceptions in this module.
- args#
- with_traceback()#
Exception.with_traceback(tb) – set self.__traceback__ to tb and return self.
- class kaiwu.core.SolverBase(optimizer)#
Bases:
object
Solver基类
- Args:
optimizer (OptimizerBase): Ising求解器
- solve_qubo(*args, **kwargs)#
- kaiwu.core.ising_matrix_to_qubo_matrix(ising_mat, remove_linear_bit=True)#
Ising矩阵转QUBO矩阵
- Args:
ising_mat (np.ndarray): Ising矩阵
remove_linear_bit (bool): QUBO转Ising时会增加一个辅助变量表示线性项。是否移除最后一个自旋变量。默认为True。
- Returns:
tuple: QUBO矩阵和bias
qubo_mat (np.ndarray): QUBO矩阵
bias (float): QUBO与Ising相差的常数项
- Examples:
>>> import numpy as np >>> import kaiwu as kw >>> matrix = -np.array([[ 0. , 1. , 0. , 1. , 1. ], ... [ 1. , 0. , 0. , 1., 1. ], ... [ 0. , 0. , 0. , 1., 1. ], ... [ 1. , 1., 1. , 0. , 1. ], ... [ 1. , 1., 1. , 1. , 0. ]]) >>> _qubo_mat, _ = kw.core.ising_matrix_to_qubo_matrix(matrix) >>> _qubo_mat array([[-4., 8., 0., 8.], [-0., -4., 0., 8.], [-0., -0., -0., 8.], [-0., -0., -0., -8.]])
- kaiwu.core.qubo_matrix_to_ising_matrix(qubo_mat)#
QUBO矩阵转Ising矩阵
- Args:
qubo_mat (np.ndarray): QUBO矩阵
- Returns:
- tuple: Ising矩阵和bias
ising_mat (np.ndarray): Ising矩阵
bias (float): QUBO与Ising相差的常数项
- Examples:
>>> import numpy as np >>> import kaiwu as kw >>> matrix = -np.array([[-4., 8., 0., 8.], ... [-0., -4., 0., 8.], ... [-0., -0., -0., 8.], ... [-0., -0., -0., -8.]]) >>> _ising_mat, _ = kw.core.qubo_matrix_to_ising_matrix(matrix) >>> _ising_mat array([[-0., 1., -0., 1., 1.], [ 1., -0., -0., 1., 1.], [-0., -0., -0., 1., 1.], [ 1., 1., 1., -0., 1.], [ 1., 1., 1., 1., -0.]])
- class kaiwu.core.ConstraintRelation(value)#
Bases:
Enum
约束所有的等式或不等式关系
- EQUAL = 0#
- LESS = 1#
- GREATER = 2#
- LESS_EQUAL = 3#
- GREATER_EQUAL = 4#
- class kaiwu.core.Constraint(constraint_expr, penalty, expected_value)#
Bases:
object
约束信息
- verify(solution_dict)#
验证约束满足情况
- set_penalty(penalty)#
设置惩罚系数
- penalize_more()#
增加惩罚系数
- penalize_less()#
降低惩罚系数
- class kaiwu.core.RelationConstraint(qubo_left, relation, penalty=None, expected_value=0, slack_expr=None)#
Bases:
Constraint
关系约束信息
- penalize_less()#
降低惩罚系数
- penalize_more()#
增加惩罚系数
- set_penalty(penalty)#
设置惩罚系数
- verify(solution_dict)#
验证约束满足情况
- kaiwu.core.get_sol_dict(solution, vars_dict)#
根据解向量和变量字典生成结果字典.
- Args:
solution (np.ndarray): 解向量(spin)。
vars_dict (dict): 变量字典,用cim_ising_model.get_variables()生成。
- Returns:
dict: 结果字典。键为变量名,值为对应的spin值。
- Examples:
>>> import numpy as np >>> import kaiwu as kw >>> a = kw.qubo.Binary("a") >>> b = kw.qubo.Binary("b") >>> c = kw.qubo.Binary("c") >>> d = a + 2 * b + 4 * c >>> d = kw.qubo.QuboModel(d) >>> d_ising = kw.conversion.qubo_model_to_ising_model(d) >>> vars = d_ising.get_variables() >>> s = np.array([1, -1, 1]) >>> kw.core.get_sol_dict(s, vars) {'a': np.float64(1.0), 'b': np.float64(0.0), 'c': np.float64(1.0)}
- kaiwu.core.get_array_val(array, sol_dict)#
根据结果字典将spin值带入qubo数组变量.
- Args:
array (QUBOArray): QUBO数组
sol_dict (dict): 由get_sol_dict生成的结果字典。
- Returns:
np.ndarray: 带入qubo数组后所得的值数组
- Examples:
>>> import kaiwu as kw >>> import numpy as np >>> x = kw.qubo.ndarray((2, 2), "x", kw.qubo.Binary) >>> y = x.sum() >>> y = kw.qubo.QuboModel(y) >>> y_ising = kw.conversion.qubo_model_to_ising_model(y) >>> ising_vars = y_ising.get_variables() >>> s = np.array([1, -1, 1, -1]) >>> sol_dict = kw.core.get_sol_dict(s, ising_vars) >>> kw.core.get_array_val(x, sol_dict) array([[1., 0.], [1., 0.]])
- kaiwu.core.get_val(expr, sol_dict)#
根据结果字典将spin值带入qubo变量.
- Args:
expr (QUBO表达式): QUBO表达式
sol_dict (dict): 由get_sol_dict生成的结果字典。
- Returns:
float: 带入qubo后所得的值
- Examples:
>>> import kaiwu as kw >>> import numpy as np >>> a = kw.qubo.Binary("a") >>> b = kw.qubo.Binary("b") >>> c = kw.qubo.Binary("c") >>> d = a + 2 * b + 4 * c >>> qubo_model = kw.qubo.QuboModel(d) >>> d_ising = kw.conversion.qubo_model_to_ising_model(qubo_model) >>> ising_vars = d_ising.get_variables() >>> s = np.array([1, -1, 1]) >>> sol_dict = kw.core.get_sol_dict(s, ising_vars) >>> kw.core.get_val(d, sol_dict) np.float64(5.0)
- kaiwu.core.update_constraint(qubo_origin, qubo_result)#
将qexp的约束以及降阶约束信息更新到q
- class kaiwu.core.Expression(coefficient: dict | None = None, offset: float = 0)#
Bases:
dict
QUBO/Ising 通用表达式基类(提供默认二次表达式实现)
- clear() None. Remove all items from D. #
- fromkeys(value=None, /)#
Create a new dictionary with keys from iterable and values set to value.
- kaiwu.core.expr_add(expr_left, expr_right, expr_result)#
通用二次表达式相加
- kaiwu.core.expr_mul(expr_left, expr_right, expr_result)#
通用二次表达式相乘
- kaiwu.core.expr_neg(expr_origin, expr_result)#
通用二次表达式取负
- kaiwu.core.expr_pow(expr_left, expr_right, expr_result)#
通用二次表达式乘方,要求expr_right只能为1或者2