在 C# 中使用 Google OR-Tools 寻找目标?

Posted

技术标签:

【中文标题】在 C# 中使用 Google OR-Tools 寻找目标?【英文标题】:Using Google OR-Tools for a goal seeker in C#? 【发布时间】:2020-04-16 07:56:31 【问题描述】:

我正在尝试用 C# 编写一个多变量目标搜索器。主要思想是有一组变量 x_1 到 x_n,可以由求解器更改,因此目标函数 f(x) 尽可能接近给定值 Z。

到目前为止,我主要使用了 GLOP_LinearSolver,它只能最小化或最大化目标函数。为了解决这个问题,我想最小化 f(x)-Z 的绝对平方,但 GLOP_LinearSolver 不包含绝对值或平方运算符(据我了解,OR-Tools 求解器都没有)。

我的问题是:是否有可能使用 Google OR-Tools 实现这个目标寻求者? 如果是:解决我的问题的方法是什么? 如果不是:我可以使用其他什么包?

【问题讨论】:

【参考方案1】:

目标函数

 min |f(x) - Z|

可以改写为:

 min d1 + d2
     f(x) + d1 - d2 = Z
     d1, d2 ≥ 0

只要f(x) 是线性的,就可以将其输入到任何 LP 求解器中。

d1 和 d2 是正负偏差或松弛。我们将偏差最小化,因此我们最终使 f(x) 尽可能接近 Z。请注意,在最优解中,d1、d2 中只有一个可以为非零(不能同时为两者)。例如。如果 f(x)=10 且 Z=8,则 d1=0,d2=2。如果 f(x)=7 且 Z=8,则 d1=1,d2=0。

【讨论】:

您能否详细说明您的答案?很遗憾,我不太了解。 我添加了一些注释。这是一个非常标准的表述,应该相当明显。 this 是否更详细地解释了您的意思?您能否也给我一个重新制定的名称或指出某个方向?由于我没有学习数学,而且我学习的数学不是英语,我觉得我缺乏词汇来搜索它。不过感谢您的努力,我真的很感激! 是相关的。但我认为将 d1,d2 直接解释为正偏差和负偏差要容易一些。这里没有多少数学,只是算术。无论如何,即使您不立即理解它,也可以立即使用它。只需在代码中实现(即转录)它。查看一些解决方案可能会有所帮助。

以上是关于在 C# 中使用 Google OR-Tools 寻找目标?的主要内容,如果未能解决你的问题,请参考以下文章

在 Eclipse 中使用 google or-tools

如何在 MiniZinc 中安装 Google 的 CP 求解器 OR-Tools?

Google Or-Tools:UnsatisfiedLinkError

在 Java 中使用 google or-tools 进行除法不等式约束

如何在 AWS Lambda 上安装 Google or-tools?

google or-tools 无法获得最佳 LP 结果,如 gurobi 示例