二次掩码范围
QuadraticMaskingRangeFunction 在 Kotlin 与 Rust 中统一表示“二值掩码二次表达式”。设二次多项式为
两种实现向求解器提交完全相同的四条 Big-M 约束,其中
掩码必须是二值变量,
API
kotlin
val z = BinVar("z")
val p = QuadraticPolynomial(
monomials = listOf(QuadraticMonomial.quadratic(Flt64.one, x, x)),
constant = Flt64.zero
)
val f = QuadraticMaskingRangeFunction(
polynomial = p,
z = z,
bigM = Flt64(100.0),
converter = IntoValue.Identity,
name = "masked_square"
)rust
let z = BinaryVariableItem::create(VariableId::standalone(2), "z");
let p = Quadratic::new(
vec![QuadraticMonomial::new_quadratic(1.0, x_index, x_index)],
0.0,
);
let f = QuadraticMaskingRangeFunction::with_big_m(
2, "masked_square", p, z.clone(), 100.0,
);with_quadratic_bounds 以及旧的“上下界范围变量”契约已经删除。它描述的是另一种函数,不再属于该 API。
求值与注册
求值时,z=0 直接返回零,不读取结果 token;z=1 返回
测试与源码
- Kotlin 源码:
QuadraticMaskingRange.kt - Rust 源码:
quadratic_masking_range.rs - Kotlin 独立测试:
QuadraticMaskingRangeFunctionDedicatedTest.kt与QuadraticFunctionGenericEvaluationTest.kt - Rust 独立测试:
function_symbol_quadratic_masking_range.rs