论文部分内容阅读
NP难度问题是一大类问题,NP完全问题则是其中最简单最基本的一类问题。NP完全问题在科学哲学和现实生活中的重要价值在于它同时具有看来相反的两个性质:通俗性和难解性。导致NP完全问题难解的主要根源在于解空间随问题规模的扩大呈指数增长,甚至是一个连续欧氏空间的无穷集合。矩形packing问题属于NP难度问题。此问题来源于物件布局、切裁下料以及超大规模集成电路设计等实际问题,常见的提法有:矩形背包问题,矩形装填问题和矩形块布局问题。我们将人类在近万年来所从事的一些特殊活动中采取的方法和形成的实践经验加以形式化,把它说精确、说完整,并予以进一步的发展,在此基础上设计出求解矩形packing问题的纯粹拟人算法。在“占角动作”和“穴度”两个重要概念的基础上得到了挑选占角动作的具体策略,并提出了求解矩形背包问题的三个具体的纯粹拟人算法:最大穴度算法A0,前瞻穴度算法A1和强化穴度算法A2。算法A0采用纯粹贪心的办法放置矩形块,即每次挑选穴度最大的占角动作并将动作关联的矩形块按相应的位置和方向放在容器中。算法A1在放每一块矩形块时,都运用回溯的策略,以确定一个“全局最好”的动作。算法A2仅在放第一块时运用回溯的策略,以后就采用最大穴度算法放置剩下的矩形块。用Hopper和Turton提出的21个测试实例对三个算法的性能进行了实算测试,并与当今国际文献已报道的最先进的两个算法——初步拟人算法Heuristic1和混合启发式算法(HH)进行了对比。算法A1求出了其中15个实例的最优解,算法A2求出了其中7个实例的最优解,这一结果优于算法Heuristic1和HH所得结果。以“角点数”和“贴边数”两个概念为基础,对算法A0,A1和A2进行改进而得到了三个相应的改进算法A’0,A’1和A’2。对Hopper和Turton提出的21个测试实例,算法A’1求出了其中19个实例的最优解,算法A’2求出了其中8个实例的最优解,这一结果比A1和A2所得结果要好。结合二分的思想,将算法A’1加以改造而得到了矩形装填问题的拟人求解算法A3。用三组测试算例对算法性能进行了实算测试。对Hopper和Turton提出的21个测试实例,算法A3所得容器高度与最优高度的偏差的平均值为0.04%;对Hopper提出的35个装填实例,偏差的平均值为1.8%;对Berkey和Martello等人提出的10组共500个装填实例,偏差的平均值为2.28%。这些结果比目前国际上已报道的最先进的启发式算法所得结果要好。以算法A0和A1为基础,结合“聚类”的思想,提出了矩形块布局问题的拟人求解算法A4。对MCNC和GSRC两组共21个实例,算法求出了其中20个实例的最优解,这一结果好于CompaSS算法(Compacting Soft and Slicing Packings)、基于角模块序列的模拟退火算法(CBL)及遗传算法所得结果。在算法A0和A1的基础上,提出了求解价值优化的矩形packing问题的纯粹拟人算法A5。算法中使用了两个主要的拟人策略——矩形块选择策略和占角动作选择策略。用国际上公认的21个小规模实例和630个大规模实例对算法性能进行了测试,并和基于人口进化理论的启发式算法(PH)进行了对比,算法A5所得结果比PH算法所得结果好得多。大量的实算测试和对比分析表明:我们提出的诸算法是求解矩形packing问题的有效算法。人们今后还可沿着“占角”和“穴度”的哲学思想,对直角多边形和长方体packing问题展开研究。