前言
上一篇讲解了destroy和repair方法的具体实现代码,好多读者都在喊酸爽和得劲儿……今天这篇就讲点简单的,关于solution的定义和管理的代码实现,让大家回回神吧……哈哈。
01 总体概述
总所周知的是,每一个算法的最终目标都是求解出一个合理的满足心意的solution。因此对solution的定义和管理基本是每个算法都要涉及的。在本ALNS代码中呢,也对solution进行了一定的抽象和规范化,提供了一些标准化的接口,同样需要在具体使用中去重写这些接口。
关于solution的处理方式总得来说也由两个模块组成:
- 关于solution的定义:ISolution抽象类
- 关于bestSolution的管理:IBestSolutionManager(抽象类)、SimpleBestSolutionManager(派生类)
下面也对其一一进行讲解。
02 ISolution抽象类
该类只是对solution的进行一定的抽象定义,并没有具体实现各个接口,需要coder在后续的使用中重写编写这些接口。它应该具备的功能看代码就能理解了,注释也写得很详细。主要包括几个功能:获取目标值、获取目标惩罚值、解是否可行、获取每个solution独一无二的hash值等。
具体代码也很简单:
class ISolution
{
public:
virtual ~ISolution(){};
//! A getter for the value of the objective function.
//! \return the value of the objective function of this solution.
virtual double getObjectiveValue()=0;
//! \return a penalized version of the objective value if the solution
//! is infeasible.
virtual double getPenalizedObjectiveValue()=0;
//! A getter for the feasibility of the current solution.
//! \return true if