python - 获得最小移动以避免方形重叠的算法

标签 python python-3.x algorithm graph

我在化学优化程序中遇到了一个等价于以下问题的问题。我找不到适合它的算法:

假设我有 N 个相同的自由移动方 block ,这些方 block 具有已知的初始经度、固定宽度和 M 个具有固定位置的相同“障碍物”。

是否有一种算法可以使这些方 block 的“最小”总水平运动能够:

  1. 保留正方形的顺序
  2. 导致方 block 和障碍物不重叠(“不接触”);并且没有重叠 正方形之间。

enter image description here

“最小总移动量”一般描述移动前后的位置差。可以是偏差之和,也可以是均方根偏差等,取较容易的。

它不一定是 最小值,但需要一个接近的值才能进行良好的优化。

我可能有多达 50 个方 block 和 25 个障碍物,所以蛮力太慢了。

我还找到了 this post .但它不适用于固定的障碍物,也不一定保持方格的顺序。

最佳答案

O(|sq|^2 * |ob|) 一般复杂度。

ob = [1, 5, 6, 7, 10, 13]
sq = [-3, 0, 3, 6, 8, 14]

f(i, j) 代表最佳解决方案,其中 sq[i] 的正方形必须适合障碍物的左侧,ob[j ]。求解 f(i, 0) 以打包 1,2,3...50 个正方形,其中正确的障碍物是 ob[0]。然后,扩展到障碍物ob[1],解决方案将是

f(i, 1) = min(
  f(k, 0) + cost of placing squares sq[k+1...i] between ob[0] and ob[1]
)
for all k

对每个 j 进行跟进。

关于python - 获得最小移动以避免方形重叠的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48609590/

相关文章:

python - 如何为没有字段的模型制作 Django 固定装置?

python - 导入错误 : No module named django. core.wsgi

python - 如何用python获得方阵的伪行列式

python - 有没有办法使用 openpyxl 或 xlsxwriter 保护工作簿?

algorithm - 画笔冲压算法/技术

arrays - 如何找到数组中项目之间的联系或关系?

python - DictReader 和 UnicodeError

python - 如何动态地将数据从列表添加到数据库(PostgreSQL)

python - 我可以使用 AES I.V.或随机数作为密码盐?

ruby - 深度哈希反转算法(应该是 ruby )