书 名 | 水电站经济运行理论及算法实现 | 作 者 | 徐晨光 [1] |
---|---|---|---|
ISBN | 9787807340416 [1] | 页 数 | 155 |
定 价 | 10元 | 出版社 | 黄河水利出版社 |
出版时间 | 2006-1-1 | 装 帧 | 平装 |
开 本 | 32开 |
第1章 绪论 (1)
1.1 研究的背景及意义 (1)
1.2 国内外研究现状 (5)
1.3 存在的问题 (11)
1.4 研究方向 (12)
1.5 本书主要研究内容 (13)
1.6 研究的技术路线 (14)
第2章 新形势下水电站厂内经济运行的机遇与挑战 (17)
2.1 电力体制改革与水电站厂内经济运行的机遇与挑战 (17)
2.2 竞价上网 (19)
2.3 厂网分开与空耗水量计算 (22)
2.4 梯级水电站面临的新问题 (32)
2.5 小结 (33)
第3章 水电站厂内经济运行理论 (35)
3.1 厂内经济运行在水电站优化调度中的地位 (36)
3.2 厂内经济运行的研究内容 (37)
3.3 厂内经济运行模型 (40)
3.4 水电站厂内经济运行准实时系统 (44)
3.5 小结 (48)
第4章 基于RBF神经网络的水轮机组效率曲线计算 (50)
4.1 效率曲线的影响因素 (50)
4.2 传统的效率曲线计算方法 (51)
4.3 基于径向基神经网络的水轮机组效率曲线计算(52)
4.4 小结(62)
第5章 水轮机组耗流量的在线计算(63)
5.1 RBF神经网络的在线训练算法 (64)
5.2 水轮机组耗流量计算在线训练过程(65)
5.3 基于RBF神经网络在线训练的水轮机组耗流量计算(69)
5.4 小结(71)
第6章 基于进化算法的水电站负荷分配理论(73)
6.1 水电站厂内经济运行负荷分配数学模型(74)
6.2 负荷分配问题的求解方法(75)
6.3 遗传算法求解负荷分配问题(78)
6.4 自组织进化规划求解负荷分配问题(80)
6.5 免疫算法求解负荷分配问题(83)
6.6 进化算法求解特点比较(86)
6.7 小结(87)
第7章 水电站负荷分配的进化算法实例研究(88)
7.1 径流式水电站厂内经济运行负荷分配实例(88)
7.2 大型水电站厂内经济运行负荷分配实例(98)
7.3 小结(103)
第8章 基于UML技术的嵌入式水电站厂内经济运行系统设计与开发(104)
8.1 统一建模方法(106)
8.2 基于UML技术的厂内经济运行准实时系统设计(107)
8.3 嵌入式应用软件的开发工具(114)
8.4 嵌入式厂内经济运行准实时系统的开发过程(115)
8.5 小结(117)
第9章 模型算法实现(119)
9.1 基于RBF神经网络的水轮机组耗流量计算算法(119)
9.2 动态规划法求解负荷分配问题(121)
9.3 遗传算法求解负荷分配问题(124)
9.4 进化规划法求解负荷分配问题(133)
第10章 总结及展望(142)
10.1 研究成果(142)
10.2 展望(144)
参考文献(145)
作为水电站运行管理的重要组成部分,水电站厂内经济运行(Economical Operation of Hydropower Plant,EOHP)能够增加水电站的经济效益1%~3%,这部分效益增加对于我国这样的水电大国和能源供需矛盾日渐突出的形势是非常有意义的。同时,水电大发展的广阔前景使水电站厂内经济运行总量效益可观。
随着电力市场化进程的加快,以及"厂网分开,竞价上网"的电力市场运营机制的实施,发电企业成了竞争主体,水电站在参与市场竞争的过程中,必须根据自身与竞争各方的运行特性,扬长避短,提高自身的竞争能力,以适应电力市场改革。
水电大发展使水电站厂内经济运行总量效益可观,技术进步使水电站厂内经济运行技术可行,而电力市场改革要求水电站厂内经济运行从理论走向实用。因此,在科技和生产实际的双重促进下,水电站厂内经济运行的研究、开发和应用就具有显著的实用价值。本书针对如何提高厂内经济运行的实用性进行了有益的探索。
本书通过研究水电站厂内经济运行的关键技术问题,运用新方法和新技术建立水电站厂内经济运行系统理论体系与模型体系,探讨了水电站厂内经济运行准实时系统的设计与开发技术,为其商业化奠定基础。
本书旨在从生产实际出发,开阔研究思路。考虑到水电站厂内经济运行问题的复杂性以及实时性强的特点,把系统工程和软件工程的技术引入,针对原有运行方式的弊端,进行模型设计与开发。通过软件工程、神经网络、进化算法等理论的交叉引用,使整个水电站厂内经济运行系统更加快速有效。
本书第1章到第3章探讨水电站厂内经济运行的基本理论;第4章到第7章探讨水电站厂内经济运行相关模型及其求解方法;第8章采用统一建模语言进行水电站厂内经济运行系统的设计与开发。为利于大家研究讨论,附上系统开发的核心计算机程序。
本书由徐晨光和赵麦换执笔,由刘晓黎和黄强审定并统稿。全书共12万字,徐晨光完成7万字,赵麦换完成5万字。
本书由以下项目资助:①中国电力教育基金项目--水电站厂内经济运行软件开发;②甘肃省河西水电开发有限责任公司项目--黑河梯级水电站优化调度研究;③华北水利水电学院高层次人才科研启动项目。
在本书的编写过程中,得到了西安理工大学多位老师和同学的帮助,他们无私而又真诚的帮助是本书出版的源动力,这里要感谢沈冰教授、田峰巍教授、解建仓教授、畅建霞博士、王义民博士、薛小杰博士,同时要感谢华北水利水电学院的徐建新教授、陈南祥教授和黄河勘测规划设计有限公司的王煜博士,最后要特别感谢黄河水利出版社的王路平编辑对本书编、审所做的辛勤工作。
由于作者水平有限,书中不妥之处难免,恳请读者批评指正。
作者
2005年10月
小南海水电站是国务院批准的《长江流域综合利用规划》规划的梯级水电站。开发小南海项目,对带动重庆地区经济可持续发展,向重庆提供清洁、可靠的电能,提高重庆境内长江干流航道标准,具有十分重要的作用。小南海水...
常规水电站 需要人员不间断的巡视维护 。自动化水电站以计算机监控系统为基础的综合自动化;使水电站逐步实现少人值班,最终达到无人值班(或少人值守)。
在同一条洞子里,作这样的区分是为了适应不同地质条件的。
以水电站运行成本最小为目标,提出了一种用混合遗传算法实现大型电站最优运行计划的方法。该方法考虑了机组能量特性差异,并能在旋转备用、起停成本、空蚀振动区、机组可用性等约束条件下,制定出电站日内96段最优运行计划。该方法避免了动态规划等算法处理多约束、大型优化问题的困难,同时提高了遗传算法的精度。算例表明,方法精度高,计算速度快。
分发电和供电2个方面,结合十几年运行管理经验,从加强设备运行、检修、维护和提高工作人员的技术水平和管理水平等几个方面提出促进冯家山水电站经济运行的具体措施。
扩展先序遍历算法实现
用二叉链表做为存储结构,先序遍历算法可描述为:
void InOrder(BinTree T)
{ //算法里①~⑥是为了说明执行过程加入的标号
① if(T) { // 如果二叉树非空
② printf("%c",T->data); // 访问结点 ③ InOrder(T->lchild); ④ InOrder(T->rchild); ⑤ }
⑥ } // InOrder
void createBiTree(BiTree *bt){
char ch;
ch = getchar();
if(ch == '.')
*bt = NULL;
else{
*bt = (BiTree)malloc(sizeof(BiTNode));//向内存申请节点空间
(*bt)->data = ch;
createBiTree(&((*bt)->LChild));//生成左子树
createBiTree(&((*bt)->RChild));//生成右子树
}
}/*createBiTree*/
/*==================打印二叉树=============*/
void printTree(BiTree bt,int nLayer){
int i;
if(bt == NULL)
return ;
printTree(bt ->RChild,nLayer+1);
for(i=0;i<nLayer;i++)
printf(" ");
printf("%c\n",bt->data);
printTree(bt->LChild,nLayer+1);
}
图一:
(a)1 2 4 . . 6 . . 3 . 5 . 7 . 8 . .
(b)1 2 4 . . 5 . . 3 6 . . 7 . . 运行结果:
图二:
(a)7 3 1 . . 2 . . 9 . 10 . 8 . 4 . .
(b)7 3 1 . . 5 4 . . . 11 10 . . 15 . .
运行结果:
用C语言最简单的哈夫曼算法实现
#include <stdio.h>
#include <conio.h>
struct BinaryTree
{
long data;
int lchild,rchild;
};
//定义一个二叉树结构
void sort(struct BinaryTree cc[],int l,int r);
void xx(long kk,struct BinaryTree cc[]);
void zx(long kk,struct BinaryTree cc[]);
void hx(long kk,struct BinaryTree cc[]);
//对函数的声明
main(void)
{
struct BinaryTree Woods[101];
long i,j,n,xs,k;
scanf("%d",&n);
for ( i=1; i<=n; ++i)
{
scanf("%d",&Woods.data);
Woods.lchild=0;
Woods.rchild=0;
} //依次读入权值
k=n;
xs=1;
--n;
while (k>1)
{
sort(Woods,xs,n+1);
Woods[n+2].data=Woods[xs].data+Woods[xs+1].data; //将根结点权值为左子树也右子树权值之和
Woods[n+2].lchild=xs; //对左子树和右子树的设置
Woods[n+2].rchild=xs+1;
++n;
xs=xs+2;
--k;
} //哈夫曼算法
printf("%s","preorder:");
xx(n+1,Woods);
printf("\n%s","inorder:");
zx(n+1,Woods);
printf("\n%s","postorder");
hx(n+1,Woods);
printf("\n"); //输出先序,中序,后序序列
getch();
}
//快速排序
void sort(struct BinaryTree cc[],int l,int r)
{
long x,y;
int i,j,rc,lc;
i=l;
j=r;
x=cc[(l+r)/2].data;
if (r<l)
return;
do
{
while(cc.data<x)
++i;
while(x<cc[j].data)
--j;
if (i<j)
{
y=cc.data;
rc=cc.rchild;
lc=cc.lchild;
cc.data=cc[j].data;
cc.lchild=cc[j].lchild;
cc.rchild=cc[j].rchild;
cc[j].data=y;
cc[j].lchild=lc;
cc[j].rchild=rc;
++i;
--j;
}
}
while(i>j);
if (i<r)
sort(cc,i,r);
if (j>l)
sort(cc,l,j);
}
//先序序列
void xx(long kk,struct BinaryTree cc[])
{
if (cc[kk].data!=0)
{
printf("%d%c",cc[kk].data,' ');
if (cc[kk].lchild!=0)
xx(cc[kk].lchild,cc);
if (cc[kk].rchild!=0)
xx(cc[kk].rchild,cc);
}
}
//中序序列
void zx(long kk,struct BinaryTree cc[])
{
if (cc[kk].data!=0)
{
if (cc[kk].lchild!=0)
zx(cc[kk].lchild,cc);
printf("%d%c",cc[kk].data,' ');
if (cc[kk].rchild!=0)
zx(cc[kk].rchild,cc);
}
}
//后序序列
void hx(long kk,struct BinaryTree cc[])
{
if (cc[kk].data!=0)
{
if (cc[kk].lchild!=0)
hx(cc[kk].lchild,cc);
if (cc[kk].rchild!=0)
hx(cc[kk].rchild,cc);
printf("%d%c",cc[kk].data,' ');
}
}
将一个普通的中序表达式转换为逆波兰表达式的一般算法是:
首先需要分配2个栈,一个作为临时存储运算符的栈S1(含一个结束符号),一个作为输入逆波兰式的栈S2(空栈),S1栈可先放入优先级最低的运算符#,注意,中缀式应以此最低优先级的运算符结束。可指定其他字符,不一定非#不可。从中缀式的左端开始取字符,逐序进行如下步骤:
(1)若取出的字符是操作数,则分析出完整的运算数,该操作数直接送入S2栈
(2)若取出的字符是运算符,则将该运算符与S1栈栈顶元素比较,如果该运算符优先级大于S1栈栈顶运算符优先级,则将该运算符进S1栈,否则,将S1栈的栈顶运算符弹出,送入S2栈中,直至S1栈栈顶运算符低于(不包括等于)该运算符优先级,最后将该运算符送入S1栈。
(3)若取出的字符是"(",则直接送入S1栈顶。
(4)若取出的字符是")",则将距离S1栈栈顶最近的"("之间的运算符,逐个出栈,依次送入S2栈,此时抛弃"("。
(5)重复上面的1~4步,直至处理完所有的输入字符
(6)若取出的字符是"#",则将S1栈内所有运算符(不包括"#"),逐个出栈,依次送入S2栈。
完成以上步骤,S2栈便为逆波兰式输出结果。不过S2应做一下逆序处理。便可以按照逆波兰式的计算方法计算了!