# -*- coding: utf-8 -*-
import numpy as np
import geatpy as ea  # import geatpy
from hm2_3 import MyProblem  # 导入自定义问题接口

"""==================================实例化问题对象================================"""
problem = MyProblem()  # 生成问题对象
"""==================================种群设置================================"""
Encoding = 'R'  # 编码方式
conordis = 0  # 表示染色体解码后得到的变量是连续的
NIND = 30  # 种群规模
Field = ea.crtfld(Encoding, conordis, problem.ranges, problem.borders)  # 创建区域描述器
population = ea.Population(Encoding, conordis, Field, NIND)  # 实例化种群对象（此时种群还没被真正初始化）
"""==================================算法参数设置================================"""
myAlgorithm = ea.soea_SEGA_templet(problem, population)  # 实例化一个算法模板对象
myAlgorithm.MAXGEN = 100  # 最大遗传代数
"""=======================调用算法模板进行种群进化=============================="""
[population, obj_trace, var_trace] = myAlgorithm.run()  # 执行算法模板
# 输出结果
best_gen = np.argmin(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))
