我正在尝试解决一个问题,在给定大量线段的情况下,我必须尝试最佳地放置一个点,使得从每条线到该点的总距离最小化(即找到最佳位置) 。点线距离可以是从一条线上的任何地方到该点,也可以通过其他线段计算距离(比如有两条线,(0,0)到(0,1)和(1,0)到(1,1)我的观点是说(2,0.5),我可以计算到第一行“通过”第二行的距离,我希望我足够清楚)。这些线都有整数坐标作为终点,但该点可以位于平面上的任何位置。
我对此有很多想法,但我无法提出一般策略。有人可以指点我一些阅读材料或解释一个算法吗?我在其他地方见过这样的东西,这是一般的一类问题吗?
感谢。
答案 0 :(得分:0)
根据您的描述,需要根据线段定义的区域分别讨论最短线距。例如,如果线段是(0,0)到(0,1),那么我们必须将空间切成三个子空间(d表示最小距离函数):
函数d具有convex property,因此您可以通过运行一些标准凸优化软件来解决优化问题,cvx package是一个很好的问题。有关凸优化理论的更多信息,convex optimization是一本很好的书。
如果您不想通过某些优化求解器来获得结果,那么基于启发式求解替代版本会更加简单。
请注意,如果线段在两端无限延伸,问题将是微不足道的。所以我能想到的是将段视为它们是行,但是在终点处添加一个惩罚距离。话虽如此,以下指标满足需求:
L = [(ax + by - c)^ 2] + [(x-x1)^ 2 +(x-y1)^ 2] + [(x-x2)^ 2 +(y-y2)^ 2]
这里(x,y)是你需要决定的点,ax * + by * = c定义直线,(x1,y1),(x2,y2)是两个端点。因此,第一个[...]项是距离线的平方距离;第2和第3个术语是到两个终点的平方距离。
最小化L意味着:
它属于最小平方距离问题,所以你可以通过简单求解一组线性方程来得到解。这也是我坚持L的二次形式的原因。
当然,这只是一种启发式方法,可以简化解决方案。在视觉认知方面,术语L的其他表述可能导致更好的结果。您可以考虑使用不同的L's,然后根据视觉结果选择最佳的。
答案 1 :(得分:0)
我有一个有效的算法,(我在Google上找到它),看起来很疯狂,它会起作用。请问有人可以解释一下为什么会这样吗?感谢..
To solve this, we start by placing the point at any random location and moving
it around in various directions, decreasing the amount that we move it by.To begin
place the point at any location. Next move it in large increments (20) about
10 times.Now we decrease the amount by which we move by an amount to 1/10;Running
the whole placement process about 5 times, decreasing the amount by
which we move the power source each time, will give us the best location
for the point.