1

我正在使用 LPSolve IDE 来解决 LP 问题。我必须针对大约 10 或 20 组不同的参数来测试模型并进行比较。

我有什么办法可以保留通用模型,但可以根据需要指定常量?例如,如果我有以下约束:

A >= [c]*B

我想测试模型在[c] = 10[c] = 20等时的行为。现在,我只是通过搜索和替换准备不同的 .lp 文件,但是:

a) 似乎效率不高

b)在某些时候,我需要考虑表单的约束A >= B/[c] // =(1/[c]*B)。然而,LPSolve 似乎无法识别除法运算符。1/[c]每次都直接指定是唯一的选择吗?

4

1 回答 1

2

尚不完全清楚您使用 lp_solve 的格式。例如,对于 cplex lp 格式,没有更好的方法:您不能对系数使用除法(甚至不能使用乘法),并且没有“包含”另一个文件或为参数引入符号名称的功能。它是一种非常简单的语言,不适合任何复杂的任务。

您的问题有几种解决方案;这取决于您是否对快速实施或“干净”、可重复使用且运行时间短的东西感兴趣(当然这是一种妥协)。

  1. 您可以从另一种语言生成 lp 文件,例如 python、bash 等。这是一个“快速而肮脏”的解决方案:运行时非常慢,但实现起来可能更快。

  2. 正如我所知道的每个 lp 求解器一样,lp_solve 带有几个建模接口:例如,您可以使用GNU mp 格式而不是当前的格式。它可以识别乘法、除法、条件等(您要查找的所有内容,请参见第 3.1 节“数字表达式”)

  3. 最后,您可以直接使用来自另一种编程语言(例如 C)的 lp_solve 接口,这将是最灵活的选择,但可能需要更多的工作。

有关支持的输入格式和 API 参考的更多详细信息,请参阅lp_solve 文档

于 2013-11-16T23:24:20.837 回答