SOL 文件格式:解法文件
SOL 文件格式支持解法文件。
CPLEX 针对所有应用程序编程接口 (API) 读写所有问题类型的 XML 格式的解法文件。 这些解法文件(称为 SOL 文件)具有文件扩展名 .sol。 XML 解法文件格式使您能够在大多数浏览器中显示并查看这些解法文件,以及将解法传递到 XML 感知应用程序。 CPLEX 还在 yourCplexinstallation/include/ilcplex 中提供样式表和模式以便于您在应用程序中使用此格式。
solution.xsl样式表solution.xsd模式
浏览器可能具有关于访问扩展名不为 .xml 的远程样式表和 XML 文件的特定约定。 例如,您的浏览器可能无法读取扩展名为 .SOL 文件的页眉。sol,或者可能不参考指定的样式表;因此,浏览器可能会以原始 XML 代码显示此类文件,而不是您所期望的格式化显示。 在此类情况下,请尝试将 SOL 文件复制到浏览器正确识别并处理的扩展名为 .xml 的文件。
缺省情况下,SOL 文件格式的编码为 UTF-8。
CPLEX 还可读取 SOL 文件作为高级启动。 SOL 文件包含基状态(如果可用)和解法值。 基状态可用于单纯形法优化器的高级启动;解法值可通过内点解法用于交叉引用或者通过混合整数解法用作 MIP 启动。 混合整数解法可以来自传统 MIP 优化或者来自解法池成员。
与 MST 文件一样,SOL 文件也包含 XML 格式化信息。 与 MST 文件不同,在缺省写详细级别,SOL 文件包含所有变量而不仅是定义整数可行解法的变量的解法值。 因此,SOL 文件更大,进行输入的时间更长,并且(在数字上困难的模型的异常情况下)更不大可能提供可行起点。 因此,通常理想做法是使用 MST 文件重新启动优化而不是 SOL 文件。 但是,如果已将 SOL 文件用于其它用途,那么还可将其用于提供可行起点。
SOL 文件还具有可选名称属性,这在问题具有名称时很有用。 SOL 文件还包含与问题的约束索引或变量索引对应的索引。
SOL 标头提供有关解法状态的信息。 例如,优化状态显示为 CPLEX 符号常量的字符串和数字值。
SOL 质量提供有关解法质量的信息。 例如,在此部分中出现最大初始不可行性、优化期间有效的容错参数值及其他质量信息。
当然,有相应的方法和例程来读写 SOL 文件。
在 Concert Technology 中,使用以下方法:
在 C++ API 中,请参阅方法
IloCplex::readSolution和IloCplex::writeSolution。在 Java API 中,请参阅方法
IloCplex.readSolution和IloCplex.writeSolution。在 .NET API 中,请参阅方法
Cplex.ReadSolution和Cplex.WriteSolution。
在可调用库中,使用例程
CPXreadcopysol读取 SOL 文件,使用例程 "CPXsolwrite写入 SOL 文件。
以下是 SOL 文件的示例。
<?xml version = "1.0" standalone="yes"?>
<?xml-stylesheet href="https://www.ilog.com/products/cplex/xmlv1.0/solution.xsl" type="text/xsl"?>
<CPLEXSolution version="1.2">
<header
problemName="../../../examples/data/mexample.mps"
solutionName="incumbent"
solutionIndex="-1"
objectiveValue="-122.5"
solutionTypeValue="3"
solutionTypeString="primal"
solutionStatusValue="101"
solutionStatusString="integer optimal solution"
solutionMethodString="mip"
primalFeasible="1"
dualFeasible="1"
MIPNodes="0"
MIPIterations="3"/>
<quality
epInt="1e-05"
epRHS="1e-06"
maxIntInfeas="0"
maxPrimalInfeas="0"
maxX="40"
maxSlack="2"/>
<linearConstraints>
<constraint name="c1" index="0" slack="0"/>
<constraint name="c2" index="1" slack="2"/>
<constraint name="c3" index="2" slack="0"/>
</linearConstraints>
<variables>
<variable name="x1" index="0" value="40"/>
<variable name="x2" index="1" value="10.5"/>
<variable name="x3" index="2" value="19.5"/>
<variable name="x4" index="3" value="3"/>
</variables>
</CPLEXSolution>