在 C# 中使用 Google OR-Tools 寻找目标?
Using Google OR-Tools for a goal seeker in C#?
我正在尝试用 C# 编写一个多变量目标搜索器。主要思想是有一组变量 x_1 到 x_n,可以由求解器更改,因此 objective 函数 f(x) 尽可能接近给定值Z.
到目前为止我主要使用GLOP_LinearSolver,它只能最小化或最大化objective函数。为了解决这个问题,我想最小化 f(x)-Z 的绝对平方,但是 GLOP_LinearSolver 不包括绝对值或平方运算符(根据我对 none 的理解OR-Tools 求解器可以)。
我的问题是:是否可以使用Google OR-Tools 来实现这个目标搜索器?
如果是:什么是解决我的问题的方法?
如果否:我可以使用其他什么软件包?
objective函数
min |f(x) - Z|
可以重新表述为:
min d1 + d2
f(x) + d1 - d2 = Z
d1, d2 ≥ 0
只要 f(x)
是线性的,就可以输入任何 LP 求解器。
d1 和 d2 是正负偏差或松弛。我们最小化偏差,所以我们最终得到尽可能接近 Z 的 f(x)。请注意,在最佳解决方案中,d1、d2 中只有一个可以非零(不能同时为两个)。例如。如果 f(x)=10 且 Z=8,则 d1=0,d2=2。如果 f(x)=7 且 Z=8,则 d1=1,d2=0。
我正在尝试用 C# 编写一个多变量目标搜索器。主要思想是有一组变量 x_1 到 x_n,可以由求解器更改,因此 objective 函数 f(x) 尽可能接近给定值Z.
到目前为止我主要使用GLOP_LinearSolver,它只能最小化或最大化objective函数。为了解决这个问题,我想最小化 f(x)-Z 的绝对平方,但是 GLOP_LinearSolver 不包括绝对值或平方运算符(根据我对 none 的理解OR-Tools 求解器可以)。
我的问题是:是否可以使用Google OR-Tools 来实现这个目标搜索器? 如果是:什么是解决我的问题的方法? 如果否:我可以使用其他什么软件包?
objective函数
min |f(x) - Z|
可以重新表述为:
min d1 + d2
f(x) + d1 - d2 = Z
d1, d2 ≥ 0
只要 f(x)
是线性的,就可以输入任何 LP 求解器。
d1 和 d2 是正负偏差或松弛。我们最小化偏差,所以我们最终得到尽可能接近 Z 的 f(x)。请注意,在最佳解决方案中,d1、d2 中只有一个可以非零(不能同时为两个)。例如。如果 f(x)=10 且 Z=8,则 d1=0,d2=2。如果 f(x)=7 且 Z=8,则 d1=1,d2=0。