计算智能-模糊算法实现覆冰厚度预测

实现论文

《采用模糊逻辑理论的覆冰厚度预测模型》-文章编号:1003-6520(2011)05-1245-08

链接:https://pan.baidu.com/s/1scdDvKvUviEVEeQC8fweRg
提取码:k38b

实验目的

输电线路覆冰常会引起线路的导线舞动 、跳闸 、 断线 、绝缘子闪络、倒塔和通讯中断等事故, 严重影 响电力系统的正常运行。冰雪灾害已成为许多国家
的电网面临的共同问题 。美国 、加拿大、俄罗斯、法 国、冰岛和日本等都曾发生严重冰雪事故。我国也 是世界上输电线路覆冰最为严重的国家之一, 2008 年初我国南方部分地区遭受了历史罕见的持续低温 雨雪冰冻灾害, 输电线路发生大面积倒杆(塔)、断线(串)事故[ 1-4] 。针对国内外覆冰灾害情况 ,为了减少 输电线路覆冰事故的发生 ,有效保障电力系统安全 运行,在加强覆冰在线监测系统研究的同时,还应注 重加强建立覆冰预测模型的研究 。 模糊逻辑方法具有多因素综合分析的特点 ,适 合对受多种因素影响的具有不确定性结论的事物或 现象作出总的评价 。输电线路覆冰的发生具有明显 的模糊性和不确定性, 因此, 如何解决模糊性 、不确
定性影响问题是覆冰预测方法面临的关键问题[ 5-8] 。 为此,本文根据贵州电网的现场覆冰监测数据, 探讨 并建立了基于模糊逻辑的覆冰厚度预测模型。

基本思路

模糊理论是美国柏克莱加州大学电气工程系 Zadeh 教授于 1965 年创立的模糊集合理论的基础上发展起来的。模糊逻辑是一种连续逻辑 , 是 二值逻辑的扩展 。模糊逻辑有着更加普遍的实际意 义,摈弃了二值逻辑简单的肯定或否定 ,把客观逻辑 世界看成是具有连续灰度等级变化的, 它允许一个 命题亦此亦彼, 存在着部分肯定和部分否定, 只不过 是隶属程度不同而已, 这就为计算机模仿人的思维 方式来处理普遍存在的语言信息提供了可能[ 17-18] 。 模糊逻辑模型通常包括输入量模糊化、数据库 、 规则库、推理机和输出量反模糊化等 5 部分。组成
结构图如图 2 所示 ,本论文的覆冰模糊逻辑模型为 四输入一输出模型。模糊逻辑模型在输入和输出之 间起着非线性映射作用, 其输入和输出都是确定的 实数值 ,而不是模糊集合。模糊化是指将输入转换 为模糊集合,即将实测物理量转化为在该语言变量 相应论域内不同语言值的模糊子集 ,对于模糊逻辑 模型的多个输入 ,每个输入量的模糊化过程都是一 样的 ,进行模糊推理的前提是输入都必须通过模糊 化处理。因此, 模糊化即为模糊逻辑模型的输入接
口,作用就是将确定的实数输入量转换为模糊量, 即 模糊集合及其相应的隶属度。推理机使用数据库和规则库产生模糊结论(即蕴涵模糊集合)。反模糊化 则将模糊结论转换为确定实数输出, 即将推理机得 到的模糊量转化为一个清晰确定的值 。

基本流程

1)语言变量
2)论域分割
3)隶属函数的确定
4)隶属度函数的选择
5)模糊规则库的建立
6)模糊推理
7)解模糊化

代码实现

#传入et参数得到相应隶属度
def ET(x):
  data={'nb':0,'ns':0,'o':0,'ps':0,'pb':0}
  if -20 <= x <= -10 :
    data['nb']=(-1/10)*x-1
    data['ns']=(1/10)*x+2
  elif -10< x <= 0:
    data['ns']=(-1/10)*x
    data['o']=(1/10)*x+1
  elif 0 < x <= 10:
    data['o']=(-1/10)*x+1
    data['ps']=(1/10)*x
  else:
    data['ps']=(-1/10)*x+2
    data['pb']=(1/10)*x-1
  return data


#传入eh参数得到相应隶属度
def EH(x):
  data={'nb':0,'ns':0,'o':0,'ps':0,'pb':0}
  if 0 <= x <= 25 :
    data['nb']=(-1/25)*x+1
    data['ns']=(1/25)*x
  elif 25< x <= 50:
    data['ns']=(-1/25)*x+2
    data['o']=(1/25)*x-1
  elif 50 < x <= 75:
    data['o']=(-1/25)*x+3
    data['ps']=(1/25)*x-2
  else:
    data['ps']=(-1/25)*x+4
    data['pb']=(1/25)*x-3
  return data
  
#传入ew参数得到相应隶属度 
def EW(x):
  data={'nb':0,'ns':0,'o':0,'ps':0,'pb':0}
  if 0 <= x <= 5 :
    data['nb']=(-1/5)*x+1
    data['ns']=(1/5)*x
  elif 5< x <= 10:
    data['ns']=(-1/5)*x+2
    data['o']=(1/5)*x-1
  elif 10 < x <= 15:
    data['o']=(-1/5)*x+3
    data['ps']=(1/5)*x-2
  else:
    data['ps']=(-1/5)*x+4
    data['pb']=(1/5)*x-3
  return data
  
  

#传入ct参数得到相应隶属度  
def CT(x):
  data={'nb':0,'ns':0,'o':0,'ps':0,'pb':0}
  if -20 <= x <= -10 :
    data['nb']=(-1/10)*x-1
    data['ns']=(1/10)*x+2
  elif -10< x <= 0:
    data['ns']=(-1/10)*x
    data['o']=(1/10)*x+1
  elif 0 < x <= 10:
    data['o']=(-1/10)*x+1
    data['ps']=(1/10)*x
  else:
    data['ps']=(-1/10)*x+2
    data['pb']=(1/10)*x-1
  return data
  
  
if __name__ == "__main__":
  #测试数据
  testdata=[[-2,79,1,1,5.89],\
            [-3,86,0.3,-5,4.42],\
            [-2,97,6.8,1,13.46],\
            [5,93,2,3,3.53],\
            [2,90,0.7,4,6.86],\
            [-3,86,1.9,1,4.38],\
            [-4,93,0.6,-1,8.87],\
            [-3,97,0.3,-4,7.12],\
            [-4,96,0.5,-5,9.39],\
            [-1,95,0.3,-2,7.1],\
            [-2,84,0.8,-3,5.66],\
            [1,80,1.5,-2,5.46],\
            [-6,94,1.7,-3,9.33],\
            [-3,87,1,-3,3.89],\
            [-1,96,0.3,-4,6.74],\
            [0,93,0.5,-3,4.48]]
  #模糊规则表
  ruledata=[['ns','pb','ns','ns','ns'],\
            ['ns','pb','o','ns','nb'],\
            ['ns','pb','ns','o','o'],\
            ['ns','ps','o','o','ns'],\
            ['ns','ps','nb','o','ns'],\
            ['ns','pb','nb','ns','ps'],\
            ['ns','ns','ns','o','nb'],\
            ['ns','o','o','ns','ns'],\
            ['ns','pb','nb','ns','pb'],\
            ['ns','pb','o','o','ps'],\
            ['ns','ns','ns','o','nb'],\
            ['nb','pb','nb','nb','pb'],\
            ['ns','o','ps','o','nb'],\
            ['ns','pb','nb','ns','o'],\
            ['ps','pb','ns','o','nb'],\
            ['ps','pb','o','o','nb'],\
            ['o','pb','ns','o','nb'],\
            ['ns','pb','ns','o','ns'],\
            ['o','pb','o','o','ns'],\
            ['ns','pb','ns','ns','ps'],\
            ['ns','pb','o','o','o'],\
            ['pb','pb','ns','pb','nb'],\
            ['pb','pb','o','pb','nb'],\
            ['ps','ps','pb','ps','nb'],\
            ['o','nb','o','o','nb']]
  
  #存放每个测试数据的et,eh,ew,ct数据参数
  etdata={}
  ehdata={}
  ewdata={}
  ctdata={}
  #存放每个测试数据的隶属度
  et={}
  eh={}
  ew={}
  ct={}
  #存放隶属度组合
  data={}
  #存放输出结果:
  i=0
  uu1=0
  uu2=0
  flag=0
  u=0
  u1=0
  u2=0
  print("环境温度 环境湿度 环境分速 导线 实际冰厚 预测冰厚 误差  误差率")
  while i<len(testdata):
    #获取输入参数后的隶属度
    etdata=ET(testdata[i][0])
    ehdata=EH(testdata[i][1])
    ewdata=EW(testdata[i][2])
    ctdata=CT(testdata[i][3])
    #把隶属度不为0的赋值新的字典
    for j in etdata:
      if etdata[j] != 0 :
        et[j]=etdata[j]
    
    for j in ehdata:
      if ehdata[j] != 0 :
        eh[j]=ehdata[j]
    
    for j in ewdata:
      if ewdata[j] != 0 :
        ew[j]=ewdata[j]
    
    for j in ctdata:
      if ctdata[j] != 0 :
        ct[j]=ctdata[j]
    #循环查看每个组合在规则表中的情况去计算
    for i1 in et:
      for i2 in eh:
        for i3 in ew:
          for i4 in ct:
            for each in ruledata:
              if (i1 == each[0]) and (i2 == each[1]) and (i3 == each[2]) and (i4 == each[3]):
                if each[4] in data:
                  uu1=data[each[4]]
                  uu2=min(et[i1],eh[i2],ew[i3],ct[i4])
                  data[each[4]]=max(uu1,uu2)
                else:
                  data[each[4]]=min(et[i1],eh[i2],ew[i3],ct[i4])
    for j in data:
      flag+=data[j]
    for j in data:
      if j == 'nb':
        data[j]=1
      elif j == 'ns':
        data[j]*=7.5
      elif j == 'o':
        data[j]*=15
      elif j == 'ps':
        data[j]*=22.5
      elif j == 'pb':
        data[j]*=30
    for j in data:
      u+=data[j]
    
    if flag !=0:
      u=u/flag
    testdata[i].append(u)
    u1=abs(u-testdata[i][4])
    testdata[i].append(u1)
    if u !=0:
      u2=u1/u
    testdata[i].append(u2)
    data={}
    flag=0
    u=0
    u1=0
    u2=0
    et={}
    eh={}
    ew={}
    ct={}
    print("%5d"%testdata[i][0]," %5d"%testdata[i][1]," %5.1f"%testdata[i][2],\
          " %5d"%testdata[i][3]," %5.2f"%testdata[i][4]," %5.2f"\
          %testdata[i][5]," %5.2f"%testdata[i][6]," %5.2f"%testdata[i][7])
    i+=1

实验结果

在这里插入图片描述

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值