多目标遗传算法NSGAII求解环境经济调度(Python代码实现)

简介: 多目标遗传算法NSGAII求解环境经济调度(Python代码实现)

1 电力系统环境经济调度数学模型


2 算例——IEEE10节点

2.1 数据

我弄成一个表格,方便编程读写:


2.2 Python代码学习

多目标遗传算法NSGAII在电力系统多目标问题有广泛的应用,只要把文中的目标函数和约束条件换了,就搞定啦。

部分代码:

#========导入第三方库=============
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题
import matplotlib;
matplotlib.use('TkAgg')
from tqdm import tqdm  # 进度条设置
# ========导入数据=============
# ~~~~~~~~~~~~~~~~~~~~~读取文件~~~~~~~~~~~~~~~~~~~~~~
file=pd.read_csv('IEEE10.csv')#机组参数
#B=pd.read_csv('B10.csv')
#B=np.reshape()
B=np.array([[0.000049, 0.000014 ,0.000015,  0.000015, 0.000016, 0.000017  ,0.000017,  0.000018  ,0.000019,  0.00002],
[0.000014,  0.000045, 0.000016, 0.000016, 0.000017  ,0.000015,  0.000015  ,0.000016 ,0.000018,  0.000018],
[0.000015,  0.000016, 0.000039, 0.00001 ,0.000012,  0.000012  ,0.000014,  0.000014, 0.000016, 0.000016],
[0.000015,  0.000016, 0.00001,  0.00004,  0.000014  ,0.00001  ,0.000011,  0.000012, 0.000014, 0.000015],
[0.000016,  0.000017, 0.000012, 0.000014, 0.000035, 0.000011, 0.000013, 0.000013, 0.000015, 0.000016],
[0.000017,  0.000015, 0.000012, 0.00001,  0.000011  ,0.000036,  0.000012, 0.000012, 0.000014, 0.000015],
[0.000017 ,0.000015 ,0.000014,  0.000011, 0.000013, 0.000012, 0.000038, 0.000016, 0.000016, 0.000018],
[0.000018 ,0.000016,  0.000014, 0.000012, 0.000013, 0.000012, 0.000016  ,0.00004, 0.000015, 0.000016],
[0.000019 ,0.000018 ,0.000016,  0.000014, 0.000015  ,0.000014 ,0.000016,  0.000015, 0.000042  ,0.000019],
[0.00002, 0.000018  ,0.000016 ,0.000015,  0.000016, 0.000015, 0.000018  ,0.000016,  0.000019  ,0.000044]])
P_max = file['b']  #机组上限
P_min = file['c']  # #机组下限
# ~~~~~~~~~~~~~~~~~机组特性系数~~~~~~~~~~~~~~~~~~~~~~~~·
ai = file['d']
bi=file['e']
ci=file['f']
di=file['g']
ei=file['h']
# ~~~~~~~排放特性系数~~~~~~~~~~~~~~~~·
ali=file['g']
beti=file['h']
gari=file['i']
eti=file['l']
dali=file['m']
# ======多目标优化算法一次 只能求解单个时刻的解===============
class GaMultiobjective(object):
    def __init__(self, Pload1, P_max, P_min, ai, bi, ci, di, ei, ali, beti, gari, eti, dali):
        self.Pload1 = Pload1  # 负荷
        self.P_max = P_max  # 机组上限
        self.P_min = P_min  # 机组下限
        self.ai = ai
        self.bi = bi
        self.ci = ci
        self.di = di
        self.ei = ei
        self.ali = ali
        self.beti = beti
        self.gari = gari
        self.eti = eti
        self.dali = dali
    # ===初始化种群====
    def Initialize(self):
        X = np.zeros((self.NP, 10))  # 初始化群体,10代表 个机组出力
        for n in range(self.NP):  # 遍历每一个粒子
            X[n, 0] = np.random.uniform(10, 55, 1)[0]  # G1
            X[n, 1] = np.random.uniform(20, 80, 1)[0]  # G2
            X[n, 2] = np.random.uniform(47, 120, 1)[0]  # G3
            X[n, 3] = np.random.uniform(20, 130, 1)[0]  # G4
            X[n, 4] = np.random.uniform(50, 160, 1)[0]  # G5
            X[n, 5] = np.random.uniform(70, 240, 1)[0]  # G6
            X[n, 6] = np.random.uniform(60, 300, 1)[0]  # G7
            X[n, 7] = np.random.uniform(70, 340, 1)[0]  # G8
            X[n, 8] = np.random.uniform(130, 470, 1)[0]  # G9
            X[n, 9] = np.random.uniform(150, 470, 1)[0]  # G10
        return X
    # ==========定义目标函数、和对应的惩罚项=============
    # ===定义函数1 目标函数1:系统运行成本===
    def function1(self, X1):
        """
        个体目标函数
        :param X1:  (个体[G1,G2,G3,G4,G5,G6,G7,G8,G9,G10]
        :return: 函数1目标函数值
        """
        SUMCOST = []  # 存储总的成本
        for i in range (9):  # 遍历每一台机组,Python是从0开始索引,0-9:10台机组
            cost = self.ci[i] * X1[i] * X1[i] + self.bi[i]* X1[i] +self.ai[i]+\
                   np.abs(self.di[i]*np.sin(ei[i]*(self.P_min[i]-X1[i]))) #考虑阀点效应
            SUMCOST.append(cost)
        return np.sum(SUMCOST)
    # ====定义函数2 总污染排放量====
    def function2(self, X1):
        """
        个体目标函数
        :param X1:  (个体[G1,G2,G3,G4,G5,G6,G7,G8,G9,G10]
        :return: 函数2目标函数值
        """
        emission=[] #储存总的污染排放量
        for i in range(9):
            e=self.ali[i]+self.beti[i]*X1[i]+self.gari[i]*X1[i]*X1[i]+self.eti[i]*np.exp(self.dali[i]*X1[i])
            emission.append(e)
        return np.sum(emission)
    # ===对应的约束  负荷平衡约束(本例子calc_e() 不起作用,已通过其它方法解决掉负荷平衡约束)===
    def calc_e(self, X1):
        """
    函数1 对应的个体惩罚项
    :param X1: (个体[G1,G2,G3,G4,G5,G6,G7,G8,G9,G10]
    :return:
    """
        Ploss=0
        for i in range(9):
            for j in range(9):
                Ploss+=X1[i]*B[i][j]*X1[j]
        # cost=np.abs(X1[0]+X1[1]+X1[2]+X1[3]+X1[4]+X1[5]+X1[6]+X1[7]+X1[8]+X1[9]-np.sum(Ploss)-self.Pload1)
        # return cost
        return max(0,abs(sum(X1)-Ploss-Pload1-0.1))


3 一点拓展知识

现代这种“探索、征服”的心态,从世界地图的演变可以看得一目了然。早在历史进到现代之前,许多文化就已经有了自己的世界地图。当然,当时并没有人真正知道全世界是什么样子,在亚非大陆上的人对美洲一无所知,美洲文化也不知道亚非大陆上的情形。但碰到不熟悉的地区,地图上不是一笔未提,就是画上了想象出来的怪物和奇景。这些地图上并没有空白的空间,让人觉得全世界就在自己的掌握之中。


在15、16世纪,欧洲人的世界地图开始出现大片空白。从这点可以看出科学心态的发展,以及欧洲帝国主义的动机。地图上的空白可以说是在心理及思想上的一大突破,清楚表明欧洲人愿意承认自己对于一大部分的世界还一无所知。

图1 1459年欧洲人的世界地图。可以看到地图上似乎巨细靡遗,就算是当时欧洲人根

                                 本一无所知的南非地区,都有密密麻麻的信息。

1492年,哥伦布从西班牙出发向西航行,希望能找到一条前往东亚的新航线。哥伦布当时相信的仍然是旧的世界地图,以为全世界在地图上一览无遗。哥伦布从旧地图推算,日本应该位于西班牙以西大约7000公里远。但事实上,从西班牙到东亚的距离要超过两万公里,而且中间还隔着个他不知道的美洲大陆。1492年10月12日大约凌晨2点,哥伦布一行人与这片未知大陆有了第一次接触。皮塔号(Pinta)的瞭望手胡安·罗德里格斯·贝尔梅霍(Juan Rodriguez Berme jo)从桅杆上看到了现在的巴哈马群岛,高呼着:“有陆地!有陆地!”


哥伦布当时相信这个小岛就位于东亚海外,属于“Indies”(印度地方,包含今日印度、中南半岛及东印度群岛等地),所以他把当地人称为“Indians”(这正是美国原住民也被称为“印第安人”的原因)。一直到他过世,哥伦布都不认为自己犯了一个大错。不论是对他还是许多当代的人来说,说他发现了一个完全未知的大陆,这根本难以想象。毕竟千百年来,不管是那些伟大的思想家和学者甚至是不可能犯错的《圣经》,都只知道有欧洲、非洲和亚洲。怎么有可能他们全错了呢?难道《圣经》居然漏了大半个世界,只字未提?这种情况,就好像是说在1969年阿波罗11号要前往月球的途中,居然撞到了另一个从来没人看到的月亮。而正因为哥伦布不愿意接受自己的无知,我们可以说他仍然是个中世纪的人,深信着自己已经知道了全世界,所以就算已经有了如此重大的发现,也无法说服他。

相关文章
|
4天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
眼疾识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了4种常见的眼疾图像数据集(白内障、糖尿病性视网膜病变、青光眼和正常眼睛) 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,实现用户上传一张眼疾图片识别其名称。
20 4
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
|
25天前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
246 55
|
14天前
|
存储 缓存 监控
局域网屏幕监控系统中的Python数据结构与算法实现
局域网屏幕监控系统用于实时捕获和监控局域网内多台设备的屏幕内容。本文介绍了一种基于Python双端队列(Deque)实现的滑动窗口数据缓存机制,以处理连续的屏幕帧数据流。通过固定长度的窗口,高效增删数据,确保低延迟显示和存储。该算法适用于数据压缩、异常检测等场景,保证系统在高负载下稳定运行。 本文转载自:https://www.vipshare.com
109 66
|
1月前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
173 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
11天前
|
算法 网络协议 Python
探秘Win11共享文件夹之Python网络通信算法实现
本文探讨了Win11共享文件夹背后的网络通信算法,重点介绍基于TCP的文件传输机制,并提供Python代码示例。Win11共享文件夹利用SMB协议实现局域网内的文件共享,通过TCP协议确保文件传输的完整性和可靠性。服务器端监听客户端连接请求,接收文件请求并分块发送文件内容;客户端则连接服务器、接收数据并保存为本地文件。文中通过Python代码详细展示了这一过程,帮助读者理解并优化文件共享系统。
|
16天前
|
存储 算法 Python
文件管理系统中基于 Python 语言的二叉树查找算法探秘
在数字化时代,文件管理系统至关重要。本文探讨了二叉树查找算法在文件管理中的应用,并通过Python代码展示了其实现过程。二叉树是一种非线性数据结构,每个节点最多有两个子节点。通过文件名的字典序构建和查找二叉树,能高效地管理和检索文件。相较于顺序查找,二叉树查找每次比较可排除一半子树,极大提升了查找效率,尤其适用于海量文件管理。Python代码示例包括定义节点类、插入和查找函数,展示了如何快速定位目标文件。二叉树查找算法为文件管理系统的优化提供了有效途径。
47 5
|
1月前
|
存储 算法 程序员
C 语言递归算法:以简洁代码驾驭复杂逻辑
C语言递归算法简介:通过简洁的代码实现复杂的逻辑处理,递归函数自我调用解决分层问题,高效而优雅。适用于树形结构遍历、数学计算等领域。
|
16天前
|
存储 缓存 算法
探索企业文件管理软件:Python中的哈希表算法应用
企业文件管理软件依赖哈希表实现高效的数据管理和安全保障。哈希表通过键值映射,提供平均O(1)时间复杂度的快速访问,适用于海量文件处理。在Python中,字典类型基于哈希表实现,可用于管理文件元数据、缓存机制、版本控制及快速搜索等功能,极大提升工作效率和数据安全性。
52 0
|
2月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
71 1
|
1月前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!