Optimization 最大化给定矩形中的点-(int间距,int偏差)

Optimization 最大化给定矩形中的点-(int间距,int偏差),optimization,recursion,dynamic-programming,pseudocode,Optimization,Recursion,Dynamic Programming,Pseudocode,我需要一个返回点数组的函数,它必须最大化矩形中的点数。该函数必须支持100mm间距(在任何方向上),但它可以偏离x(整数),以创建几乎适合的点。我们还希望尽量减少偏差 在给定区域中存在点不能位于其中的形状。我有一个工作函数布尔isCollide(Point) 这实际上是一个CAD问题,其逻辑将应用于Catia v5。我希望有sudo代码。矩形大小是恒定的,并使用PLATEXMAX和PLATEYMAX标注尺寸 我的解决方案必须详尽无遗,我所有的尝试都只给出了启发式的解决方案。算法效率不是问题。有没

我需要一个返回点数组的函数,它必须最大化矩形中的点数。该函数必须支持100mm间距(在任何方向上),但它可以偏离x(整数),以创建几乎适合的点。我们还希望尽量减少偏差

在给定区域中存在点不能位于其中的形状。我有一个工作函数布尔isCollide(Point)

这实际上是一个CAD问题,其逻辑将应用于Catia v5。我希望有sudo代码。矩形大小是恒定的,并使用PLATEXMAX和PLATEYMAX标注尺寸

我的解决方案必须详尽无遗,我所有的尝试都只给出了启发式的解决方案。算法效率不是问题。有没有人遇到过类似的问题,或者有什么建议

我已经创建了一个插图来展示我的问题的视觉表现。

编辑:

点[]临时数组=新点[]

对于i=0到x{

 for j=0 to PLATEYMAX{

     Point test = new Point(i,j)
     Boolean found = false

     foreach tpoint in tempArray{
     if !found{
       for n=0 to deviation{
         if tpoint.distanceTo(test) < (100 + n){
               if !(isCollide(test){
                   tempArray.add(test)
                   break
                } else{
                     //check points offset from this point
                     //check every offset point 360deg around test
                     //increase checking radius to max deviation

              }
           }
         }
   }
j=0至平板最大值的
{
点测试=新点(i,j)
布尔值=false
tempArray中的foreach tpoint{
如果!找到了{
当n=0时,为偏差{
如果t点距离(测试)<(100+n){
如果!(isCollide(测试){
tempArray.add(测试)
打破
}否则{
//检查点从此点偏移
//检查测试周围360度的每个偏移点
//将检查半径增加到最大偏差
}
}
}
}

如果只有几个点,“尝试每个解决方案”可能是可行的。因此,如果有8个点,请尝试所有2^8个被包括/未包括的点的排列,检查这些点集是否适合给定的矩形。这将是最容易实现的:使用带有0..2^n的整数i的for循环,并使用位掩码在测试中包括/不包括某些元素


作为一种稍微不太暴力的方法,尝试回溯。本质上,您尝试所有点的排列,但一旦解决方案无效,就停止(即,如果一组点不适合给定的矩形。提供了伪代码的实现。

100mm间距是什么意思?您尝试过什么?我想您也会找到它的伪代码!另外,您希望有多少点?我希望在10-40点之间。