拟人拟物法求解不等圆Packing问题

本文介绍了使用拟人拟物法解决不等圆Packing问题的算法,通过将物体和容器想象为弹性气球,通过计算弹性势能和迭代寻找布局。当遇到局部最小值时,采用随机或策略性的方法重新放置“难民”物体来跳出陷阱。文中还讨论了如何判断局部最小值和选择放置难民的策略,并提供了实验数据和程序实现。
摘要由CSDN通过智能技术生成

NP难度这门课还是比较有意思的,老师布置了一道作业,写一个用拟人拟物法求解不等圆Packing问题的小程序。

问题描述:在一个已知的容器中希望能放下N个不同形状大小的物体,其中界限容器的封闭边境以及各个物体都是不可入的刚性实体,如果客观上放不下,我们要求做出放不下的判断;如果客观上放得下,则要求给出每个物体的位置和方向。

这就是所谓的Packing问题,我们将问题简化了,只考虑圆形的容器和物体,给定容器的半径、物体的数量、物体的半径,求解是否存在一种布局,使得容器和物体两两之间都不相交。Packing问题是一个NP难度问题,因为我们要确定不存在满足条件的布局,必须穷举所有的布局,这是不可能的。

拟物方法是解决Packing问题的比较经典的算法。我们将这N个圆形物体和容器想象成光滑弹性的气球,容器是固定不动的,当这N个物体放入容器后,就会受到挤压而在弹力的作用下开始运动,最终有可能各个物体和容器都恢复自己的大小和形状,问题就得到了解决。因此我们引入以下概念:

  • 任一时刻,称N个物体的圆心坐标x1,y1,x2,y2……,xn,yn为系统在此刻的格局;
  • 物体间的距离Lij,如果i、j物体相切,Lij=0;如果i、j物体相离,Lij>0;如果i、j物体相交,Lij<0,且|Lij| = Ri +
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值