论文部分内容阅读
背包问题是一个在运筹学领域里常见的典型NP-C难题。工厂里的下料问题,管理中的资源分配,资金预算,投资决策,装载问题等均可建模为背包问题。对该问题的求解方法的研究无论是在理论上,还是在实践中都具有一定的意义。对于背包问题,已有的求解方法可分为精确算法(如动态规划,回溯法,分支定界等)和近似算法(如贪婪法,拉格朗日法,蚂蚁算法,遗传算法等)两大类。因为精确算法的时间复杂性都是呈指数增长的,所以从六十年代逐渐提出了一些近似算法。 遗传算法起源于对生物系统所进行的计算模拟研究,它属于改进式启发算法。经过三十多年的研究、应用,遗传算法已成为非线性优化和系统辨识的一个有效工具,被广泛的应用于机器人系统、神经网络学习过程、模式识别、图像处理、工业优化控制、自适应控制、遗传学、社会科学等方面,以解决NP完全性、规划控制等问题取得了很好的效果。实践证明,遗传算法作为现代最优化的手段,它应用于大规模、多峰多态函数、含离散变量等情况下的全局最优化问题是合适的,在求解速度和质量上远超过常规方法,因而是一高速近似算法。 采用遗传算法求解背包问题是从90年代才开始的,用遗传算法求解背包问题,可以有非常多的方案,如编码就有实数编码、二进制编码、二重结构编码、DNA编码等,个体的选择有轮盘赌选择、随即遍历抽样选择、局部选择、截断选择、锦标赛选择等,同样适应度函数的确定、交叉、变异都有很多种选择,但至今并未得出结论如何求解才是最好的。本文的目的就是想通过实验的方法来寻找这个答案,提出了4种用遗传算法求解背包问题的方案——在适应度函数的确定中有罚函数法和贪婪法两种选择,在交叉的时候有单点交叉和均匀交叉两种选择,并且比较了调节交叉概率和变异概率对于解的质量的影响。最后从这些方案中通过大量实验发现:采用罚函数法计算适应度,解的质量很不稳定,而采用了贪婪算法计算适应度或在交叉时采用均匀交叉来代替单点交叉,解的质量会变得很稳定。如果采用贪婪法+截断法+均匀交叉法,则这种算法对遗传参数的改变的敏感性会明显降低,从而使得遗传参数的选择不再是一个很大的问题。通过一个很经典的背包问题来进行试验,发现用这种方法得到的平均解的误差为0.4%,平均运行时间为0.64秒。