我想使用任何开源解算器将cplex .mod和.dat文件转换为glpk .mod和.dat(单独的模型和数据文件),然后使用不同的数据文件(最好是glpsol)编译模型。 据我所知,glpsol没有为opl cplex .mod文件提供读命令。我不想通过oplrun导出mps或lp文件,然后转换为glpk .mod文件,因为cplex不是开源的,lp / mps格式不会单独转换模型和数据文件。
答案 0 :(得分:1)
虽然大多数解算器(例如CPLEX和GLPK)都能理解(free-)mps或类似文件(仅包含纯优化问题)。 所有其他功能,如数据库连接,输出设施或分离的数据文件仅在专用的数学/优化编程语言(如OPL和GMPL)中可用。
虽然从数学编程语言到mps或相关的单向转换器很常见 - 但我没有看到任何导入/导出函数或解析器,它们可以将一种数学编程语言翻译成另一种。
我猜你必须自己完成从opl-syntax到gmpl-syntax的翻译工作,以包含结构和功能。由于Cplex和GLPK Solvers在复杂问题上的性能安静不同,因此在开始将模型代码迁移到其他编程语言之前,请先检查是否可以在GLPK中解决导出的.mps文件(在合理的时间内)。 / p>
答案 1 :(得分:1)
这是运行glp-convert
.mod-> .lp等的shell脚本glpsol
。-
#!/bin/bash
# glp-convert to=lp *.mps
# see also [LPsolve doc on file formats](http://lpsolve.sourceforge.net/5.5/formulate.htm)
# note that glpk .mod is gmpl, not ampl
to=lp
help() {
cat <<!
--------------------------------------------------------------------------------
glp-convert [to=glp / lp / mps / freemps] file*.glp / file*.lp / file*.mod / file*.mps
converts e.g. file*.mod to file*.lp, gmpl to cplex
default: to=lp, cplex format
--------------------------------------------------------------------------------
!
exit
}
case $1 in
to=* )
export "$1"
shift
esac
[[ -f $1 ]] ||
help
glpread() { # .mod -> --model etc.
case ${1%.gz} in
*.glp ) echo --glp ;;
*.lp ) echo --lp ;; # cplex
*.mod ) echo --model ;; # gmpl math prog lang
*.mps ) echo --freemps ;;
* ) exec echo >&2 "? $1 should be .glp .lp .mod or .mps"
esac
}
#...............................................................................
for file
do
base=${file##*/}
base=${base%%.*}
echo "
-- $file > $base.$to"
glpsol --check \
`glpread $file` $file \
--w$to $base.$to \
--log $base.convertlog
done