Exemple #1
0
# -*- coding: utf-8 -*-
import geatpy as ea  # import geatpy

if __name__ == '__main__':
    # 问题对象
    problem = ea.benchmarks.Ackley(30)
    # 构建算法
    algorithm = ea.soea_DE_rand_1_bin_templet(
        problem,
        ea.Population(Encoding='RI', NIND=20),
        MAXGEN=1000,  # 最大进化代数。
        logTras=1)  # 表示每隔多少代记录一次日志信息,0表示不记录。
    algorithm.mutOper.F = 0.5  # 差分进化中的参数F
    algorithm.recOper.XOVR = 0.2  # 差分进化中的参数Cr
    # 求解
    res = ea.optimize(algorithm,
                      verbose=True,
                      drawing=1,
                      outputMsg=True,
                      drawLog=True,
                      saveFlag=True,
                      dirName='result')
    print(res)
Exemple #2
0
            x1 = Vars[i, 0]
            x2 = Vars[i, 1]
            CV.append(np.array([(x1 - 0.5)**2 - 0.25, (x2 - 1)**2 - 1]))
        return np.vstack(f), np.vstack(CV)  # 返回目标函数值矩阵和违反约束程度矩阵

    problem = ea.Problem(
        name='soea quick start demo',
        M=1,  # 目标维数
        maxormins=[1],  # 目标最小最大化标记列表,1:最小化该目标;-1:最大化该目标
        Dim=5,  # 决策变量维数
        varTypes=[0, 0, 1, 1, 1],  # 决策变量的类型列表,0:实数;1:整数
        lb=[-1, 1, 2, 1, 0],  # 决策变量下界
        ub=[1, 4, 5, 2, 1],  # 决策变量上界
        evalVars=evalVars)
    # 构建算法
    algorithm = ea.soea_SEGA_templet(
        problem,
        ea.Population(Encoding='RI', NIND=20),
        MAXGEN=50,  # 最大进化代数。
        logTras=1,  # 表示每隔多少代记录一次日志信息,0表示不记录。
        trappedValue=1e-6,  # 单目标优化陷入停滞的判断阈值。
        maxTrappedCount=10)  # 进化停滞计数器最大上限值。
    # 求解
    res = ea.optimize(algorithm,
                      verbose=True,
                      drawing=1,
                      outputMsg=True,
                      drawLog=False,
                      saveFlag=True)
    print(res)
Exemple #3
0
import numpy as np
from MyProblem import MyProblem  # 导入自定义问题接口
import geatpy as ea  # import geatpy
"""
    该案例展示了一个带等式约束的连续型决策变量最大化目标的单目标优化问题。问题的定义详见MyProblem.py。
    与soea_demo2不同之处是采用先验知识帮助进化优化。
"""

if __name__ == '__main__':
    # 实例化问题对象
    problem = MyProblem()  # 生成问题对象
    # 快速构建算法
    algorithm = ea.soea_DE_currentToBest_1_bin_templet(
        problem,
        ea.Population(Encoding='RI', NIND=20),
        MAXGEN=400,  # 最大进化代数。
        logTras=0)  # 表示每隔多少代记录一次日志信息,0表示不记录。
    algorithm.mutOper.F = 0.7  # 差分进化中的参数F。
    algorithm.recOper.XOVR = 0.7  # 交叉概率。
    # 先验知识
    prophetVars = np.array([[0.4, 0.2, 0.4]])  # 假设已知[0.4, 0.2, 0.4]为一组比较优秀的变量。
    # 求解
    res = ea.optimize(algorithm,
                      prophet=prophetVars,
                      verbose=True,
                      drawing=1,
                      outputMsg=True,
                      drawLog=True,
                      saveFlag=True)
    print(res)