geatpy icon indicating copy to clipboard operation
geatpy copied to clipboard

续算的问题:每代产生优化结果保存在哪个对象?续算有没有办法跳过初代计算?

Open RebelYoung opened this issue 1 year ago • 3 comments

#203 续算的问题。 我使用NSGA2实现一次双目标优化,但是在第五代中断了,设置了call_back保存了所有vars,objv,cv,chrom,

  1. 请问,每代优化后,产生的优化结果存在哪个对象里?没有找到对应的对象。
  2. 若我要实现续算,参考 #203 是将第四代的vars作为prophetpop,需要新实例化一个algorithm,这是必须的吗?相当于两次优化?那么前四次优化似乎没有什么意义
  3. 使用prophetpop的方法,会强制将该种群进行一次目标函数计算,由于我的问题,目标函数计算时间较长,而且我使用jupyter保留了中断后的对象,先验的pop数目是完整的,续算不需要产生新个体,有没有办法直接从目前对象进行续算而不需要浪费一代计算的时间?

RebelYoung avatar Mar 13 '23 03:03 RebelYoung

不重新定义,直接赋值,能把alg的属性保留,且在optimize时避免初始化吗?

alg=ea.Algorithm()
res=ea.optimize()
...
# alg.currentGen is 4.
alg2=alg
# 不重新定义,直接赋值,能把alg的属性保留,且在optimize时避免初始化吗?
res2 = ea.optimize(
    alg2,
    # prophet=alg.population, # initial population
    seed=1,
    verbose=True,
    drawing=1,
    outputMsg=True,
    drawLog=False,
    dirName=str(dict),
    saveFlag=True
)




RebelYoung avatar Mar 13 '23 03:03 RebelYoung

可以写一个outFunc()传入Algorithm类。添加保存结果到文件的代码。这样每一代都会写入文件保存结果。

geatpy-dev avatar Mar 19 '23 16:03 geatpy-dev

可以写一个outFunc()传入Algorithm类。添加保存结果到文件的代码。这样每一代都会写入文件保存结果

我已经写了,我的意思是,我最后一代计算完之后,我整个algorithm对象是完整保留好的,但是我将其作为prophet时,实例化新的alg时,它会将我最后一代的alg对象只取Chrom,并重新计算了一次目标函数。 我的意思是,这一步应该可以省略,因为我四代算完了,下一步应该是直接交叉变异,算第五代,而不是把4代做目标函数计算。

RebelYoung avatar Mar 20 '23 02:03 RebelYoung