基于遗传算法的机组组合问题的建模与求解 下载本文

相似程度来进行控制。

本文采用第一类方法,将I1、I2个体依照Step3.个体调整方法进行个体调整,然后计算出对应的适度值,直到第G代,循环迭代结束,输出最优解Tc0。

3)模型求解

利用穷举搜索法和遗传算法可以分别求解问题1和2。 问题2

利用C++程序对穷举搜索法进行实现,然后求解,所得结果如表二所示。

表二 问题二穷举搜索法求解结果 机组G1 机组G2 状态 运行 关机 出力(MW) 1 100 0 备用(MW) 100 0 状态 运行 运行 出力(MW) 2 110 20 备用(MW) 90 80 状态 运行 运行 小时 出力(MW) 3 110 60 备用(MW) 90 40 状态 运行 运行 出力(MW) 4 100 40 备用(MW) 100 60 总成本(¥) 6820

利用MATLAB程序对遗传进行实现,然后求解。由于遗传算法具有随机性,所程序每次运行所得的结果有略微差别,我们从多次运行的解中选取总成本最小的一组机组组合计划,结果如表三所示。

表三 问题二遗传算法求解结果 机组G1 机组G2 状态 运行 关机 出力(MW) 1 100 0 备用(MW) 100 0 状态 运行 关机 出力(MW) 2 130 0 备用(MW) 70 0 状态 运行 运行 小时 出力(MW) 3 150 20 备用(MW) 50 80 状态 运行 运行 出力(MW) 4 120 20 备用(MW) 80 80 总成本(¥) 6780

15

从问题2两种算法的求解结果中我们可以发现,遗传算法的求解结果优于穷举搜索法,但遗传算法有一定的随机性,有时需多运行几次才能得到最优解。且遗传算法比穷举搜索法更容易实现。

问题3

利用穷举搜索法和矩阵实数编码遗传算法分别求解问题3。 穷举搜索法求解结果见附录三。

由于矩阵实数编码遗传算法得到的成本最小值具有一定的随机性,且随算法中迭代次数的变化而变化,所程序每次运行所得的结果有略微差别。为求得更为精确的结果,我们变换迭代次数,以判断迭代多少次为最优(这里取30、50、100次的结果),见图三、四、五,详细结果见附录四、五

图三 迭代30次的运行结果

图四 迭代50次的运行结果

16

图五 迭代100次的运行结果

我们从多次运行的结果中选取最优机组组合计划,使用矩阵实数编码遗传算法求得的最优解为迭代次数为50次(总成本、各小时各机组的状态、各小时各机组的发电出力和各小时提供的备用)见附录五

从问题3的求解结果中,通过不同迭代次数之间的比较以及穷举搜索法与矩阵实数编码遗传算法的对比分析,看出矩阵实数编码遗传算法在进行大规模机组组合问题求解时,具有很强的适应性和全局搜索能力,而且系统规模越大算法的优化结果越理想。

因此,矩阵实数编码遗传算法的求解结果优于穷举搜索法,但矩阵实数编码遗传算法有一定的随机性,需多运行几次才能得到最优解。

六、模型的改进及评价

6.1模型的改进

模型改进一:机组组合优化模型I与II的改进

在机组组合优化模型I、II中,通过二次函数对空载成本和增量成本曲线参数进行拟合过程中,采用二次函数拟合误差比较大(增量成本变化幅度比较小),特别是机组规模比较小的时候更是如此。

鉴于此种情况,当机组规模比较大时,可以采取平滑曲线进行拟合。如问题三,可以利用二次函数进行拟合,根据运行结果可以看出误差更小,机组启停更合理,发电成本更小。

此外,当机组规模相对较小时,可以不进行曲线拟合,直接采取分段函数,编程求解。如问题一和二,利用C++编程,采取穷举搜索法求解,精度会更高。 模型改进二:基于矩阵实数编码遗传算法的改进

在矩阵实数编码遗传算法步骤中,根据实际情况(如机组规模,时段等问题)可以对各步骤进行优化或改进。如Step7变异,本文实在时段内列向量进行的,相当于发电机组ii在不同时段发电出力的重新调整。因此,还可以采用多窗口变异操作1。此操作是在个体内行向量间进行的,相当于在不同发电机组间进行发电出力的重新调整。此法

【】

17

具有经济负荷分配的功能,并且,由于是同时进行多个时段的负荷分配调整,故执行效率较高。当然,二者相结合,效果更佳。

6.2模型的评价

优点:

第一,提供了一种求解多变量、多约束的混合整数非线性规划的机组组合优化问题的思路,此方法新颖可靠易行,极具参考价值。

第二,采用MRCGA算法求解机组组合问题的新方法。利用二维实数矩阵对发电计划安排进行编码,将机组组合问题转化为单层优化问题进行求解,因而降低了算法的时间复杂度。运用个体调整方法处理各项约束条件,确保了优化结果的可行性,使该算法更易于应用实际。

第三, 矩阵实数编码遗传算法(MRCGA)适合求解大规模机组组合问题。通过MATLAB仿真计算、不同迭代次数比较分析以及同其他方法(如穷举法)的对比分析,验证了该方法在进行大规模机组组合问题求解时,具有很强的适应性和全局搜索能力,而且系统规模越大算法的优化结果越理想。

缺点:

第一,采用二次函数对空载成本和增量成本曲线参数进行拟合过程中,拟合误差比较大。特别是机组规模比较小时更是如此。

第二,MRCGA算法对小规模机组组合问题求解结果精度不高,误差大。

参考文献:

[1] 刘琼荪,龚劬,何中市,傅鹂,任善强,数学实验,北京:高等教育出版社,2004 [2] 姜启源,谢金星,叶俊,数学模型,北京:高等教育出版社,2006

[3] 孙力勇,张焰,蒋传文,基于矩阵实数编码遗传算法求解大规模机组组合问题,中

国机电工程学报,第26卷(2期),2006

[4] 赵东方,数学模型与计算,北京:科学出版社,2007

18

附录 问题1的C++求解程序

#include #include using namespace std;

double cost1(double x); double cost2(double x); int get_total_price(); void fun(int i);

ofstream fout(\

const int hour = 5; // 最大出力

int pmax[2] = {200, 100}; // 最大增出力 int pcmax[2] = {30, 40}; // 最大减出力 int pdmax[2] = {50, 60}; // 状态

int state[2][hour] = {{1}, {0}}; // 负荷

int demand[5] = {0, 100, 130, 170, 140}; // 启动费用

int start[2] = {350, 100}; // 机组各时段状态

int power[2][5] = {{100}, {0}};

// 系统备用要求

int b_power[hour] = {0, 20, 30, 50, 40}; // 最小费用

int minprice = 9999999;

int main() {

fun(1);

return 0; }

// 机组1成本 double cost1(double x)

19