first commit
This commit is contained in:
parent
7a1a9440a2
commit
27b52fef6c
5 changed files with 245 additions and 0 deletions
32
2018-2019/letters.py
Normal file
32
2018-2019/letters.py
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
|
||||||
|
letters = {
|
||||||
|
"alpha":("Α","α"),
|
||||||
|
"beta":("Β","β"),
|
||||||
|
"gamma":("Γ","γ"),
|
||||||
|
"delta":("Δ","δ"),
|
||||||
|
"epsilon":("Ε","ε"),
|
||||||
|
"zeta":("Ζ","ζ"),
|
||||||
|
"eta":("Η","η"),
|
||||||
|
"theta":("Θ","θ"),
|
||||||
|
"iota":("Ι","ι"),
|
||||||
|
"kappa":("Κ","κ"),
|
||||||
|
"lambda":("Λ","λ"),
|
||||||
|
"mu":("Μ","μ"),
|
||||||
|
"nu":("Ν","ν"),
|
||||||
|
"xi":("Ξ","ξ"),
|
||||||
|
"omicron":("Ο","ο"),
|
||||||
|
"pi":("Π","π"),
|
||||||
|
"rho":("Ρ","ρ"),
|
||||||
|
"sigma":("Σ","σ"),
|
||||||
|
"tau":("Τ","τ"),
|
||||||
|
"upsilon":("Υ","υ"),
|
||||||
|
"phi":("Φ","φ"),
|
||||||
|
"chi":("Χ","χ"),
|
||||||
|
"psi":("Ψ","ψ"),
|
||||||
|
"omega":("Ω","ω"),
|
||||||
|
"sampi":("Ͳ","ϡ")
|
||||||
|
}
|
||||||
|
|
||||||
|
if __name__=="__main__":
|
||||||
|
for key in letters:
|
||||||
|
print(key)
|
||||||
70
sho/api.py
Normal file
70
sho/api.py
Normal file
|
|
@ -0,0 +1,70 @@
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
def sphere(x,offset=0.5):
|
||||||
|
"""Computes the square of a multi-dimensional vector x."""
|
||||||
|
f = 0
|
||||||
|
for i in range(len(x)):
|
||||||
|
f += (x[i]-offset)**2
|
||||||
|
return f
|
||||||
|
|
||||||
|
def square(sol,scale=1):
|
||||||
|
"""Gnerate a random vector close at thegiven scale to the given sol."""
|
||||||
|
return sol + np.random.random(len(sol))*scale
|
||||||
|
|
||||||
|
def greedy(objective_function, dimension, iterations, target=1e-3, neighborhood=square, scale=1/100, history=None):
|
||||||
|
"""Search the given objective_function of the given dimension,
|
||||||
|
during the given number of iterations, generating solution
|
||||||
|
with the given neighborhood.
|
||||||
|
Returns the best value of the function and the best solution."""
|
||||||
|
best_sol = np.random.random(dimension)
|
||||||
|
best_val = objective_function(best_sol)
|
||||||
|
for i in range(iterations):
|
||||||
|
sol = neighborhood(best_sol,scale)
|
||||||
|
val = objective_function(sol)
|
||||||
|
if val < best_val:
|
||||||
|
best_val = val
|
||||||
|
best_sol = sol
|
||||||
|
if history is not None:
|
||||||
|
history.append((val,sol))
|
||||||
|
if val < target: # Assume the optimum is zero
|
||||||
|
break
|
||||||
|
return best_val, best_sol
|
||||||
|
|
||||||
|
|
||||||
|
if __name__=="__main__":
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
from mpl_toolkits.mplot3d import Axes3D
|
||||||
|
import argparse
|
||||||
|
import plot
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
|
||||||
|
parser.add_argument("-d", "--dim", metavar="NB", default=2, type=int,
|
||||||
|
help="Number of dimensions")
|
||||||
|
|
||||||
|
functions = {"sphere":sphere}
|
||||||
|
parser.add_argument("-f", "--func", metavar="NAME", choices=functions, default="sphere",
|
||||||
|
help="Objective function")
|
||||||
|
|
||||||
|
parser.add_argument("-i", "--iter", metavar="NB", default=1000, type=int,
|
||||||
|
help="Maximum number of iterations")
|
||||||
|
|
||||||
|
parser.add_argument("-t", "--target", metavar="VAL", default=1e-3, type=float,
|
||||||
|
help="Function value target delta")
|
||||||
|
|
||||||
|
parser.add_argument("-s", "--seed", metavar="VAL", default=0, type=int,
|
||||||
|
help="Random pseudo-generator seed (0 for epoch)")
|
||||||
|
|
||||||
|
asked = parser.parse_args()
|
||||||
|
|
||||||
|
np.random.seed(asked.seed)
|
||||||
|
|
||||||
|
history = []
|
||||||
|
val,sol = greedy(functions[asked.func], asked.dim, asked.iter, asked.target, square, 0.03, history)
|
||||||
|
|
||||||
|
fig = plt.figure()
|
||||||
|
ax = fig.gca(projection='3d')
|
||||||
|
shape = (20,20)
|
||||||
|
plot.surface(ax, shape, sphere)
|
||||||
|
plot.path(ax, shape, history)
|
||||||
|
plt.show()
|
||||||
70
sho/basics.py
Normal file
70
sho/basics.py
Normal file
|
|
@ -0,0 +1,70 @@
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
def sphere(x,offset=0.5):
|
||||||
|
"""Computes the square of a multi-dimensional vector x."""
|
||||||
|
f = 0
|
||||||
|
for i in range(len(x)):
|
||||||
|
f += (x[i]-offset)**2
|
||||||
|
return f
|
||||||
|
|
||||||
|
def onemax(x):
|
||||||
|
"""Sum the given bitstring."""
|
||||||
|
s = 0
|
||||||
|
for i in x:
|
||||||
|
s += i
|
||||||
|
return s
|
||||||
|
|
||||||
|
def numerical_random(d):
|
||||||
|
"""Draw a random multi-dimensional vector in [0,1]**d"""
|
||||||
|
return np.random.random(d)
|
||||||
|
|
||||||
|
def bitstring_random(d):
|
||||||
|
"""Draw a random bistring of size d, with P(1)=0.5."""
|
||||||
|
return [int(round(i)) for i in np.random.random(d)]
|
||||||
|
|
||||||
|
def search(objective_function, dimension, iterations, generator, history=None):
|
||||||
|
"""Search the given objective_function of the given dimension,
|
||||||
|
during the given number of iterations, generating random solution
|
||||||
|
with the given generator.
|
||||||
|
Returns the best value of the function and the best solution."""
|
||||||
|
best_val = float("inf")
|
||||||
|
best_sol = None
|
||||||
|
for i in range(iterations):
|
||||||
|
sol = generator(dimension)
|
||||||
|
val = objective_function(sol)
|
||||||
|
if val < best_val:
|
||||||
|
best_val = val
|
||||||
|
best_sol = sol
|
||||||
|
if history is not None:
|
||||||
|
history.append((val,sol))
|
||||||
|
return best_val, best_sol
|
||||||
|
|
||||||
|
|
||||||
|
if __name__=="__main__":
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
from mpl_toolkits.mplot3d import Axes3D
|
||||||
|
import plot
|
||||||
|
|
||||||
|
print("Random search over 10-OneMax")
|
||||||
|
print("After 10 iterations:")
|
||||||
|
val,sol = search(onemax, 10, 10, bitstring_random)
|
||||||
|
print("\t",val,sol)
|
||||||
|
print("After 1000 iterations:")
|
||||||
|
val,sol = search(onemax, 10, 1000, bitstring_random)
|
||||||
|
print("\t",val,sol)
|
||||||
|
|
||||||
|
print("Random search over 2-Sphere")
|
||||||
|
print("After 10 iterations:")
|
||||||
|
val,sol = search(sphere, 2, 10, numerical_random)
|
||||||
|
print("\t",val,sol)
|
||||||
|
print("After 50 iterations:")
|
||||||
|
history = []
|
||||||
|
val,sol = search(sphere, 2, 50, numerical_random, history)
|
||||||
|
print("\t",val,sol)
|
||||||
|
|
||||||
|
fig = plt.figure()
|
||||||
|
ax = fig.gca(projection='3d')
|
||||||
|
shape = (20,20)
|
||||||
|
plot.surface(ax, shape, sphere)
|
||||||
|
plot.path(ax, shape, history)
|
||||||
|
plt.show()
|
||||||
35
sho/plot.py
Normal file
35
sho/plot.py
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
import numpy as np
|
||||||
|
from matplotlib import cm
|
||||||
|
import itertools
|
||||||
|
|
||||||
|
def surface(ax, shape, f):
|
||||||
|
Z = np.zeros( shape )
|
||||||
|
for y in range(shape[0]):
|
||||||
|
for x in range(shape[1]):
|
||||||
|
Z[y][x] = f( (x/shape[0],y/shape[1]), 0.5 )
|
||||||
|
|
||||||
|
X = np.arange(0,shape[0],1)
|
||||||
|
Y = np.arange(0,shape[1],1)
|
||||||
|
X,Y = np.meshgrid(X,Y)
|
||||||
|
ax.plot_surface(X, Y, Z, cmap=cm.viridis)
|
||||||
|
|
||||||
|
def path(ax, shape, history):
|
||||||
|
def pairwise(iterable):
|
||||||
|
a, b = itertools.tee(iterable)
|
||||||
|
next(b, None)
|
||||||
|
return zip(a, b)
|
||||||
|
|
||||||
|
k=0
|
||||||
|
for i,j in pairwise(range(len(history)-1)):
|
||||||
|
xi = history[i][1][0]*shape[0]
|
||||||
|
yi = history[i][1][1]*shape[1]
|
||||||
|
zi = history[i][0]
|
||||||
|
xj = history[j][1][0]*shape[0]
|
||||||
|
yj = history[j][1][1]*shape[1]
|
||||||
|
zj = history[j][0]
|
||||||
|
x = [xi, xj]
|
||||||
|
y = [yi, yj]
|
||||||
|
z = [zi, zj]
|
||||||
|
ax.plot(x,y,z, color=cm.RdYlBu(k))
|
||||||
|
k+=1
|
||||||
|
|
||||||
38
sho/snp.py
Normal file
38
sho/snp.py
Normal file
|
|
@ -0,0 +1,38 @@
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
def x(p):
|
||||||
|
return p[0]
|
||||||
|
|
||||||
|
def y(p):
|
||||||
|
return p[1]
|
||||||
|
|
||||||
|
def distance(a,b):
|
||||||
|
return np.sqrt( (x(a)-x(b))**2 + (y(a)-y(b))**2 )
|
||||||
|
|
||||||
|
def count(domain_shape, sensors_positions, radius, output_domain = None):
|
||||||
|
s = 0
|
||||||
|
Y,X = domain_shape
|
||||||
|
for y in range(Y):
|
||||||
|
for x in range(X):
|
||||||
|
p = (x,y)
|
||||||
|
t = 0
|
||||||
|
for sensor in sensors_positions:
|
||||||
|
if distance( p, sensor ) < radius:
|
||||||
|
t += 1
|
||||||
|
# break
|
||||||
|
if output_domain is not None:
|
||||||
|
output_domain[y][x] = t
|
||||||
|
s += t
|
||||||
|
return s
|
||||||
|
|
||||||
|
if __name__=="__main__":
|
||||||
|
|
||||||
|
domain = np.zeros( (100,100) )
|
||||||
|
|
||||||
|
sensors = np.round(np.random.random( (3,2) ) * 100)
|
||||||
|
|
||||||
|
s = count(domain.shape, sensors, 40, domain)
|
||||||
|
|
||||||
|
plt.imshow(domain)
|
||||||
|
plt.show()
|
||||||
Loading…
Add table
Add a link
Reference in a new issue