4.1 处理约束问题
1. 引言
到目前为止所说明的QUBO模型,本质上是一个无约束优化问题:
对于绝大多数实际问题而言,求解该问题的最优化解都存在着必须满足的约束。
比如,投资资金的分配问题,其主要目的是让投资回报达到最大化。不过,在这个过程中有一系列的约束条件——总预算不能超过1000万元(限制了投资的总体规模);每个项目至少要分配50万元(确保每个项目都有足够的资金支持);还要受到行业政策的限制,例如能源项目必须符合碳排放指标,不能超过规定的碳排放量(
在实际的优化过程中,这些约束条件可以分为硬约束和软约束。硬约束是必须严格遵守的,例如TSP(旅行商问题)中每个城市只能访问一次;软约束则可以通过调整目标函数来处理,例如通过惩罚函数来体现对某些约束的违反程度。通常来说,可以使用拉乘、惩罚法或者直接构造可行域等方法,将这些约束条件整合到优化模型中,从而找到最优解。
转换的思想很简单,假设我们的目的是计算目标函数的最小值,那么我们可以在目标函数上增加一个非负的惩罚函数(设计为关于决策变量的二次函数形式),也即Penalty Method(惩罚法)。用户可以使用Kaiwu SDK进行约束的惩罚法转换,通过将约束条件转化为惩罚项加入目标函数,从而避免直接求解带约束的优化问题,可以有效重构QUBO模型。
考虑到有约束优化问题一般使用惩罚法进行无约束形式的转换,所以本篇将详细讲述惩罚法在QUBO模型中的应用,特别是如何处理等式约束和不等式约束。
2. 数学表述
由于惩罚项只是原优化问题的约束条件,而不是最优化目标,因此Penalty Method所引入的惩罚项被设计为:
(1)如果当前解满足约束,那么惩罚函数的值等于0;
(2)如果当前解不满足约束,那么惩罚函数是一个很大的正数。
P是一个很大的正数,如果违反约束的话,目标函数会受到一个很大的惩罚,以至于我们最终得到的解会倾向于符合约束。
给定优化问题:
可以通过惩罚法转化为无约束优化问题:
其中,
最后,
3. 常见约束类型的具体表达
惩罚法的基本思想是,将约束条件转化为惩罚项,并将惩罚项加入目标函数中。对于违反约束的解,惩罚项会增加目标函数的值,从而使优化算法倾向于找到满足约束的解。现实应用中,最常见的两种约束就是等式约束和不等式约束,下面我们将重点介绍如何对各类约束进行转换。
3.1 线性等式约束情况
原始约束为:
其QUBO形式的惩罚项可以写为:
展开后可得:
其中常数项
例子: 原始约束为
由于
3.2 线性不等式约束
不等式约束通常表示为
假设原始约束为:
我们可以引入松弛变量
其中
为了使目标函数符合QUBO的标准形式,我们需要将松弛变量
这样修改后,目标函数就变成了一个包含二进制变量的二次型表达式,符合QUBO问题的标准形式。
3.3 逻辑约束的代数表达
实际上,以上两种情况已经能解决大部分问题,但为了更好地解释一部分非常重要也非常常用的约束情况——逻辑约束,这里对此类约束进行归纳总结。
(1)蕴含关系
假设原始约束为
其QUBO形式的惩罚项可以写为:
比如,若某设备启用(
(2)互斥约束
假设原始约束为:
当
比如,某会议时间不能同时选择两个冲突的演讲主题(
(3)逻辑或约束
同样地,对于至少有一个1的约束
使得QUBO形式的惩罚项可以写为:
当
比如,某岗位招聘需至少满足 “有编程经验”(
(4)依赖关系
假设原始约束为
比如,若某项目需审批通过(
(5)异或关系
异或(XOR)关系表示两个变量必须不同,即
此时当
比如,某产品设计必须选择A供应商或B供应商,但不能同时选择两者(
(6)其他
存在其它类型约束,如Rosenberg提出的通过引入辅助变量,构造惩罚项。当需要降次时,会用到该约束形式,在后篇的《处理降次问题》中将深入讨论这一问题。
对任意三次项
最终目标函数表示为:
3.4 总结
约束类型 | 原始表达式 | 惩罚项形式 |
---|---|---|
等式约束 | ||
不等式约束 | ||
逻辑约束 | ||
其它约束 |
除此之外,下表给出了一些常见约束的惩罚项示例。注意表中所有变量均为二进制变量,参数
原始表达式 | 惩罚项形式 |
---|---|