CADP
http://www.grantadesign.com/education/edupack/content.htm
material selection in mechanical design.pdf
https://github.com/DEAP/notebooks/blob/master/SIGEvolution.ipynb
function fancyAlert(arg) {
if(arg) {
$.facebox({div:'#foo'})
}
}
In [ ]:
%matplotlib inline
import pandas as pd
import numpy as np
import matplotlib
from matplotlib import pyplot as plt
ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
ts = ts.cumsum()
df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index,
columns=['A', 'B', 'C', 'D'])
df = df.cumsum()
plt.figure(); df.plot(); plt.legend(loc='best')
In [ ]:
# 從 url 取得資料
import urllib.request
url = 'http://python4astronomers.github.com/_downloads/data.txt'
open('data.txt', 'wb').write(urllib.request.urlopen(url).read())
f = open('data.txt', 'r')
print(f.read())
In [ ]:
%matplotlib inline
import random
from deap import base, creator, tools, algorithms
creator.create("FitnessMax", base.Fitness, weights=(1.0,))
creator.create("Individual", list, fitness=creator.FitnessMax)
ind = creator.Individual([1, 0, 1, 1, 0])
print(ind)
print(type(ind))
print(type(ind.fitness))
toolbox = base.Toolbox()
toolbox.register("attr_bool", random.randint, 0, 1)
toolbox.register("individual", tools.initRepeat, creator.Individual, toolbox.attr_bool, n=10)
toolbox.register("population", tools.initRepeat, list, toolbox.individual)
bit = toolbox.attr_bool()
ind = toolbox.individual()
pop = toolbox.population(n=3)
print("bit is of type %s and has value\n%s" % (type(bit), bit))
print("ind is of type %s and contains %d bits\n%s" % (type(ind), len(ind), ind))
print("pop is of type %s and contains %d individuals\n%s" % (type(pop), len(pop), pop))
def evalOneMax(individual):
return sum(individual),
toolbox.register("evaluate", evalOneMax)
toolbox.register("mate", tools.cxTwoPoint)
toolbox.register("mutate", tools.mutFlipBit, indpb=0.10)
toolbox.register("select", tools.selTournament, tournsize=3)
ind = toolbox.individual()
print(ind)
toolbox.mutate(ind)
print(ind)
mutant = toolbox.clone(ind)
print(mutant is ind)
print(mutant == ind)
def main():
import numpy
pop = toolbox.population(n=50)
hof = tools.HallOfFame(1)
stats = tools.Statistics(lambda ind: ind.fitness.values)
stats.register("avg", numpy.mean)
stats.register("min", numpy.min)
stats.register("max", numpy.max)
pop, logbook = algorithms.eaSimple(pop, toolbox, cxpb=0.5, mutpb=0.2, ngen=10, stats=stats, halloffame=hof, verbose=True)
return pop, logbook, hof
pop, log, hof = main()
print("Best individual is: %s\nwith fitness: %s" % (hof[0], hof[0].fitness))
import matplotlib.pyplot as plt
gen, avg, min_, max_ = log.select("gen", "avg", "min", "max")
plt.plot(gen, avg, label="average")
plt.plot(gen, min_, label="minimum")
plt.plot(gen, max_, label="maximum")
plt.xlabel("Generation")
plt.ylabel("Fitness")
plt.legend(loc="lower right")
In [ ]:
%pylab inline
# get the JSAnimation import at https://github.com/jakevdp/JSAnimation
from JSAnimation import examples
examples.basic_animation()
fig, ax = plt.subplots()
ax.plot(random.rand(100))
# write the figure to a temporary file, and encode the results to base64
import tempfile
with tempfile.NamedTemporaryFile(suffix='.png') as f:
fig.savefig(f.name)
data = open(f.name, 'rb').read().encode('base64')
# close the figure and display the data
plt.close(fig)
print(data[:460])
from IPython.display import HTML
HTML('<img src="data:image/png;base64,{0}">'.format(data))
from matplotlib import animation
from JSAnimation import IPython_display
fig = plt.figure()
ax = plt.axes(xlim=(0, 10), ylim=(-2, 2))
line, = ax.plot([], [], lw=2)
def init():
line.set_data([], [])
return line,
def animate(i):
x = np.linspace(0, 10, 1000)
y = np.cos(i * 0.02 * np.pi) * np.sin(x - i * 0.02 * np.pi)
line.set_data(x, y)
return line,
animation.FuncAnimation(fig, animate, init_func=init,
frames=100, interval=30)
In [ ]:
%pylab inline
# JS Animation import is available at http://github.com/jakevdp/JSAnimation
from JSAnimation.IPython_display import display_animation
from matplotlib import animation
# Set up the axes, making sure the axis ratio is equal
fig = plt.figure(figsize=(6.5, 2.5))
ax = fig.add_axes([0, 0, 1, 1], xlim=(-0.02, 13.02), ylim=(-0.02, 5.02),
xticks=range(14), yticks=range(6), aspect='equal', frameon=False)
ax.grid(True)
# Define the shapes of the polygons
P1 = np.array([[0, 0], [5, 0], [5, 2], [0, 0]])
P2 = np.array([[0, 0], [8, 0], [8, 3], [0, 0]])
P3 = np.array([[0, 0], [5, 0], [5, 1], [3, 1], [3, 2], [0, 2], [0, 0]])
P4 = np.array([[0, 1], [3, 1], [3, 0], [5, 0], [5, 2], [0, 2], [0, 1]])
# Draw the empty polygons for the animation
kwds = dict(ec='k', alpha=0.5)
patches = [ax.add_patch(plt.Polygon(0 * P1, fc='g', **kwds)),
ax.add_patch(plt.Polygon(0 * P2, fc='b', **kwds)),
ax.add_patch(plt.Polygon(0 * P3, fc='y', **kwds)),
ax.add_patch(plt.Polygon(0 * P4, fc='r', **kwds))]
# This function moves the polygons as a function of the frame i
Nframes = 30
def animate(nframe):
f = nframe / (Nframes - 1.0)
patches[0].set_xy(P1 + (8 - 8 * f, 3 - 3 * f + 0.5 * np.sin(f * np.pi)))
patches[1].set_xy(P2 + (5 * f, 2 * f - 0.5 * np.sin(f * np.pi)))
patches[2].set_xy(P3 + (8 - 3 * f, 0))
patches[3].set_xy(P4 + (8, 1 - f))
return patches
anim = animation.FuncAnimation(fig, animate, frames=Nframes, interval=50)
display_animation(anim, default_mode='once')
In [ ]:
def animate_as_gif(nframe):
if nframe >= Nframes and nframe < Nframes + 15:
nframe = Nframes - 1
elif nframe >= Nframes + 15 and nframe < 2 * Nframes + 15:
nframe = 2 * Nframes + 14 - nframe
elif nframe >= 2 * Nframes + 15:
nframe = 0
return animate(nframe)
anim = animation.FuncAnimation(fig, animate_as_gif,
frames=2 * Nframes + 30, interval=50)
anim.save('MagicTriangle.gif', writer='imagemagick')