智能算法求解优化问题,那约束条件如何编写代码?
首先要明确选择的哪一类算法来求解?如果选择常规算法的话,就先进行数学公式推导,或者进行模型转换,最终目的是将模型转化为使用常规数值分析算法可求解的状态。数学公式推导的方法需要有较好的数学功底,模型转化方向需要对实际问题有着深刻的理解。
如果选择像GA、PSO或者强化学习这种启发式算法(也就是通常所谓的智能算法)的话,最简单的方法是采用边界条件松弛的思路,具体就是先只考虑其中几个优化目标和约束条件,不考虑剩余的优化目标和约束条件,在求解出的可行解里,将满足剩余优化目标和约束条件的解挑选出来。
但这两种方法中间没有明确的界限,模型转化方法也往往伴使用边界条件松弛的思路,即先考虑最重要的优化目标和约束条件,将模型转化为可用算法求解的状态,这在数学建模上也称作分层优化方法。
在本质上,算法只是数学模型的求解器。所谓的启发式算法往往针对数据规模较大的问题较为适用,并且启发式算法的核心程序是固定的,只要根据数学模型设计出相应的数据结构直接放入算法中即可求解,启发式算法的优势在于“利用30%的时间求解出能够达到逼近理论最优解70%的结果”,缺点在于算法求解的上限有限,即使数据结构设计的很好,能达到最优解90%的结果就很不错了。如果能采用数值分析算法进行求解,在公式推导或模型转化较为良好情况下,可以取得接近最优解90%以上的结果。
页:
[1]