NETFLOW程序


热启动

小节:

在重复使用PROC NETFLOW处理类似结构的问题时,使用热启动可以提高PROC NETFLOW的整体速度。当先前优化的解接近同一网络的最优解时,这是最有益的其参数,例如电弧成本,发生了变化。无论问题是否改变可以使用以前的优化来重新启动优化,从而避免PROC NETFLOW必须重复工作才能到达热启动已经可用。

NETFLOW过程执行的数据结构初始化部分也会保存时间。关于上一个的信息最佳解决方案,特别是关于问题大小、基本生成树结构的描述,以及已知约束行中的基本内容。关于哪些非基本弧具有容量流以及哪些非基本非弧的信息变量处于各自的上限也构成了热启动的一部分。该过程可以将圆弧数据放入内部弧长数组位于精确定义的位置,按头节点内部编号升序排列。不是这样的需要多次传递数据,因为诸如node、non-arc变量、arc、constraint和special等文本定义了行名称,并赋予了每个行的含义。这也节省了大量内存。没有任何预优化需要重复可行性检查。

如果要确定圆弧闭合对载流的影响,热启动也很有用。这些成本弧设置得足够高,以确保下一个最佳解决方案永远不会通过它们。同样,开放的影响可以通过将这些弧的成本从极值更改为合理值来确定弧。

指定未来1未来2选项 确保将有关用作热启动的解决方案的附加数据输出到输出数据集。如果未来1选项,则为节点输出=ARCOUT公司=数据集。这些数据集中的热启动解是在忽略边约束的优化后获得的解。中的任何成本列表变量值ARCOUT公司=数据集(以及,如果有侧面约束康达塔=在随后的PROC NETFLOW运行中将解决方案用作热启动之前,可以更改数据集)。任何非圆弧变量中的数据康达牌手表=此时也可以更改数据集。热启动时,原始问题中不存在新的非圆弧变量也可以添加到康达塔=问题开始前的数据集。

如果未来2选项已指定,DUALOUT公司=CONOUT(连接器)=数据集。这些数据集中的热启动解决方案是在考虑侧面约束的优化后获得的已执行。热启动部分与基础的约束部分有关。仅成本列表变量值在中CONOUT(连接器)=在后续PROC NETFLOW运行中将解决方案用作热启动之前,可以更改数据集。

如果原始单纯形优化是使用热启动,则温暖的选项必须在PROC网络流量声明。否则,原始单纯形网络算法会处理冷启动的数据,而不会使用额外的信息。

这个ARCDATA公司=数据集是ARCOUT公司=使用未来1选项指定(如果使用无约束热启动)或CONOUT(连接器)=使用未来2指定选项(如果热启动是在考虑了侧面约束的优化后获得的)。

这个NODEDATA公司=数据集是节点输出=上一次运行PROC NETFLOW的数据集未来1指定是否正在使用无约束热启动。否则杜林=DUALOUT公司=上一次运行PROC NETFLOW的数据集未来2指定,如果热启动是在考虑了侧面约束的优化后获得的。

您无需更改节点输出=数据集或DUALOUT公司=从生成它们到将其用作热启动之间的数据集。如果对这些数据集进行了不正确的更改,或者如果NODEDATA公司=或a杜林=数据集与ARCDATA公司=不同解决方案的数据集。

指定温暖或者未来1未来2或两者同时使用PROC网络流量声明是否要从当前热启动生成新的热启动。

原始单一热启动在生成时间和使用时间之间允许的变化程度取决于关于热启动描述的是无约束的还是约束的解决方案。以下列表描述了受约束的或可以更改的无约束热启动:

  • 成本列出变量值

  • 电弧容量值,只要新容量值不小于下限流量或通过流量弧线

  • 无约束热启动中的任何非圆弧变量信息

  • 对于无约束热启动,任何侧约束数据

约束热启动的约束数据中可以进行的更改比无约束热启动中的更改更具限制性热启动。只要约束的松弛、剩余、,或者人工变量是基本的。无法更改约束名称。

热启动示例

以下SAS会话示例演示了如何使用热启动设施来获得无约束的最优解决方案发生电弧成本变化或在找到最佳值之前暂停优化的网络。

/*数据集node0和arc0中已有数据*/进程网络流nodedata=node0/*如果是供需信息*//*在此SAS数据集中*/arcdata=arc0;/*此处显示变量列表规范*//*假设它们在这里是不必要的*//*如果是,则必须包含在*//*以下所有PROC NETFLOW调用*/重置未来1nodeout=node2/*需要nodeout和arcout*//*使用FUTURE1时*/弧断=弧1;程序打印数据=arc1;/*显示最佳解决方案*/处理fsedit数据=arc1;/*更改一些电弧成本*/数据arc2;重置电弧1;oldflow=_flow_;旧fc=_成本_;/*复制流量和流量成本*//*变量。如果id列表是显式的*//*指定,将oldflow和oldfc添加到此*//*列表,以便它们随后出现在*//*创建的arcout=数据集*/

以下PROC NETFLOW使用之前创建的热启动,执行250次第2阶段迭代并保存该解决方案,其中(作为未来1,ARCOUT公司=,以及节点输出=被指定)可以在另一个PROC NETFLOW运行中用作热启动。

进程网络流温暖的nodedata=节点2arcdata=arc2;重置最大值1=250未来1;运行;节约nodeout=存储库编号3arcout=保存库.arc3;/*优化因250次迭代而停止*//*执行以恢复优化*//*可能在另一个会话中(输出*//*数据集保存在SAS库中*//*调用了savelib)*/

使用最新的热启动,PROC NETFLOW重新启动以找到最佳解决方案。

进程网络流温暖的nodedata=存储库编号3arcdata=savelib.arc3;重置未来1节点输出=节点4弧断=弧4;运行;

如果此问题对名为CON0的数据集中的数据有约束,则在前面的每个PROC NETFLOW语句中,指定康达塔=CON0.在PROC NETFLOW运行期间,您可以更改约束数据。在每个重置语句,可以指定CONOUT(连接器)=如果优化器达到第2阶段,则保存优化器到达的最后一个(可能是最佳的)解决方案的数据集。您可以指定未来2DUALOUT公司=数据集以生成受限的热启动。

进程网络流温暖的nodedata=节点4arcdata=arc4condata=con0;重置maxit2=125/*可选,原因如下*//*无法获得最佳效果*/scratch/*可选,但热启动可能比较好*//*足以启动第2阶段优化*/未来2运行;/*优化在125次第2阶段迭代后停止*/保存dualout=dual1 conout=conout1;

第2阶段优化在达到最佳值之前停止。现在您可以制作成本和非圆弧可变目标函数系数变化。然后要重新启动优化,请使用

进程网络流温暖的condata=con0/*注意:。NETFLOW仅读取约束数据*/双联=双联1arcdata=con1;重置未来2dualout=双重conout=con2;运行;