二次正部函数
QuadraticPositivePartFunction 为 Kotlin 与 Rust 定义相同且无歧义的运算:
它是正部函数,不是半连续变量。旧 Rust 名称 QuadraticSemiFunction 已直接删除;半连续取值域仍由独立的线性 SemiFunction API 表达。
求解器数学模型
Kotlin
Kotlin 使用恒等式
公开的二次结果表达式是 -resultVar;resultVar 本身是内部最小值
Rust
Rust 先以
两种内部公式不同,但结果与直接求值契约一致。
API 与示例
kotlin
val p = QuadraticPolynomial(
monomials = listOf(QuadraticMonomial.quadratic(Flt64.one, x, x)),
constant = -Flt64(4.0)
)
val positivePart = QuadraticPositivePartFunction(
input = p,
bigM = Flt64(100.0),
converter = IntoValue.Identity,
name = "positive_part"
)
// x = 1: max(1^2 - 4, 0) = 0rust
let p = Quadratic::new(
vec![QuadraticMonomial::new_quadratic(1.0, x_index, x_index)],
-4.0,
);
let positive_part = QuadraticPositivePartFunction::new(
17,
"positive_part",
p,
);
// x = 1: max(1^2 - 4, 0) = 0Kotlin 可传入显式 bigM;为空时从多项式的有限范围推导候选专用值。Rust 在可能时从已注册 token 的范围推导选择约束的 Big-M,否则使用已配置的回退值。
求值与边界
直接求值在输入为负数时返回零,为正数时返回输入,在原点返回零。输入值缺失时返回 null/None。该算术函数没有基于容差的 Undefined 区域。
测试与源码
- Kotlin 源码:
QuadraticPositivePart.kt - Kotlin 独立测试:
QuadraticPositivePartFunctionTest.kt - Rust 源码:
quadratic_function.rs - Rust 独立测试:
function_symbol_quadratic_positive_part.rs