数学建模优秀论文--基于遗传算法的机组组合问题的建模与求解

更新时间:2023-05-10 17:08:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

数学建模方法,优秀论文

数学建模优秀论文--基于遗传算法的机组组合问题的建模与求解

摘要

本文针对当前科技水平不足以有效存储电力的情况下产生的发电机机组组合的问题,考虑负荷平衡、输电线传输容量限制等实际情况产生的约束条件,建立机组组合优化模型,追求发电成本最小。同时采用矩阵实数编码遗传算法(MRCGA)和穷举搜索算法,利用MATLAB 7.0.1和C++编程,分别对模型进行求解,并对所得结果进行分析比较,以此来帮助电力部门制定机组启停计划。

首先,建立发电成本最小目标函数和各项约束条件的数学表达式。其中机组空载成本和增量成本之和随该机组发电出力增长呈折线关系,在分析计算时为了简便,本文采用一条平滑的二次曲线来近似代替。

对于问题1,选取相应的约束条件对目标函数进行约束,从而给出优化模型Ⅰ。由于问题1的求解规模很小,所以采用穷举搜索算法,利用C++编程求解,得到了3母线系统4小时的最优机组组合计划(见表一)。

对于问题2,在优化模型Ⅰ的基础上,增加最小稳定运行出力约束、机组启动和停运时的出力约束以及机组最小运行时间和最小停运时间约束这三个约束条件,建立了优化模型II。同时采用遗传算法和穷举搜索算法,利用MATLAB和C++编程,分别对模

(见表三)。

对于问题3,用IEEE118系统对优化模型II进行测试。由于求解规模巨大,同样采用遗传算法和穷举搜索算法,利用MATLAB和C++编程,分别对模型进行求解,部分结果如下:

作为24小时的最优机组组合计划(见附录)。

最后,我们就模型存在的不足之处提出了改进方案,并对优缺点进行了分析。

关键字 机组组合优化模型 矩阵实数编码遗传算法 穷举搜索算法

数学建模方法,优秀论文

一、问题的提出

当前的科学技术还不能有效地存储电力,所以电力生产和消费在任何时刻都要相等,否则就会威胁电力系统安全运行。为了能够实时平衡变化剧烈的电力负荷,电力部门往往需要根据预测的未来电力负荷安排发电机组起停计划,在满足电力系统安全运行条件下,追求发电成本最小。

在没有电力负荷损耗以及一个小时之内的电力负荷和发电机出力均不变的前提下,假定所有发电机组的发电成本都是由3部分组成:1.启动成本(Startup Cost),2.空载成本(No load cost),3.增量成本(Incremental Cost)。需要考虑的约束有: 1.负荷平衡约束2.系统备用约束3.输电线路传输容量约束4.发电机组出力范围约束5.机组增出力约束6.机组降出力约束。 问题1:3母线系统

有一个3母线系统,其中有2台机组、1个负荷和3条输电线路,已知4个小时的负荷和系统备用要求。请求出这4个小时的最优机组组合计划。最终结果应该包括总成本、各小时各机组的状态、各小时各机组的发电出力和各小时各机组提供的备用。

问题2:3母线系统

在问题1的基础上,考虑发电机组的下列物理特性约束:1.发电机组的稳定出力范围约束2.机组启动时的出力约束3.机组停运时的出力约束4.机组最小运行时间约束5.机组最小停运时间约束。重新制定最优机组组合计划。 问题3:IEEE 118系统

用IEEE-118节点的电力系统对问题2的求解模型进行测试,试求出24个小时的最优机组组合计划。最终结果应该包括总成本、各小时各机组的状态、各小时各机组的发电出力和各小时各机组提供的备用。

二、问题的分析

机组优化组合和优化启停就是要在满足约束条件的情况下,优化地选定各时段参加运行的机组,求出机组的最佳运行方案,实现发电成本最小。

然而,机组组合问题是一个多变量、多约束的混合整数非线性规划问题。针对此类问题的求解,数学类优化方法如线性规划、非线性规划、动态规划等,都存在明显不足之处。而采用智能优化算法对此问题的研究较多,主要包括遗传算法、模拟退火算法、禁忌搜索、人工神经网络、模糊优化等算法。其中模拟退火算法收敛速度慢、禁忌搜索

数学建模方法,优秀论文

算法对初始解依赖性较强、人工神经网络算法存在网络合适的隐含层数目和节点数目难以确定、模糊优化方法的隶属函数和模糊推理规则的确定较困难。鉴于遗传算法作为一种新的全局 优化搜索算法,以其简单通用、鲁棒性强、适于并行处理及应用范围广等显著特点,本文采用基于矩阵实数编码遗传算法来解决机组组合问题。

可以将整个问题分为以下两个任务来完成: 一、 建立机组组合问题的数学模型 二、 采用穷举搜索法和遗传算法,利用C++或者MATLAB编程,求解模型,得到最优机组组合计划

由于题目中的三个问题所考虑的约束条件复杂程度不同,发电机组数与负荷情况也不相同,本文将三个问题逐一建立模型并求解:

问题1

根据负荷平衡、系统备用、输电线路传输容量、发电机组出力范围、机组增出力、机组降出力等约束建立优化模型I,采用穷举搜索算法,利用C++编程进行求解。

问题2和问题3 在问题1的基础上,增加机组启动和停运时的出力、机组最小运行时间和最小停运时间约束条件,建立了优化模型II,采用穷举搜索法和遗传算法,分别利用C++和MATLAB编程进行求解。

三、模型假设和符号系统

3.1 模型假设

1. 假设系统不存在电力负荷损耗

2. 假设一个小时之内的电力负荷和发电机出力均不变

3. 假设参加交叉运算的染色体个数占全体染色体总数的比例为0.4~0.99 4. 假设发生变异的基因位数所占全体染色体的基因总位数的比例为0.0001~0.1 3.2 符号系统

1,表示运行

uit为机组i在t时段的运行状态,uit

0,表示停机

Si为机组i的启动成本 fit为机组i在t时段的发电成本 pit为机组i在t时段的出力; Ljt为负荷j在t时段的负荷量;

pimax为发电机组i的最大出力;

数学建模方法,优秀论文

Rt为t时段系统备用要求;

plinek为线路linek上流过的电能;

xkl为第k根输电线路第l条母线的线性传输因子; pinj,busl为母线l上的注入功率;

pk max为第根输电线路的最大传输容量; pimin发电机组最小稳定运行出力; rdi为机组i最大减出力; rri为机组i最大增出力; Ti1为机组i最小运行时间; Ti2为机组i最小停运时间;

四、模型的建立与求解

4.1模型建立分析

4.1.1先考虑目标函数

1) 空载成本和增量成本

观察空载成本和增量成本构成的部分成本随该机组发电出力变化特性图,如图一中折线所示。

图一 空载成本和增量成本之和随该机组发电出力增长走势图

数学建模方法,优秀论文

在分析计算时为了简便,通常用一条平滑曲线来近似代替有起伏的部分成本特性,如图一中平画曲线所示。当n段直线近似表示时,部分成本特性可表示为

fit pit ai pit bipit ci (1)

2

2) 启动成本

uit1 ui t 1 Si (2)

1,表示运行

其中:uit为机组i在t时段的运行状态,uit

0,表示停机

Si为机组i的启动成本

3) 目标函数

机组组合的目的是针对在指定的周期内,满足系统负荷、备用容量、机组最小时间和最小停机时间等限制,优化确定各机组的启停机计划和优化分配其发电负荷,使发电总费用最小。因此,要以机组的费用最小为依据建立相应的目标函数。

设所研究的计划周期为T,机组台数为n,则该问题的目标函数可以表示为:

minF uitfit pit uit1 ui t 1 Si (3)

t 1i 1

T

n

其中:fit为机组i在t时段的发电成本 4.1.2再考虑约束条件

1) 负荷平衡约束

任何时段,电力负荷之和必须等于发电机发电出力之和。

u

i 1

n

it

pit Ljt (4)

j 1

m

1,表示运行

其中:uit为机组i在t时段的运行状态,uit ;

0,表示停机

pit为机组i在t时段的出力; Ljt为负荷j在t时段的负荷量;

2) 系统备用约束

任何时段,发电机的备用容量之和必须大于系统备用要求。

u p

iti 1

n

imax

pit Rt (5)

其中:pimax为发电机组i的最大出力;

Rt为t时段系统备用要求;

数学建模方法,优秀论文

3) 输电线路传输容量约束

线路传输的电能必须在它的传输容量范围内。

plinek xklpinj,busl pk max (6)

l 0

N

其中:plinek为线路linek上流过的电能;

xkl为第k根输电线路第l条母线的线性传输因子; pinj,busl为母线l上的注入功率;

pk max为第根输电线路的最大传输容量;

4) 发电机组出力范围约束与稳定出力范围约束

处于运行状态的发电机组的发电出力必须小于其最大发电出力,同时必须大于其最小稳定运行出力。

pimin pit pimax (7)

其中:pimin发电机组最小稳定运行出力;

5) 机组增降出力约束

发电机组在增加发电出力时,增加出力的速度要小于其最大增出力;发电机组在减少发电出力时,减少出力的速度要小于其最大减出力。

rdi 1 pit pi t 1 rri 1 (8)

其中:rdi为机组i最大减出力;

rri为机组i最大增出力;

6) 机组启动和停运时的出力约束

当机组从停运状态变为运行状态时,机组在该小时的发电出力必须为其最小稳定运行出力,且当机组从运行状态变为停运状态时,机组在该小时的发电出力必须为其最小稳定运行出力。

pit pimin如果ui t 1 =0且uit=1;或uit=1且ui t 1 =0 (9)

7) 机组最小运行时间和最小停运时间约束

机组每次启动后,连续运行时间至少为该台机组的最小运行时间。机组每次停运后,连续停运时间至少为该台机组的最小停运时间。

ui t 1 ui t 1 uit

u

j t Ti1t 1

t 1

ij

Ti1 (10)

uituit ui t 1

uij Ti2 (11)

j t Ti2

数学建模方法,优秀论文

其中:Ti1为机组i最小运行时间;

Ti2为机组i最小停运时间;

4.2模型及其求解

问题1 1) 优化模型Ⅰ

问题1中的3母线系统仅考虑负荷平衡约束 系统备用约束、输电线路传输容量约束、发电机组出力范围约束与稳定出力范围约束和机组增降出力约束,所建优化方程模型如下。

minF uitfit pit uit1 ui t 1 Si (12)

t 1i 1

T

n

s.t

m

n

uitpit Ljt

j 1

i 1 n

uit pimax pit R i 1

N

s.t. p (13)

linek xklpinj,busl pk max l 0

pit pimax

r 1 p p rri 1iti t 1 di

u为0或者1 it

其中:fit为机组i在t时段的发电成本;fit pit ai pit bipit ci

Si为机组i的启动成本;

2

2)优化模型Ⅰ的求解算法

机组组合问题在数学规划上属于NP完全问题,任何NP完全问题只有通过列举所有可能的组合,才能得到最优解,即采用穷举搜索法。由于问题1的求解规模不大,所以该问题将采用穷举搜索法对模型进行求解。我们设置一计数器T(T 1、2、3、4)用以记录机组已运行的时间。

Step1. 读取各机组和负荷的原始数据。另T 1。

,使其Step2. 设置机组1的第T小时的出力大小(从小到大依次搜索,跨度为1)

出力大小的变化满足增出力约束和降出力约束。

Step3. 判断机组1是否满足其出力范围约束。若满足则继续下一步,否则,重复

数学建模方法,优秀论文

步骤2。

Step4. 根据系统负荷平衡约束,求出机组2的出力大小。

Step5. 判断机组2出力大小的变化和出力范围是否满足增出力约束、降出力约束

和出力范围约束。若满足则继续下一步,否则重复步骤2、3、4。

Step6. 判断机组1和机组2是否满足系统备用约束,若满足则继续下一步,否则

重复步骤2、3、4、5。

若满足继续下一步,Step7. 判断机组1和机组2是否满足输电线路传输容量约束,

否则重复步骤2、3、4、5、6。

若是则输出该种情况下两台机组各时段出力大 小,Step8. 判断计数器T是否为4,

否则重复步骤2、3、4、5、6、7,另T T 1。直到所有的情况搜索完毕

为止。

执行完该算法,可以得到一最优机组组合计划。

3)模型求解与分析

我们根据上面的算法步骤,我们编C++程序(附录1),并代入各机组和负荷的初始数据。可以得到一总成本为6580¥的最优机组组合计划,如表一所示:

表一 3母线系统的最优机组组合计划

使用穷举搜索法对该问题虽然能得出结果,但其运行效率太低,不能用于求解大规模问题,且编程实现较复杂,不是一种优良的算法。

问题2和问题3 1) 优化模型Ⅱ

数学建模方法,优秀论文

问题2和问题3的优化模型为

minF uitfit pit uit1 ui t 1 Si (14)

t 1i 1

T

n

s.t

m

n

uitpit Ljt

j 1

i 1 n

uit pimax pit R i 1

N

plinek xklpinj,busl pk max

l 0

pit pimax

(15) s..t r 1 p p rri 1diiti t 1

uit为0或者1

pit pimin如果ui t 1 =0且uit=1;或uit=1且ui t 1 =0 t 1 uu u uij Ti1 i t 1 i t 1 itj

t Ti1

t 1

uituit ui t 1 uij Ti2

j t Ti2

2)求解算法

对于问题2和3,我们同时采用穷举搜索法和遗传算法两种算法进行求解,并将求得结果进行比较,以比较两种算法的优劣。穷举搜索法的算法思想与问题1的求解算法思想一致。遗传算法的流程图如图二所示。

数学建模方法,优秀论文

图二 遗传算法流程图

矩阵实数编码遗传算法的描述:

Step1. 针对机组组合问题的矩阵实数编码

数学建模方法,优秀论文

本文以要安排发电机组起停计划作为遗传算法中的个体,采用实数矩阵形式进行编码。其具体形式为

p11 p 21 pi1 pn1

p12 p22 pi2

p1t pit

p1T

p2T

(16) piT pnT

p2t

Gk V1,V2,...,Vt,...,VT R1,R2,...,Ri,...,Rn

T

pn2 pnt

其中:Gk 为遗传种群中的第k个个体

pit为编码矩阵中的第i行第t列元素,含义为发电机组i在t时段的发电出力 Vt为编码矩阵中的第t个列向量,含义为t时段内发电机组间的负荷分配情况 Ri为编码矩阵中的第i个行向量,含义为发电机组i在发电计划制定周期内

的出力过程

发电机组的运行状态取决于矩阵中元素的具体取值,即根据机组在某时段中的出力大小来确定启停状态,具体表达式为

0,uit

1,

pit 0其他

(17)

Step2. 遗传种群初始化

遗传种群初始化时,按编码矩阵中列向量的顺序进行。以Gk中Vt为例,初始过程如下:

(1)生成服从均匀分布的随机数数组

R= r1,r2,...,ri,...,rn i 1,2,.n. . , (18)

其中:ri为在发电机组i最大最小出力之间随机生成的正数 (2)计算百分比系数数组Per

per per1,per2,...,peri,...,pern (19)

其中:peri

ri

r

i 1

n

i 1,2,...n ,

i

(3)初始化各台发电机组的出力,即初始化Vt

数学建模方法,优秀论文

Vt p1t,p2t,...,pit,...,pnt (20)

T

其中:pit periLjt i 1,2,...n ,

Ljt为负荷j在t时段的负荷量

Step3. 个体调整方法

在进行个体调整时按列向量的先后顺序进行。以个体Gk中Vt为例,具体调整措施如下:

(1)根据机组组合问题对精度的要求,对Vt列中的各个元素保留

(2)调整Vt列中的元素取值,使其满足相应发电机组出力范围约束。其方法如下:

pimax,

p, pit1 it

pimin, 0,

pit pimax

pimin pit pimax

pimin pit pimax

其他

(21)

其中:pit为调整前发电机组i在t时段的发电出力

pit1为调整后发电机组i在t时段的发电出力

为介于0、1之间的常数,本文取 0.6

pimin发电机组i最小稳定运行出力; pimax发电机组i最大出力;

(3)调整Vt列中的元素取值,使其满足相应发电机组的增出力和降出力约束约束。具体如下:

pit 1 rri,pit1 pit 1 rri

pit2 pit 1 rdi,pit1 pit 1 rdi (22)

p1,p r p1 p r

itit 1ri itit 1di

其中:pit1为前一步调整完成的发电机组i在t时段的发电出力

pit2为此步调整后的发电机组i在t时段的发电出力

rdi为机组i最大减出力 rri为机组i最大增出力

数学建模方法,优秀论文

(4)调整发电机组启停状态使其满足系统备用约束。具体调整方法如下: 当

u

iti 1

n

pmiax p i t

时,增开发电机组,令新投入运行的发电机组发电出力为Rt

其最小出力,直至满足系统备用约束为止。其中,Rt为t时段系统备用要求

(5)经过上述三步调整后,Vt列中所有元素的总和可能不等于t时段中的系统总负荷。因此要进行负荷分配的调整。具体的调整办法为:当 uitpit Ljt时,通过增加

i 1

j 1

n

m

运行发电机组出力来满足负荷平衡约束;反之,若 uitpit Ljt,则降低运行发电机

i 1

j 1

nm

组的出力。此步调整中,只能在发电机组的最大出力允许范围内进行调整,不能改变机

组的运行状态。

(6)算法趋于收敛时,若发电机组的出力过程不满足最小运行、停运时间约束条件,则通过调整违反约束发电机组的运行状态满足此项约束条件,即:

ui t 1 ui t 1 uit

u

j t Ti1t 1

t 1

ij

Ti1时,延长发电机组i的运行时间;

uituit ui t 1

uij Ti2时,采用将发电机组i违反约束的全部停运状态转变为运行

j t Ti2

状态的方式来满足约束条件,并令相应的出力为机组i的最小出力。

其中:Ti1为机组i最小运行时间;

Ti2为机组i最小停运时间;

Step4. 适度函数的选取

采用个体调整方法后,在求解的过程中只有发电机组的最小运行、停运时间约束条

件可能得不到满足。为了加快算法收敛,本文的适度函数采用如下形式:

fitness(Gk)

A(F m Si)

in

(23)

其中:Si 为发电机组i违反最小运行或停运时间约束条件时的惩罚量,本文取Si为机组i的启动成本; 为惩罚因子,本文取 2;m为违反此项约束的次数;A为正常数,本文取A 1.0 106。其含义为:发电机组i违反1次最小运行时间或停运时间约束,便以机组i的 2倍的启动成本Si进行惩罚。

数学建模方法,优秀论文

Step5. 选择-复制

(1)群体中各个体的选择概率

选择概率的计算公式为:

P(xi)

fitness(xi)

n

(24)

f

j 1

itness

(xj)

其中:P(xi)为第i个体的选择概率

xi为第i个个体,即本文中机组i各个时段的发电出力

(2)赌轮选择法

赌轮选择法用下面的子过程来模拟:

① 在 0,1 区间内产生一个均匀分布的随机数r; ② 若r q1,则染色体x1被选中;

③ 若qk 1 r qk(2 k n), 则染色体xk被选中。 其中qi称为染色体xi(i 1,2,...,n)的积累概率, 其计算公式为

qi P(xj) (25)

j 1i

Step6. 交叉

通过Step5.在父代中选择交配个体后,将准备进行交叉操作的父代个体表示为

C1C1C1C1

C1 GC1 V,V,...,V,...,V12tT

C2 G

C2

V

C2

1

,V2,...,Vt,...,VT

C2C2C2

(26)

交叉操作产生的个体记为C1、C2,保留到子代中的个体记为O1、O2。本文的交叉操作是在2个父代个体奇数列与偶数列之间进行的。具体操作过程为:

(1)生成随机数 , (0,1);生成随机交叉位j,1 j T。 (2)交叉操作生成个体D1、D2,其表达式为

C1C1C1C1C2C1C1

D1 V,V,...,V,(1 )V V,V,...,V12j 1jjj 1T

D2 V

C2

1

,V2,...,V

C2

C2j 1, Vj (1 )Vj,V

C1C2

C2j 1

,...,VT

C2

(27)

(3)对交叉生成的个体依照Step3.个体调整方法进行个体调整,然后计算出D1、D2

数学建模方法,优秀论文

的适度值。

(4)采用局部锦标赛选择法在父代个体和交叉产生的个体间进行子代选择,具体方法如下:

O1 max fitness(C1),fitness(D1) O2 max fitness(C2),fitness(D2)

Step7. 变异

(28)

通过Step6.个体交叉后,将准备进行变异的父代个体表示为

O1O1O1O1

E1 V,V,...,V,...,V12tT

E2 V

O2

1

,V2,...,Vt,...,VT

O2O2O2

(29)

变异后产生的个体记为F1、F2,保留到子代中的个体记为I1、I2。 本文只对某列进行变异处理。具体操作过程为: (1) 生成随机变异因子 ,(0.045 0.055); 生成随机变异时段 ,(1 T且 为整数);

1,个体发生变异) 生成随机变异个体选择因子 ,(

0,个体未发生变异

(2)变异后生成个体E1、E2,其表达式为

O1O1O1O1O1O1

H1 V,V,..., V (1 )V,V,...,V12 1T

H2 V

O2

1,V2,..., V

O2O2

(1 )V ,V

O2

O2 1

,...,VT

O2

(30)

(3)对变异后生成的个体依照Step3.个体调整方法进行个体调整,然后计算出H1、

H2的适度值。

(4)采用局部锦标赛选择法在父代个体和变异产生的个体间进行子代选择,具体

方法如下:

I1 max fitness(E1),fitness(H1) I2 max fitness(E2),fitness(H2)

Step 8. 终止条件

(31)

遗传算法的终止条件有两类常见条件:

第一类:采用设定最大遗传代数的方法,一般可设为50代,此时就可能得出最优解。

第二类:根据个体的差异来判断,通过计算种群中基因多样性测度,即所有基因位

数学建模方法,优秀论文

相似程度来进行控制。

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

3)模型求解

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

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

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

数学建模方法,优秀论文

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

问题3

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

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

图三 迭代30次的运行结果

图四 迭代50次的运行结果

数学建模方法,优秀论文

图五 迭代100次的运行结果

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

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

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

六、模型的改进及评价

6.1模型的改进

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

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

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

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

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

数学建模方法,优秀论文

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

6.2模型的评价

优点:

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

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

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

缺点:

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

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

参考文献:

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

[3] 孙力勇,张焰,蒋传文,基于矩阵实数编码遗传算法求解大规模机组组合问题,中国机电工程学报,第26卷(2期),2006

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

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

#include <iostream> #include <fstream> using namespace std;

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

ofstream fout("11.doc");

数学建模方法,优秀论文

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) { if (x <= 100) { return 100 + 10*x; } else { return 14*x - 300; } }

// 机组2成本

double cost2(double x) {

数学建模方法,优秀论文

if (x <= 60) { return 12*x + 200; } else { return 15*x + 20; } }

// 总成本

int get_total_price() { int i = 0, j; double price = 0; for (j = 1; j < hour; j++) { price += state[i][j]*cost1(power[i][j]) + state[i][j]*(1-state[i][j-1])*start[i]; } i = 1; for (j = 1; j < hour; j++) { price += state[i][j]*cost2(power[i][j]) + state[i][j]*(1-state[i][j-1])*start[i]; } minprice = (minprice > price ? price: minprice); //cout << minprice << " "; fout << minprice << " "; return price; }

void fun(int i) { for (int j = -50; j <= 30; j+= 1) { // 机组1 power[0][i] = power[0][i-1] + j; // 机组1出力范围约束 if (power[0][i] < 0 || power[0][i] > 200) { continue;

本文来源:https://www.bwwdw.com/article/w7oe.html

Top