我正在运行一种遗传算法,并希望随着算法的发展来绘制每一代的适应度。目前,我的代码是这样的:
# INITIALIZATION - PLEASE NOTE: INCOMPLETE EXAMPLE
fig = plt.figure(1)
ax1 = fig.add_subplot(1, 1, 1)
ax1.set_xlim([0, generations])
ax1.set_ylim([1000, 10000])
ax1.set_title('Creature fitness')
ax1.set_ylabel('Fitness')
ax1.set_xlabel('Generations')
xs = []
ys = []
line, = ax1.plot(xs, ys)
generation = 1
generations = 100
while generation < generations:
# - some calculations here
generation_fitness = x # from calculations above
xs.append((generation))
ys.append((generation_fitness))
line.set_xdata(xs)
line.set_ydata(ys)
plt.pause(0.1)
但是,这会产生非常口吃的图形,如下所示:
而且我认为这会减慢代码执行速度。
我希望拥有类似“风速”图here的图形,但希望它不会那么复杂。
答案 0 :(得分:0)
您的问题不是很具体,但是对于这些类型的问题,通常,您应该将UI(图形)和应用程序逻辑分离到线程中,以使它们不会相互干扰。
您应该启动一个单独的线程来渲染图形,并使用一些线程安全的构造将数据从逻辑线程传递到渲染线程。在这种情况下,您可能需要queue.Queue
(将其谷歌搜索)。