二次区间指示
QuadraticInStepRangeFunction 是闭区间门控函数,不是 floor 或按步长取整函数。设二次多项式为
未定义带显式说明了连续域的边界契约:严格补集无法由有限个非严格不等式精确编码。两种实现都创建三个互斥的二值指示变量
三状态 one-hot 划分保证:
API
kotlin
val p = QuadraticPolynomial(
monomials = listOf(QuadraticMonomial.quadratic(Flt64.one, x, x)),
constant = Flt64.zero
)
val f = QuadraticInStepRangeFunction(
x = p,
lower = Flt64.zero,
upper = Flt64(4.0),
bigM = Flt64(100.0),
outsideTolerance = Flt64(1e-6),
converter = IntoValue.Identity,
name = "square_gate"
)rust
let p = Quadratic::new(
vec![QuadraticMonomial::new_quadratic(1.0, x_index, x_index)],
0.0,
);
let f = QuadraticInStepRangeFunction::with_parameters(
11, "square_gate", p, 0.0, 4.0, 100.0, 1e-6,
);旧 Rust 步长取整构造器以及 with_quadratic_bounds API 已删除。如果数学含义确实是
求值与注册
求值在闭区间内返回输入,在区间外容差之外返回零,在两侧未定义容差带内返回 null/None。注册时加入三个二值指示变量和有符号结果辅助变量,并提交九条约束。输入只有线性项时通过线性机制模型提交;包含二次项时通过二次机制模型提交。
测试与源码
- Kotlin 源码:
QuadraticInStepRange.kt - Rust 源码:
quadratic_in_step_range.rs - Kotlin 独立测试:
QuadraticInStepRangeFunctionDedicatedTest.kt与QuadraticFunctionGenericEvaluationTest.kt - Rust 独立测试:
function_symbol_quadratic_in_step_range.rs