intlinprog 输出函数和绘图函数语法
什么是输出函数和绘图函数?
intlinprog 可以在算法中发生某些事件后调用输出函数或绘图函数。这些事件包括完成算法的某个阶段,例如求解根 LP 问题、添加割点、成功完成启发式算法、在分支定界期间找到新的整数可行解、显著改善相对间隙或探索分支定界树中的多个节点。
小心
intlinprog 输出函数和绘图函数与其他求解器的不同。有关其他 Optimization Toolbox™ 求解器中的输出函数或绘图函数,请参阅 输出函数和绘图函数语法 和 绘图函数。
有一个内置输出函数:
savemilpsolutions。此函数收集算法在事件时间找到的整数可行点。它将可行点放在基础工作区中名为xIntSol的矩阵中,其中每列是一个整数可行点。它将目标函数值保存在名为fIntSol的向量中,其中每个条目都是xIntSol中相应列的目标函数。有一个内置绘图函数:
optimplotmilp。此函数绘制了内部计算的最佳目标函数值边界。有关其使用示例,请参阅 工厂、仓库、销售分配模型:基于求解器。
通过传递 OutputFcn 或 PlotFcn 名称值参量(包括输出函数或绘图函数的句柄)来调用输出函数或绘图函数。例如,
options = optimoptions(@intlinprog,...
OutputFcn=@savemilpsolutions,PlotFcn=@optimplotmilp);
x = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub,options);如果您有多个输出函数或绘图函数,请将它们作为元胞数组传递。
options = optimoptions(@intlinprog,...
OutputFcn={@savemilpsolutions,@customFcn});注意
绘图函数不支持 subplot 语句,因为绘图函数框架管理轴。要指定多个子图,请编写单独的绘图函数,并将其作为元胞数组传递给求解器:
options = optimoptions("solvername",PlotFcn={@plot1,@plot2,@plot3});输出函数支持 subplot,因此您可以使用输出函数代替绘图函数,在一个函数中包含多个绘图。
自定义函数语法
使用以下语法编写您自己的输出函数或绘图函数:
function stop = customFcn(x,optimValues,state)intlinprog 将数据 x、optimValues 和 state 传递给您的函数。
stop- 设置为true以停止intlinprog。设置为false以允许intlinprog继续。x- 要么是空矩阵[],要么是可行点N×1向量。仅当intlinprog找到新的整数可行解时,x才为非空。当x为phase或'heuristics'时,'branching'可以为非空。optimValues- 其详细信息位于 optimValues 结构体 中的结构。state- 以下值之一:'init'-intlinprog开始运行。使用此状态来设置您需要的任何图表或数据结构。'iter'-intlinprog正在求解问题。访问与解算器进度相关的数据。例如,绘图或执行文件操作。'done'-intlinprog已完成求解问题。关闭所有文件,完成注释图等。
有关编写输出或绘图函数的示例,请参阅内置函数 savemilpsolutions.m 或 optimplotmilp.m。
optimValues 结构体
optimValues 字段 | 含义 |
|---|---|
dualbound | 最小化问题的目标函数值的全局下界,最大化问题的目标函数值的全局上界。当 |
fval | 迄今为止在整数可行点处找到的最佳目标函数。当 |
numfeaspoints | 发现可改善当前解的整数可行解的数量。 |
numnodes | 已探索节点的数量。仅当 |
phase | 算法的阶段。对于
|
relativegap |
当 |
time | 到目前为止所花费的时间(以秒为单位),从 |