전 3차원 도표의 쓰기를 최적화하다.

8339 단어 Python

DEAP에서 알고리즘을 최적화하는 그래프 쓰기입니다.


이전의 3차원 도표의 쓰기를 최적화하다.
우선 어떤 3차원 그래프를 그리고 싶은지 말하자면 DEAP 유전 알고리즘의 총서의 평가 함수다.
다기능의 최적화를 연구하고자 하기 때문에 어떻게든 3차원의 도표를 그리는 것이 이해하기 쉽기 때문에 먼저 3차원의 도표를 쓰는 방법이다.
최적화된 평가 함수는 여기를 참조하십시오.
DEAP1.3.1 설명서
누구나 다 아는 다기능 최적화 문제
3차원 도표를 그리기 위해서는 먼저 X1, x2의 두 축을 이용하여 그물 모양으로 점을 찍는다.
이 점에서 z축의 값을 계산하다.
x1, x2, Z의 값을 Axes 3D로 표시합니다.

1) 그물 모양의 점을 만든다.


1:numpyarange 함수를 이용하여 등간격의 수치를 제작한다.np.arange(-30,30,1) a-30에서 30까지 각각 하나의 수치를 비울 수 있다.
2:meshgrid(a,b)는 1차원 그룹의 a, b의 교점에서 격자점을 얻어X1, X2에 넣는다.
#メッシュの作り方
import numpy as np
a = np.arange(-30,30,1)
b = np.arange(-30,30,1)
print(a)
#[-30 -29 -28 -27 -26 -25 -24 -23 -22 -21 -20 -19 -18 -17 -16 -15 -14 -13
# -12 -11 -10  -9  -8  -7  -6  -5  -4  -3  -2  -1   0   1   2   3   4   5
#   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  21  22  23
#  24  25  26  27  28  29]

print(b)
#[-30 -29 -28 -27 -26 -25 -24 -23 -22 -21 -20 -19 -18 -17 -16 -15 -14 -13
# -12 -11 -10  -9  -8  -7  -6  -5  -4  -3  -2  -1   0   1   2   3   4   5
#   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  21  22  23
#  24  25  26  27  28  29]

X1, x2 = np.meshgrid(a, b)

print(X1)
#[[-30 -29 -28 ...  27  28  29]
# [-30 -29 -28 ...  27  28  29]
# [-30 -29 -28 ...  27  28  29]
# ...
# [-30 -29 -28 ...  27  28  29]
# [-30 -29 -28 ...  27  28  29]
# [-30 -29 -28 ...  27  28  29]]

print(X2)
#[[-30 -29 -28 ...  27  28  29]
# [-30 -29 -28 ...  27  28  29]
# [-30 -29 -28 ...  27  28  29]
# ...
# [-30 -29 -28 ...  27  28  29]
# [-30 -29 -28 ...  27  28  29]
# [-30 -29 -28 ...  27  28  29]]

import matplotlib.pyplot as plt
plt.scatter(X1,X2,s=1)
plt.show()
확인을 위해 X1, X2의 2차원 산포도를 그려봤는데 아래가 이렇게 됐어요.

그물 모양의 물건을 잘 가지고 있다.
이어서 Z축의 값을 계산하여 3차원 도표를 만든다.
3:Z에서는 Acckley 함수를 계산합니다.
공식.
{f(x_{1}, x_{2})=20-20\exp \biggl( -0.2\sqrt{\frac{1}{n}\sum_{i=1}^{n}x_{i}^2} \biggr) +e-\exp \biggl(\frac{1}{n}\sum_{i=1}^{n}\cos(2\pi x_{i}) \biggr)
}
그리고 X1, Z로 그리면 다음 도표가 됩니다.

2) 3차원 차트 만들기


4: 3차원 도표를 그립니다.from mpl_toolkits.mplot3d import Axes3D에서 3차원 도표를 그리는 그림책을 가져옵니다.ax.plot_wireframe(X1, X2, Z)는 3차원 도표다.plot_surface: 평면으로 표시됩니다.
plot_wireframe: 전봇대로 표시합니다.
Z =20 - 20 * np.exp(-0.2 * np.sqrt((X1 ** 2 + X2 ** 2) / 2)) + np.exp(1) - np.exp((np.cos(2 * np.pi * X1) + np.cos(2 * np.pi * X2)) / 2)

plt.scatter(X1,Z,s=1)
plt.show()


from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = Axes3D(fig)

#ワイヤーフレームで表示
ax.plot_wireframe(X1, X2, Z)
#面で表示
#ax.plot_surface(X1, X2, Z, rstride=1, cstride=1, cmap='hsv')

plt.show()

좋은 웹페이지 즐겨찾기