英里

科罗拉多大学托马斯·卢瑟福

摘要

MILES是非线性互补问题和非线性方程组的求解器。可以通过GAMS访问求解器,以求解MPSGE或MCP模型。本文记录了求解算法、用户选项和求解器输出。本文的目的是向MILES的用户概述求解器的工作原理,以便他们能够有效地使用它。

介绍

MILES是基于Fortran的非线性互补问题和非线性方程组求解器。求解过程是带有回溯线搜索的广义牛顿法。该代码基于Mathiesen(1985)研究的算法,Mathieson提出了一种用于求解经济均衡模型的建模格式和顺序方法。该方法与Robinson(1975)、Hogan(1977)、Eaves(1978)和Josephy(1979)提出的算法密切相关。在这个实现中,子问题被求解为线性互补问题(LCP),使用Lemke的几乎互补旋转方案的扩展,其中上下界被隐式表示。线性求解器采用了Gill等人(1991)开发的基因子分解包LUSOL。

可应用MILES的一类问题被称为“广义”或“混合”互补问题,其定义如下:

\[\开始{array}{rl}\textrm{给定:}&F: R^n\rightarrow R^n\,\\\\ell,u\ in R^n\\& \\\textrm{查找:}&z、 R ^n中的w,v\\& \\\textrm{这样}&F(z)=w-v\\&\ell\leq z\leq u,\\w\geq 0,\\v\geq\\&w^T(z-\ell)=0,\\v^T(u-z)=0\\\结束{数组}\]

当\(\ell=-\infty\)和\(u=\infty \)MCP简化为非线性方程组时。当(ell=0)和(u=+infty)时,MCP是一个非线性互补问题。有限维变分不等式也是MCP。MCP包括作为特殊情况的不等式约束线性、二次和非线性程序,尽管对于这些问题,可能首选标准优化方法。非优化问题的MCP模型包含大量有趣的数学程序。此处未提供MCP配方的具体示例。经济学中出现的MCP公式见卢瑟福(1992年a)。Harker和Pang(1990)和Dirkse(1993)提供了其他示例。

有两种类型的GAMS模型可以呈现给MILES:

  1. MILES可用于求解MPSGE作为GAMS子系统生成的可计算一般均衡模型。在MPSGE语言中,建模器使用嵌入GAMS程序中的专用表格输入格式指定非线性函数类。MPSGE使用基准数量和价格自动校准函数系数,并生成非线性方程和雅可比矩阵。使用MILES接口,可以很容易地实现和分析大型复杂的非线性方程组。卢瑟福(1992年a)介绍了GAMS/MPSGE的一般平衡建模。
  2. MILES可以作为混合互补问题(MCP)的GAMS求解器访问。如果有多个MCP解算器可用1)声明选项MCP=英里;告诉GAMS使用MILES作为MCP解决方案系统。当使用MCP格式向MILES提出问题时,用户使用GAMS矩阵代数指定非线性函数,GAMS编译器自动生成雅可比函数。卢瑟福(1992年b)介绍了GAMS/MCP建模格式。

本文档的目的是为MILES用户提供求解器工作原理的概述,以便他们能够更有效地使用程序。章节牛顿算法介绍了牛顿算法。章节具有隐式边界的Lemke方法描述了用于求解线性子问题的Lemke算法的实现。章节选项文件定义可以使用选项文件指定的开关和公差。章节日志文件输出解释通常指向屏幕的运行时日志文件。章节状态文件输出解释可能生成的状态文件和详细的迭代报告。章节终止消息列出并建议异常终止条件的补救措施。

牛顿算法

MILES中用于求解非线性互补问题的迭代过程与非线性方程的经典牛顿算法密切相关。本节的第一部分回顾了经典程序。丹尼斯和施纳贝尔(Dennis and Schnabel,1983)对这些想法进行了全面介绍。关于实用的观点,请参见Press等人(1986年)。

非线性方程的牛顿算法从非线性方程组的局部(泰勒级数)近似开始。对于邻域({z})中的点(z),非线性函数系统被线性化:

\[LF(z)=F(\bar{z})+纳布拉F(\bar{z})(z-\bar{z})。\]

求解线性系统(LF(z)=0)提供了从(bar{z})开始的牛顿方向,该方向由(d=-\nabla F^{-1}~F(bar{z})给出

牛顿迭代(k)从点(z^k)开始。首先,求解在(z ^k)处形成的线性模型,以确定相关的“牛顿方向”,\(d^k\)。第二,方向\(d*k\)上的行搜索确定标量步长和随后的迭代:\(z^{k+1}=z^k+\lambda d^k\)。Armijo或“回溯”行搜索最初考虑\(lambda=1\)。如果\(\|F(z^z+\lampda d^k)\|leq\|F采用,否则乘以正因子(α),(α<1),重新进行收敛检验。重复此过程,直到出现改进结果或\(\lambda<\underline{\lambda}\)。当\(\underline{\lambda}=0\)时,采取积极步骤,前提是2):

\[\frac{d}{d\lambda}\|F(z^k+\lambda-d^k)\|<0.]

该算法的收敛理论相当成熟。例如,见Ortega和Rheinbolt(1970)或Dennis和Schnabel(1983)。带回溯线搜索的牛顿格式最吸引人的地方在于,在一个性能良好的不动点附近,(lambda=1)是最佳步长,收敛速度可以是二次的。如果这种方法找到了解决方案,它会很快找到。

牛顿方法在非线性互补问题中的应用涉及对搜索方向的修改。这里,\(d\)解决了线性互补问题(LCP)而不是线性方程组。对于迭代\(k\),\(d\)求解:

\[F(z^k)+\nabla F(z*k)d-w+v=0\]

\[\ell\leq d+z^k\leq u,\\w\geq 0,\\v\geq 0\]

\[w^T(d+z^k-\ell)=v^T(u-d-z^k)=0.\]

从概念上讲,我们正在求解(d),但实际上,MILES用原始变量解决线性问题(z=z^k+d):

\[F(z^k)-\nabla F(z*k)z_k+\nablaF(z|k)z=w-v\]

\[\ell\le z\le u,\\w\geq 0,\\v\geq 0\]

\[w^T(z-\ell)=0,\\v^T(u-z)=0。\]

在计算解(z)之后,MILES设置(d^k=z-z^k\)。

线性子问题包含任何或所有变量的上下界,确保迭代序列始终保持在边界内:(\(\ell\lez^k\leu\))。当(通常情况下)对于某些(R^n中的z)未定义\(F()\时,这会很有帮助。

应用于MCP的牛顿算法的收敛取决于三个问题:

  1. 线性化问题总是有解决方案吗?
  2. 如果线性化问题有解,Lemke的算法能找到吗?
  3. 是否可以表明计算出的方向(d^k)将在解决方案中提供“改进”?

只有对于一类有限的函数(F()),这三个问题才能得到肯定的回答。对于更大的一类函数,该算法在实践中收敛,但收敛性不是“可证明的”3).

问题3的答案。取决于衡量改进的标准的选择。边界和互补条件的引入使得误差指数的计算更加复杂。在MILES中,与候选解(z,epsilon(z))相关的偏差基于对(z,w)和(v)违反适用上下限和互补条件的程度的度量。

评估收敛性

设\(delta^L_i)和\(delta ^U_i)为指示变量,用于判断\(z_i)是否超出其下限或上限。这些定义为4):

\[\delta^L_i=最小值(1,(z_i-\ell_i)^+)~~\textrm{和}~~\增量^U_i=最小值(1,(U_i-z_i)^+)。\]

给定\(z),MILES使用\(F(z)\)的值隐式定义松弛变量\(w)和\(v):

\[w_i=F_i(z)^+\,\\v_i=\biggl(-F_i(z)\biggr)^+.]

与索引\(i\)相关的错误项有两个组件,一个对应于\(z_i\)违反上下限:

\[\varepsilon_i^B=(z_i-u_i)^++(\ell_i-z_i)

另一个对应于违反互补条件:

\[\varepsilon_i^C=\delta_i^L w_i+\delta_ i^U v_i.\]

然后取指定给z点的误差:

\[\varepsilon(z)=\|\varepsilon ^B(z)+\varepsilon ^C(z)\|_p\]

对于预先指定的值\(p=1,2\)或\(+\infty\)。5).

具有隐式边界的Lemke方法

混合线性互补问题的形式如下:

\[\开始{array}{rl}\textrm{给定:}&R^{n\times n}中的M,R^n中的\\\\q,ell,u\\& \\\textrm{查找:}&z、 R ^n中的w,v\\& \\\textrm{这样}&M z+q=w-v\\&\ell\le z\le u,\\w\geq 0,\\v\geq O\\&w^T(z-\ell)=0,\\v^T(u-z)=0\\\结束{数组}\]

在迭代(k)的牛顿子问题中,LCP数据由(q=F(z^k)-nabla F(z*k)z*k和(M=nabla F.(z*k))给出。

工作表

在MILES中,用于解决线性问题的旋转方案与重新标记的线性系统一起工作,形式如下:

\f[Bx^B+Nx^N=q,\f]

其中,R^n中的(x^B,R^{2n}中的\\x^n)和表([B|n]\)是([-M|I\|-I]\)的共形“互补置换”。也就是说,(B)中的每一列\(i)都必须是\(M,i)或\(-i)的\(i\)列,而\(n)中相应的列\(i~)和\(i+n)必须是没有为\(B)选择的两列。

为了从用(z,w)和(v)定义的问题转移到用(x^B)和

\[\下划线{x}_i^B=\left\{\begin{array}{rcl}\ell_i,&\texttt{if}&x_i^B=z_i\\\\0,&\texttt{如果}&x_i^B=w_i\texttt{或}v_i,\结束{数组}\对。\]

\[\上划线{x}_i^B=\left\{\begin{array}{rcl}u_i,&\texttt{if}&x_i^B=z_i\\\\\infty,&\texttt{if}&x_i^B=w_i\texttt{或}v_i\结束{数组}\对。\]

非基本变量\(x^N_i\)和\(x*N_{i+N}\)的值由\(x|B_i\

\[x _ i ^B=\left\{\begin{array}{rcl}z_i&&\Rightarrow&&\left开始{array}{lcccl}x_i^N&=&w_i&=&0\\\\\\x_{i+n}^n&=&v_i&=&0\\\\\右端{数组}。\ \\& & \\w_i&\Rightarrow&\left\{\begin{array}{lcccl}x_i^N&=&z_i&=&\ell_i\\\\\\x_{i+n}^n&=&v_i&=&0\\\\右端{数组}。\\& & \\v_i&\Rightarrow&\left\{\begin{array}{lcccl}x_i^N&=&w_i&=&0\\\\x_{i+n}^n&=&z_i&=&u_i。\右端{数组}。\右端{数组}。\]

简而言之:如果\(z_i \)是基本的,那么\(w_i \。如果\(z_i \)在其下限处是非基本的,那么\(w_i \。如果\(z_i \)在其上限处是非基本的,那么\(v_i \。

从概念上讲,我们可以通过评估以下形式的线性系统来求解LCP:

\[x^B=B^{-1}\biggl(q-N x^N\biggr)。\]

Lemke的枢轴算法提供了一个通过顺序评估这些可选线性系统的一些(希望很小)子集来寻找解决方案的过程。

初始化

让(B^0)表示初始基矩阵6)基本变量的初始值为:

\[\hat{x}^B=(B^0)^{-1}(q-N~\hat}x}^N)。\]

如果\(下划线{x}^B\le\hat{x}^B\la\bar{x}|B\),则初始基是可行的,互补问题得到了解决7)。否则,MILES会引入一个人工变量\(z_0\)和一个人工列\(h\)。基本变量表示如下:

\[x^B=\hat{x}^B-\tilde h z_0,\]

其中,\(\ tilde h \)是“转换的人工列”(未转换的列是\(h=B^0\ tilde h\))。选择\(\ tilde h \)的系数,以便:

  1. “可行”基变量的值不受\(z_0\):(\(\下划线{x} _ i^B\le x_i^B\le\bar{x} _ i^B\Longrightarrow\tilde h_i=0\))。
  2. 当\(z_0=1\):

    \[\颚化符hp=\左\{\开始{array}{rcl}\帽子{x} _磅^B-\巴{x} (p)^B、&如果&\tilde x_p^B>\bar{x} (p)^B类\\\& & \\\帽子{x} (p)^B-\下划线{x} (p)^B、&如果&\ tilde x_p^B<\下划线{x} (p)^B\。\结束{数组}\对。\]

  3. 所有其他不可行的当\(z0\)增加到1:

    \[x _ i ^B=\左\{\开始{array}{rrrrrrr}1+\下划线{x} _ i^B、 如果下划线(&I){x} _ i^B>(B)-\infty,&\bar(输入){x} _ i^B=+\infty\\\\\\\压裂{\bar{x} _ i^B+\下划线{x} _ i^B} {2},如果&\下划线{x} _ i^B>-\信息&\巴{x} _ i^B<+\输入\\\\\\\巴{x} _ i^B-1,如果&\下划线{x} _ i^B=基本&\酒吧{x} _ i^B<+\信息\。\结束{数组}\对。\]

旋转规则

当\(z_0)进入基时,它假设一个单位值,此时(排除简并性),随后的枢轴序列完全确定。一次迭代中的输入变量由上一次迭代的退出基本变量确定。例如,如果\(z_i \)位于\(B^0 \)中,并且引入\(z_0\)导致\(z_ i \)移动到其下限,则随后的迭代引入\(w_i \。相反,如果\(w_i \)位于\(B^0 \)中并且\(z_0\)导致\(w_ i \)降为零,则后续迭代从\(\ell_i \。最后,如果\(v_i \)位于\(B^0 \)中,并且\(z_0\)的引入导致\(v_ i \)降为零,则随后的迭代减少\(z_i)来自\(u_i)。

表1隐式界Lemke算法的枢轴序列规则

N个退出变量输入变量非基本值的变化
\(z_i\)在下限\(w_i\)从0增加\(x^N_i=z_i=\ell_i\)
\(z_i\)位于上限\(v_i\)从0增加\(x^N_{i+N}=z_i=u_i\)
\0时的(w_i\)\(z_i)从\(\ell_i)增加\(x^N_i=x^N_{i+N}=0\)
四、\0处的(v_i\)\(z_i)从(u_i)减少\(x^N_i=x^N_{i+N}=0\)

表1显示了全套枢轴规则。该算法与原始Lemke(III型)枢轴方案(参见Lemke,1965年)、Garcia和Zangwill(1981年)或Cottle和Pang(1992年))的一个不同之处在于,结构变量(z_i)可以在其上限值处进入或退出基。因此,算法必须区分输入变量从下限增加的枢轴和输入变量从上限减少的枢轴。

与“常规”Lemke枢轴程序的另一个不同之处是,输入的结构变量可能会从一个边界移动到另一个边界。当这种情况发生时,随后的轴心引入相应的松弛变量。例如,如果在不驱动基本变量不可行的情况下,将\(z_i \)从\(\ell_i \。这种类型的枢轴可以解释为在一个步骤中进入和退出基础8).

理论上忽略简并是很方便的,但实际上简并是不可避免的。本算法没有采用词典编纂方案来避免循环,但它实现了一个比率测试过程,确保当有多个候选时,优先考虑最稳定的枢轴。允许的枢轴集取决于绝对枢轴公差(ZTOLPV公司)以及相对枢轴公差(ZTOLRP公司). 没有绝对值小于\(min\)的枢轴(ZTOLPV公司,ZTOLRP公司\(V\|)考虑\),其中\(\ | V \ | \)是传入列的范数。

二次射线端接

当引入一个新的变量使(z0)归零时,Lemke的算法正常终止。这是期望的结果,但并不总是发生。当没有基本变量“阻止”传入变量时,算法可能会过早中断,这种情况称为“二次射线终止”。为了预测这些结果,MILES为连续迭代保留了值\(z_0\)的记录,并保存了与最小观察值\(z ^*_0\)相关的基础信息。(在Lemke算法中,枢轴序列的确定不考虑对\(z_0\)的影响,人工变量的值可能遵循从其初始值1到最终值0的不规则(非单调)路径。)

当MILES遇到次射线时,将调用重新启动过程,其中重新安装与\(z^*_0\)关联的基本变量集。这个基(从非基本三元组中增加一列以替换\(z_0\))用作\(B^0\),然后重新启动算法。在某些情况下,此过程允许轴心序列平滑地继续到解决方案,而在其他情况下,可能只会导致另一条次射线。

选项文件

标准GAMS选项(例如。伊特林,reslim公司)可用于控制里程。有关更多详细信息,请参阅第节通过GAMS选项控制解算器.

此外,可以使用解算器选项文件指定MILES特定的选项。虽然选项文件的内容是特定于解算器的,但有关如何创建选项文件并指示解算器使用该文件的详细信息则不是如此。本主题将在第节中介绍解算器选项文件.

以下是典型的MILES选项文件:

ITLIMT=50控制=1.0E-8LUSIZE=16

在本节的其余部分中,我们将介绍MILES选项并给出其默认值。

选项描述违约
控制收敛公差
每当遇到迭代时ε(z)<控制,算法终止。这与GAMS/MINOS参数“行公差”相对应。
1页-6页
密度1LUSOL:开始搜索maxcol列的密度
马科维茨战略应搜索的密度马克斯科尔列,没有行。
范围:[0,1]
0.3
密度2LUSOL:开始搜索1列的密度
Markowitz策略应仅搜索1列的密度,或(最好)对所有剩余行和列使用密集LU。
范围:[0,1]
0.6
dmpfac公司回溯线搜索中的阻尼因子0.5
elmax1(最大值1)LUSOL:因子期间L中允许的最大乘数10
elmax2型LUSOL:更新期间L中允许的最大乘数10
事实基准再转换时间
指示重新计算基本因子之间的最大CPU秒数。
120
invfrq公司基差再转换频率
确定基础因子重新计算之间的最大Lemke迭代次数。这对应于GAMS/MINOS参数“分解频率”。
200
库存日志切换Lemke反演测井
一种交换机,它请求LUSOL在每次重构后生成一个包含基本统计信息的报告。
1
迭代细化频率
指示检查因子分解的频率。该数字是指两次细化之间的基替换操作数。这对应于GAMS/MINOS参数“检查频率”。
25
伊特林次要(Lemke)迭代限制
也可以使用GAMS IterLim选项进行设置,并从中获取默认值。这对应于GAMS/MINOS参数“迭代次数限制”。
GAMS IterLim公司
itlimt公司主要(牛顿)迭代极限
牛顿迭代次数的上限。这与GAMS/MINOS参数“主要迭代”相对应。
范围:{0, ...,1000}
100
液晶显示器LCP转储(缩放后)
缩放后生成LCP数据打印输出的开关。
0
lcpech公司LCP回波打印(预缩放)
一个开关,用于在缩放之前生成LCP数据的打印输出。
0
撤离设置输出电平
设置写入日志和状态文件的调试输出的级别。有意义的最小值为-1,最大值为3。这大致对应于GAMS/MINOS参数“打印级别”。
1
l打印LUSOL:打印级别
控制LUSOL例程的日志量。
<0:抑制输出
0:给出错误消息
1:提供LUSOL中某些例程的调试输出
>=2:给出lu1fac中每个消除步骤涉及的轴行和列以及行和列的数量
0
加甜味剂LUSOL:估算内存需求的乘数
用于估计将要存储的LU非零数,作为雅可比矩阵中非零数的倍数。
范围:{, ..., ∞}
5
马克斯科尔LUSOL:搜索pivot元素的最大列数
设置在Markowitz类型搜索中搜索下一个透视元素的最大列数。对于某些分解,搜索的行数为maxrow=maxcol-1。
5
最小值回溯线搜索中的最小步长0.01
规范用于测量偏差的规范
定义用于评估的向量范数ε(z)可接受的值为1、2或3,对应于p=1、2和+INF。
1
nrsmax公司重新启动限制
设置线性子问题求解器在放弃之前将进行的重新启动次数的上限。
1
数据透视图切换Lemke枢轴日志
生成Lemke枢轴序列的状态文件列表的开关。
0
用柱基装饰解算器使用的无穷大
为“正无穷大”赋值(GAMS表示法中的“+INF”)。
1e20
规模在每次迭代时启用缩放
在每次迭代中调用LCP表的行和列缩放。这大致对应于GAMS/MINOS开关“缩放所有变量”。
1
小的LUSOL:绝对零公差
将实数视为零的绝对公差。
3.0至13
美国太空LUSOL:限制废物空间的因素(单位:U)
如果行或列列表的长度超过此值乘以上次压缩后任一文件的长度,则会对其进行压缩。
范围:[1, ∞]
乌托尔1LUSOL:绝对公差U对角线
标记美国小对角线的绝对公差。
3.64e-11页
乌托尔2LUSOL:相对公差U对角线
标记美国小对角线的相对公差。
3.64e-11页
兹托尔达矩阵系数的零容差,默认值:sqrt(machEps)1.48e-08年
ztolpv公司枢轴上的绝对零公差,默认值:machEps**(2/3)
绝对枢轴公差。这大致对应于GAMS/MINOS参数“Pivot tolerance”,因为它适用于非线性问题。
3.64e-11页
ztolrp公司枢轴上的相对零公差,默认值:machEps**(2/3)
相对枢轴公差。这大致对应于GAMS/MINOS参数“枢轴公差”,因为它适用于非线性问题。
3.64e-11页
ztolz0公司安装覆盖向量元素的绝对公差1e-6
ztolze公司可行性容差
用于子问题解决方案中,以确定任何变量何时超过上限或下限。这对应于GAMS/MINOS参数“可行性容差”。
1e-6

日志文件输出

日志文件用于在屏幕上显示,以便监控进度。产生的输出相对较少。

示例迭代日志显示在表2。此输出来自连续求解的两个案例。此输出和后续输出来自程序TRNSP公司。适用于它直接调用MILES库。(当从GAMS内调用MILES时,一次最多处理一个案例。)

日志输出的第一行给出了MILES程序的日期和版本信息。此信息对于错误报告很重要。

以“Workspace…”开头的行报告了为求解此示例中的模型-10K而分配的内存量。然后报告初始偏差以及与最大不平衡相关的变量名称(\(\ε^B_i+\ε_i\))。下一行报告收敛公差。

以0和1开头的行是这些迭代的主要迭代报告。迭代编号后面的数字是当前偏差,第三个数字是Armijo步长。该行末尾的括号中报告了与等式互补的变量的名称以及最大相关偏差。

在最后的迭代之后是迭代、重构和最终偏差的总结。最后一条消息报告解决方案状态。在这种情况下,模型已成功处理(“已解决”)。

表2迭代日志示例

里程(1993年7月)版本:225-386-02托马斯·卢瑟福经济系科罗拉多大学技术支持仅通过电子邮件提供:TOM@GAMS.COM网站分配的工作空间——0.01 Mb初始偏差。。。。。。。。3.250E+02 P_01收敛公差。。。。1.000E-06号0 3.25E+02 1.00E+00(P_01)1 1.14E-13 1.00E+00(W_02)主要迭代。。。。。。。。1Lemke枢轴。。。。。。。。。。。。10重构。。。。。。。。2偏离。。。。。。。。。。。。。。。1.137E-13号机组解决了的。分配的工作空间--0.01 Mb初始偏差。。。。。。。。5.750E+02 W_02收敛公差。。。。1.000E-06号0 5.75E+02 1.00E+00(W_02)1 2.51E+01 1.00E+00(P_01)2 4.53E+00 1.00E+00(P_01)3 1.16E+00 1.00E+00(P_01)4 3.05E-01 1.00E+00(P_01)5 8.08E-02 1.00E+00(P_01)6 2.14E-02 1.00E+00(P_01)7 5.68E-03 1.00E+00(P_01)8 1.51E-03 1.00E+00(P_01)9 4.00E-04 1.00E+00(P_01)10 1.06E-04 1.00E+00(P_01)11 2.82E-05 1.00E+00(P_01)12 7.47E-06 1.00E+00(P_01)13 1.98E-06 1.00E+00(P_01)14 5.26E-07 1.00E+00(P_01)主要迭代。。。。。。。。14Lemke枢轴。。。。。。。。。。。。23重构。。。。。。。。15偏离。。。。。。。。。。。。。。。5.262电子-07已解决。

状态文件输出

状态文件报告的有关解决方案过程的详细信息比日志文件中提供的更多。通常,只有在出现问题时,才会将此文件写入磁盘并进行检查。在GAMS中,状态文件仅显示在GAMS语句之后的列表中OPTION SYSOUT=开;.

状态文件的输出级别由传递给解算器的选项决定。在默认配置中,状态文件接收写入日志文件的所有信息,以及所有开关和容差的详细列表和基本因子分解统计报告。

当使用选项文件将输出级别从默认值增加时,状态文件可以接收更多的输出,以帮助调试。表3-表6显示使用生成的状态文件放线=3(最大值),PIVLOG=T、和LCPECH=温度.

状态文件以与日志文件相同的头开头。然后是用户提供的选项文件(如果提供了)的完整回显。核心分配报告之后是针对当前运行指定的控制参数、开关和容差的完整回显。

表4继续状态文件。每当放线>=2。表4还包含LCP echo-print。此报告有两个部分:$ROWS和$COLUMNS。$ROWS部分中的四列数字是常量向量(\(q\))、相关变量水平值的当前估计值(\(z\))以及下限和上限向量(\[ell\)和\(u\))。ROW和Z列之间出现的字母\(L\)和\(U\)分别用于标识变量的下限和上限。在本例中,所有上界都等于\(+\infty\),因此没有变量的上界是非基本的。

按照惯例,状态文件中只显示变量(而不是公式名称)。方程由相应的变量标识。因此,我们在矩阵echo-print的$COLUMNS:部分中看到,行名称对应于\(z)变量的名称。分配给变量\(z_i)、\(w_i)和\(v_i)的名称为\(z-<\)name\(i>\)、\。不显示\(w-<>\)和\(v-<>\”变量的非零,因为它们被假定为\(-/+I\)。

状态文件输出继续显示在表5中,表的前半部分报告矩阵缩放过程的输出,后半部分报告与Lemke过程启动相关的消息。

“lu6chk警告”是LUSOL报告。之后是两份因子分解报告。这里进行了两个因式分解,因为第一个基是奇异的,所以程序安装了所有下限松弛,以代替由初始值\(z)定义的矩阵。

在第二个因子分解报告之后,表5的底部是初始数据透视的摘要。“在3行中不可行。”表示\(\ tilde h \)包含3个非零元素。“最大不可行”是指结构变量违反上限或下限的最大数量。“带3个元素的人工列。”表示向量\(h=B^0\ tilde h\)包含3个元素(注意,在这种情况下\(B^0=-I\),因为初始基是奇异的,因此\(tilde h \)和\(h \)中的非零数相等。

表6显示状态文件的最后一部分。表的顶部是Lemke迭代日志。这些列的解释如下:

  • ITER公司是以0开头的迭代索引。
  • 状态是表示Lemke路径效率的统计数据。形式上,状态是从(B_0)到当前基准的最小轴数除以实际轴数的比率。当状态为1时,Lemke的算法实际上与直接因子分解一样高效(除了基本因子更新的开销)
  • Z%(Z%)表示基础中列的百分比为“结构性”(\(z\))。
  • Z0个表示人工变量的值。注意,在这个例子中,人工变量从其单位的初始值单调下降。
  • 错误是计算因子分解错误时报告因子分解错误的列。对于这次运行,ITCH=30,因此没有计算因子分解错误。
  • 信息是一个列,其中报告了人工列(使用方框形式定义)引入的不可行性的大小。(在英里中,覆盖向量(h)包含许多不同的非零值,而不仅仅是1;因此,人工变量的大小和诱导不可行性的大小之间可能存在很大差异。
  • 枢轴以绝对项(第一个数字)和相对项(第二个数字)报告枢轴幅值。相对枢轴大小是枢轴元素与传入列的范数的比率。
  • 输入/输出报告每个迭代的传入和传出列的索引(而不是名称)。请注意,Lemke的迭代日志以退出基的变量\(z_0\)结束。

迭代1的收敛报告与写入日志文件的报告没有区别,接下来是变量和函数值的第二个报告。我们在这里看到,在一个子问题之后获得了一个解决方案。这是因为根本问题实际上是线性的。

状态文件(在本例中)的结尾是一个与日志文件报告相同的迭代摘要,以及一个总体上和在各种子任务中占用了多少CPU时间的摘要。(如果最后五个数字的总和不等于第一个数字,不要惊慌——有些循环没有得到精确监控。)

表3带有调试输出的状态文件(第1页,共4页)

里程(1993年7月)版本:225-386-02托马斯·卢瑟福经济系科罗拉多大学技术支持仅通过电子邮件提供:TOM@GAMS.COM邮箱用户提供的选项文件:>开始>PIVLOG=。真的。>LCPECH=。真的。>放线=3>结束分配的工作空间--0.01 MbNEWTON算法控制参数:主要迭代限制。。(ITLIMT)。25阻尼系数。。。。。。。。。(DMPFAC)。5.000E-01号最小步长。。。。(MINSTP)。1.000E-02号机组偏差标准。。。。。(正常)。。。收敛公差。。(控制)。1.000E-06号LEMKE算法控制参数:迭代极限。。。。。。。(伊特利姆)。1000因子分解频率(INVFRQ)。200可行性容差。。(ZTOLZE)。1.000E-06号系数公差。。(ZTOLDA)。1.483E-08年防抱死制动系统。枢轴公差。。。(ZTOLPV)。3.644E-11号机组相对枢轴公差。。。(ZTOLRP)。3.644E-11号机组覆盖向量公差。(ZTOLZ0)。2006年1月1日缩放每次迭代。。。(比例尺)。T型重启限制。。。。。。。。。。(NRSMAX)。1输出控制开关:LCP回波打印。。。。。。。。。。。(LCPECH)。F类LCP倾倒。。。。。。。。。。。。。。。。。(LCPDMP)。T型Lemke反演测井。。。。。。(发票)。T型Lemke枢轴日志。。。。。。。。。(PIVLOG)。T型初始偏差。。。。。。。。3.250E+02 P_01收敛公差。。。。1.000E-06号================================收敛报告,迭代0===============================================================ITER偏差步骤0 3.25E+02 1.00E+00(P_01)===============================================================

表4带有调试输出的状态文件(第2页,共4页)

迭代0值。世界其他地区Z F--------    ------------             ------------X_01_01 L0.00000E+00-7.75000E-01X_01_02长0.00000E+00-8.47000E-01X_01_03 L0.00000E+00-8.38000E-01X_02_01 L0.00000E+00-7.75000E-01X_02_02 L0.00000E+00-8.38000E-01X_02_03升0.00000E+00-8.74000E-01W_01 L 0.00000E+00 3.25000E+02W_02 L0.00000E+005.7500E+02P_01 1.00000E+00-3.25000E+02P_02 1.00000电子+00-3.00000电子+02P_03 1.00000 e+00-2.75000 e+02==================================函数评估,迭代:0==================================$行:X_01_01-2.25000000E-01 0.0000000东经+00 0.0000000西经+00 1.00000000东经+20X_01_02-1.53000004E-01 0.0000000东经+00 0.0000000西经+00 1.00000000东经+20X_01_03-1.61999996E-01 0.00000000 E+00 0.0000000 E+00 1.00000000 E+20X_02_01-2.2500000E-01 0.0000000东经+00 0.0000000西经+00 1.00000000东经+20X_02_02-1.61999996E-01 0.0000000 E+00 0.000000 E+00 1.00000000 E+20X_02_03-1.25999998E-01 0.0000000东经+00 0.0000000西经+00 1.00000000东经+20W_01-3.25000000 E+02 0.00000000 E+00 0.0000000 E+00 1.00000000 E+00W_02-5.75000000E+02 0.00000000 E+00 0.0000000 E+00 1.00000000 E-00P_01 3.25000000 E+02 1.00000000 E+00 0.00000000 E+00 1.00000000 E+20P_02 3.00000000 E+02 1.00000000 E+00 0.0000000 E+00 1.00000000 E+20P_03 2.75000000E+02 1.00000000 E+00 0.0000000 E+00 1.00000000 E+20…0.0000000东经+00.000000000东经+00.000000000东经+0000.000000000西经+00$列:Z-X_01_01 W_01-1.0000000东经+00P_01 1.00000000 E+00Z-X_01_02 W_01-1.0000000东经+00P_02 1.00000000 E+00Z-X_01_03 W_01-1.0000000东经+00P_03 1.00000000 E+00Z-X_02_01 W_02-1.0000000东经+00P_01 1.00000000 E+00Z-X_02_02 W_02-1.0000000东经+00P_02 1.00000000 E+00Z-X_02_03 W_02-1.0000000东经+00P_03 1.00000000 E+00Z-W_01 X_01_01 1.00000000 E+00X_01_02 1.00000000东经+00X_01_03 1.00000000东经+00Z-W_02 X_02_01 1.00000000东经+00X_02_02 1.00000000东经+00X_02_03 1.00000000东经+00Z-P_01 X_01_01-1.000000 E+00X_02_01-1.000000东经+00Z-P_02 X_01_02-1.0000000E+00X_02_02-1.00000000电子+00Z-P_03 X_01_03-1.00000000 e+00X_02_03-1.00000000电子+00...       ...  0.00000000 E+00

表5带有调试输出的状态文件(第3页,共4页)

缩放LCP数据-------最小标高最大标高最大COL RATIO0 1.00E+00 1.00E+00 1.00之后1 1.00E+00 1.00E+00 1.00之后2 1.00E+00 1.00E+00 1.00之后3 1.00E+00 1.00E+00 1.00之后缩放结果:A(I,J)<=A(I、J)*R(I)/C(J)行Z列W列V列1      1.0000      1.0000      1.0000      1.00002      1.0000      1.0000      1.0000      1.00003      1.0000      1.0000      1.0000      1.00004      1.0000      1.0000      1.0000      1.00005      1.0000      1.0000      1.0000      1.00006      1.0000      1.0000      1.0000      1.00007      1.0000      1.0000      1.0000      1.00008      1.0000      1.0000      1.0000      1.00009      1.0000      1.0000      1.0000      1.000010      1.0000      1.0000      1.0000      1.000011      1.0000      1.0000      1.0000      1.0000lu6chk警告。矩阵似乎是奇异的。nrank=U的8级n-nrank=3级缺陷nsing=3个奇点jsing=10最后一个单数列dumax=1.00E+00最大三角形对角线dumin=1.00E+00最小三角形对角LUSOL 5.4因子化统计压缩0优点0.00 LenL 0 LenU 14增加0.00 M 11 UT 11 D1 0L最大值0.0E+00 B最大值1.0E+00 U最大值1.0E+00 U最小值1.0E+00增长1.0E+00 LT 0 BP 0 D2 0LUSOL 5.4因子分解统计压缩机0优0.00 LenL 0 LenU 11增加0.00 M 11 UT 11 D1 0L最大值0.0E+00 B最大值1.0E+00 U最大值1.0E+00 U最小值1.0E+00增长1.0E+00 LT 0 BP 0 D2 0建造人工立柱---三排不可行。---最大不可行:3.250E+02---带有3个元件的人造柱。---旋转第9行以替换第20列---枢轴元件:-3.250E+02

表6带有调试输出的状态文件(第4页,共4页)

LEMKE枢轴台阶=================ITER状态Z%Z0错误信息。----枢轴----进出1 1.00 0 1.000 3.东经+02 1.东经+00 1 Z0西经92 1.00 9 1.000 1.东经+00 1.东经+00 2 Z 9西经13 1.00 18 0.997 9.E-01 9.E-01 1 Z 1 W 104 1.00 27 0.997 1.E+00 1.E+00 1 Z 10 W 25 1.00 36 0.996 9.E-01 4.E-01 1 Z 2 W 116 1.00 45 0.996 1.东经+00 1.东经+00 1 Z 11西经67 1.00 55 0.479 2.东+00 1.东+00 1 Z 6西78 1.00 64 0.479 1.东经+00 1.东经+00 1 Z 7西经49 1.00 73 0.000 1.东经+00 1.东至+00 2 Z 4西至810 1.00 73 0.000 1.E-03 2.E-03 1 V 8 Z0================================收敛报告,迭代1===============================================================ITER偏差步骤0 3.25E+02 1.00E+001 1.14E-13 1.00E+00(W_02)===============================================================迭代1值。世界其他地区Z F--------    ------------             ------------X_01_01 2.50000E+01-8.32667E-17X_01_02 3.0万e+02-5.55112E-17X_01_03 L 0.00000电子+00 3.60000E-02X_02_01 3.000000电子+02-8.32667E-17X_02_02 L 0.00000E+00 8.9999E-03X_02_03 2.75000E+02 2.77556E-17W_01 1.00000东经+00-1.13687E-13W_02 1.00000东经+00 1.13687E-13P_01 1.22500E+00 0.00000E+00P_02 1.15300E+00 0.00000E+00P_03 1.12600E+00 0.00000E+00主要迭代。。。。。。。。1Lemke枢轴。。。。。。。。。。。。10重构。。。。。。。。2偏离。。。。。。。。。。。。。。。1.137E-13号机组解决了的。总解决时间:0.6秒。函数和雅可比:0.2秒。LCP溶液……..:0.2秒。重构……:0.1秒。FTRAN…………:0.0秒。更新。。。。。。。。。。。。。。:0.1秒。

终止消息

INVERT中的基分解错误。LUSOL返回意外错误代码。这通常不会发生。检查状态文件中是否有来自LUSOL的消息9).

未能收敛。两次连续迭代是相同的-牛顿搜索方向未定义。这通常不会发生。

参数不一致ZTOLZ0公司,ZTOLZE公司. ZTOLZ0公司确定加载到覆盖向量\(h\)中的最小值,而兹托尔泽是Harris枢轴选择程序中采用的可行性公差。如果ZTOLZ0<-ZTOLZ,Lemke的算法无法执行,因为初始基不可行。

线性化空间不足。可用内存不足以保存雅可比矩阵中的非零。需要分配更多内存。如果{雅可比}矩阵的空间不足,则内存太少,无法容纳同一矩阵的LU因子。

空间不足,无法反转。需要为基本因子分配更多内存。增加的值LUSIZE(卢森堡)在选项文件中,或为<模型>.workspace.

超过了迭代限制。这可能是由于超过了主(牛顿)或次(莱姆克)迭代限制。当从GAMS调用MILES时,可以使用语句设置累积Lemke迭代限制<模型>.iterlim=xx};。牛顿迭代极限默认为100,只能通过伊特利姆选项。

资源中断。CPU运行时间超过选项参数RESLIM公司。要增加此限制,请添加RESLIM公司=选项文件中的xxx或添加GAMS语句<型号>。RESLIM=xxx;.

遇到奇异矩阵。Lemke的算法由于基因子分解中出现的奇异性而中断,无论是在列替换期间还是在重构期间。由于某些原因,无法重新启动。

在次级射线上终止。Lemke的算法终止于次级射线。由于某些原因,无法重新启动。

未知终止状态。尚未设置终止状态标志,但代码已中断。在状态文件中查找上一条消息。这种终止代码不应该经常出现。

工具书类

K.J.Anstreicher、J.Lee和T.F.Rutherford“冲击最大值”权重互补基础”,数学规划。(1992)

A.Brooke、D.Kendrick和A.Meeraus《游戏:用户指南》,科学出版社,(1987年)。

R.W.Cottle和J.S.Pang《线性互补问题》,学术出版社,1992年。

J.E.Dennis和R.B.Schnabel“无约束数值方法优化和非线性方程”,Prentice-Hall(1983)。

S.Dirkse“混合互补问题的稳健解”,威斯康星大学计算机科学系(1992年)。

B.C.Eaves,“局部二次收敛算法计算静止点”,技术代表,斯坦福大学运筹学系,加利福尼亚州斯坦福(1978)。

P.E.Gill、W.Murray、M.A.Saunders和M.H.Wright“维护一般稀疏矩阵的LU因子”,线性代数及其应用88/89239-270(1991)。

C.B.Garcia和W.I.Zangwill“解决方案之路,固定点,和平衡”,Prentice-Hall(1981)

P.Harker和J.S.Pang“有限维变分不等式与非线性互补问题综述理论、算法和应用”,《数学规划》48,第161-220页(1990年)。

W.W.Hogan,“项目独立性的能源政策模型”,《计算与运营研究2》(1975)251-271。

N.H.Josephy,“广义方程的牛顿法”,《1965号技术总结报告》,威斯康星大学麦迪逊分校数学研究中心(1979年)。

I.Kaneko,“n乘2n‘P’的线性互补问题-矩阵”,《数学规划研究7》,第120-141页,(1978年)。

C.E.Lemke“双矩阵平衡点和数学编程”,《管理科学》11,第681-689页,(1965年)。

L.Mathiesen,“通过序列计算经济平衡线性互补问题”,《数学规划研究》23(1985)。

P.V.Preckel,“NCPLU 2.0版用户指南”,工作文件,普渡大学农业经济系,(1987年)。

W.H.Press,B.P.Flannery,S.A.Teukolsky,W.T.Vetterling《数字配方:科学计算的艺术》,剑桥大学出版社(1986)。

J.M.Ortega和W.C.Rheinboldt,“非线性迭代解多变量方程”,学术出版社(1970)。

S.M.Robinson,“通用二次收敛算法非线性规划问题”,《数学规划研究3》(1975年)。

T.F.Rutherford“GAMS对变分和互补问题及其在经济学中的应用均衡分析”,工作文件92-7,科罗拉多大学经济系(1992a)。

T.F.Rutherford“应用一般均衡建模MPS/GE作为GAMS子系统”,工作文件92-15,科罗拉多大学经济系(1992b)。

表7GAMS/MCP中的运输模型(第1页,共2页)
*==>TRNSP。总经理
选项mcp=英里;

$TITLE线性规划运输问题作为一种经济均衡*=================================================================*在这个文件中,Dantzig的原始运输模型是*重新表述为线性互补问题。我们首先*求解需求量和供应量固定的模型,以及*然后我们将价格响应纳入*市场。**T.卢瑟福3/91(修订于5/91)*       =================================================================*此问题找到满足以下条件的最低成本发货时间表*市场需求和工厂供应**参考文献:*Dantzig,G B.,线性规划与扩展*普林斯顿大学出版社,新泽西州普林斯顿,1963年,*第3-3章。**第2章详细描述了该公式*(Richard E.Rosenthal)的《GAMS:用户指南》。*(A Brooke、D Kendrick和A Meeraus,科学出版社,*加利福尼亚州红木市,1988年。*SETS(设置)罐头厂/西雅图,SAN-DIEGO/J市场/纽约、芝加哥、托皮卡/;参数A(I)工厂I的产能(当价格统一时)/西雅图325SAN-DIEGO 575/,B(J)市场J的需求(当价格相等时)/纽约325芝加哥300TOPEKA 275/,ESUB(J)需求价格弹性(价格等于单位)/纽约1.5芝加哥1.2TOPEKA 2.0/;表D(I,J)距离(单位:千英里)纽约芝加哥托皮卡座椅2.5 1.7 1.8三自2.5 1.8 1.4;SCALAR F运费,每千英里每箱美元/90/;参数C(I,J)运输成本,单位为每箱数千美元;C(I,J)=F*D(I,J)/1000;PARAMETER PBAR(J)需求节点J的参考价格;

表8GAMS/MCP中的运输模型(第2页,共2页)

正变量W(I)供应节点I的影子价格,P(J)需求节点J的影子价格,X(I,J)箱中的装运数量;方程式供应(I)工厂I的供应限制,FXDEMAND(J)市场J的固定需求,PRDEMAND(J)市场J的价格响应需求,利润(I,J)零利润条件;利润(I,J)。。W(I)+C(I,J)=G=P(J);供应(I)。。A(I)=G=总和(J,X(I,J));FXDEMAND(J)。。总和(I,X(I,J))=G=B(J);普德曼(J)。。总和(I,X(I,J))=G=B(J)*(PBAR(J)/P(J))**ESUB(J;*声明模型,包括方程变量关联的规范:型号固定数量/利润。十、 供应。W、 FXDEMAND公司。P/;型号设备/利润。十、 供应。W、 普德曼。P/;*初步估算:P.L(J)=1;W.L(I)=1;参数报告(*,*,*)总结报告;用MCP求解固定量;报告(“固定”,I,J)=X.L(I,J;报告(“固定”,“价格”,J)=P.L(J);报告(“固定”,I,“价格”)=W.L(I);*校准需求函数:PBAR(J)=P.L(J);*复制固定需求平衡:用MCP等效求解;报告(“EQUIL”,I,J)=X.L(I,J);报告(“同等”,“价格”,J)=P.L(J);报告(“EQUIL”,I,“Price”)=W.L(I);显示“基准校准”,报告;*计算反实际平衡:C(“西雅图”,“芝加哥”)=0.5*C;用MCP求解固定量;报告(“固定”,I,J)=X.L(I,J;报告(“固定”,“价格”,J)=P.L(J);报告(“固定”,I,“价格”)=W.L(I);*复制固定需求平衡:用MCP等效求解;报告(“EQUIL”,I,J)=X.L(I,J);报告(“同等”,“价格”,J)=P.L(J);报告(“EQUIL”,I,“Price”)=W.L(I);显示“降低了西雅图-芝加哥的运输成本:”,REPORT;

1)GAMS还提供了另一个MCP解算器:PATH(Ferris and Dirkse,1992),有关比较,请参阅\ref UG_PATH_VS_MILES。

2)α和λ符合符合用户指定的公差DMPFAC公司MINSTP公司分别是。

3)Kaneko(1978)为线性化子问题提供了一些收敛理论

4)在以下方面x个+=最大值(x,0)

5)参数第页可以选择带输入参数正常。的默认值第页+∞.

6)以英里为单位,B类0使用初始赋值进行选择对于z(z).什么时候?z(z)<=升, 然后x个B类=宽我';什么时候z(z)>=单位, 然后x个B类=v;否则x个B类=z

7)当前版本的代码只设置B类0=-Ix个B类=w当用户特定的基础是单一的。代码的后续版本将包含以下描述的算法Anstreicher、Lee和Rutherford[1992],用于应对奇点。

8)如果所有结构变量都有有限的上下限,那就不z(z)变量可能是同质解决方案的一部分与次射线相邻。然而,这并不意味着次级射线都是不可能的z(z)变量有界,如射线然后可以由以下部分组成w个v(v)变量。

9)在GAMS中,在求解语句之前插入行“OPTION SYSOUT=ON;”并重新提交程序,以便通过MILES解算器状态文件添加到列表中。