有界变量修订单纯形。实例与一个问题矩阵 (A, b, c, l, u) 绑定; 分支只修改 l/u,割平面通过重建实例(行/列追加)+ 热启动基复用。
BoundedSimplex
01 Syntax
Microsoft.VisualBasic.Math.LinearAlgebra.LinearProgramming.MILP.BoundedSimplex
02 Methods
| Name | Overloads | Summary |
|---|---|---|
| InitializeArtificialSigns | 1 | 计算人工列符号:artSign(i) = sign(b_i − A_i·v),v 取非基本变量的界值。 保证初始人工变量 a_i = artSign(i)·(b_i − A_i·v) ≥ 0,从而人工基原始可行。 |
| NonbasicBoundValue | 1 | 非基本变量的初始界值。 |
| NonbasicValue | 1 | 非基本工作列的当前取值。 |
| BasicBounds | 1 | 基本变量的界(人工列:Phase1 为 [0,+∞),Phase2 固定为 [0,0])。 |
| ArtCost | 1 | 人工列成本(Phase1 = 1,Phase2 = 0)。 |
| WorkCost | 1 | 工作列在当前阶段的目标系数:Phase 1 的目标是 Σ 人工变量,故工作列成本为 0; Phase 2 使用真实目标系数。 |
| CurrentX | 1 | 当前解的完整工作列取值。 |
| ObjectiveValue | 1 | 内部 min 方向目标值。 |
| Solve | 1 | 求解。传入热启动基(可为 Nothing)时复用该基做对偶/原始重优化。 |
| LoadWarmStart | 1 | 校验并载入热启动基。 |
| Refresh | 1 | 刷新分解、基本解、对偶值与约简成本。返回 False 表示数值失败。 |
| SolveWithBasis | 1 | B⁻¹·col。 |
| RunDual | 1 | 返回 BsStatus.Optimal 表示"已原始可行"(无需对偶迭代, 交由原始单纯形收尾);返回 Infeasible / NumericFail / MaxIter 表示对应失败。 |
03 Properties
| Name | Overloads | Summary |
|---|---|---|
| Factorization | 1 | 当前基的 LU 分解(在 BoundedSimplex.Solve()) 返回后有效)。 割平面推导需要 B⁻ᵀe_i(tableau 行),直接复用该分解,避免重复计算。 |
04 Fields
| Name | Overloads | Summary |
|---|---|---|
| artSign | 1 | 人工列符号(sign_i·e_i),构造时确定 |
05 Members
InitializeArtificialSigns
计算人工列符号:artSign(i) = sign(b_i − A_i·v),v 取非基本变量的界值。 保证初始人工变量 a_i = artSign(i)·(b_i − A_i·v) ≥ 0,从而人工基原始可行。
NonbasicBoundValue(
Int32)非基本变量的初始界值。
NonbasicValue(
Int32)非基本工作列的当前取值。
BasicBounds(
Int32, Double, Double)基本变量的界(人工列:Phase1 为 [0,+∞),Phase2 固定为 [0,0])。
ArtCost(
Int32)人工列成本(Phase1 = 1,Phase2 = 0)。
WorkCost(
Int32)工作列在当前阶段的目标系数:Phase 1 的目标是 Σ 人工变量,故工作列成本为 0; Phase 2 使用真实目标系数。
CurrentX
当前解的完整工作列取值。
ObjectiveValue
内部 min 方向目标值。
Solve(
Int32(), Boolean(), Int32)求解。传入热启动基(可为 Nothing)时复用该基做对偶/原始重优化。
LoadWarmStart(
Int32(), Boolean())校验并载入热启动基。
Refresh
刷新分解、基本解、对偶值与约简成本。返回 False 表示数值失败。
SolveWithBasis(
Double())B⁻¹·col。
RunDual(
Int32)返回 BsStatus.Optimal 表示"已原始可行"(无需对偶迭代, 交由原始单纯形收尾);返回 Infeasible / NumericFail / MaxIter 表示对应失败。
Factorization
当前基的 LU 分解(在 BoundedSimplex.Solve() 返回后有效)。 割平面推导需要 B⁻ᵀe_i(tableau 行),直接复用该分解,避免重复计算。
artSign
人工列符号(sign_i·e_i),构造时确定