一元线性分段函数
UnivariateLinearPiecewiseFunction 表示对连续采样点
求解器数学模型
Kotlin 为每条线段创建二元选择变量
Rust 使用采样点权重
相邻性约束为
因此只有所选线段的两个端点可以具有正权重。两边内部公式虽然不同,但现在都表示单一激活线段,并排除任意混合不相邻采样点的凸包行为。
Kotlin/Rust 示例
kotlin
val piecewise = UnivariateLinearPiecewiseFunction.fromPoints(
x = input,
points = points,
converter = IntoValue.Identity,
name = "ulp"
)rust
let piecewise = UnivariateLinearPiecewiseFunction::new(
1,
"ulp",
input,
vec![
Point2::new(0.0, 0.0),
Point2::new(1.0, 2.0),
Point2::new(2.0, 0.0),
],
);
assert_eq!(piecewise.selector_variables().len(), 2);求值与边界
在
输入缺失或超出采样点定义域时,Kotlin 返回 null,Rust 返回 None。重复、降序、非有限或数量不足的采样点会被拒绝。
测试与参考
- Kotlin 独立聚焦测试:
UnivariateLinearPiecewiseFunctionDedicatedTest.kt - Kotlin 边界/注册测试:
UnivariateLinearPiecewiseFailureBoundaryTest.kt - Kotlin 实现:
UnivariateLinearPiecewise.kt - Rust 实现:
univariate_linear_piecewise.rs - Rust 独立测试:
function_symbol_univariate_linear_piecewise.rs
独立聚焦测试会断言辅助变量数量和每一条选择/分段图形约束行,并覆盖端点、定义域外求值及非法采样点校验。
点形式和线段形式共享严格递增的断点契约。Kotlin 直接接收 breakpoints/slopes/intercepts;Rust 还提供 UnivariateLinearPiecewiseFunction::from_segments,并要求每个相邻断点对 对应一个斜率和截距。非法值会在注册辅助变量前拒绝。