我正在尝试用C#编写一个多变量的目标搜索器。主要思想是有一组变量x_1到x_n,这些变量可以由求解器改变,因此目标函数f(x)尽可能接近给定值Z。
到目前为止,我主要使用GLOP_LinearSolver,它只能最小化或最大化目标函数。为了解决这个问题,我想最小化f(x)-Z的绝对平方,但GLOP_LinearSolver没有包含绝对值或平方运算符(据我所知,or工具解算器都不包含)。
我的问题是:有没有可能用Google OR-Tools实现这个目标寻求者?如果是:有什么解决方法可以解决我的问题?如果不是:我还可以使用什么其他的包?
发布于 2020-04-16 16:16:47
目标函数
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。
https://stackoverflow.com/questions/61245288
复制相似问题