intlinprog
混合整数线性规划 (MILP)
语法
说明
混合整数线性规划求解器。
求以下问题的最小值:
f、x、intcon、b、beq、lb 和 ub 是向量,A 和 Aeq 是矩阵。
您可以将 f、intcon、lb 和 ub 指定为向量或数组。请参阅矩阵参数。
注意
intlinprog
仅适用于基于求解器的方法。有关这两种优化方法的讨论,请参阅首先选择基于问题或基于求解器的方法。
使用 x
= intlinprog(problem
)problem
结构体封装所有求解器输入。您可以使用 mpsread
从 MPS 文件中导入 problem
结构体。您还可以使用 prob2struct
从 OptimizationProblem
对象创建 problem
结构体。
示例
输入参数
输出参数
局限性
通常,解
x(intCon)
中一些应为整数值的分量并不是精确的整数。intlinprog
将处在整数容差IntegerTolerance
内的所有解值视为整数。要将所有应为整数的解值舍入为精确的整数,请使用
round
函数。x(intcon) = round(x(intcon));
小心
舍入解可能导致解变得不可行。舍入后检查可行性:
max(A*x - b) % See if entries are not too positive, so have small infeasibility max(abs(Aeq*x - beq)) % See if entries are near enough to zero max(x - ub) % Positive entries are violated bounds max(lb - x) % Positive entries are violated bounds
intlinprog
不强制将绝对值超过2.1e9
的解分量转化为整数值。当您的解包含此种分量时,intlinprog
会发出警告。如果您收到此警告,请检查该解,确认该解中应为整数值的分量是否接近整数。intlinprog
不允许问题的分量(如f
、A
或ub
中的系数)的绝对值超过1e25
。如果您尝试对这样的问题运行intlinprog
,intlinprog
会出错。
提示
要指定二元变量,请在
intcon
中将变量设置为整数,并指定其下界为0
,上界为1
。通过指定稀疏线性约束矩阵
A
和Aeq
来节省内存。但是,您无法对b
和beq
使用稀疏矩阵。如果包含
x0
参数,intlinprog
将在'rins'
中和引导潜水启发式方法中使用该值,直到找到更好的整数可行点。因此,当您提供x0
时,您可以通过将'Heuristics'
选项设置为'rins-diving'
或使用'rins'
的其他设置来获得满意的结果。如果提供的是整数分量的逻辑索引,即用
1
指示整数的二元向量,请使用find
将其转换为intcon
形式。例如,logicalindices = [1,0,0,1,1,0,0]; intcon = find(logicalindices)
intcon = 1 4 5
intlinprog
取代bintprog
。要更新使用bintprog
的旧代码以使用intlinprog
,请进行以下更改:将
intcon
设置为1:numVars
,其中numVars
是问题中变量的数目。将
lb
设置为zeros(numVars,1)
。将
ub
设置为ones(numVars,1)
。更新任何相关选项。使用
optimoptions
为intlinprog
创建选项。按以下方式更改您对
bintprog
的调用:[x,fval,exitflag,output] = bintprog(f,A,b,Aeq,Beq,x0,options) % Change your call to: [x,fval,exitflag,output] = intlinprog(f,intcon,A,b,Aeq,Beq,lb,ub,x0,options)
替代功能
App
优化实时编辑器任务为 intlinprog
提供可视化界面。