DEAPにある最適化アルゴリズムのグラフの書き方です。
最適化の前に3次元のグラフの書き方です。
まず、どんな3次元のグラフが描きたいかと言うと、DEAPという遺伝的アルゴリズムのライブラリーにある評価関数です。
多目的最適化を検討したいので、どうしても3次元のグラフ描いた方がわかりやすそうなので、まずは3次元のグラフの書き方です。
最適化の評価関数はこの辺を参照してください。
DEAP 1.3.1ドキュメント
だれでも分かる多目的最適化問題超入門
三次元のグラフを描くためには、まず、X1、x2の2つの軸で、メッシュ状に点をつくる。
その点に、z軸の値を計算する。
x1、x2、Zの値をAxes3Dで3次元のグラフを描きます。
1)メッシュ状の点を作る。
1:numpy のarange関数で、等間隔の数値を作る。
np.arange(-30,30,1) a-30から30まで、1ずつ間を空けた数値ができます。
2:meshgrid(a,b)で一次元配列の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は、Ackley関数なるものを計算しました。
数式
{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_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()

