LPSolve - 指定常数系数
-
21-12-2019 - |
题
我正在使用 LPSolve IDE 来解决 LP 问题。我必须针对大约 10 或 20 组不同的参数来测试模型并进行比较。
有没有办法让我保留一般模型,但按照我的意愿指定常量?例如,如果我有以下约束:
A >= [c]*B
我想测试模型在以下情况下的行为 [c] = 10
, [c] = 20
, , 等等。现在,我只是通过搜索和替换准备不同的 .lp 文件,但是:
a) 看起来效率不太高
b)在某些时候,我需要考虑形式的约束 A >= B/[c] // =(1/[c]*B)
. 。然而,LPSolve 似乎无法识别除法运算符。正在指定 1/[c]
每次直接直接是唯一的选择吗?
解决方案
目前尚不完全清楚 lp_solve 使用什么格式。以 cplex lp 格式为例,没有更好的方法:您不能使用除法来计算系数(甚至不能使用乘法),并且没有函数可以“包含”另一个文件或为参数引入符号名称。它是一种非常简单的语言,不适合任何复杂的任务。
您的问题有多种解决方案;这取决于您是否对快速实现或“干净”、可重用且运行时间短的东西感兴趣(当然这是一个折衷方案)。
您可以从其他语言生成 lp 文件,例如蟒蛇、bash 等这是一个“快速而肮脏”的解决方案:运行时非常慢,但实施起来可能更快。
正如我所知道的每个 lp 求解器一样,lp_solve 带有几个建模接口:例如,您可以使用 GNU mp 格式 而不是当前的。它识别乘法、除法、条件等。(您要查找的所有内容,请参阅第 3.1 节“数字表达式”)
最后,您可以直接使用另一种编程语言的 lp_solve 接口(例如C) 这将是最灵活的选项,但可能需要更多的工作。
请参阅 lp_solve 文档 有关支持的输入格式和 API 参考的更多详细信息。