cplex翻译完全版 下载本文

CPLEX 12

目 录

1. 简介 ........................................................................................................................... 3 2. 怎么用Cplex运行模型 ............................................................................................ 3 3. Cplex概览 ................................................................................................................. 3

3.1线性规划 .......................................................................................................... 3 3.2二次约束规划 .................................................................................................. 4 3.3混合整数规划 .................................................................................................. 4 3.4 可行松弛性 ..................................................................................................... 5 3.5 解池:产生和保持多解 ................................................................................. 5 4. GAMS选项 ................................................................................................................ 9 5. Cplex选项总结 ....................................................................................................... 10

5.1 预处理和一般选项 ...................................................................................... 10 5.2 单纯形法选项 .............................................................................................. 12 5.3 单纯形法的限制选项 .................................................................................. 12 5.4 单纯形法的容限选项 .................................................................................. 13 5.5 障碍特殊选项 .............................................................................................. 13 5.6 筛选特殊选项 .............................................................................................. 13 5.7 混合整数规划选项 ...................................................................................... 13 5.8 混合整数规划限制选项 .............................................................................. 15 5.9 混合整数规划解池选项 .............................................................................. 16 5.10 混合整数规划容许度选项 ........................................................................ 16 5.11输出选项 ..................................................................................................... 17 5.12 GAMS/Cplex选项文件 ................................................................................ 17 6. 特殊备注 ................................................................................................................. 18

6.1 物理内存限制 .............................................................................................. 18 6.2 使用特殊有序集 .......................................................................................... 18 6.3 使用半连续半整数变量 .............................................................................. 19 6.4为求解MIP问题耗尽内存 ........................................................................... 19 6.5 不能证明整数最优 ...................................................................................... 20 6.6 从混合整数规划的解开始 .......................................................................... 20 6.7 使用可行松弛性 .......................................................................................... 21 7. GAMS/ CPLEX日志文件 ......................................................................................... 22 8. CPLEX选项的详细说明 .......................................................................................... 25

1. 简介

GAMS/Cplex是一种用于GAMS (The General Algebraic Modeling System,通用代数建模系统)的求解器,它使得用户可以把GAMS(通用代数建模系统的)的高级建模功能跟Cplex优化器的优势结合起来。Cplex优化器是为能快速、最少用户干预地解决大型、复杂问题而设计的。求解线性、二次约束和混合整数规划问题的Cplex算法现在已提供访问(针对恰当的许可证)。尽管现存有多种求解工具,但是,GAMS/Cplex能自动地为特定问题计算最优值和设置大部分选项。

本文接下来总结了GAMS/Cplex的所有Cplex选项。

2. 怎么用Cplex运行模型

要在GAMS中指定使用Cplex,可以用一下语句:

Option LP = Cplex; { or QCP,NIP,NIQCP,RNIP or RNIQCP }

上述语句应该出现在Solve语句的前面。MIP和QCP功能是单独许可的,所以你有可能在你的系统里面不能用Cplex来解决这几类问题。如果在安装GAMS的过程中,Cplex是指定默认的求解器,那么上述语句是不必要的。

3. Cplex概览

3.1线性规划

Cplex 可以使用几种可选的算法解决线性规划问题。大部分的线性规划问题最好是使用对偶单纯算法的Cplex语句。有一些问题用原始单纯算法、网络优化器、障碍算法或者筛选算法来求解好一些。并行选项允许并行使用不同的算法。第一个结束的算法返回最终结果。

求解线性规划问题需要很大的内存。尽管Cplex能非常有效地管理内存,但是当运行大型的线性规划问题时,物理内存不足仍然是最常见的问题之一。当内存收到限制时,Cplex会自动地调整那些可能会造成消极影响的功能。如果你正在解决大规模的模型,一定要仔细研究“物理内存限制”这节。

Cplex使用默认的选项设置来解决大部分的线性规划问题。这些设置通常提供了问题的全局最优的优化速度和可靠性。然而,有的时候有某些原因导致更改选项能改善性能,避免数值难题,控制优化运行时间或控制输出选项。

有些问题用原始单纯算法求解比用对偶单纯算法快。极少的问题用这两种算法都表现不良。因此,可以在使用对偶单纯算法出现数值难题时考虑使用原始单

纯算法。

对于网络模型,Cplex有一个非常有效的算法。网络限制包括以下属性: ? 每个非零的系数不是1就是-1;

? 这些约束的每一列都有两个非零项,一个系数为1,另一个为-1。 只要他们能转化为具有这些属性,Cplex能自动提取那些不遵守上述规则的网络。

障碍算法是用单纯方法解决线性规划的另一选择。它使用了产生一系列严格正的原始解和对偶解的原——对偶障碍算法。对于大型的稀疏问题,选择障碍算法可能是有优势的。

Cplex 提供了一种筛选算法,这种算法在变量多于约束的问题中会更有效。筛选算法解决了一类线性规划问题,这类线性规划的子问题的结果被用来从原始模型选择列,以列入下一子问题。

GAMS/Cplex 还提供了访问Cplex 不可行搜索器的接口。不可行搜索器对于不可行的线性规划,产生不可简化的、不一致的约束集(IIS)。IIS是这样的集合:约束和变量范围是不可行的,但是,当丢弃其中一个条件时,就会变成可行的集合。当GAMS方程式和变量命名和包括了IIS报告并把它作为正常解列表的一部分时,GAMS和Cplex就会报告IIS。IIS只对线性规划问题有用。 3.2二次约束规划

Cplex可以求解带有二次约束的模型。它们在GAMS中用QCP模型表示。QCP模型用Cplex 障碍方法求解。

QP模型是一种特殊情形,它可转型为含有二次目标函数和线性约束。转型直接可以从GAMS QCP自动转化,并且可以用求解Cplex QP的方法(障碍算法、 单纯形法和对偶单纯形法)求解。

对于QCP模型,Cplex只返回原始解,QP模型还返回对偶解。 3.3混合整数规划

用来求解纯整数规划和混合整数规划的方法比求解同样规模的纯线性规划问题的方法需要更多的数学计算。许多相对小一点的整数规划模型都需要大量的时间来求解。

对于整数变量的问题,Cplex采用分支定界算法,解决了一系列的线性规划问题、子问题。由于一个混合整数规划问题产生了许多子问题,即使是小的混合整数问题,计算强度也是非常大的,并且需要大量的物理内存。

GAMS和GAMS/Cplex支持类型1、类型2和半连续半离散的变量的特殊命令集。

Cplex也可以求解MIQCP(混合整数二次规划)型的GAMS模型问题。正如连续型的情形,如果基本模型是个二次规划(QP),那么在求解中,单纯形法和对偶单纯刑法均可用。如果基本模型是二次约束规划问题(QCP),那么在求解中只有障碍算法可用并且只能得到原始值。 3.4 可行松弛性

不可行的寻找者找到通过约束不一致的集合(IIS)的方法找到不可行的原因。然而,你可能没有诊断就对你的模型进行自动校正,然后继续提交答案。这样做的另一个方法就是建立带有明确松弛变量和其它建模结构的模型,以使得不可能出现不可行解。GAMS/Cplex提供的一种自动的方法就是可行优化方法(For Feasible Optimization),它由Cplex 选项文件中的feasopt参数打开。详情见章节——可行松弛性的使用(Using the Feasibility Relaxation)。 3.5 解池:产生和保持多解

本章介绍了存储混合整数规划问题(MIP和MIQCP)的多个解的解池。本章同时还讲解了产生和管理这些解的技术。

解池存储了混合整数规划(MIP和MIQCP)的多个解。有了这个特征,你就可以引导算法产生除了最优解的多个解。例如,有些约束很难有效地表达成线性表达式,或者目标可能很难精确量化。在这种情况下,获取多个解会帮助你选择其中一个最符合你所有准则的解。这些准则包括那些不能简单用常规的混合整数规划或混合二次约束规划模型表达的准则。例如,

? 你可以在最优解的一定比例内收集解。为了这样做,要应用解池间隙参

数solnpoolagap和solnpoolgap。

? 你可以收集不同解的集合。为了这样做,要使用解池的替代参数

SolnPoolReplace来设置解池的替代战略为2。为了控制解的多样性,使用多样性过滤器。

? 在这个特征的高级应用里面,你可以收集具有某些特殊属性的解。为了

这样做,请见现任过滤器(incumbent filter)的使用方法。

? 你可以收集模型的所有解和最优解。为了这样做,把解池的强度参数

SolnPoolIntensity设置为它的最大值。

填充解池

填充与模型相关的解池的方法有两个:你可以累计连续的现解或通过移入解池产生可选的解。这个方法是由参数SolnPoolPop选择的。

? 现解一经发现,常规的优化程序就会自动地把它添加到解池

(SolnPoolPop=1)。

? Cplex还提供了一个专门产生多个解的程序。你可以通过设置选项

SolnPoolPop=2来调用这个程序。你可以多次调用该程序去寻找多个解,特别是第一个找到的解并不是很让人满意的时候。这是通过制定一个GAMS程序(选项SolnPoolPopRepeat)来考察解。在这个GAMS程序正常终止,也就是没有执行或编译错误的情况下,就会继续寻找可选的解 选项SolnPoolPopRepeat在解池饱和的情况下,指定替换解的策略。值0代表了根据先进先出规则的方法替换解。值1保留了最佳目标值的解。值2是以建立多样性的解集的规则替换解。

如果你获得的解彼此都太过相似,请尝试把SolnPoolPopRepeat设为2。 替换策略仅适用于由当前调用的解的子集,而不影响解池中已有的解。解池中的解即使满足替换条件,也不会被替换掉。所以每一次完整的重复调用转移程序,解池就会被新发现的解扩展一个。在GAMS程序指定决定继续搜索可选解的SolnPoolPopRepeat后,由选项SolnPoolPopRepeat指定的文件就会被读入。文件中解的个数在转移程序被再次调用之前会被删掉。程序执行结束,GAMS/Cplex会自动删掉这个文件。

详情请参见GAMS模型库的模型solnpool。 枚举所有解

有了解池,你可以收集模型的所有解。为了这么做,须设置解池强度参数SolnPoolIntensity为最大值4并设SolnPoolPop=2。

你也可以枚举所有的可行解。例如,如果你想枚举所有可选择的最优解,做如下设置:

? 设置池绝对间距参数SolnPoolAGap=0.0。

? 设置池强度参数SolnPoolIntensity=4。

? 设置转移限制参数PopulateLim 对于你的模型足够大,例如,

2100000000。

? 设置池转移参数SolnPoolPop=2。

请注意,但是即使是小模型,解的数目也有可能是很大的。因此,枚举所有的解需要消耗大量的时间和内存。

连续变量可能会有无数的解,所以实际上在电脑中不可能枚举所有的解。因此,转移只在一组二进制集合中给出一个解。而对于二进制和整数变量,即使可能存在着值是一样的几个解,但是对于连续型变量,解的值是不一样的。

同样地,因为同样的原因,转移程序对无限模型并不产生所有的可行解。只要有无限的迹象,转移程序就会停止。

Cplex使用有限精度数值的数学方法,因此,解的可行性取决于一定的容差性。评价解得可行性的容差度由两个参数决定:

? 完整性容差度EnInt ? 可行性容差度EpRHS

一个解可能因为一对参数的值决定而被认为是可行的,因为另一对不同的参数值而被认为是不可行的。这个现象在数值上有困难的模型中尤其明显,例如,在大M系数模型。

由于可行解的定义受容差度影响,用不同的枚举解的方法或容差度的精确程度,所得到的模型的解的数目可能是不同的。在大部分模型中,容差度问题不算是个问题,但是在数字难题面前,Cplex可能创造稍微不可行或整数不可行的,从而可行得出比预期更多的解。 过滤解池

过滤使得你能控制产生和存储在池中的解的属性。Cplex提供了两种预定义的方法来过滤解。

如果你想基于与参考解的差异来过滤解,就使用多样性过滤器。这个过滤器对于大多数目标是切实可行的。然而,如果你需要更好地控制保留哪个解去除哪个解,就使用现任过滤器(incumbent filter)。

多样性过滤器

一个多样过滤器使你能产生与你为二进制变量集合指定的一组参考值相似(或不同)解,这个二进制变量集合是使用点选项divflt和上下限divfltlo和divfltup决定的。特殊地,你可以使用多样性过滤器产生更多的与现有的解或部分解相似的解。如果你需要多于一个多样性过滤器,比如,产生拥有多个不同解的特征的解,可以通过Cplex过滤器文件使用参数ReadFLT指定多个过滤器。详情请见GAMS模型库中的例子模型solnpool。 现任过滤器

如果你约束比较复杂(如非线性约束),就可以使用现任过滤器。现任过滤器的检查路径是GAMS BCH设施的一部分。它会独立于解池接受或拒绝现解。在转移或其他普通的程序中,现解检查路径是由参数userincbcall指定的,当发现一个新解,尽管新解并没有当前的目标值,现解检查路径就会被调用。现任过滤器使得你的程序能够基于你自己的标准接受或拒绝新解。如果由userincbcall指定的GAMS程序正常终止,解就被拒绝了。如果程序返回一个编译或执行错误,现任解就会被接受。 评价解池

如果GAMS/Cplex链接程序被正确引导,一个包含元素file1、file2,??名为SolnPool的GDX文件就会被创建。这些元素相关的文本包含各个独立的GDX解文件的文件名。它的名字是使用前缀soln(通过选项SolnPoolPrefix指定)、模型的名字和一系列数字组成的。比如,soln loc p1.gdx。GAMS/Cplex覆盖现存的GDX文件而不会被警告。指标集使得我们能方便地遍历解池中得不同解: ...

solve mymodel min z using mip;

set soln possible solutions in the solution pool /file1*file1000/ solnpool(soln) actual solutions; file fsol;

execute_load 'solnpool.gdx', solnpool=Index; loop(solnpool(soln),

put_utility fsol 'gdxin' / solnpool.te(soln):0:0; execute_loadpoint; display z.l; );

4. GAMS选项

下列的GAMS选项是在GAMS/Cplex中使用的: 选项 Bratio = x;

决定是否使用高级基础。数值1.0表示GAMS不用高级基础引导Cplex。数值0.0表示GAMS从任意可用信息构造基础。默认值0.25 通常会使得GAMS在求解语句执行过的时候用到高级基础。

选项IterLim = n;

设置单纯迭代极限。单纯形算法会终止或传递现解给GAMS。在前解pre-solve完成后,后解路径就会在报告解决方案前被激活。

Cplex处理MIP(混合整数规划)问题的迭代限制时与别的GAMS求解器不同。每个节点都会应用迭代限制,而不是所有的节点一起应用迭代限制。对于MIP问题,有限使用通过限制执行时间(ResLim)控制解运行的时间。

同样地,当使用筛选算法时,每次筛选迭代都会应用到迭代极限(例如,每次Lp)。筛选迭代的数目可通过设置Cplex参数siftitlim,它代表使用迭代时报告给GAMS的筛选迭代次数。

选项 ResLim = x;

以秒为单位设置时间限制。该算法会终止或传递当前解给GAMS,在前解pre-solve完成后,后解路径就会在报告解决方案前被激活。

选项 SysOut = On;

(Will echo Cplex messages to the GAMS listing file.)这个选项在求解失败时有用。

ModelName.Cheat = x;

Cheat的值:每一个新的整数解肯定比前一个解至少优x。它可以加速搜索,但是你可能错失最优解。Cheat参数指定为绝对值(如OptCA选项)。Cplex选项objdif能覆盖GAMScheat参数。

ModelName.Cutoff = x;

Cutoff的值:当分支定界搜索开始时,如果树中有部分分支的目标值比x差,就会被剪枝。这也同样可以缩短分支定界算法的初始阶段的时间。

ModelName.NodLim = x;

处理混合整数规划问题的最大节点数。

ModelName.OptCA = x;

混合整数规划问题的绝对最优判据。 ModelName.OptCR = x;

混合整数规划的相对最优判据。注意,Cplex使用与GAMS通常使用的定义不同。当满足下式时OptCR要求Cplex停止:

(BP?BF)(1.0??10?BF)?OptCR

BF是当前最优整数解的目标函数值,而BP是可能最优的整数解的目标函数值。GAMS的定义是:

?BP?BF??BP??OptCR

ModelName.OptFile = 1;

指导Cplex读取选项文件,选项文件的名字是cplex.opt。 ModelName.PriorOpt = 1;

指导Cplex使用GAMS通过变量.prior参数传递的优先分支信息。 ModelName.TryInt = x;

促使GAMS/Cplex求解混合整数规划时使用当前变量值。如果变量值在x范围内,那么这个变量就会被移动到这个范围内,同时它的首选分支方向被设置为指向这个范围。首选分支方向仅在优先权被使用时有效。优先权和Tryint有时不是很有效,但它们一般都优于GAMS / CPLEX的默认设置。如果想了解有关用不同方法把已知解传递给GAMS / CPLEX的知识,请阅读章节——从混合整数规划问题的解开始。

5. Cplex选项总结

这里以目录的形式列了各种Cplex选项,还以简短的文字介绍了其功能。在本文的最后一节,将会再次以字母顺序详细介绍这些选项。 5.1 预处理和一般选项

advind 高级基础使用 aggfill 聚合器填充参数 aggind 聚合器开/关

clocktype 计算时间的时钟类型 coeredind 系数降低开/关 depind 依赖性检查开/关

feasopt 计算使得不可行模型可行的最小消耗松弛性。 feasoptmode FeasOpt模式 .feaspref 可行性偏好

interactive 允许在Control-C之后允许交互选项设置 lpmethod 用于LP问题的算法 memoryemphasis 减少内存的使用 names 加载GAMS名字到Cplex中

numericalemphasis 在数值不稳定或困难问题中加强精确度。 objrng 做目标范围 parallelmode 并行优化模式 predual 把对偶问题给优化器 preind 打开/关掉预先求解器 prelinear 线性还原指标

prepass 演示预先求解器应用的数目

printoptions 列出GAMS列表文件的所有选项的值 qpmethod 用于求解QP问题的算法 reduce 原始和对偶还原模型

relaxpreind 打开/关掉初始松弛性的预先求解 rerun 如果预先求解不可行或无界,重新运行该问题 rhsrng 做右测距

rngrestart 写GAMS可读排列信息文件 scaind 矩阵缩放开/关

solutiontarget 求解凸连续二次模型时解得类型 threads 全局默认线程数

tilim 重写GAMSResLim选项 tuning 调用参数自动调整工具

tuningdisplay 自动调整工具报告信息的层次 tuningmeasure 评价一套模型进展的方法 tuningrepeat 在受扰动版本中的调整次数

tuningtilim 在每个模型或每组模型中调整次数限制 workdir 工作文件目录 workmem 可用内存 5.2 单纯形法选项

craind 碰撞策略(用来获取开始依据) dpriind 对偶单纯形法评价 epper 扰动常量

iis 如果问题不可行运行IIS搜索器 netfind 尝试网络提取 netppriind 网络单纯形法评价 perind 实行初始扰动

perlim 在扰动前陷于停顿迭代的次数 ppriind 初始单纯形法评价 pricelim 评价候选名单 reinv 重构频率 5.3 单纯形法的限制选项

itlim 迭代极限

netitlim 网络单纯形法的迭代极限 objllim 目标函数值下限 objulim 目标函数值上限 singlim 特别修复限制

5.4 单纯形法的容限选项

epmrk Markowitz中心宽容度 epopt 最优宽容度 eprhs 可行性宽容度

netepopt 网络单纯形法的最优宽容度 neteprhs 网络单纯形法的可行性宽容度 5.5 障碍特殊选项

baralg 算法选择 barcolnz 密集柱处理 barcrossalg 障碍交叉方法 barepcomp 收敛宽容度 bargrowth 无界face检测 baritlim 迭代限制 barmaxcor 最大修正限制 barobjrng 最大目标函数 barorder 算法选择排序

barqcpepcomp 求解QCP问题的障碍优化法的收敛宽容度 barstartalg 障碍起点算法 5.6 筛选特殊选项

siftalg 筛选子问题算法 siftitlim 筛选迭代限制 5.7 混合整数规划选项

bbinterval 最优间隔范围 bndstrenind 边界加强 brdir 设置分支方向 bttol 回溯限制

cliques 派系剪切代 covers 覆盖剪切代 cutloff 为树搜索先下剪切 cuts 默认剪切代 cutsfactor 剪切限制 cutup 树搜索向上剪切 disjcuts 分离剪切代

divetype 混合指数规划潜水策略 eachcutlim 设置剪切类型的限制 flowcovers 流动覆盖剪切代 flowpaths 流动路径剪切代 fpheur 可行性泵启发式 fraccuts 戈莫里分数剪切代 gubcovers 覆盖剪切代上界 heurfreq 启发式频率 implbd 隐含约束剪切代 lbheur 局部分支启发式 mcfcuts 多物品流剪切代

mipemphasis 混合整数规划解策略 mipkappastats 混合整数规划kapa计算 mipordind 最优列表开/关 mipordtype 最优顺序排列代 mipsearch 混合整数规划的搜索策略 mipstart 使用混合整数规划初始值 miqcpstrat 混合整数二次规划松弛性选项 mircuts 混合整数粗略剪切代 node_leind 节点存储文件指标

nodesel 节点选择策略 preslvnd 节点欲求解选择器 probe 在解决混合整数规划之间搜索

qpmakepsdind 调整混合整数二次约束公式,以使二次矩阵正半明确 relaxfixedinfeas 在解决固定问题时获得不可行性 repeatpresolve 在预处理后重新从根开始预求解 rinsheur 邻域搜索引导的松弛性 solvefinal 用固定离散变量转化解决问题 startalg混合整数规划开始算法 strongcandlim 强分支候选名单的大小 strongitlim 强分支的每个数值的迭代限制 subalg 求解子问题的算法

submipnodelim 在RINS子混合整数规划的节点数限制 symmetry 对称性破坏剪切 varsel 每个节点上的变量选择策略 zerohalfcuts 零——半剪切 5.8 混合整数规划限制选项

aggcutlim 剪切代的算法限制

auxrootthreads 根节点辅助任务的线程数

cutpass maximum number of cutting plane passes剪切平面的最大数目 fraccand 产生格莫瑞分数剪枝的候选限制 fracpass 产生格莫瑞剪枝的最大流程次数 intsollim 整数解的最大数目 nodelim 要求解的最大节点数目

polishafterepagap 开始求解可行解前的绝对混合整数规划差距 polishafterepgap 开始求解可行解前的相对混合整数规划差距 polishafternode 开始求解可行解前进程节点

polishafterintsol 开始求解可行解前找到的绝对混合整数规划整数解 polishaftertime 开始求解可行解前的时间 probetime 搜索花费的时间

repairtries 尝试修复不可行MIP的开始 trelim 树的最大内存空间 5.9 混合整数规划解池选项

divtup 多样性的上界 divfltlo 多样性的下界 .divflt 解池范围过滤系数

populatelim 通过转移方法为解池产生的解的限制 readflt 读取Cplex解池过滤文件 solnpool 解池文件名字

solnpoolagap 解池中的解的绝对容忍度 solnpoolcapacity 解池中保留的解的限制 solnpoolgap 解池中的解的相对容忍度

solnpoolintensity 能够产生多个解的解池的强度 solnpoolpop 转移解池的方法

solnpoolpopdel 包含从解池中删除的解的个数的文件 solnpoolpoprepeat 决定是否重复移植解的方法 solnpoolprefix GDX文件的文件名字前缀 solnpoolreplace 在解池中替换解的策略 userincbcall 调用现任检查程序的GAMS命令行 5.10 混合整数规划容许度选项

epagap 绝对停止容忍度 epgap 相对停止容忍度 epint 完整性容忍度

objdif 重写GAMS欺骗参数 relobjdif 相对欺骗参数 5.11输出选项

bardisplay 进展显示水平 clonelog 产生克隆日记 mipdisplay 进展显示水平 mipinterval 进展显示间隔

mpslongnum 数字输出的MPS格式文件精度 netdisplay 网络显示水平 quality 写解的质量统计 siftdisplay 筛选显示水平 simdisplay 单纯形法的显示水平 writebas 产生Cplex基础文件 writet 产生Cplex解池过滤文件 writelp 产生Cplex LP文件 writemps 产生Cplex MPS文件 writemst 产生Cplex mst文件 writeord 产生Cplex ord文件

writeparam 产生包含所有行为选项的Cplex参数文件 writepre 产生包含预求解问题的Cplex LP/MPS/SAV文件 writesav 产生Cplex 二进制问题的文件

5.12 GAMS/Cplex选项文件

GAMS/Cplex 选项文件每行中包含了一个选项或者一条命令。以星号(*)开头的一行将被忽略(即注释),没有星号的一行将被理解为被空白(空格或制表符)分开的选项名字或值。

下面是选项文件cplex.opt的示例:

scaind 1 simdisplay 2

它将导致Cplex用定标方法而不是默认值。迭代日记将能找到每次迭代而不能找到再分解。

6. 特殊备注

6.1 物理内存限制

为了运算速度,Cplex使用物理内存而不是虚拟内存或页内存。当Cplex一旦发现仅剩有限的内存可供使用,它将会自动运行算法进行调整补偿。这些调整几乎都会降低速度。学习发现自动调整的时间,有助于决定什么时候电脑需要添加内存。

在虚拟内存系统中,如果观察到磁盘内存分页,将会损失相当可观的性能。增加可用的内存会显著加速求解过程。同时考虑使用内存重点这一选项保留可能的内存。

Cplex执行一个叫做refactorization的操作的频率是由reinv选项设置决定的。执行refactorization操作的时间间隔越长,就需要越多的内存来完成每次迭代。因此,保留内存的一种方法就是增加refactorization的频率。由于refactorizing是代价昂贵的操作,通过降低reinv选项设置来提高refactorization频率通常会减低性能。在可用内存较低的情况下,Cplex通常会自动增加refactorization的频率。这可以在迭代日志中看到。默认的日志会报告每次refactorization的问题状态。如果迭代日志条目之间的迭代次数正在增加,说明Cplex正在增加refactorization的频率。由于Cplex可能在每次迭代中增加一,这对性能的影响是巨大的。这是提供额外的内存是有好处的。 6.2 使用特殊有序集

对于某些模型,可以利用一种特殊的结构。GAMS允许你声明SOS1和SOS2变量(类型1和2的特殊顺序集)。

在Cplex中SOS1变量的定义是: 最多有一个变量为非零的一组变量。 SOS2变量的定义是:

最多有两个变量为非零的一组变量,如果两个变量非零,那这两个变量在集

合中一定是相邻的。 6.3 使用半连续半整数变量

GAMS允许声明半连续半整数的变量。这些变量类型直接由GAMS/Cplex支持。比如:

SemiCont Variable x; x.lo = 3.2; x.up = 8.7;

SemiInt Variable y; y.lo = 5; y.up = 10;

变量x可以取值0.0或者介于3.2到8.7的任意值,变量y可以取值0或者任意介于5和10的整数值。

请注意,Cplex需要为semi-continuous和semi-integer变量确定一个有限的商界。

6.4为求解MIP问题耗尽内存

在解决混合整数规划中最常见的难题就是内存不足。这一问题出现在当分支定界树变得很大以至于可用内存不足以解决一个线性规划问题。由于内存变得紧迫,在Cplex试图在有限的内存引导多种操作时,你可能会观察到频繁的警告信息。如果一个解没有很快被找到,求解的过程会以一条不可挽回的整数失败信息告终。

内存中保存的数的信息应该是实质性的。Cplex为每个没有被搜索到的节点保存了基础。当利用节点选择中得最优界限方法时,对于大型的或复杂的问题,这种节点的清单会变得非常长。为搜索到的节点的清单有多大完全取决于可用物理内存的实际大小和问题的实际大小。确定的是,增加可用内存的大小能加强问题求解性能。不幸的是,一旦一个问题因为内存不足而失败,你将既无法预计进程还需要继续多远或者还需要多少内存来最终解决它。

内存限制可以使用workmen选项,和其中的nodefileind选项来限制。设置nodefileind为2或3会导致Cplex在分支定界树一长到比workmen选项指点的大小大时,就把分支定界树的一部分保存到磁盘。这个大小应该要比可用物理内存小。

修改求解过程的另一个方法就是利用更少的内存。

? 设置选项nodesel去使用最佳估计策略或者深度优先搜索。深度优先搜

索很少产生很大的未搜索的节点清单,因为Cplex会深深潜入分支定界树,而不是乱跳到树的其他分支。

? 设置选项varsel去使用强壮的分支。强壮的分支会在每个节点上花费额

外的计算时间去选择更好的分支变量,结果产生一个更小的树。这样通常会比较快。

? 在某些问题上,会产生大量的剪枝,而求解速度却没有产生相应大的好

处。使用选项cut可以关掉剪切代。

6.5 不能证明整数最优

解决混合整数规划问题的分解定界技术的一个令人沮丧的方面是求解过程可能会持续很长时间,而最优解却还没找到。记住,分支定界树可能会包含2n个节点,n等于二进制变量的个数。一个只包含30个二进制变量的问题可能产生包含大于一百万个节点的树!如果设置没有其他的终止准则,这个过程可能会无限地进行下去,直到搜索结束或者电脑内存耗尽。

通常来讲,你可以在开始优化前在优化过程设置至少一个限制。设置限制确保了在一棵太大的树会在合理的时间内终止。一旦终止,你可以使用一些不同的选项设置再次运行。考虑到前面提到的改善性能的一些捷径如设置选项mip gap、objective value diffierence、upper cutoff 和 lower cutoff。 6.6 从混合整数规划的解开始

你可以提供一个已知解作为第一个整数解(例如,从一个刚刚解过的混合整数规划问题或者从你对问题的理解得到)。当你提供了这样一个初始解,你可以调用松弛性诱导领域搜索(RINS启发式)或解抛光来改善已知解。第一个整数解可能包括各种连续变量和离散变量,例如半连续变量或特殊的命令集。

如果你为离散变量指定值,GAMS/Cplex会把值当做整数可行解来验证有效性。如果你只为部分离散变量指定值,GAMS/Cplex会试图尽量得到整数可行解的方式来填补空白的变量。如果指定值并没有直接得到整数解,GAMS/Cplex会应用快速启发式尝试修复MIP的初始解。CAMS/Cplex应用启发式算法的次数是由修复尝试参数(RepairTries)控制的。如果这个过程成功了,解就会被认为是当前问题的一个整数解。

一个MIP的初始解只有当MipStart参数被设为1时才被GAMS/Cplex使用。

6.7 使用可行松弛性

可行松弛性的使用与否是由Cplex求解器选项文件中得FeasOpt参数设置的。 通过FeasOpt选项,Cplex用最小化权重惩罚函数的方式接受一个可行模型并选择性地松弛变量范围和约束。本质上,可行松弛性试图说明最小的变化会获得可行性。它返回一个可行解给GAMS,并在列表文件的解区域用INFES标志来标识范围和约束的松弛性。

通过默认所有等式是松弛性的候补而且可近似相等,而且没有变量可以再松弛。这种默认行为可以通过设定变量范围和约束的松弛参数选项来修改。这些参数选项可以很方便用feaspref选项来指定。参数值为负数或零,则意味着相关的范围或约束不需要修改。权重罚函数是由三个参数选项构成的,参数值越大,就越可能一个给定的范围或约束会被松弛。然而,没有必要为每一个范围或约束都指定一个参数值。实际上,通常只会用0或1,除非你对问题的理解足以让你可以指定一个明确的参数值。

参数值可以通过Cplex求解器选项文件指定,语法如下: (variable or equation).feaspref (value) 例如,假如我们有一个GAMS声明: Set i /i1*i5/; Set j /j2*j4/;

variable v(i,j); equation e(i,j);

那么,cplex.opt文件中的松弛性选项值可以这样指定: feasopt 1 v.feaspref 1 v.feaspref('i1',*) 2 v.feaspref('i1','j2') 0 e.feaspref(*,'j1') 0 e.feaspref('i5','j4') 2

首先,我们要打开可行松弛性。此外,我们要指定所有变量v(i,j)都有一个选项值1,除了另设的元素变量i1的参数值为2,j2的参数值为0.请注意,参数选项是通过程序指定的,因此,后面指定的选项值可以覆盖前面的选项值。用来指定等式的选项值得语法是与上述一样的。

7. GAMS/ CPLEX日志文件

CPLEX通过 GAMS日志文件报告它的进程。通常,GAMS日志文件显示到计算机屏幕上。

日志文件显示有关presolve的统计数据,并继续运行迭代日志。

对于原始的单纯形算法,迭代日志开始迭代次数的规模是有着巨大的价值。一旦出现可行解,目标函数值就被显示出来。选项simdisplay的默认值是refactorization的每个日志行。屏幕中就会出现下列行:

对偶单纯形算法迭代日志是相似的,但对偶不可行和对偶重目标会被显示出来,而不显示相应的原始值,

网络算法的日志增加了提取网络和网络迭代日志的统计结果。优化的完成是由单纯形算法完成和迭代日志的产生为依据。

障碍算法的日志在迭代开始之前,要添加有关该问题各种算法的具体统计信息。迭代日志包括原始的对偶目标值和不可行的值。一个特殊的日志与一个基本的解决方案有交叉。

对于MIP问题,通过分支定界法的搜索,CPLEX会报告的节点数量、目标函数值、有小数值的整数变量的数目、目前最好的整数解,最好的放宽解和迭代次数。最后一栏以百分比的形式显示了当前的最优差距。CPLEX日志中,若发现任何节点最左边的列中有星号(*),则表示有一个整数可行的解决方案。+表示通过启发式方法找到的。

8. CPLEX选项的详细说明

在设置好GAMS模型名称后应在选项文件夹中输入选项。文件夹参数设置为1,命名为“CPLEX.opt。文件名不区分大小写并应输入完整的关键词

advind(整数)

使用先进的依据。 GAMS/ CPLEX会自动从之前的处理指令中作为一个先进的基础。 GAMS Bratio选项可用于指定当不使用先进的基础。在CPLEX 可以使用选项advind忽略通过GAMS(覆盖Bratio)传递的依据 (默认值= 由GAMS Bratio确定)

0使用先进的基础

1如果有,使不用先前的数据

2建造一个数据(使用之前的数据作为依据) aggcutlim(整数)

限制可用于生成流覆盖和混合整数的约束的数量。在常见的问题中,默认值是符合要求的。 (默认值=3)

aggfill(整数)

聚合填补限制。如果一次迭代的最终结果是非零而不是aggfill设置的参数值,迭代将不会进行。 (默认值=10)

aggind(整数)

当这个选项设置为非零值时,CPLEX聚合器将会使用迭代以减少问题中行数和列数。如果设置为正值,聚合器将指定迭代的次数,直到无法再进行削减。而当默认值为-1时,聚合器则用来规定线性规划的一次迭代和混合整数问题的无限制迭代

(默认值=-1)

-1 Lp一次,MIP无限制 0 不使用

auxrootthreads(整数)

当CPLEX解决问题的根节点时将它用在解决辅助任务的线程数量区分开。在一个提供了N个处理器或N个全局线程的系统中,如果将此参数设置为n,其中N> n> 0,那么CPLEX最多用n个线程解决辅助任务,N – n个线程解决根节点(同样参见参数线程)。

但不能将参数n的值,设为大于或等于N,,即系统所提供的处理器或全局线程的数量。换句话说,当您将此参数设置为一个默认值外的数值,那么该值必须严格小于系统中处理器或全局线程的数目。而独立于辅助根线程参数,CPLEX永远不会使用多于全局默认线程参数中定义的数量。CPLEX还确保有至少有一个线程用于主根任务。例如,如果设置全局线程参数为3,辅助根线程参数为4,则CPLEX用于辅助任务的还是只有两个线程,以保持一个线程可用于主根任务。当参数为默认值0时,CPLEX自动确定用于根本任务和辅助任务的线程数。 CPLEX用以解决根节点所使用的线程数取决于以下几个因素:1)系统中可用的处理器数量; 2)系统中可用于处理你的应用程序的线程数(例如,资源限制的结果或与其他应用程序的竞争); 3)全局默认线程总参数的值 。

(默认值= -1)

-1 关闭:在辅助任务上不使用额外的线程 0 自动:让CPLEX去确定要使用的线程数 N> n> 0 使用n个线程用于辅助任务 baralg(整数)

选择使用障碍算法。在处于默认设置0的情况下,开始启用适用于解决MIP的子问题和标准障碍算法,选项3适用于其他情况下,此时总是使用标准障碍算法。此外,选项1和2时启用替换算法,可以消除相关不可行的数值难点,但一般会比较慢。 (默认值=0)

0对于MIP子问题是相同的,其它问题见3 1不可行估算开始 2不可行的常量启动 3标准障碍算法 barcolnz(整数)

不管纵向数列在专门的算法组织里是否被认为是密集的决定因素,默认值设置为0时,这个参数是被动态决定的。输入数列中0以上的数值时,这个数列是密集的。

(默认值=0) Barcrossalg(整数)

不管选择什么数值,或者任意的,交叉算法在障碍最优化结束时会用到。 (默认值=0) -1没有交叉 0自动 1最初交叉 2双层交叉 Bardisplay(整数)

障碍算法在运行时,决定显示的进度信息等级 (默认值=1) 0没有进度信息 1显示正常的进度信息

2显示诊断信息 Barepcomp(真值)

决定障碍运算法则集中性的补充公差。如果相关的补充小于这个数值,运算法则会以最佳的解决方案结束。

(默认值=1e-008) bargrowth(真值)

由障碍算法用于检测无限最优解。值越高,障碍算法将越不可能做出认为这个问题有无限最优解的结论,但如果问题确实有无限最优解,那么可能存在数据问题。

(默认值=1E+012) baritlim(整数)

确定障碍算法的最大迭代次数。当设置为0,没有障碍迭代的发生,但存在设置的问题,并且会有有关设置的信息显示(如Cholesky分解信息)。在保持默认值时,不明确限制的迭代次数。

(默认值=大) barmaxcor(整数)

每次迭代中,应指定可围绕中心浮动的最大修正值,较大的值可能会提高障碍算法的效果但以计算时间会变长。当为默认值-1时意味着这个数字是自动确定的。

(默认值=-1) barobjrng(真值)

确定目标函数的最大绝对值。在此限制之内,障碍算法可以检测无限最优解的的问题。

(默认值=1E+020) barorder (整数)

确定屏障法要使用的排序算法。当默认值时,CPLEX会选出现有选择中最高效的一个。设定较高值会得出更好的排序结果,但是要花费更长的时间。

(默认值=0) 0 自动 1 最小近似值

2 Approximate Minimum Fill 3 Nested Dissection (ND) barqcpepcomp (实数) 范围:[1e-012, 1e+075] (默认值=1e-007) barstartalg (整数)

这个设置选项可以让算法计算出屏障法的初始起点。默认值起点对大多数问题都适用。由于默认值起始点用于求解基础问题,在使用预对偶参数是可以设置其他的起始点。

(默认值=1)

1 基础默认值, 对偶为0 2 基础默认值, 3 基础平均, dual为0 4 基础平均,estimate dual bbinterval (整数)

当搜索最优评估值时,设置间隔值可以选择一个最优的边界结点。当nodesel是2时处于激活状态。最佳评估值有解决方案,但当移动到边界并不能有所提高可以降低间隔值。最优评估结点选项没有整数值的时候可以提高间隔值。设置间隔值为1相当于设置nodesel为1

(默认值=7) bndstrenind (整数)

解决混合整型规划问题时使用边界加固(bound strengthening)。边界加固会tightens the bounds

on variables,使用分枝定界算法是,可能直到变量值固定就可以免于考虑。降低这个值通常是有益的,但偶尔,由于它是迭代的所以会花费一些时间。

(默认值=-1) -1 自动生成

0 边界加固时不能设置 1 边界加固时设置 brdir (整数)

决定每个结点的起始分枝(上或下)。 (默认值=0) -1 下面分枝优先 0 算法决定 1 上面分枝优先 bttol (实数)

这个选项是控制分枝计算进行时回溯的频率。每个结点,CPLEX会将这些在父节点的值与目标函数值或预计整数目标值比较;bttol参数值规定回溯前相关参数降低的最低点。较低的值会提高回溯频率,形成深度优先搜索。这个参数只在找到第一个整数解或指定截断(cutoff)时。

范围:[0,1] (默认值=0.9999) cliques (整数)

决定在规划时是否要生成集团削减(clique cut)。 (默认值=0) -1 不生成集团削减 0 自动决定

1 生成适度的集团削减 2 生成强力的集团削减 3 生成非常强力的集团削减 clocktype (整数)

当设定时限时,决定如何测定报告工作情况和终止优化的时间。在任何计算机系统运行同样的程序可以设定任意参数,所得的测定的时间差异较小。默认值设置值0在其他参数调用并行优化时,CPLEX选择wall clock time,在其他参数执行顺序优化(非并行)时,选择CPU时间。

(默认值=0) 0 自动 1 CPU时间 2 wall clock time clonelog (整数)

复制日志包括在普通日志中正常记录,但除非并行执行时不能通过正常日志通道发送的信息。信息中最有可能使你感兴趣的是一些特殊消息,比如线性规划优化程序解决子问题时出现的错误信息。复制日志文件命名为cloneK.log,K是指从0开始的第K个复制。由于复制在调用并行优化程序时创建,结束时丢弃,复制文件在每次调用打开,结束时关闭。复制文件当复制删除时也会删除。

(默认值=0) -1 复制日志文件关闭 0 自动

1 复制日志文件开启 coeredind (整数)

系数降低是在解决混合整数编程前使用的一个技术。好处是能通过减少非整数顶点的数量提高初始(和后续)线性规划松弛的目标值。可是,每个结点出现的线性规划问题也许会很难解决。

(默认值=-1) -1 自动 0 不用系数降低 1 降低整数系数 2 降低所有的可能的系数 3 有目的的大幅度降低 covers (整数)

决定优化时是否生成cover cut。 (默认值=0) -1 不生成cover cut 0 自动决定 1 适度生成cover cut 2 普遍生成cover cut 3 非常普遍的生成cover cut craind (整数)

在选择最初的根据(basis)时crash option CPLEX控制与目标函数相关的变量的方式发生偏离。

(默认值=1)

-1 初始:目标参数使用方法变化。 对偶:强有力的开始偏离

0 初始:在crash中忽略目标参数。 对偶:强有力的开始偏离 1 初始:目标参数使用方式变化。 对偶:默认开始偏离 cutlo (实数)

设置较低的截断容忍度。当所解决问题是最大化问题时,CPLEX分离或丢弃低于设定截断值的解决方案。如果模型没有目标值大于等于截断值的解决方案,CPLEX会显示模型不可行。换句话说,对一个最大化问题设置较低的截断值c类似于为目标函数模型添加约束:obj≥c。

这个选项优先与GAMS截断设置。

当带有FeastOpt时这个参数无效。FeastOpt不能分析出这个参数分析出的不可行性。如果想分析这样的情况,要为模型添加一个明确的目标约束。

(默认值=-1e+075) -1 无 0 自动决定 1 执行最大化 cuts (字符型)

立即允许所有生成设置的可选性cuts。改变各处CPLEX削减(cut)生成选项默认值(0:自动)时触发。影响的选项有:cliques,covers,disjcuts,owcovers,owpaths,fraccuts,gubcovers,implbd,mcfcuts,mircuts和symmetry。

(默认值=0) -1 不生成cuts 0 自动决定 1 适度生成cuts 2 普遍生成cuts 3 很普遍的生成cuts 4 非常普遍的生成cuts 5 极度普遍的生成cuts cutsfactor (实数)

这个选项限制可添加的cuts数。带有cuts问题的行数被限制在cutsfactor乘以最初行数之内。

(默认值=4) cutup (实数)

设置截断容忍度上限。当遇到最小化问题时,CPLEX分离或丢弃高于设定截断值的解决方案。如果模型没有目标值小于等于截断值的解决方案,CPLEX会显示模型不可行。换句话说,对一个最小化问题设置较高的截断值c类似于为目标函数模型添加约束:obj≤c。

这个选项优先与GAMS截断设置。

当带有FeastOpt时这个参数无效。FeastOpt不能分析出这个参数分析出的不可行性。如果想分析这样的情况,要为模型添加一个明确的目标约束。

(默认值=1e+075) depend (整数)

这个选项决定是否以及何时使用依赖检查(dependency checker)。 (默认值=-1) -1 自动

0 关闭依赖检查

1 只在开始时开启依赖检查 2 只在结束是开启依赖检查 3 开启和结束时都开启依赖检查 disjcuts (整数)

决定优化时是否生成可分离的cuts。在默认值0的情况下,只在有帮助时生成。

(默认值=0)

-1 不生成可分离的cuts 0 适度生成 1 普遍生成 2 非常普遍生成 divetype (整数)

决定选择哪个结点时会把两个子结点都运行一次,这时MIP遍历策略偶尔会出现probing dive。出现probing dive时选择设置默认值(自动)值,其他两个设置值会使CPLEX从不或一直出现probing dive。

(默认值=0) 0 自动 1 传统dive

2 probing dive 3 指导dive divfltup (实数)

请检查.divfit选项差异过滤器的一般信息。

如果使用divfltlo时指定一个多样性的下限。CPLEX会寻找一个不同于参考值的解决方案。换句话说,你可以要求:给我一个解决方案至少不同于所设参数。

(默认值=mindouble) .divflt (实数)

允许生成类似(或不同)于所设二进制参数的解决方案的解决池(详见选项solnpool)的差异过滤器。特别是,你可以使用差异过滤器生成更多类似于现存完整或部分解决方案的解决方案。

差异过滤器可以驱动CPLEX搜索出满足过滤器所设定的差异性测量条件的符合解决方案甚至于新解决方案。这个差异性测量条件只应用于二进制参数。潜在的新解决方案要与参数集比较。这个参数集由此点指定。如果没有指定参数集,会用其他池中相关解决方案的测量条件计算。差异性测量条件是通过计算解决方案和参数值中成对绝对差异值总和得到的。

(默认值=0) dpriind (整数)

对偶单纯形法的价格策略。考虑使用对偶边缘定价。对偶边缘定价是否高效并且没有初始边缘定价那样大的计算量。

(默认值=0) 0 自动决定 1 标准对偶定价 2 边缘定价

3 松弛空间的边缘定价 4 边缘定价,单位初始规范 5 devex定价 eachcutlim (整数)

这个参数允许对CPLEX生成的每种cuts数设置一个统一的限制。默认值情况下,限制数是个大整数;意思是没有有效的限制。

宽松的限制也许会对特定的模型有好处。例如,每种类型cut的限制可以预防创建如此大量的cuts。设置为0意味着没有cuts。

(默认值=2100000000) epagap (实数)

对最优整数目标值和最优剩余结点目标值的绝对容忍度。当值低于epagag时,优化停止。该选项优先于为它提供初始值的GAMS OptCA。

(默认值=GAMS OptCA) epgap (实数)

对最优整数目标值和最优剩余结点目标值的相对容忍度。当值低于epgap时,混合整数规划停止。显示了CPLEX定义和GAMS定义的区别。该选项优先于为它提供初始值的GAMS OptCR。

范围:[0,1]

(默认值=GAMS OptCR) epint (实数)

完整性容忍度。规定了不同于一个整数但仍认为可行的整数变量的数量。 范围:[0,0.5] (默认值=1e-005) epmrk (实数)

马克维茨容忍度影响基础因式分解时的因式选择。马克维茨容忍度的提高可以提高解决方案的数值方面的准确率。

范围:[0.0001,0.99999] (默认值=0.01) epopt (实数)

最优化容忍度影响了最优化的低成本容忍度。此选项控制了CPLEX所得结果与理论上最优方案的接近程度。

范围:[1e-0009,0.1] (默认值=1e-006)

epper (实数)

扰动设置。高度衰退问题会拖延优化程序。当该情况发生时,CPLEX自动扰动变量边界。扰动少量扩展每个变量的边界,因此会建立一个不同但是否接近原问题的问题。总体上说,约束较少的问题易于解决。移动扰动问题的解决方案进行到不能进行的时候,CPLEX删除扰动设置并重新为原值设置边界。

如果问题扰动不止一次,扰动常数或许会过大。当只需要一个扰动时,降低epper选项到某一程度。任何大于等于1.0e-8的值都有效。

(默认值=1e-006) eprhs (实数)

可行性容忍度。这个选项指定了问题基本变量可以超出边界的程度。这个容忍度影响了最优基础(optimal basis)的选择并将其在问题在很难优化维持可行性的时候重置为一个更高的值。如果你质疑所找的解决方案是否为最优,你也可以将该选项设置为一个较低的值。如果可行性容忍度太低的话,CPLEX可能会错误的认为一个问题可行。

范围:[1e-009,0.1] (默认值=1e-006) feasopt (整数)

该选项开启时,为了使一个模型可行会计算变量边界或约束右侧的最小松弛度。它标志了解决方案列表中右侧值的松弛度。

决定由谁组成最小成本松弛的维度有多种选项,可以由feasoptmode设定。 可行松弛对除了二次约束问题以外的任何问题都可行。 (默认值=0) 0 关闭可行性松弛度 1 开启可行性松弛度 feasoptmode (整数)

FeasOptMode这个参数允许在某一两个阶段寻找可行性松弛度的过程中,出现不同的策略。第一个阶段中,它会尝试最小化可行性模型中的松弛度。意思是,它会尝试找到一个最小变化的可行方案。第二阶段,它会在第一阶段所需最大松弛中找出一个最优方案(用最初目标)。FeasOptMode从那时值表示两种意思:(1)是否在第一阶段停止,或继续第二阶段(2)怎样测量松弛度最小值(松弛

度的总和;要求松弛的约束或边界的数量;松弛的面积总和)。

(默认值=0)

0 最小化松弛度总和。只将第一阶段要求的松弛度总和最小化。

1 最小化松弛度总和并优化。将第一阶段要求的松弛度总和最小化,并执行第二阶段在最小松弛度中找到最优解。

2 最小化松弛度数量。只将第一阶段要求的松弛度约束或边界的数量最小化。

3 最小化松弛度数量并优化。将第一阶段要求的松弛度约束或边界的数量最小化,并执行第二阶段在最小松弛度中找到最优解。

4 最小化松弛度面积。只将第一阶段要求的松弛度面积总和最小化。 5 最小化松弛度面积并优化。将第一阶段要求的松弛度面积总和最小化,并执行第二阶段在最小松弛度中找到最优解。 .feaspref (实数)

在feaspot运行用到.feaspref选项时,你可以用松弛边界或右侧值来表示所用成本。输入值表示使用者愿意松弛一个约束或边界。更准确的说,相互指定的值用了衡量边界或约束的松弛度。使用者可以指定一个小于等于0的优先值,这表示相应的约束或边界不允许松弛。

(默认值=1) flowcovers (整数)

决定优化中是否生成flow cover cuts -1 不生成flow cover cuts 0 自动决定 1 适度生成 2 普遍生成 flowpaths (整数)

决定优化中是否生成流量路径截断。 (默认值=0) -1 不生成 0 自动决定 1 适度生成 2 普遍生成 fpheur (整数)

控制对混合整数规划模型有启发的可行性泵(feasibility pump)的使用。 (默认值=0)

-1 关闭Feasible Pump heuristic 0 自动

1 开启,强调找到可行性方案

2 开启,强调找到有较好目标值的可行性方案 fraccand (整数)

限制生成戈莫里分数削减Gomory fractional cuts的备用变量的数量。 (默认值=200) fraccuts (整数)

决定是否生成戈莫里分数削减Gomory fractional cuts。 (默认值=0) -1 不生成 0 自动 1 适度生成 2 普遍生成 fracpass (整数)

设置混合整数规划中戈莫里分数削减中出现的通道数量上限。如果参数fraccuts设置为非零值时忽略此选项

(默认值=0) 0 自动决定 >0 最大通道量 gubcovers (整数)

确定是否GUB(广义上限)覆盖削减cover cuts应在优化过程中产生。 (默认值=0) -1 不生成 0 自动 1 适度生成 2 普遍生成 heurfreq (整数)

此选项指定应用启发式结点的频率。设置为正数在请求的结点间隔处应用。 (默认值=0) -1 不使用 0 自动 iis (整数)

如果发现模型是不可行的,有必要查找iss(Irreducably不一致的约束集)和写一个iss报告GAMS解决方案。ISS只解决LP问题。

(默认值=0) implbd (整数)

确定在优化的过程中是否会产生必然的削弱。 (默认值=0) -1 不生成 0 自动 1 适度生成 2 普遍生成 interactive (整数)

当设置为yes时,CPLEX与控制-C可在选项中设置为中断交替。当选项刚刚进入,如果输入cplex.opt le..,控制将返回给CPLEX继续。优化进入中止,此选项只能在运行时在命令行使用。 (默认值=0).

intsollim (整数)

这个选项限制的MIP优化只有在这种混合整数解决方式之前停止。 (默认值=大) itlim (整数)

迭代限制选项设置算法结束前的最大迭代次数,而不是达到最优。这CPLEX选项覆盖GAMS IterLim选项。任何非负整数价值都是有效的。

(默认值=GAMS lterLim) lbheur (整数)

该参数可以选择CPLEX是否适用于本地分支启发,尝试提高在MIP搜索发现新incumbents。默认情况下,这个参数是O。如果你打开它,CPLEX只有当它NDS一个新的现任调用本地的分支启发式。如果CPLEX NDS多个现任在一个单一的节点,将只适用于当地的分支启发式找到的最后一个。

默认值=0 0 关闭

1 使用本地分枝启发 lpmethod(整数)

指定使用的LP算法。如果取默认值(在自动的情况下取为0),那么满足原始的可行性基础,可以使用原始的单纯。如果原始的可行性基础不成立且线程等于1,那么对偶单纯形将被使用。如果线程大于1并且原始可行性基础不成立,concurrent选项将被使用。

拆分问题的变量比方程更有益处。

concurrent选项可以运行多个并行的程序。第一个线程使用对偶单纯形法。第二线程使用障碍法。下一个线程使用原始的单纯形法。剩余的线程使用屏障运行方法。解决的途径是返回第一种方法。

(默认值=0) 0自动 1原始单纯 2对偶单纯形 3网络单纯形 4屏障 5筛分 6并行 mcfcut(整数)

指定Cplex在检查到带有弧容量的多物流网络的特性时,一个问题上是否应该产生多物流削减。默认情况下,Cplex会自己决定是否产生这种削减。要避免产生这种削减,应设置这个参数为-1。Cplex能够识别实际模型的这种网络结构。当它识别出这种结构时,Cplex能够产生帮助解决这类问题的切面。在这种情况下,Cplex产生的这种削减表明弧上的容量网络中的一个组件。网络流量必须至少和这个组件的全部流量需求一样大,否则它将不能满足这个组件的流资源。

(默认值=0)

-1 不产生MCF削减; 0 Cplex自动决定; 1 适中地产生MCF削减; 2 大量地产生MCF削减。 memoryemphasis (整数)

这个参数使得你能指定Cplex在需要的时候保留内存。当你设置这个参数为非默认值时,Cplex会为一些通过障碍法或MIP优化器计算的数据选择一些策略,如数据压缩或磁盘存储。当然,保留内存可能影响到某些模型的性能。同时,当解信息在优化后可用时某些需要被分解的基准的计算就可能不可用(例如, 条件数字Kappa的计算):

(默认值=0) 0 不保留内存

1 在可能的时候保留内存 mipdisplay(整数)

在MIP求解过程中显示的信息量随着这个选项值的增大而增加。 (默认值=4) 0 不显示

1 展示整数可行性方案 2 在mipinterval下展示节点 3 同2但加上截断信息 4 同3但加上线性规划根节点 5 同3但加上线性规划所以节点 Mipemphasis (整数)

这个选项控制解决整数规划问题时的战术。 (默认值=0) 0 平衡优化和可行性 1 强调可行性超过优化 2 强调优化超过可行性 3 强调最有边界 4 强调隐藏的可行方案 Mipkappastats (整数)

默认值=-1

-1 默认值;没有MIPkappa战略 0 自动

1 计算一个子问题样本的MIP kappa 2 计算所以子问题的MIP kappa Mipinterval (整数) Mipordind (整数) (默认值=GAMS PriorOpt) 0 不使用分支优先 1 优先是有效用的 Mipordtype (整数)

这个选项用来选择生产何种类型优先顺序的。 默认值=0 0 没有

1 减低成本重要性 2 提高边界范围 3 提高每个系数的成本 Mipsearch (整数)

设置混合整数规划的搜策略。默认值时CPLEX选择使用二进制搜索或是基于模型特点的循环分枝和截断。

默认值=0 0 自动

1 使用传统分枝和截断策略 2 使用二进制搜索 Mipstart (整数)

这个选项控制混合整数项目中超前的起始值的使用。设置为1表示在开始优化前要检查是否提供了整数的可行方案。

默认值=0 0 不用这个值 1 用这个值

Miqcpstrat (整数)

这个选项控制MIQCPs如何解决。对一些模型来说,设置2也许比1更有效。你可能会需要多试验几次。

默认值=0 0 字的

1 QCP松弛。CPLEX会在模型的每个节点解决QCP松弛 2 线性规划松弛。CPLEX会在模型的每个节点解决线性规划松弛 Mircuts (整数)

觉得是否在优化时生成混合整数规划阶段。 默认值=0

-1 不生产MIR截断 0 自动 1 适度生成 2 普遍生成 Mpslongnum (整数)

决定MPS文件格式中数值输出的精确度。当参数设置为默认值1时,写入到MPS文件的数值时高精度的;意思是,

Names (整数)

这个选项为CPLEX中的变量和等式在GAMS中的命名。这些名称可以用于命名错误信息,日志条目等等。如果内存非常紧张,设置这些名称没有什么帮助。

(默认值=1) netdisplay(整数)

该选项控制网络迭代的日志。 (默认值=2) 0无网络日志。 1显示真正的目标价值 2显示处罚客观值 Netepopt(真值)

在使用网络单纯形法时,这个最优公差会影响降低成本的宽容度。此选项的设置,密切CPLEX如何在理论上达到最优的解决方案。

范围:[1e-011,0.1]

(默认值=1e-006) Neteprhs(真值)

可行性宽容度决定了网络单纯形算法允许一个流量值达到其边界的程度。 范围:[1e-011,0.1] (默认值=1e-006)

Netfind——网定位程序(整数) 定义网络萃取等级 (默认值=2) 1 仅仅萃取纯网络 2 尝试反射缩放比例 3 尝试常规缩放比例

Netitlim——网络限制定位(整数) 按照单一的网络方法进行循环计算 (默认值=

netppriind(整数)

网络单一定价算法。当默认值为0 时(目前相当于3)表示对于所有的问题取得最优解。

(默认值 = 0) 0 自动定价 1 局部定价 2 多层次局部定价 3 多层次局部分类定价 Nodefileind (整数)

定义节点文件如何在MIP(微处理接口程序)程序中传递。当参数workmem值超出了的分支和割树上容量的时候可以使用这一按钮。如果树的记忆容量达到限制的时候,键入0,优化程序终止,否则一组节点将会按照需要从内存中移出。通过默认值,当内存容量比128M字节要大时,Cplex将节点转移到节点文件中来,同时保持最终的节点文件在内存中以压缩文件的形式存在。当设置为2和3

时,节点文件将被传输到磁盘。它们将存储在一个由参数wordir定义的目录下面,同时Cplex自发地决定哪些节点停留在内存中等待处理。

(默认值= 1) 0 没有节点文件

1 内存中的被压缩的节点文件 2 磁盘中的节点文件

3 磁盘中的被压缩的节点文件 nodelim (整数)

没有达到最优的情况下,算法终止前求解的最大的节点的个数。这一方法超越了GAMS NodLim model的加下标的方法。当这一参数值被设置为0时(这种可能性仅仅能够在一个选项文件中出现),Cplex将在根目录中结束程序;也就是说,它将在根目录中完成切割和应用探索。当这一参数值设定为1时,允许从根目录进行扩展;也就是说,节点在没有被解决的情况下被创造。

(默认值 = GAMS NodLim) nodesel (整数)

这一选项被用来设定选入循环程序的下一个节点 (默认值 = 1)

0 深度优先查询。用来选择最新近创造的节点。

1 最佳边界查询。通过使用与LP松弛相关的最好的目标函数来选择未经处理的节点。

2 最佳估计查询。一旦所有的整数非可行解被移除,整数目标的最佳估计值将会获取。这时可以通过上面的方法选择节点。 3 最佳估计交替查询 Numericalemphasis (整数)

作为时间和存储容量权衡的结果效用参数,这一参数让你提示Cplex——它应该加强用数字表示有困难的以及不稳定的问题的精度。

(默认值= 0) 0 不工作

1 在计算过程中使用极端注意 objdif (实数)

一种自动更新截止到更严格约束的值得方法。最新寻找到得整数可行解的目

标值通常会被用做下一个节点的截止。当这一选项被设定为正值时,当目标函数取最小值时(或最大值时),这一值将会被从最新寻找到得整数目标值中减去(或加上)。这使得MIP最优化问题忽略那些比已找到的方案优化程度有限的整数解。这一选项能够通过限制节点的数量来改善问题解决的效率;设定这一选项非零的值(默认值)将产生一些使原有问题的整数解,但是同时它的最优整数解将被错失。这一选项的负值将导致一些比原有产生的解更差的或一样的整数解,但是将未必产生所有可能的整数解。这一选项优于GAMS的Cheat参数。

(默认值= 0) objllim (实数)

设定一个较低的目标函数极值将会使Cplex停止优化程序,一旦最小的目标函数值超过了这个极值。

(默认值 = -1e+075) objrng (字符串)

计算规定的GAMS 变量敏感度。不同于其他的选项,objrng能够被在选项文件中重复多次使用。每一个GAMS定义的变量的敏感度信息都将会产生。所有变量的度量信息都将会在定义的过程中产生。除非rngrestart选项被定义,否则度量信息将会在GAMS 列表文件中的开始的解决列表中被打印出来。

(默认值= 没有目标度量被进行) objulim (实数)

设定一个目标函数的上限,这一上限用于终止Cplex优化程序,一旦最大的目标函数值超过了这个极值。

(default = 1e+075) parallelmode (整数)

设定平行最优化模型。可以使用自动地、确定性地、随机性地产生。在这样的背景下,确定性地产生模式意味着使用同样的模型的同样的参数、同样的平台的不同运算将产生相同的解决路径和结果。相反地,随机性模式表明尽管是线程间的时机或不同线程间任务执行顺序间的微小差异都可能会产生不同的解决路径及相应的结果,或不同解向量。当不同线程共同运行时,随机环境对线程间的时间一致性要求较少,因此将产生更好的效果。在确定性模式中,当获取确定性结果的过程中,Cplex应用了尽可能多的平行度分析,也就是说,当你在一个用于相同参数设定的相同平台上运用同样的模型两次的时候,你将看到相同的最优

化运行方案。

如果你不要求确定性的话,你将会有更多的机会去进行平行度分析。换句话说,如果你不要求不变量、重复解决路径和精确地相同解向量时,Cplex能够提供更多的机会进行平行度分析。使用所有可用的平行度分析,你需要选择随机的平行模型。在这一模型中,为了获得最好的效果,Cplex将会利用所有的机会进行平行度分析。

但是,在随机模式中,实际的优化在每一次运行都会不同,包含求解时间。一个精确的平行的确定性的算法仅仅对于MIP优化是有效的。只有随机的平行的算法(限制和并行的优化程序)对于连续的模型是有效的。(每一个单一的算法在一个连续的模型中能够串联运行。)所以,当平行模式被设定为确定性时,限制和并行的优化程序受到串联运行的约束,而不能平行运行。

除非被明确地规定,一个GAMS/Cplex运行会采用的是确定性模式。 如果平行模式被明确地定于为)0(自动地),平行模式的参数集将作用于threads参数集。设定可用的线程的结果数量为n(记录那些线程参数的负值有助于帮助排除一些非核心的工作)。

n=0:除非平行模式被设定为-1(随机模式),在确定模式中Cplex使用的最大数量的线程(由计算平台决定)

n=1: Cplex按次序运行

n > 1: 除非平行模式被设定为1(确定模式),在随机模式中Cplex使用的最大数量的线程(由计算平台决定)

下面为一个可能的值的清单: (默认值 = 1)

-1 激活随机性平行搜索模式 0 自动

1 激活确定性平行搜索模式 perind (整数)

扰动指标。如果一个问题能够自动地扰动在早期求解过程中,考虑启用求解过程中的扰动指标,并设定perind 为 1。在触发扰动机制之前,手动地扰动这一问题将会节省在一开始时优化问题搁置的时间,但是对于极端退化问题这一作用并不常见,

(默认值 = 0)

0 非自动扰动 1 自动扰动 perlim (整数)

扰动限制. 在扰动之前,这一失速的迭代数据被触发。它的初始值为0时表明这一数值时自动地确定的。

(默认值 = 0)

polishafterepagap (实数)

在好的解决方案用别的方法很难找到的情况下,解抛光能够产生更好的解。比启发式算法更加节省时间,解抛光实质上是在对原有解存在的基础上的多种分支和切割。事实上,它要求一个被有效抛光的解,这个解或者是一个分支和切割后产生的解,或者是被使用者提供的一个MIP初始解。因为解破光的高成本,所以,和其他启发式算法一样并不是对所有的分支和切割进行抛光。而是,解抛光在普通的分支和切割后的第二个阶段进行。作为分支和切割后的补充步骤,解破光能够改善已知解。同时它本身作为一种分支和切割算法,解抛光唯一致力于较好的解。因此,它不验证最有型性,尽管最优解的确被找到。和RINS启发式算法一样,已解决附加MIP问题的方式,解破光探寻了周围的先前已知的解。

设置某个绝对的混合整数规划间距(即整数目标函数最优值与现有节点目标函数最优值之间的差距)后,CPLEX将停止分支定界,并开始抛光可行解。预设值会使CPLEX不会调用抛光之后的解。(预设值为零)

Polishafterepgap (实数)

设置一个相对的混合整数规划间距之后,CPLEX将停止分支定界,并开始抛光可行解。预设值会使CPLEX不会调用抛光之后的解。(预设值为零)

Polishafternode (整数)

如果存在可行解,在CPLEX开始抛光解之前,预先设置分支定界中的节点个数。(预设值为2100000000)

Polishafterintsol (整数)

在CPLEX停止分支定界,并开始抛光可行解之前,设置整数解的个数。预设值会使CPLEX不会调用抛光之后的解。(预设值为2100000000)

Polishaftertime(实数)

在CPLEX开始抛光可行解之前,预设CPLEX完成混合整数优化的运行时间。

预设值会使CPLEX停止解的抛光。(预设值为0)

Populatelim(整数)

当产生PolulateLim解之后,计算停止。若对所有的过滤单元都有效,并且没有被目前的检查程序所拒绝(见userincbcall说明),不论该解是否能改进模型的目标函数,这个解依然是合理的(见divt说明,以及与之相对应的相对、绝对的间距参数(见 solnpoolgap和solnpoolagap说明)。一般来说,这个参数并不适用于混合整数规划方法的优化,而只适用于计算过程。

若要得到某个能控制解集中解的数目的参数,可以考虑用参数solnpoolcapacity。

如果参数达到某一极限,比如时间或节点超出用户设置的范围,那么在参数到达极限之前,程序就会停止。(预设值为20)

Ppriind (整数)

定价算法。类似于对绩效的最大影响效果分析。为了能指导人们选择合适的定价算法,观察整个寻找可行解的时间和第一阶段的数目以及所有的迭代过程。若解决该问题所需的迭代次数与问题的行数差不多时,那意味着求解的效果良好。若迭代次数多于相比问题的行数的三倍之多,这表示还又进行改进的空间。(预设值为0)

-1 成本降低的定价。如果问题较小或比较容易,不需要耗费很长的运算时间,可首先选择这种方法。针对相对较复杂的问题(比如问题有20到30个非零列),该方法也可能有优势。

0 减少成本和Devex定价的混合问题

1 Devex定价法。这可能适用于那些需要通过多次迭代才能完成Phase I的复杂问题。每次迭代可能需要花费很多时间,但是整个迭代次数的减少可能导致整个运行时间的缩短。每减少十倍的迭代次数,就可以加快三倍运行速度。如果问题有许多列和相对较少的行,这种情况下就不能使用devex定价方法。每次迭代所需的计算数量通常庞大,效果并不好。

2 最速边缘定价法。若devex定价有用的话,该方法可能会有良好的效果。虽然最速边缘定价法会耗费大量的计算时间,但是对一些非常困难的问题,却能产生最好的结果。

3 带有初始松弛要求的最速边缘定价法。这种方法能降低最速边缘定价法耗时的特点。

4 全定价法。 Predual (整数)

解决对偶问题。有一些行大于列的线性规划问题可以通过解决很明显的对偶问题。预对偶的方法能使CPLEX解决对偶问题,并返回原问题的解。若不能进行预对偶处理,可忽略该方法。(预设值为0)

-1 不要将对偶问题输入优化器 0 自动化处理

1 将对偶问题输入优化器 Prehind (整数)

效果预处理方法。这种方法可以通过简化、减少和消除冗余,有助于解决很多问题。但是,如果模型没有冗余或简化的余地,可以很快地取消预处理。很少会出现,简单的预处理模型比原问题复杂。这种情况下,取消预处理可以带来更好的效果。预设零也会取消累加器。(预设值为1)

Prelinear (整数)

如果只能线性减少冗余,那么原模型中的每个变量可以表示成预处理模型中变量的线性形式。(预设值为1)

Prepass(整数)

混合整数规划的数目会反映预处理的效果。在默认情况下,Cplex自动决定该值。设置0会取消预处理但不会取消累加器。(预设值为-1)

-1 自动赋值 0 无预处理 Preslvnd(整数)

表示在混合整数规划的解决过程中,是否应该进行节点预处理。对于某些模型来说,节点预处理能显著地减少求解的时间。这种预先设置的环境通常是有效的。(预设值为0)

-1没有节点预处理 0 自动化 1 强制节点预处理 2 找出为整数却不可行的解 pricelim(整数)

候选名单的规模大小。CPLEX软件基于问题规模的大小,动态确定一个比较