kaiwu.hobo package#

Module contents#

模块: hobo

功能: hobo建模工具

class kaiwu.hobo.HoboModel(objective=None, hobo_default_penalty=1)#

基类:BinaryModel

支持添加约束的HOBO模型类

参数:
  • objective (Expression) -- 目标函数

  • hobo_default_penalty (float) -- HOBO约束的默认惩罚系数, 默认值为1

verify_hobo_constraint(solution_dict)#

验证 HOBO 降阶约束是否满足。

参数:

solution_dict (dict) -- HOBO 降阶后的解字典。

返回:

约束满足情况信息
  • int: 未满足的 HOBO 约束数量

  • dict: 包含每个 HOBO 约束取值的字典

返回类型:

tuple

reduce(predefined_pairs=None)#

对Hobo Model高阶表达式进行降阶处理(降至二阶)

参数:

predefined_pairs (list) -- 预定义要合并的变量对列表,格式为[(var1, var2), ...]

返回:

降阶后的QuboModel。注意不要在该模型上修改约束,可能会导致错误

返回类型:

QuboModel

add_constraint(constraint_in, name=None, constr_type: Literal['soft', 'hard'] = 'hard', penalty=1, slack_var_expr=None)#

添加约束项,支持单个或多个约束

参数:
  • constraint_in --

    约束表达式,支持两种输入类型:

    1. 单个约束: BinaryExpression 或 Constraint 对象 例如: quicksum(x) - 1Constraint(quicksum(x) - 1, "==", 1)

    2. 多个约束: 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。

返回:

所有constraints的列表.

返回类型:

list

get_value(solution_dict)#

根据结果字典将变量值带入qubo变量.

参数:

solution_dict (dict) -- 由get_sol_dict生成的结果字典。

返回:

带入qubo后所得的值

返回类型:

float

initialize_penalties()#

自动初始化所有的惩罚系数

set_constraint_handler(constraint_handler)#

设置约束项无约束化方法

参数:

constraint_handler -- 设置约束项无约束化表示方法类

set_objective(objective)#

设置目标函数

参数:

objective (BinaryExpression) -- 目标函数表达式

verify_constraint(solution_dict, constr_type: Literal['soft', 'hard'] = 'hard')#

确认约束是否满足

参数:
  • solution_dict (dict) -- QUBO模型解字典

  • constr_type (str, optional) -- 约束类型,可以设置为"soft"或"hard",默认为"hard"

返回:

约束满足信息
  • int: 不满足的约束个数

  • dict: 包含约束值的字典

返回类型:

tuple