geatpy模板sga_new_code_templet简单应用

参考:geatpy库

问题描述

MAX = x+10sin(5x)+7cos(4x)
0<=x<=10

创建一个目标函数

创建一个目标函数脚本文件,保存为aimfuc.py,用于接口的实现。代码如下:

import numpy as np
def aimfuc(Phen,LegV):
	x = Phen[:,[0]]
	f = x + 10*np.sin(5*x) + 7*np.cos(4*x)
	return [f,LegV]

1

2

使用sga_new_code_templet模板进行求解

代码如下:

import numpy as np
import geatpy as ga
AIM_M = __import__('aimfuc')
x=[0,10]          #变量范围
b=[1,1]           #变量是否包含边界,1是,0不是。此处包含上下边界
codes=[0]         #编码方式0,使用标准二进制编码
precisions=[4]    #精度,小数点后4位
scales=[0]        #刻度方式0,算数刻度
ranges=np.vstack([x]).T    #变量范围,两行,每一列代表一个变量,第一行代表变量的上界,第二行代表变量的下界
borders=np.vstack([b]).T   #变量是否,两行,每一列代表一个变量,第一行代表变量的上界,第二行代表变量的下界
fieldd=ga.crtfld(ranges,borders,precisions,codes,scales)    #区域描述器

[pop_trace,var_trcae,times]=ga.sga_new_code_templet(AIM_M,'aimfuc',None,None,fieldd,problem='R',maxormin=-1,MAXGEN=100,NIND=50,SUBPOP=1,GGAP=0.65,selectStyle='sus',recombinStyle='xovdp',recopt=None,pm=0.05,distribute=True,drawing=1)

3

sga_new_code_templet模板调用格式(来自源码)

调用格式sga_new_code_templet(AIM_M, AIM_F, PUN_M, PUN_F, FieldD, problem, maxormin, MAXGEN, NIND, SUBPOP, GGAP, selectStyle, recombinStyle, recopt, pm, distribute, drawing = 1)

输入参数:
    AIM_M - 目标函数的地址,由AIM_M = __import__('目标函数所在文件名')语句得到
            目标函数规范定义:[f,LegV] = aimfuc(Phen,LegV)
            其中Phen是种群的表现型矩阵, LegV为种群的可行性列向量,f为种群的目标函数值矩阵
    
    AIM_F : str - 目标函数名
    
    PUN_M - 罚函数的地址,由PUN_M = __import__('罚函数所在文件名')语句得到
            罚函数规范定义: newFitnV = punishing(LegV, FitnV)
            其中LegV为种群的可行性列向量, FitnV为种群个体适应度列向量
            一般在罚函数中对LegV为0的个体进行适应度惩罚,返回修改后的适应度列向量newFitnV
    
    PUN_F : str - 罚函数名
    
    FieldD : array  - 二进制/格雷码种群区域描述器,
        描述种群每个个体的染色体长度和如何解码的矩阵,它有以下结构:
                    
        [lens;		(int) 每个控制变量编码后在染色体中所占的长度
         lb;		(float) 指明每个变量使用的下界
         ub;		(float) 指明每个变量使用的上界
         codes;	(0:binary     | 1:gray) 指明子串是怎么编码的,
                                          0为标准二进制编码,1为各类编码
         scales;  (0: rithmetic | 1:logarithmic) 指明每个子串是否使用对数或算术刻度, 
                                                 1为使用对数刻度,2为使用算术刻度
         lbin;		(0:excluded   | 1:included)
         ubin]		(0:excluded   | 1:included)
                
        lbin和ubin指明范围中是否包含每个边界。
        选择lbin=0或ubin=0,表示范围中不包含相应边界。
        选择lbin=1或ubin=1,表示范围中包含相应边界。
    
    problem : str - 表明是整数问题还是实数问题,'I'表示是整数问题,'R'表示是实数问题                 
    
    maxormin int - 最小最大化标记,1表示目标函数最小化;-1表示目标函数最大化
    
    MAXGEN : int - 最大遗传代数
    
    NIND : int - 种群规模,即种群中包含多少个个体
    
    SUBPOP : int - 子种群数量,即对一个种群划分多少个子种群
    
    GGAP : float - 代沟,本模板中该参数为无用参数,仅为了兼容同类的其他模板而设
    
    selectStyle : str - 指代所采用的低级选择算子的名称,如'rws'(轮盘赌选择算子)
    
    recombinStyle: str - 指代所采用的低级重组算子的名称,如'xovsp'(单点交叉)
    
    recopt : float - 交叉概率
    
    distribute : bool - 是否增强种群的分布性(可能会造成收敛慢)
    
    pm : float - 重组概率
    
    drawing : int - (可选参数),0表示不绘图,1表示绘制最终结果图。默认drawing为1

输出参数:
    pop_trace : array - 种群进化记录器(进化追踪器),
                        第0列记录着各代种群最优个体的目标函数值
                        第1列记录着各代种群的适应度均值
                        第2列记录着各代种群最优个体的适应度值
    
    var_trace : array - 变量记录器,记录着各代种群最优个体的变量值,每一列对应一个控制变量
    
    times     : float - 进化所用时间

运行结果

4
5

猜你喜欢

转载自blog.csdn.net/weixin_40775077/article/details/84405177
今日推荐