from math import sin, cos
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
def test_problem(x0, x1) :
a1 = 0.0
a2 = 0.0
b1 = 0.0
b1 = 0.0
a1 = 0.5 * sin(1.0) - 2.0 * cos(1.0) + sin(2.0) - 1.5 * cos(2.0);
a2 = 1.5 * sin(1.0) - cos(1.0) + 2.0 * sin(2.0) - 0.5 * cos(2.0);
b1 = 0.5 * sin(x0) - 2.0 * cos(x0) + sin(x1) - 1.5 * cos(x1);
b2 = 1.5 * sin(x0) - cos(x0) + 2.0 * sin(x1) - 0.5 * cos(x1);
obj0 = 1.0 + pow((a1 - b1), 2.0) + pow((a2 - b2), 2.0);
obj1 = pow((x0 + 3.0), 2.0) + pow((x1 + 1.0), 2.0);
return obj0, obj1
y1 = []
y2 = []
y3 = []
y4 = []
x1 = np.linspace(- np.pi, np.pi, 200)
x2 = np.linspace(- np.pi, np.pi, 200)
for x_1 in x1 :
for x_2 in x2 :
y_1, y_2 = test_problem(x_1, x_2)
y1.append(y_1)
y2.append(y_2)
fname = 'best_pop.orig.out'
fname = 'best_pop.my.out'
fname = 'best_pop.orig2.out'
f = open(fname, 'r')
for line in f :
if line.startswith('#') :
continue
vlist = line.split('\t')
y3.append(float(vlist[0]))
y4.append(float(vlist[1]))
f.close()
matplotlib.rcParams['axes.unicode_minus'] = True
fig, ax = plt.subplots()
plt.scatter(y1, y2, color='grey')
plt.scatter(y3, y4, color='red')
ax.set_title('NSGA-II POL')
plt.show()
还是木真相,俺就是想晒下这两天的劳动成果而已:
nsga-ii 算法的实现 + evolution部分进行分布式计算 + 基于zeromq的一个分布式计算框架 + POL的一个结果验证
OK 全部到位,基本生产工具准备完毕。
重活儿还在后面捏。。。