python遗传算法工具包geapy使用实例(附源码)

目录

一、单目标优化使用实例

1、数学模型

2、定义决策变量/目标函数/约束条件

3、调用算法求解优化问题

二、多目标优化使用实例

1、数学模型

2、定义决策变量/目标函数/约束条件

3、调用算法求解优化问题


Geatpy是一个高性能实用型的Python遗传算法工具箱,提供一个面向对象的进化算法框架,经过全面改版后,新版Geatpy2目前由华南农业大学、暨南大学、华南理工等本硕博学生联合团队开发及维护。

Geatpy2整体上看由工具箱内核函数(内核层)和面向对象进化算法框架(框架层)两部分组成。其中面向对象进化算法框架主要有四个大类:Problem问题类、Algorithm算法模板类、Population种群类和PsyPopulation多染色体种群类。

一、单目标优化使用实例

1、数学模型

该案例展示了一个带等式约束的连续型决策变量最大化目标的单目标优化问题。

该函数存在多个欺骗性很强的局部最优点。

max(f) = 4*x_1 + 2*x_2 + x_3

s.t.\left\{\begin{matrix} &2*x_1+x_2 -1\leq 0\\ & x_1+2*x_3 -2 \leq0 \\& x_1+x_2+x_3-1 = 0\\& 0 \leq x1,x2 \leq1 \\& 0< x_3< 2\end{matrix}\right.

2、定义决策变量/目标函数/约束条件

MyProblem.py

# -*- coding: utf-8 -*-

import numpy as np
import geatpy as ea
class MyProblem(ea.Problem): # 继承Problem父类

def __init__(self):
    name = 'MyProblem' # 初始化name(函数名称,可以随意设置)
    M = 1 # 初始化M(目标维数)
    maxormins = [-1] # 初始化maxormins(目标最小最大化标记列表,1:最小化该目标;-1:最大化该目标)
    Dim = 3 # 初始化Dim(决策变量维数)
    varTypes = [0] * Dim # 这是一个list,初始化varTypes(决策变量的类型,元素为0表示对应的变量是连续的;1表示是离散的)
    lb = [0,0,0] # 决策变量下界
    ub = [1,1,2] # 决策变量上界
    lbin = [1,1,0] # 决策变量下边界(0表示不包含该变量的下边界,1表示包含)
    ubin = [1,1,0] # 决策变量上边界(0表示不包含该变量的上边界,1表示包含)
    # 调用父类构造方法完成实例化
    ea.Problem.__init__(self, name, M, maxormins, Dim, varTypes, lb, ub, lbin, ubin)

def aimFunc(self, pop): # 目标函数
    Vars = pop.Phen # 得到决策变量矩阵
    x1 = Vars[:, [0]] # 取出第一列得到所有个体的x1组成的列向量
    x2 = Vars[:, [1]] # 第二列
    x3 = Vars[:, [2]] # 第三列
    pop.ObjV = 4*x1 + 2*x2 + x3 # 计算目标函数值,赋值给pop种群对象的ObjV属性
    # 采用可行性法则处理约束,numpy的hstack()把x1、x2、x3三个列向量拼成CV矩阵
    pop.CV = np.hstack([2*x1 + x2 - 1,x1 + 2*x3 - 2,  np.abs(x1 + x2 + x3 - 1)])
    '''
    约束条件1,即2*x1 + x2 - 1<= 0或者2*x1 + x2 <= 1,如果是2*x1 + x2 >= 1,则取负写作(-2*x1-x2+1)
    '''


def calReferObjV(self): # 设定目标数参考值(本问题目标函数参考值设定为理论最优值),这个函数其实可以不要
    referenceObjV = np.array([[2.5]])
    return referenceObjV

3、调用算法求解优化问题

main.py

# * - coding: utf - 8 -*-

import numpy as np
import geatpy as ea  # import geatpy
from MyProblem import MyProblem  # 导入自定义问题接口

if __name__ == '__main__':
    """================================实例化问题对象==========================="""
    problem = MyProblem()  # 生成问题对象
    """==================================种群设置==============================="""
    Encoding = 'RI'  # 编码方式
    NIND = 100  # 种群规模
    Field = ea.crtfld(Encoding, problem.varTypes, problem.ranges, problem.borders)  # 创建区域描述器
    population = ea.Population(Encoding, Field, NIND)  # 实例化种群对象(此时种群还没被初始化,仅仅是完成种群对象的实例化)
    """================================算法参数设置============================="""
    myAlgorithm = ea.soea_DE_rand_1_L_templet(problem, population)  # 实例化一个算法模板对象
    myAlgorithm.MAXGEN = 500  # 最大进化代数
    myAlgorithm.mutOper.F = 0.5  # 差分进化中的参数F
    myAlgorithm.recOper.XOVR = 0.7  # 重组概率
    """===========================调用算法模板进行种群进化======================="""
    [population, obj_trace, var_trace] = myAlgorithm.run()  # 执行算法模板
    population.save()  # 把最后一代种群的信息保存到文件中
    # 输出结果
    best_gen = np.argmin(problem.maxormins * obj_trace[:, 1])  # 记录最优种群个体是在哪一代
    best_ObjV = obj_trace[best_gen, 1]
    print('最优的目标函数值为:%s' % (best_ObjV))
    print('最优的决策变量值为:')
    for i in range(var_trace.shape[1]):
        print(var_trace[best_gen, i])
        print('有效进化代数:%s' % (obj_trace.shape[0]))
        print('最优的一代是第 %s 代' % (best_gen + 1))
        print('评价次数:%s' % (myAlgorithm.evalsNum))
        print('时间已过 %s 秒' % (myAlgorithm.passTime))

二、多目标优化使用实例

1、数学模型

2、定义决策变量/目标函数/约束条件

3、调用算法求解优化问题

待续。


作者简介:国内顶尖高校控制专业毕业,专注于智能优化算法及其应用,运筹优化调度,各类求解器求解,人工智能机器学习、深度学习算法及应用等方向的研究,擅长各类算法的改进、各类数学模型的建模求解,熟悉各类求解器的使用。

  • 15
    点赞
  • 95
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
### 回答1: Python是一种非常流行的编程语言,被广泛用于数据科学领域。它提供了许多库和工具,使数据分析和可视化变得更加简单和方便。下面列举几个Python数据分析和可视化实例的源代码: 1. 使用Matplotlib库绘制简单的折线图: ```python import matplotlib.pyplot as plt x = [1, 2, 3, 4, 5] y = [2, 4, 6, 8, 10] plt.plot(x, y) plt.xlabel('X-axis') plt.ylabel('Y-axis') plt.title('Simple Line Graph') plt.show() ``` 2. 使用Seaborn库绘制带有标签的散点图: ```python import seaborn as sns import pandas as pd df = pd.read_csv('data.csv', delimiter=',') sns.scatterplot(x='x_axis_data', y='y_axis_data', hue='label_data', data=df) plt.title('Labelled Scatterplot') plt.show() ``` 3. 使用Pandas库绘制柱状图: ```python import pandas as pd import matplotlib.pyplot as plt df = pd.read_csv('data.csv', delimiter=',') df.plot(kind='bar', x='categories', y='values') plt.title('Bar Chart') plt.xlabel('Categories') plt.ylabel('Values') plt.show() ``` 以上三个例子仅是Python数据分析和可视化中的冰山一角,实际上还有很多其他的技术和工具可以应用到数据的可视化中。通过这些可视化的方式,能够更直观地展示数据,帮助我们更好地了解和分析数据,为我们制定决策提供更准确的依据。 ### 回答2: Python数据分析可视化是目前常见的数据分析方法之一,通过将数据用图表、图形等形式展示出来,可以更加直观地了解数据的特点、趋势和异常情况等。 对于Python数据分析可视化实例可以参考如下代码: 首先导入所需的库 ```python import matplotlib.pyplot as plt import pandas as pd import seaborn as sns ``` 然后读取数据 ```python df = pd.read_csv('data.csv') ``` 接下来通过matplotlib绘制散点图 ```python plt.scatter(df['x'], df['y']) plt.title('Scatter Plot') plt.xlabel('x') plt.ylabel('y') plt.show() ``` 在此基础上进行可视化分析,比如加入颜色和规格化等信息 ```python sns.scatterplot(df['x'], df['y'], hue=df['color'], style=df['symbol'], s=df['size']) plt.title('Scatter Plot') plt.xlabel('x') plt.ylabel('y') plt.show() ``` 使用seaborn实现这样的代码可以更加灵活直观地展示数据分析结果,让人们可以快速将数据分析思路转化为可视化结果。 综上,Python数据分析可视化实例可以通过利用常见的库和工具进行代码实现,这不仅简化了数据分析的流程,也让数据分析结果得到更加直观清晰的展示。 ### 回答3: Python数据分析可视化实例源码是指采用Python语言编写的数据分析程序,并且具有可视化效果。这些源码可以通过开源社区、GitHub等途径获取,也可以在机器学习和数据分析相关的书籍中找到。下面以Python数据分析常用的matplotlib库为例,简单介绍其中的源码: 一、散点图 散点图是一种用于研究两个变量之间关系的图形。在Python中,使用matplotlib库中的scatter函数可以绘制散点图。下面是一个简单的示例代码: import matplotlib.pyplot as plt x = [1, 2, 3, 4, 5] y = [5, 4, 3, 2, 1] plt.scatter(x, y) plt.show() 该代码可以生成一张包含5个散点的散点图。 二、折线图 折线图是一种用于表示连续数据的图形,它是一条或多条曲线沿着水平轴绘制,其中横坐标通常表示时间或其他连续变量。在Python中,使用matplotlib库中的plot函数可以绘制折线图。下面是一个简单的示例代码: import matplotlib.pyplot as plt x = [1, 2, 3, 4, 5] y = [5, 4, 3, 2, 1] plt.plot(x, y) plt.show() 该代码可以生成一张包含5个点的折线图。 三、直方图 直方图是一种用于表示频率分布的图形,通常用于展示数据的分布情况。在Python中,使用matplotlib库中的hist函数可以绘制直方图。下面是一个简单的示例代码: import matplotlib.pyplot as plt data = [1, 2, 3, 4, 5] plt.hist(data, bins=5) plt.show() 该代码可以生成一张包含5个条状图的直方图,每个条状图表示一个数据区间的数量。 以上三种数据可视化方式只是Python数据分析中的冰山一角,在实际应用中还有很多数据可视化技术,可以灵活运用,以更好地从数据中获取价值信息。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智能优化_数据分析_AI算法

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值