kaiwu.hobo package#
Module contents#
模块: hobo
功能: hobo建模工具
- class kaiwu.hobo.HoboModel(objective=None, hobo_default_penalty=1)[源代码]#
基类:
BinaryModel支持添加约束的HOBO模型类
- Args:
objective(Expression): 目标函数 hobo_default_penalty(float): HOBO约束的默认惩罚系数, 默认值为1
- verify_hobo_constraint(solution_dict)[源代码]#
验证 HOBO 降阶约束是否满足。
- Args:
solution_dict (dict): HOBO 降阶后的解字典。
- Returns:
- tuple: 约束满足情况信息
int: 未满足的 HOBO 约束数量
dict: 包含每个 HOBO 约束取值的字典
- reduce(predefined_pairs=None)[源代码]#
对Hobo Model高阶表达式进行降阶处理(降至二阶)
- Args:
predefined_pairs (list): 预定义要合并的变量对列表,格式为[(var1, var2), ...]
- Returns:
QuboModel: 降阶后的QuboModel。注意不要在该模型上修改约束,可能会导致错误
- add_constraint(constraint_in, name=None, constr_type: Literal['soft', 'hard'] = 'hard', penalty=1, slack_var_expr=None)#
添加约束项,支持单个或多个约束
- Args:
constraint_in: 约束表达式,支持两种输入类型:
单个约束: BinaryExpression 或 Constraint 对象 例如:
quicksum(x) - 1或Constraint(quicksum(x) - 1, "==", 1)多个约束: list/tuple/np.ndarray,自动遍历逐个添加 例如:
[constraint1, constraint2, constraint3]
- name (str or list, optional): 约束名称,默认自动命名。当为多个约束时,
若传入字符串则为公共前缀,若传入字符串列表则需与约束数量一致。
penalty (float, optional): 缺省惩罚系数
constr_type (str, optional): 约束类型,可以设置为"soft"或"hard",默认为"hard"
- slack_var_expr (BinaryExpression, optional): 松弛变量表达式,仅在不等式约束中使用,
默认为自动生成
- Example1 (单个 BinaryExpression):
>>> import kaiwu as kw >>> model = kw.core.QuboModel() >>> x = [kw.core.Binary(f"x{i}") for i in range(3)] >>> model.add_constraint(kw.core.quicksum(x) - 1)
- Example2 (带关系运算符的单个 Constraint 对象):
>>> from kaiwu.core._constraint import Constraint >>> model.add_constraint(Constraint(kw.core.quicksum(x) - 1, "==", 1))
- Example3 (多个约束):
>>> constraints = [x[i] - 1 for i in range(3)] >>> model.add_constraint(constraints, name="my_constraints")
- compile_constraints()#
按照不同的风格转换约束项为Expression
- get_constraints_expr_list()#
获取当前所有的constraint。
- Returns:
list: 所有constraints的列表.
- get_value(solution_dict)#
根据结果字典将变量值带入qubo变量.
- Args:
solution_dict (dict): 由get_sol_dict生成的结果字典。
- Returns:
float: 带入qubo后所得的值
- initialize_penalties()#
自动初始化所有的惩罚系数
- set_constraint_handler(constraint_handler)#
设置约束项无约束化方法
- Args:
constraint_handler: 设置约束项无约束化表示方法类
- set_objective(objective)#
设置目标函数
- Args:
objective (BinaryExpression): 目标函数表达式
- verify_constraint(solution_dict, constr_type: Literal['soft', 'hard'] = 'hard')#
确认约束是否满足
- Args:
solution_dict (dict): QUBO模型解字典
constr_type(str, optional): 约束类型,可以设置为"soft"或"hard",默认为"hard"
- Returns:
- tuple: 约束满足信息
int: 不满足的约束个数
dict: 包含约束值的字典