You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求避免正方形重叠的最小水平移动量算法(化学优化等效问题)

针对正方形无重叠重排最小水平移动量的算法方案

嘿,这个问题我之前在做一维约束排列优化的时候碰到过类似场景,本质上可以转化成带约束的一维区间重排问题——把每个正方形看作固定长度的水平区间,障碍物是固定的区间,核心目标就是在保持顺序、不碰障碍物、自身不重叠的前提下,让所有正方形的总移动距离最小。给你梳理几个可行的算法方向,从易到难,你可以根据自己的场景选:

1. 贪心算法(快速上手,中小规模N首选)

这是最容易落地的方案,核心思路就是顺着顺序(或逆序)挨个调整每个正方形的位置,尽量贴近初始位置,同时满足所有约束:

  • 从左到右遍历每个正方形:
    1. 先把它的初始左端点当成「理想位置」
    2. 确定左边界的硬约束:如果不是第一个正方形,当前左端点必须≥前一个正方形的右端点 + 极小间距(保证不接触不重叠)
    3. 检查理想位置是否同时满足:和前一个正方形不重叠、和所有障碍物不重叠
    4. 如果满足就用这个位置;如果不满足,就把正方形挪到离理想位置最近的安全点:比如被前一个挡住就挪到左边界约束的位置,被障碍物挡住就选躲在障碍物左侧(刚好留空隙)或右侧(同样留空隙)的位置,哪个离理想位置近选哪个
  • 也可以试试从右到左遍历,有时候能得到更优的结果,最后取两个方向的最优解就行

优点:代码简单,计算速度快;缺点:可能陷入局部最优,不一定能拿到全局最小移动量,但多数中小规模场景下足够用。

2. 动态规划(中等规模N,保证全局最优)

如果追求全局最优,且N不算太大(比如≤50),可以用动态规划:

  • 状态定义:dp[i][x] 表示处理完前i个正方形,第i个正方形左端点在x位置时的最小总移动量
  • 状态转移:要计算dp[i][x],就找所有合法的前一个正方形位置x_prev,取dp[i-1][x_prev] + |x - 初始左端点_i|的最小值,其中x_prev要满足:
    • x_prev + 正方形宽度 + 极小间距 ≤ x(和当前正方形不重叠)
    • x_prev对应的区间、x对应的区间都不与任何障碍物重叠
  • 初始状态:dp[1][x] = |x - 初始左端点_1|,其中x对应的区间不能和任何障碍物重叠
  • 最终答案:所有合法x对应的dp[N][x]的最小值

注意x是连续的,所以需要先做离散化:把所有关键位置(初始位置、障碍物的端点、初始位置加减宽度的点等)收集起来,作为候选位置,这样状态数就可控了。

优点:能得到全局最优解;缺点:离散化后的状态数会随N增长而快速增加,适合中等规模场景。

3. 数学规划(精确求解,适合大规模场景)

如果N比较大,且需要精确的全局最优解,可以把问题建模成数学规划问题,调用成熟的优化库求解:

  • 变量:每个正方形的左端点L_i(如果是整数坐标用整数规划,否则用线性/二次规划)
  • 约束条件:
    1. 顺序约束:L_{i+1} ≥ L_i + 正方形宽度 + 极小间距,对所有1≤i<N
    2. 障碍物约束:对每个正方形i和障碍物j,要么L_i + 正方形宽度 ≤ 障碍物j的左端点,要么L_i ≥ 障碍物j的右端点(保证无重叠无接触)
  • 目标函数:最小化Σ|L_i - 初始左端点_i|(这是线性规划问题),如果换成平方和Σ(L_i - 初始左端点_i)^2就是二次规划,更容易求解,结果和最小绝对值也很接近

可以用开源的PuLP、SCIP,或者商用的CPLEX、Gurobi这类库来实现,不用自己写求解器。

优点:能处理大规模问题,且保证全局最优;缺点:需要依赖优化库,自己实现核心逻辑的难度低,但要熟悉库的用法。

4. 启发式算法(大规模N,近似最优)

如果N特别大(比如>100),前面的方法效率不够,可以用启发式算法找近似最优解:

  • 模拟退火:随机调整某个正方形的位置,计算总移动量,更优就直接接受;如果更差,按一定概率接受,慢慢降低“温度”,最终收敛到较优解
  • 遗传算法:把每个正方形的位置编码成“染色体”,通过交叉、变异操作,筛选出总移动量最小的“个体”
  • 粒子群优化:每个“粒子”代表一组正方形的位置,通过群体协作找到最优解

优点:处理大规模问题效率高;缺点:只能得到近似最优解,无法保证是全局最优,但在实际场景下往往能拿到足够好的结果。

额外优化小技巧

  • 先预处理障碍物:把重叠的障碍物合并成连续的大区间,减少后续约束的数量
  • 提前计算每个正方形的「可行区间」:即不与任何障碍物重叠的左端点范围,缩小搜索范围
  • 把极小间距设为一个很小的正数(比如1e-6),避免数值计算中的精度问题

内容的提问来源于stack exchange,提问作者liyuanhe211

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:38:37