Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

奇怪的问题 #17

Closed
zhaosongyi opened this issue Apr 11, 2019 · 3 comments
Closed

奇怪的问题 #17

zhaosongyi opened this issue Apr 11, 2019 · 3 comments

Comments

@zhaosongyi
Copy link

我运行如下代码:
...
[pop_trace, var_trace, times] = ga.sga_real_templet(AIM_M, 'aimfuc',
None, None, FieldDR, problem = 'I', maxormin =1, MAXGEN = 64,
NIND = 32, SUBPOP = 1, GGAP = 0.85, selectStyle = 'sus',
recombinStyle = 'xovdp', recopt = 0.85, pm = 0.2, distribute =
True, drawing = 1)
print('目标函数最大值:',np.max(pop_trace[:, 1])) # 输出目标函数最大值
print("10 win:", heapq.nsmallest(10,pop_trace[:, 1]))
a=np.reshape(pop_trace[:,1], (-1,1))
b=pd.DataFrame(np.hstack((var_trace,a)))
b.to_csv('output/ipga_result.csv')
print(Top_10_lst)
np.save("top10_result.npy",Top_10_lst)
Top_10=pd.DataFrame(Top_10_lst)
Top_10.to_csv('output/top10_result.csv')
print("end!")

  1. 如果在debug状态下跟踪运行, 结果是正常的. 但在正常运行时, 这个学习过程运行了两遍, 并且后面的结果可能全是0, 把第一次的内容冲掉了.
  2. 这个pop_trace[:,0]好像是均值, 和quickstart里面的介绍刚好反了.
  3. 这只是个建议, 未必和你们初衷. 多代训练后, var_trace里只是记录了每代中的最优, 最后信息重复了. 但其实有时希望能够记录整体训练过程中的, 比如top10, 最优.
    我是在aimfuc中加了一点
    def aimfuc(Phen, LegV):
    global Top_10_lst
    ...
    fit_element=...
    not_good=np.max(Top_10_lst[:,41])
    not_good_row=np.argmax(Top_10_lst[:,41])
    if fit_element<not_good:
    Top_10_lst[not_good_row, 0:40]=Phen[i,0:40]
    Top_10_lst[not_good_row, 41]=fit_element
@1061655504
Copy link
Collaborator

1061655504 commented Apr 11, 2019

我运行如下代码:
...
[pop_trace, var_trace, times] = ga.sga_real_templet(AIM_M, 'aimfuc',
None, None, FieldDR, problem = 'I', maxormin =1, MAXGEN = 64,
NIND = 32, SUBPOP = 1, GGAP = 0.85, selectStyle = 'sus',
recombinStyle = 'xovdp', recopt = 0.85, pm = 0.2, distribute =
True, drawing = 1)
print('目标函数最大值:',np.max(pop_trace[:, 1])) # 输出目标函数最大值
print("10 win:", heapq.nsmallest(10,pop_trace[:, 1]))
a=np.reshape(pop_trace[:,1], (-1,1))
b=pd.DataFrame(np.hstack((var_trace,a)))
b.to_csv('output/ipga_result.csv')
print(Top_10_lst)
np.save("top10_result.npy",Top_10_lst)
Top_10=pd.DataFrame(Top_10_lst)
Top_10.to_csv('output/top10_result.csv')
print("end!")

  1. 如果在debug状态下跟踪运行, 结果是正常的. 但在正常运行时, 这个学习过程运行了两遍, 并且后面的结果可能全是0, 把第一次的内容冲掉了.
  2. 这个pop_trace[:,0]好像是均值, 和quickstart里面的介绍刚好反了.
  3. 这只是个建议, 未必和你们初衷. 多代训练后, var_trace里只是记录了每代中的最优, 最后信息重复了. 但其实有时希望能够记录整体训练过程中的, 比如top10, 最优.
    我是在aimfuc中加了一点
    def aimfuc(Phen, LegV):
    global Top_10_lst
    ...
    fit_element=...
    not_good=np.max(Top_10_lst[:,41])
    not_good_row=np.argmax(Top_10_lst[:,41])
    if fit_element<not_good:
    Top_10_lst[not_good_row, 0:40]=Phen[i,0:40]
    Top_10_lst[not_good_row, 41]=fit_element

您好!pop_trace是算法模板中的进化记录器,quickstart中实现的是自定义的算法模板,里面的pop_trace相关记录的顺序恰好是和geatpy内置的sga_real_templet算法模板相反的。详见源码:https://github.com/geatpy-dev/geatpy/blob/master/geatpy/source-code/templets/sga_real_templet.py
以及:
https://github.com/geatpy-dev/geatpy/blob/master/geatpy/demo/quickstart_demo/quickstart_demo.py

您可以自由创建算法模板,来实现改进、创新的进化算法。无论是geatpy内置模板,还是demo中的自定义模板,都是提供了一些范例,它们也有局限性,也不是最优的、不是最符合各个人、各个项目的需求的。因此,十分赞同您能够结合自己的需要对算法模板作出修改。您可以直接把自定义的算法模板写在一个文件中,然后import这个文件就可以顺利调用了。

感谢您的反馈!

@zhaosongyi
Copy link
Author

我是一个使用者和收益者. 再次感谢, 不知第一个问题你们有没有碰到过, 也许我自己程序的问题

@1061655504
Copy link
Collaborator

我是一个使用者和收益者. 再次感谢, 不知第一个问题你们有没有碰到过, 也许我自己程序的问题

第一个问题这边无法复现,估测是因为执行脚本的问题,请提供能够运行的完整代码,或添加QQ1061655504,我来帮您看看。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants