Open3
多目的最適化
Circle関数
- 入力: 2次元の操作 (design point
)x - 出力: 2次元の目的関数値 (objective value)
function circle(x)
θ = x[1]
r = 0.5 + 0.5 * (2x[2] / (1 + x[2]^2))
y1 = 1 - r * cos(θ)
y2 = 1 - r * sin(θ)
return [y1, y2]
end
Circle関数の可視化
- 2次元の操作 (design point) を
の範囲でそれぞれ変化させる[0, 3] - 関数の出力値
について,等高線をPlots.jlで描くy_1, y_2
using Plots
gr()
xseq = 0:0.1:3
yseq = 0:0.1:3
X = repeat(reshape(xseq, 1, :), length(yseq), 1)
Y = repeat(yseq, 1, length(xseq))
Z1 = map(circle_1, X, Y)
Z2 = map(circle_2, X, Y)
c1 = contour(xseq, yseq, Z1, aspect_ratio=:equal, color=:Paired_6, xlabel="x1", ylabel="x2", title="z1")
c2 = contour(xseq, yseq, Z2, aspect_ratio=:equal, color=:Paired_6, xlabel="x1", ylabel="x2", title="z2")
p = plot(c1, c2, size=(800, 400))
savefig("contour.png")
p
ランダムに操作した場合の評価関数値の可視化
- 上図では
を取ってきて等高線を描画したが,今回は適当なランダムで取ってきて,いくつかの評価値 ([0, 3] ) を2次元にプロットしてみる.y_1, y_2
パレートフロントの可視化
- 上でサンプリングした点を入力として,パレートフロントを求めて描画する