首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将命令行上的*.mod文件转换为*.mod文件?

如何将命令行上的*.mod文件转换为*.mod文件?
EN

Stack Overflow用户
提问于 2016-04-07 01:40:06
回答 2查看 1.2K关注 0票数 0

我希望使用任何开源解决程序将cplex .mod和.dat文件转换为glpk .mod和.dat (单独的模型和数据文件),然后用不同的数据文件编译模型,最好使用glpsol。据我所知,glpsol没有为opl cplex .mod文件提供读取命令。我不想通过oplrun导出mps或lp文件,然后转换为glpk .mod文件,因为cplex不是开源的,lp/mps格式不分别转换模型和数据文件。

EN

回答 2

Stack Overflow用户

发布于 2019-10-15 12:51:03

这里有一个shell脚本glp-convert,运行glpsol .mod -> .lp等--

代码语言:javascript
运行
复制
#!/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
票数 3
EN

Stack Overflow用户

发布于 2016-04-07 19:40:37

虽然大多数求解者(例如CPLEX和GLPK)都会理解(免费)mps或类似的文件(只包含纯粹的优化问题)。所有其他特性,如数据库连接、输出工具或分离的数据文件,只能在专用的数学/优化编程语言(如OPL和GMPL)中使用。

虽然从数学编程语言到mps或相关的单向转换器是很常见的,但我还没有看到任何可以将一种数学编程语言转换成另一种语言的导入/导出函数或解析器。

我想您必须自己完成从opl语法到gmpl语法的翻译工作,才能包含结构和特性。由于Cplex和GLPK解决器在复杂问题上的性能不同,因此在开始将模型代码迁移到不同的编程语言之前,请先检查是否可以在GLPK中解决导出的.mps文件(在合理的时间内)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36465232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档