📄 tabulist.h
字号:
# ifndef _TABULIST_H_
# define _TABULIST_H_
#pragma warning(disable:4786)
#include <deque>
#include <vector>
#include <iostream>
#ifndef _PLANT_H_
#include "Plant.h"
#endif
#ifndef _OS_H_
#include "Os.h"
#endif
using namespace std;
class CTabuList
{
private:
int IteratorNum;//迭代次数,定义为I
int TabuLength;//禁忌长度,定义为T
int NeighborNum;//邻域解个数,定义为N
double CurrentObjectValue;//当前解对应目标函数值
double BestSoFarObjectValue;//目前最好解对应目标函数值
deque<deque<deque<double > > > TabuList;//禁忌表
deque<double > Step;//步长矢量,一个电站一个步长
deque<int > StepAccept;//各个电站步长接受次数
deque<int > StepAttept;//各个电站步长尝试次数
deque<double > TabuListAspiration;//禁忌表中对应目标函数值,AL
deque<double > NeighborObjectValue;//邻域解对应目标函数
deque<deque<double > > BestSoFarWaterLevel;//目前最好解
deque<deque<double > > BestSoFarPowerFlow;//
deque<deque<double > > BestSoFarDischarge;//
deque<deque<double > > CurrentWaterLevel;//当前解
deque<deque<double > > CurrentPowerFlow;//
deque<deque<double > > CurrentDischarge;//
deque<deque<double > > StartWaterLevel;//初始解
deque<deque<double > > StartPowerFlow;
deque<deque<double > > StartDischarge;
double StartObject;
deque<deque<deque<double > > > NeighborWaterLevel;//邻域解
deque<deque<deque<double > > > NeighborPowerFlow;//
deque<deque<deque<double > > > NeighborDischarge;//
CPlant plants[8];//参加调度的电站
public:
CTabuList();//构造函数
CTabuList(int iteratornum,int tabulength,int neighbornum);
~CTabuList();//析构函数
private:
void Init();//初始化,初始化禁忌参数,步长参数,生成初始解,初始化当前解、当前最优解
void InitPlant();//初始化电站信息
void InitStep();//初始化步长信息
void InitSolution();//解初始化
void SetTabuLength(int l);//设置禁忌长度
void SetNeighborNum(int n);//设置邻域解个数
void StepAdjust();//调整步长矢量
void PushToTabuList(deque<deque<double > > &tabuitem);//加入禁忌表
void UpdateAspiration(double l);//更新禁忌表对应目标函数值
bool IsTabu(deque<deque<double > > &neighbor);//判断是否禁忌
bool AlTest(int n);//对第n个邻域解进行AL TEST
void GetNeighborSolutions();//获取邻域解
double ObjectValue(deque<deque<double > > &w,deque<deque<double > > &p,deque<deque<double > > &d);//计算目标函数值
public:
void OutputResult();//输出求解结果
void RunTabuSearch();//运行禁忌搜索算法
void RunTabuSearch(int n);//负荷给定
};
# endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -