【问题标题】:Using Google OR-Tools for a goal seeker in C#?在 C# 中使用 Google OR-Tools 寻找目标?
【发布时间】: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 实现这个目标寻求者? 如果是:解决我的问题的方法是什么? 如果不是:我可以使用其他什么包?

【问题讨论】:

    标签: c# mathematical-optimization 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 直接解释为正偏差和负偏差要容易一些。这里没有多少数学,只是算术。无论如何,即使您不立即理解它,也可以立即使用它。只需在代码中实现(即转录)它。查看一些解决方案可能会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-30
    • 1970-01-01
    • 1970-01-01
    • 2019-04-28
    • 2021-01-05
    • 1970-01-01
    相关资源
    最近更新 更多