示例#1
0
# -*- coding: utf-8 -*-
import geatpy as ea # import geatpy
import numpy as np

"""==================================实例化问题对象================================"""
problemName = 'Sphere'  # 问题名称
fileName = problemName  # 这里因为目标函数写在与之同名的文件里,所以文件名也是问题名称
MyProblem = getattr(__import__(fileName), problemName) # 获得自定义问题类
problem = MyProblem(30) # 生成问题对象
"""==================================种群设置================================"""
Encoding = 'RI'         # 编码方式
conordis = 0            # 表示染色体解码后得到的变量是连续的
NIND = 20               # 种群规模
precisions = [50] * problem.Dim # 编码精度(适用于二进制/格雷编码)
Field = ea.crtfld(Encoding, problem.varTypes, problem.ranges, problem.borders, precisions) # 创建区域描述器
population = ea.Population(Encoding, Field, NIND) # 实例化种群对象(此时种群还没被初始化,仅仅是完成种群对象的实例化)
"""==================================算法参数设置================================"""
myAlgorithm = ea.soea_DE_rand_1_bin_templet(problem, population) # 实例化一个算法模板对象
myAlgorithm.MAXGEN = 1000 # 最大进化代数
myAlgorithm.F = 0.5
myAlgorithm.pc = 0.2
myAlgorithm.drawing = 1 # 设置绘图方式(0:不绘图;1:绘制结果图;2:绘制过程动画)
"""=======================调用算法模板进行种群进化=============================="""
[population, obj_trace, var_trace] = myAlgorithm.run() # 执行算法模板,得到最后一代种群以及进化记录器
population.save() # 把最后一代种群的信息保存到文件中
# 输出结果
best_gen = np.argmin(obj_trace[:, 1]) # 记录最优种群是在哪一代
best_ObjV = np.min(obj_trace[:, 1])
print('最优的目标函数值为:%s'%(best_ObjV))
print('最优的控制变量值为:')
for i in range(var_trace.shape[1]):
示例#2
0
        #        f2[exIdx] = f2[exIdx] + np.max(f2) - np.min(f2)
        # 利用可行性法则处理约束条件
        CV = np.hstack([
            2 - x1 - x2, x1 + x2 - 6, -2 - x1 + x2, x1 - 3 * x2 - 2,
            (x3 - 3)**2 + x4 - 4, 4 - (x5 - 3)**2 - x4
        ])
        return np.hstack([f1, f2]), CV

    def calBest(self):
        realBestObjV = None
        return realBestObjV


problem = MyProblem()  # 生成问题对象
"""==================================种群设置================================"""
Encoding = 'I'  # 编码方式
conordis = 1  # 表示染色体解码后得到的变量是离散的
NIND = 50  # 种群规模
Field = ea.crtfld(Encoding, conordis, problem.ranges,
                  problem.borders)  # 创建区域描述器
population = ea.Population(Encoding, conordis, Field,
                           NIND)  # 实例化种群对象(此时种群还没被真正初始化)
"""==================================算法参数设置================================"""
myAlgorithm = ea.moea_NSGA2_templet(problem, population)  # 实例化一个算法模板对象
myAlgorithm.MAXGEN = 200  # 最大遗传代数
"""=======================调用算法模板进行种群进化=============================="""
NDSet = myAlgorithm.run()  # 执行算法模板,得到帕累托最优解集NDSet
# 输出
print('用时:%s 秒' % (myAlgorithm.passTime))
print('非支配个体数:%s 个' % (NDSet.sizes))
print('单位时间找到帕累托前沿点个数:%s 个' % (int(NDSet.sizes // myAlgorithm.passTime)))
示例#3
0
import geatpy as ea  # import geatpy
"""
描述:
    该案例是moea_demo1的另一个版本,展示了如何定义aimFunc()而不是evalVars()来计算目标函数和违反约束程度值。【见MyProblem.py】
    同时展示如何定义outFunc(),用于让算法在每一次进化时调用该outFunc()函数。
"""

if __name__ == '__main__':
    #  实例化问题对象
    problem = MyProblem()

    # 定义outFunc()函数
    def outFunc(alg, pop):  # alg 和 pop为outFunc的固定输入参数,分别为算法对象和每次迭代的种群对象。
        print('第 %d 代' % alg.currentGen)

    # 构建算法
    algorithm = ea.moea_NSGA2_templet(
        problem,
        ea.Population(Encoding='RI', NIND=50),
        MAXGEN=200,  # 最大进化代数
        logTras=1,  # 表示每隔多少代记录一次日志信息,0表示不记录。
        outFunc=outFunc)
    # 求解
    res = ea.optimize(algorithm,
                      verbose=False,
                      drawing=1,
                      outputMsg=True,
                      drawLog=True,
                      saveFlag=False)
    print(res)
示例#4
0
            kpPole, kiPole, kdPole = Vars[i, [3]], Vars[i, [4]], Vars[i, [5]]
            pidController = cartPoleController(kpCart, kiCart, kdCart, kpPole,
                                               kiPole, kdPole)
            cartPole.run(pidController)
            objValues[i] = cartPole.reward()
        # 将目标函数值赋值给pop的ObjV属性
        pop.ObjV = objValues


cartPole = plant(200)
problem = optimizePID()
# 种群设置
Encoding = 'RI'  # 格雷码
NIND = 30  # 种群数量
Field = ea.crtfld(Encoding, problem.varTypes, problem.ranges, problem.borders)
population = ea.Population(Encoding, Field, NIND)
#算法参数设置
myAlgorithm = ea.soea_SEGA_templet(problem, population)
myAlgorithm.MAXGEN = 30  # 最大遗传代数
myAlgorithm.mutOper.F = 0.5  # 设置差分进化的变异缩放因子
myAlgorithm.recOper.XOVR = 0.5  # 设置交叉概率
myAlgorithm.drawing = 1  # 绘图方式

[population, obj_trace, var_trace] = myAlgorithm.run()  # 执行优化算法
cartPole.close()
best_gen = np.argmin(obj_trace[:, 1])  # 找出最优种群
best_ObjV = obj_trace[best_gen, 1]
print('最优的目标函数值为:%s' % (best_ObjV))
bestSolution = []
for i in range(var_trace.shape[1]):
    bestSolution.append(var_trace[best_gen, i])
示例#5
0
    def __init__(self,
                 X,
                 y,
                 target,
                 model,
                 l,
                 u,
                 drawing=1,
                 maxgen=100,
                 moea=1):
        '''===============================实例化问题对象=================================='''
        self.problem = MyProblem(target=target,
                                 X=X,
                                 y=y,
                                 model=model,
                                 l=l,
                                 u=u)
        '''===========================种群设置=============================='''

        Encoding = 'RI'  # 'RI':实整数编码,即实数和整数的混合编码;
        NIND = 100  # 种群规模
        Field = ea.crtfld(Encoding, self.problem.varTypes, self.problem.ranges,
                          self.problem.borders)  # 创建区域描述器
        self.population = ea.Population(Encoding, Field, NIND)
        '''实例化种群对象(此时种群还没被真正初始化,仅仅是生成一个种群对象)'''
        """=========================算法参数设置============================"""
        if moea == 1:
            self.myAlgorithm = ea.moea_NSGA2_templet(
                self.problem, self.population)  # 实例化一个算法模板对象
        elif moea == 2:
            self.myAlgorithm = ea.moea_NSGA2_DE_templet(
                self.problem, self.population)
        elif moea == 3:
            self.myAlgorithm = moea_NSGA2_toZero(self.problem, self.population)
        elif moea == 4:
            self.myAlgorithm = moea_NSGA2_DE_toZero(self.problem,
                                                    self.population)
        elif moea == 5:
            self.myAlgorithm = ea.moea_NSGA3_templet(self.problem,
                                                     self.population)
        elif moea == 6:
            self.myAlgorithm = ea.moea_NSGA3_DE_templet(
                self.problem, self.population)
        elif moea == 7:
            self.myAlgorithm = ea.moea_awGA_templet(self.problem,
                                                    self.population)
        elif moea == 8:
            self.myAlgorithm = ea.moea_RVEA_templet(self.problem,
                                                    self.population)
        elif moea == 9:
            self.myAlgorithm = moea_NSGA2_10p_toZero(self.problem,
                                                     self.population)
        elif moea == 10:
            self.myAlgorithm = moea_NSGA2_20p_toZero(self.problem,
                                                     self.population)
        elif moea == 11:
            self.myAlgorithm = moea_NSGA2_30p_toZero(self.problem,
                                                     self.population)
        elif moea == 12:
            self.myAlgorithm = moea_NSGA2_random10p_toZero(
                self.problem, self.population)
        elif moea == 13:
            self.myAlgorithm = moea_NSGA2_random20p_toZero(
                self.problem, self.population)
        elif moea == 14:
            self.myAlgorithm = moea_NSGA2_random30p_toZero(
                self.problem, self.population)
        else:
            print('error moea method!!')

        self.myAlgorithm.MAXGEN = maxgen  # 设置最大遗传代数
        self.myAlgorithm.drawing = drawing