OPTIMake中内置了对约束软化的支持, 通过该接口能够减少内存占用与计算时间.
约 束软化可分为对等式约束的软化与对不等式约束的软化, OPTIMake在以下接口中提供了约束软化支持:
variable
(变量的上下限, 不等式约束)
inequality
(不等式约束)
equality
(等式约束)
start_equality
(等式约束)
end_equality
(等式约束)
软化的惩罚类型支持:
上面的问题定义章节中介绍了如何使用这些接口软化约束, 我们以以下的通用问题形式介绍OPTIMake中约束软化的问题设定.
需要注意的是, 下面的p代表slack变量而非参数.
vminl(v)s.t.f(v)g(v)=0,≥0
等式约束软化
当软化的惩罚类型为'quadratic'
时, 软化问题的定义如下 (wi 为惩罚权重, p为约束软化的slack变量):
v,pminl(v)+i∑21wipi2s.t.f(v)g(v)=p,≥0
当软化的惩罚类型为'l1'
时, 软化问题的定义如下 (wi 为惩罚权重, p,n为约束软化的slack变量):
v,p,nminl(v)+i∑wi(pi+ni)s.t.f(v)g(v)pn=p−n,≥0,≥0,≥0
不等式约束软化
当软化的惩罚类型为'quadratic'
时, 软化问题的定义如下 (wi 为惩罚权重, p为约束软化的slack变量):
v,pminl(v)+i∑21wipi2s.t.f(v)g(v)+p=0,≥0
当软化的惩罚类型为'l1'
时, 软化问题的定义如下 (wi 为惩罚权重, p为约束软化的slack变量):
v,p,nminl(v)+i∑wipis.t.f(v)g(v)+pp=0,≥0,≥0