在 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 寻找目标?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 MiniZinc 中安装 Google 的 CP 求解器 OR-Tools?
Google Or-Tools:UnsatisfiedLinkError
在 Java 中使用 google or-tools 进行除法不等式约束